WindowsDNS服务器远程栈溢出漏洞的应用研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息安全与通信保密・2008.10
学术研究
Academic Research
75
收稿日期:2008-03-17
作者简介:汤蕾,1983年生,上海交通大学电子工程系研究生,研究方向:通信与信息系统。
汤蕾,薛质
(上海交通大学电子信息与电气工程学院电子工程系,上海 200240)
【摘 要】文章介绍了系统安全漏洞和针对系统安全漏洞攻击的基本实现原理,通过对具体漏洞的分析,提出了Windows系统中基于DNS服务远程栈缓冲区溢出攻击的具体实现方法,同时也给出了针对系统安全漏洞的一些防御和避免措施。
【关键词】DNS服务;寄存器;堆栈;缓冲区溢出
【中图分类号】TP393.08 【文献标识码】A 【文章编号】1009-8054(2008) 10-0075-02
Analysis of Stack Overflows on Windows DNS Server
Tang Lei, Xue Zhi
(Department of Electronic and Information Engineering, Shanghai Jiao Tong University, Shanghai 200240, China)【Abstract 】The paper describes the development of the current system security leak and provides the fundamental concepts. Through the analysis of a specific leak, the paper provides an implement of an attack on Windows system, exploit-ing the stack overflow, at the same time, it also provides some means to avoid such attacks based on system security leaks.【Keywords 】DNS service; Register; Stack; Buffer Overflow
Windows DNS 服务器
远程栈溢出漏洞的应用研究
0 引言
系统安全漏洞是在系统软件、协议的具体实现或是系统安全策略上存在缺陷,没有考虑一些特殊的异常处理,导致攻击者能够在未经授权的情况下以特定的权限访问甚至是破坏系统资源,包括操作系统及支撑软件、路由器、防火墙等。但是漏洞的存在具有实效性,系统漏洞会随时间的推移逐渐暴露出来,相应的补丁软件也会不断地更新推出。在原有漏洞得到纠正的同时,一些新的漏洞和错误也会被引入。因此,漏洞问题将会长期存在,对漏洞问题的研究必须跟踪最新的系统漏洞,分析其安全问题的最新发展动态。
缓冲区溢出漏洞是系统安全中一个比较常见的漏洞,攻击者所使用的攻击方法虽然针对特定的漏洞有所不同,但是攻击的原理都是一样的,即利用堆栈和系统调用的特性,构造特定的、超过正常长度的数据包,造成缓冲区溢出,破坏程序正
常的堆栈,使程序转而执行其他的指令,达到攻击的目的。因
此,对堆栈和系统调用的特性的掌握,对于攻击者来说至关重要,目前比较常用的两种攻击方法的比较如表1所示[1]。
1 缓冲区溢出漏洞实例分析
缓冲区溢出漏洞有很多,漏洞原理基本一致,MS07029是其中比较典型的一个,下面就这个具体漏洞的成因和利用方法加以介绍。
Windows DNS服务器的RPC接口在处理畸形请求时存在栈溢出漏洞。该漏洞出现在RPC监听端口代码段,该端口是为DNS服务器管理所用,在DNS服务主线程监听端口53的编码上没有出现问题。Name_ConvertFileName ToCountName
()函数使用固定的本地缓冲区转换Lookup_ZoneTreeNodeFromDottedName()字符串,尽管在写入缓冲区时进行了一些边界检查,但对于Name_ConvertFileNameToCountName()
表1 Unix方式和系统指令方式的比较
Academic Research
学术研究
76
函数中的局部变量presult却未加限制,导致了栈溢出。攻击者向有漏洞的系统发送特制的RPC报文可以触发这个溢出,导致以权限Local SYSTEM执行任意指令。
在MS07029漏洞利用工具代码中,探测目标系统版本是通过调用int fingerprint(char *host)这个函数来实现的,int fingerprint(char *host)函数通过向目标IP发送特定的报文,根据目标主机的响应来判断系统类型。在掌握版本信息后,攻击者就可以采用“利用系统指令方式”的方法构造返回地址了。
之后,攻击者需要知道目标系统RPC端口信息。在代码中,通过对函数char *DiscoverPort(char *host,char *uid)的调用,攻击者可以知道哪个RPC端口是可以被攻击的。
在完成前两步后,攻击者就需要精心构造溢出字符串了。漏洞利用工具采用的是“利用系统指令方式”构造溢出字符串。在函数DnssrvQuery(parama、paramb、paramc、paramd、parame)中,通过构造特定的参数paramb达到溢出的目的。paramb的形式如图1所示。
当函数DnssrvQuery接收到参数paramb后,返回地址被覆盖成系统jmp esp指令地址,执行完jmp esp后,程序跳转到shellcode处执行,达到溢出攻击的目的。Shellcode可以设计成打开系统一个端口提供远程登陆,也可以设计成自动从特定地址下载执行文件。本工具中的shellcode采用打开系统一个端口提供远程登陆的设计方法,具体代码如下:
unsigned char shellcode2k[] =
"\x29\xc9\x83\xe9\xb0\xe8\xff\xff\xff\xff\xc0\x5e\x81\x76\x0e\x18\xc3\x99\x10\x83\xee\xfc\xe2\xf4\xe4\xa9\x72\x5d\xf0\x3a\x66\xef\xe7\xa3\x12\x7c\x3c\xe7\x12\x55\x24\x48\xe5\x15\x60\xc2\x76\x9b\x57\xdb\x12\x4f\x38\xc2\x72\x59\x93\xf7\x12\x11\xf6\xf2\x59\x89\xb4\x47\x59\x64\x1f\x02\x53\x1d\x19\x01\x72\xe4\x23\x97\xbd\x38\x6d\x26\x12\x4f\x3c\xc2\x72\x76\x93\xcf\xd2\x9b\x47\xdf\x98\xfb\x1b\xef\x12\x99\x74\xe7\x85\x71\xdb\xf2\x42\x74\x93\x80\xa9\x9b\x58\xcf\x12\x60\x04\x6e\x12\x50\x10\x9d\xf1\x9e\x56\xcd\x75\x40\xe7\x15\xff\x43\x7e\xab\xaa\x22\x70\xb4\xea
\x22\x47\x97\x66\xc0\x70\x08\x74\xec\x23\x93\x66\xc6\x47\x4a\x7c\x76\x99\x2e\x91\x12\x4d\xa9\x9b\xef\xc8\xab\x40\x19\xed\x6e\xce\xef\xce\x90\xca\x43\x4b\x90\xda\x43\x5b\x90\x66\xc0\x7e\xab\x88\x4c\x7e\x90\x10\xf1\x8d\xab\x3d\x0a\x68\x04\xce\xef\xce\xa9\x89\x41\x4d\x3c\x49\x78\xbc\x6e\xb7\xf9\x4f\x3c\x4f\x43\x4d\x3c\x49\x78\xfd\x8a\x1f\x59\x4f\x3c\x4f\x40\x4c\x97\xcc\xef\xc8\x50\xf1\xf7\x61\x05\xe0\x47\xe7\x15\xcc\xef\xc8\xa5\xf3\x74\x7e\xab\xfa\x7d\x91\x26\xf3\x40\x41\xea\x55\x99\xff\xa9\xdd\x99\xfa\xf2\x59\xe3\xb2\x3d\xdb\x3d\xe6\x81\xb5\x83\x95\xb9\xa1\xbb\xb3\x68\xf1\x62\xe6\x70\x8f\xef\x6d\x87\x66\xc6\x43\x94\xcb\x41\x49\x92\xf3\x11\x49\x92\xcc\x41\xe7\x13\xf1\xbd\xc1\xc6\x57\x43\xe7\x15\xf3\xef\xe7\xf4\x66\xc0\x93\x94\x65\x93\xdc\xa7\x66\xc6\x4a\x3c\x49\x78\xe8\x49\x9d\x4f\x4b\x3c\x4f\xef\xc8\xc3\x99\x10"
目前,针对这一漏洞的系统补丁可以从微软官方网站上下载,微软对该漏洞的评级为“严重级”,所以任何使用Microsoft Windows Server 2003 SP2、Microsoft WindowsServer 2003 SP1、Microsoft Windows Server 2000 SP4系统的服务器都需尽快安装补丁,以免受到针对该漏洞的攻击。
2 缓冲区溢出漏洞的防御
目前防止出现缓冲区溢出漏洞的解决办法,基本上有以下几:严格对代码进行强类型和长度检查;使缓冲区不可执行;使堆栈向高地址方向增长;使静态数据段中的函数地址指针存放地址和其他数据的存放地址分离。对于一般的系统使用者而言,常升级系统和使用补丁程序是一个非常好的防范缓冲区溢出攻击和其他攻击的有效途径。
3 结语
缓冲区溢出攻击是系统安全漏洞当中比较显著地一种利用方式,攻击者利用它可以完全操作一个系统,比其他任何攻击方式更具有危险性。但是如果能够注意本文提出地一些防御和避免措施,就可以很大程度上减少被攻击地可能性了。
参考文献
[1] 朱明,尹大成,陈亿霖. 缓冲区溢出攻击及检测方法研
究[J]. 计算机工程,2002,28(7):151-153.
[2] 阙喜戎,赵耀,王纯. Windows系统中基于缓冲区溢出
攻击的分析[J]. 计算机应用,2004,22(1):32-34.
图1 构造paramb参数