探研基于Windows平台的RPC缓冲区溢出漏洞

2018-04-04 09:27宋娟娟
魅力中国 2018年46期
关键词:缓冲区调用攻击者

摘要:Windows系统中潜在的RPC缓冲区漏洞溢出是目前信息系统面临的最严重安全威胁之一。本文介绍了RPC原理,分析了缓冲区溢出的原理,总结了RPC漏洞分析的一般方法,并针对一个RPC漏洞进行了详细分析,包括定位溢出函数,分析溢出点,溢出实现。还介绍了缓冲区溢出攻击实例与防范措施。

关键字:RPC溢出;缓冲区;漏洞

一、RPC介紹

(一)RPC的基本原理

RPC是操作系统的一种远程过程调用协议,是分布式计算中常用到的技术。目前,使用最普遍的是开放式软件基础的分布式计算环境(DCE),微软所用的RPC系统就是基于DCE RPC开发的。计算机间通讯的过程分为两种形式:一种是数据的交换,一种是进程的通讯。RPC属于后者。RPC可以让程序员调用一个函数,而这个函数是在另外一台或多台就算机上运行的,执行完成后将结果传回本机进行后续操作。调用过程中的网络操作对程序员是透明的,在代码中调用一个远程函数就像调用本地的一样方便,只要把接口定义好,RPC体系会帮助完成建立网络链接、会话握手、身份验证、参数传递、返回结果等细节操作。

二、缓冲区结构及溢出原理

(一)栈结构及溢出原理

当一个函数调用另一个函数的时候,其栈帧结构在正常情况下,被调函数执行完毕,将被调函数的返回地址传给EIP寄存器,CPU从EIP寄存器取指令地址,继续执行主函数。被调函数的局部变量在栈中一个挨着一个排列。如果这些局部变量中有数组之类缓冲区,并且程序中存在数组越界的缺陷,那么越界的数组元素就有可能破坏栈中的相邻变量的值,甚至破坏栈帧中所保存的EBP值,EIP值等重要数据。成功的缓冲区溢出攻击会用精心设计的数据覆盖返回地址,使被调函数执行完后将修改后的返回地址传入EIP,从而使CPU执行攻击代码(shellcode)。

三、RPC漏洞分析

MS06.040是微软公布的一个漏洞,Ms06.040是微软的编号,其CVE编号为CVE-2006-3439,对应补丁编号为KB921883,微软对它的描述是:Server服务中存在一个远程执行代码漏洞,成功利用此漏洞的攻击者可以完全控制受影响的系统。同其他缓冲区溢出漏洞一样,分析该溢出漏洞的关键是定位溢出函数,寻找关键溢出点,计算跳转地址。

(一)漏洞简介

打开chm文件时,Microsoft HTML Help会对数据进行解压,对“/#WINDOWS”列表块数据复制到栈中数据时,对其栈中的大小没进行检查,如果复制较大的数据块导致栈溢出。如果用户打开恶意构造的chm文件,则会受到木马侵入的危险。

(二)检测方法

1.点击“浏览”按钮,选择要进行扫描的chm文件。

2.点击“扫描”按钮进行扫描,如果工具提示“该文件包含危险代码,请不要打开”,表明该CHM文件中含有可利用此漏洞的恶意代码,请勿打开。

3.用户可注册鼠标右键快捷方式,便于CHM文件的扫描操作。

(三)RPC缓冲区溢出漏洞的分析方法

1.定位溢出函数

若机器打过补丁可以在\\Winnt\$NtUninstallKB921883$目录下找到补丁前的netapi32.dll。对补丁前后的dll文件进行反汇编分析,使用补丁比对工具,如Eeye的EBDS和Darun Grim,Bindiff等,可以很快查到微软在补丁中修改的地方,查看—下一个改动较大的函数,sub 7517FC68,若下载了微软的符号文件,就能显示出该函数的名字是CanonicalizePathName。使用IDA可以查看该函数的调用关系图,选择chart ofxrefs to功能,看到是NetpwPathcanonicalize调用了CanonicalizePathName这个子函数;选择chart ofxrefs from功能,看到CanonicalizePathName函数调用--imp wcscat,--imp-wcscpy等容易发生溢出的系统函数。至此,可以将溢出函数定位缩小到NetpwPathcanonicalize及其调用的子函数CanonicalizePathName上。

2.分析溢出点

查看问题函数NetpwPathCanonicalize在IDA中反汇编出的代码,得出结论,该函数是netapi32.dll的导出函数(Exported),有6个参数。后面调用CanonilizePathName,之前进行了一些参数检查,在这次验证中,如果第4个参数的Unicode长度超过0xi03 I)8弓1起程序退出。在CanonicalizePathName中,实现的功能是将NetpwPathCanonicalize函数的第4个参数所指的字符串连接上‘\和第1个参数所指的字符串,这个函数使用局部变量,在栈内开空间暂存新串,这块空间可以溢出。由于前面对4号串的长度进行了检查,所以无法仅仅由4号串实现溢出,但是后面忽略了对1号串的检查,使得在使用wcscpy连接l号串的时候发生溢出成为可能,1号串足够长的话可以覆盖掉EBP和EIP。

