MSF MS11-050/10-087/Adobe攻击实践及内存保护技术
内存攻击指的是攻击者利用软件安全漏洞,构造恶意输入导致软件在处理输入数据时出现非预期错误,将输入数据写入内存中的某些特定敏感位置,从而劫持软件控制流,转而执行外部输入的指令代码,造成目标系统被获取远程控制或被拒绝服务。内存攻击表面原因是软件编写错误,注入过滤输入的条件设置缺陷、变量类型转换错误等,但根本原因是,现代电子计算机在实现图灵机模型时,没有在内存中严格区分数据和指令,这就存在程序外部输入数据称为指令代码从而被执行的可能。任何操作系统级别的防护措施都不可能完全根除现代计算机体系结构上的这个弊端,只能试图去阻止攻击者利用。
一、 浏览器渗透攻击实例——MS11-050安全漏洞
攻击实践过程
在MSF终端搜索ms11_050,可以找到针对漏洞的攻击模块,名称为ms11_050_mshtml_pcobjectelement。
加载该模块并info查看基本信息。如下图所示:
设置相关信息。具体操作命令如下:
(1) 设置攻击载荷为Meterpreter中的reverse_http,此载荷会给监听端返回一个遵循HTTP协议的Shell。
(2) 设置监听端IP地址为攻击机的IP地址10.10.10.128。
(3) 将含有渗透代码的网页链接设置为http://10.10.10.128:8080/ms11050。
运行exploit命令生成恶意攻击网页:
在靶机中启动IE浏览器,访问该链接。此时在攻击机的MSF终端中,可以看到如下信息:(此处没有成功,我在考虑是否是靶机浏览器版本问题)
在客户端访问该渗透攻击链接之后,MS11=050渗透模块发送了相关的渗透网页给浏览器,并且成功地植入Meterpreter到进程ID号为2844的notepad.exe中,随后返回给监听端一个会话。由于前面设置了该载荷回连的监听端主机位攻击机IP,所以在攻击机上就能得到返回的会话。
在靶机端,可以看到IE浏览器已经被溢出,查看进程列表,可能植入了Meterpreter的notepad.exe进程。在Meterpreter的监听端介入会话,具体操作命令如下:
先试用sessions –1命令查看当前监听端的活动会话,然后运行session –i 1命令,选择介入ID号为1的当前靶机回连的会话。随后,输入sysinfo等命令,查看靶机的相关信息。
二、针对Office软件的渗透攻击示例——MS10-087安全漏洞
(一)攻击实践过程
在MSF终端搜索ms10_087,可以找到针对漏洞的攻击模块,名称为ms10_087_rtf_pfragments_bof,渗透模块代码路径为/modules/exploit/windows/fileformat/。
加载该模块并显示基本信息
产生漏洞的原因是Office程序在处理某些特殊构造RTF文件时,相应解析程序在处理一个名为pFragments的参数时存在栈缓冲区溢出错误,导致异常发生。
RTF文件属于Office软件中Word应用程序处理的文件格式。一个后缀名为rtf的文件在改为doc后不影响其使用。所以,用户收到这样一个恶意构造的RTF文件之后,从外观上无法找出与正常Word文件的区别。该漏洞几乎影响所有版本的Office软件。- 设置该渗透模块的攻击载荷为运行一个计算器
运行模块
设定测试文件名为ms10087.rtf,并输入exploit运行该模块,如图所示:
渗透文件已经产生,路径为/root/.msf4/local/ms10087.rtf。然后,在系统上找到此文件复制至靶机环境中,双击打开该文件。发现,Word程序在启动打开这个攻击文件时,其中存在的相应安全漏洞被利用,从而执行Metasploit的攻击载荷,弹出计算器程序。如图所示:(由于上步未成功,所以等待文件复制成功)
(二)攻击机理分析
这一漏洞的利用方式是经典的SEH利用方式。SEH(Structured Exception Handling)亦即结构化异常处理,是Windows操作系统提供处理程序错误或异常的机制。
- MS10-087渗透攻击模块中描述目标的Target信息,针对MOS2003 SP3 English on Windows XP SP3English靶机目标环境,定义了两个变量参数:
Offsets偏移量为“[24580,51156]”,表示24580~51156的范围集合。
Ret返回地址指向0x30001bdd地址,在名为winword.exe的Word进程中,这一地址开始的指令应为一段“POP/POP/RET”模式的指令。
- 包含Shellcode的变量sploit被填充至名为pFragments的属性参数中,此变量过长导致了缓冲区溢出。
三、Adobe阅读器渗透攻击实战案例——加急的项目进展报告
加载模块
加载模块,输入info命令可以查看模块信息。此漏洞针对Adobe阅读器9.3.4之前的版本,产生原理是一个名为SING表对象中一个名为uniqueName的参数造成站缓冲区溢出。这个模块采用ROP技术绕过DEP,针对的目标系统包括开启DEP的Win7、WinXP-SP3。
配置测试模块
设置载荷为windows/meterpreter/reverse_http,监听端为测试主机的IP地址,产生的文件名为2.pdf。
启动监听端
在测试主机启动一个对应于载荷的监听端,等待靶机回连,并执行exploit:
查询靶机环境
将测试文件2.pdf复制到测试靶机中,双击打开该文件,监听端接到来自靶机的Meterpreter连接,执行命令对靶机环境进行基本的查询,结果如下。
相应的查看测试靶机中的情形,启动查看进程的工具Process Explorer与查看网络连接的TCPView,结果如下(问题与实践二相同)
注释:
(1) 被溢出的Adobe Reader软件对应的进程AcroRd32.exe并没有产生新的子进程,说明Meterpreter已经移植到溢出进程的空间中。
(2) 网络连接显示一个与测试主机之间有一个活动的TCP连接。
(3) 阅读软件被一处之后处于崩溃状态,不能正常显示。
四、内存保护技术
1.高级ECC
目前服务器上普遍应用了高级ECC技术,,ECC的英文全称是Error Checking and Correcting,即错误检查和纠正。ECC是一种内存的纠错技术,与奇偶校验技术不同,ECC可以发现和纠正数据写入内存和从内存读出时的错误,ECC技术可以检测单DRAM芯片上发生的任意两个随机错误,最高可以检查到4比特的错误,但是ECC只能修正1比特的错误。
高级ECC技术是ECC技术的增强版,可以发现和纠正单一内存芯片上的多比特错误,也可以纠正内存条上单芯片的失效,进一步提高了内存可用性,为服务器提供了更高级别的内存故障保护。 在一个4比特的高级ECC内存中,每个芯片可以向数据字提供4比特数据,这4比特数据被分给4个ECC设备,每个设备1比特,所以4比特的高级ECC内存可以同时处理4个独立的错误。
2.在线内存备份技术
在线备份内存模式是比高级ECC更高级别的内存保护技术,在该模式下,系统将内存分为3组,分别为系统主内存,扩展内存,备用内存(容量大于或等于主内存),当检测到主内存发生错误时,系统自动将主内存存储的数据复制到备用内存,并且停止使用主内存,而不影响系统和程序的正常运行,并通过管理软件向系统管理员发出警报,直到出错内存更换。
3.镜像内存技术
内存镜像相当于磁盘上应用的RAID-1, 是将两组或四组内存互相做镜像,当一组内存出错,另外一组马上接替工作。使用镜像技术时,实际使用容量为安装内存容量的一半,并且需要在内存专用工具里开启镜像功能。
镜像内存和主内存互成对角线分布,如果其中一个通道出现故障不能继续工作,另一个通道仍然具有故障通道的内存数据,有效防止了由于内存通道故障导致的数据丢失,极大提升了服务器可靠性。镜像内存的容量要大于等于主内存容量,当系统工作时,镜像内存不会被系统识别。
4.热插拔RAID内存技术
热插拔RAID内存(Hp Hot Plug Raid Memory)在概念上和RAID 4磁盘存储技术是相似的,在系统架构上更像一个硬盘,所以采用热插拔的RAID内存保护模式的系统可以达到像RAID硬盘一样随意替换内存的效果。
采用热插拔RAID内存方式的服务器使用5个内存控制器来控制5个内存盒(memory cartridges)。每个盒可以安装最多8个工业标准DIMM ,当内存控制器要向内存中写数据的时候,它们会把数据分成4块写入4个内存盒,并计算奇偶信息存放在第5个内存盒。利用4个内存盒中的数据和第5个内存盒中奇偶信息,数据可以完全恢复,即使是任何DIMM工作故障,或任何一个内存盒被拆掉了,也可以做到不丢失数据。