3.溯源

RPC通常是以opnum来确定函数的接13,在得知某个函数(opnum)可以触发溢出时,攻击者可以构造出触发这个函数的数据包来触发漏洞。NetpwPathcanonicalize这个函数可以被RPC远程调用,下面我们找—下通过谁可以调用它,查询((Windows network services internals))隅】,可以查到以下信息:

The 81"VSVC interface is used to manage the laamaaservcr service.

我们要找的接171在srvsvc.dll中的opnum为Oxlf的地方。利用IDA反汇编srvsvc.dll并使用一个极好的抽象RPC接口的IDA插件mlDA,寻找opnum为Oxlf的函数,跟进去可以确定就是这里调用的netapi32.dll中的NetpwPathCanonicalize:idata:76781260extrn…imp NetpwPathCanoniealize:dword。

四、缓冲区溢出攻击及其防范

(一)实验环境如图4.1所示

入侵者(192.168.85.1):对192.168.85.128进行缓冲区溢出攻击。

被入侵者(192.168.85.128):是开启DNS服务的所有版本的Windows 2000 Server或Windows 2003 Server SP1,在本次测试中使用Windows 2003 Server SP1。

(二)缓冲区溢出攻击过程

第1步:入侵者下载并且执行dns.exe命令。到网上下载dns.exe工具,将其复制到C:\Documents and Settings\ Administrator,在DOS窗口执行dns.exe命令

第2步:寻找漏洞。执行dns.exe -s 192.168.85.128命令,对主机进行扫描,显示出被入侵主机(192.168.85.128)开放的端口以及操作系统,最主要的是显示“1047:Vulnerability”,意思就是1047端口存在漏洞。

第3步:实施溢出。执行dns.exe -t 2003chs 192.168.85.128 1047命令。

出现“Attack sent, check port 1100”字样,说明已经打开了目标地址的1100端口。

第4步:成功入侵。执行telnet 192.168.85.128 1100命令,我们现在已经成功的入侵了对方的电脑,并且得到了管理员的权限。

第5步:在已经成功入侵的电脑上执行简单的操作:dir 和del temp.txt。

第6~11步介绍在被入侵电脑中开3389端口(远程桌面)的方法。

第6步:创建用来下载的VBS脚本tony.vbs。

上面的命令创建一个用来下载的VBS脚本tony.vbs。

第7步:在入侵者的电脑上上传wrsky.exe。把开3389端口的工具(wrsky.exe,可以到网站下载)上传到自己的个人空间。

第8步:在被入侵电脑上下载wrsky.exe。

第9步:在被入侵电脑执行wrsky.exe命令。

第10步:重新设置被入侵电脑的管理员密码。

第11步:打开被入侵电脑的远程桌面服务。

第12步:远程桌面连接被入侵计算机。

(三)缓冲区溢出攻击的防范措施

(1)关闭不需要的特权程序。

(2)及时给系统和服务程序漏洞打补丁。

(3)强制写正确的代码。

(4)通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。

(5)利用编译器的边界检查来实现缓冲区的保护,这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是代价比较大。

(6)在程序指针失效前进行完整性检查。

(7)改进系统内部安全机制。

五、总结

由于RPC在網络中使用的普遍性,RPC漏洞对网络安全的威胁极大,必须提高安全意识,进一步研究漏洞的利用方法,从根本上预防此种漏洞的出现和针对此种漏洞的攻击,增强系统的安全性。

从攻击的角度而言,研究漏洞的发掘与利用技术的意义自不必说,一个未知漏洞的发现,特别是广泛应用的软件中存在的漏洞,其可能造成的危害是无法衡量的。

而从防御的角度来说,深入研究漏洞检测与防御技术可以有效的预防并抵挡攻击者的攻击,但若疏忽对漏洞发掘与利用技术的钻研,就会使得防御者在攻防对垒中处于被动挨打的局面,而且无法有效的阻止未知漏洞的攻击,避免损失的产生。所以,必须倡导“积极防御”,攻守技术都要精通。

所以,无论从攻还是守的角度来看,研究漏洞发掘及缓冲区溢出检测技术都有着深远的意义。

参考文献:

[1]陆殿军、张强.入侵检测和漏洞检测系统[EB/OL].http://www.networkunion.org/.

[2]张庆华. 网络安全与黑客攻防宝典[M].北京: 电子工业出版社, 2007 .

作者简介:宋娟娟(1984.12--)性别:女,民族:汉,工作单位:郑州电力职业技术学院,学历:本科,职称:讲师,职务:教师。

猜你喜欢
缓冲区调用攻击者
基于Android Broadcast的短信安全监听系统的设计和实现
缓冲区溢出漏洞攻击及其对策探析
初涉缓冲区
利用RFC技术实现SAP系统接口通信
本期导读
Linux系统下缓冲区溢出漏洞攻击的防范
C++语言中函数参数传递方式剖析