格式化字符串攻击检测算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
格式化字符串攻击检测算法.doc

格式化字符串攻击检测算法   摘要:格式化字符串漏洞能对网络系统造成巨大的危害。该文探讨了格式化字符串漏洞的成因与危害性,并对格式化字符串攻击检测算法进行了详细的阐述与分析。   关键词:格式化字符串;攻击检测;算法   中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)22-5012-03   网络攻击者利用格式化字符串漏洞可以远程侵入网络上的计算机系统,偷看系统信息,甚至完全控制整个系统。1999年,TymmTwillman发现了第一个格式化字符串漏洞。之后,众多的格式化字符串漏洞接连被发现。截至2009年4月,Common Vulnerabities and Exposures 网站记录了关于格式化字符串漏洞大约500多个。虽然已经过去好几年了,但是,新的格式化字符串漏洞仍不断被发现。针对格式串漏洞,目前主要有Format-Guard、Libsafe和White-Listing等防范技术,这些技术对于已知的格式化字符串攻击具有很好的防范效果。该文针对格式化字符串漏洞的出现,探讨该漏洞出现时如何检测并做好防范工作。   1 格式化字符串漏洞的成因及危害   格式化字符串攻击可以使程序崩溃或者执行恶意代码。这一问题的出现是因为对用户输入的内容没有加以过滤并加以甑别。这些数据的输入都是一些C函数执行格式化操作时的参数,如printf()。恶意用户可以使用%s和%x 等格式符,从堆栈或其他可能的内存位置中来获取数据,也可以使用格式符%n向任意地址写入任意的数据。它配合printf()函数或其他具有类似功能的函数就可以向存储在桟上的地址写入被格式化的字节数。一个经典的exploit是混合这些技术,然后用恶意的shellcode地址来覆盖某一链接库函数地址或者桟上的返回地址。其中填写的一些格式化参数主要是用于控制输出的字节数。而%x主要是用于从桟中弹出字节,直至格式化字符串自身的起始位置。伪造的格式化字符串的起始部分应该用意欲执行的恶意代码来覆盖,这个可以借助%n来完成。   格式化字符串漏洞的危害性非常大,它可以使网络进程崩溃,可以读取内存数据并向内存中写入数据。由于C语言无法保障格式串函数中存在合法的指针变量与格式串中的格式符相对应。如果我们使用过多的格式符,就有可能遇到许多无效地址。那么,操作系统就会发出sigseGV 信号,因此,整个系统进程就会中断,而攻击者就有机会获取内存转储映像发件中得到数据,某些网络服务也就会被中止。还有,由于C语言不能检查对应变量是否真的存在,它不去理会对应的变量地址是用户数据还是系统数据。攻击者一旦能构造格式串,就能任意读取内存数据及任意地址。而攻击者可以利用一些技术来获取整个堆栈的内容。因为堆栈中储存了程序流局部的函数变量等重要信息,攻击者利用该信息能获取争取正确的共计代码的偏移量。另外,在格式化字符串函数中,格式符%n会将格式化字符串函数在遇到该格式符前已经打印的字符的个数写到响应整数指针所指的地址里,通过构造合适的字符串,就可以构造合适的数值并将之写到任意的地址中。   总而言之,C语言格式化字符不检查参数的类型和个数是产生格式化字符串漏洞的根本原因。   2 格式化字符串攻击检测算法   2.1默认参数个数表算法   算法实现过程中可以将前两种结合起来使用,以第三种作为补充。   2.2 参数检查算法   在默认参数个数表算法中定义的库函数中的动态默认参数个数与文件读取算法得到的用户自定义参数个数进行对比,如有出入则认为存在格式化字符串漏洞;一旦检测到漏洞,便要对可能存在的攻击行为进行检测。   针对攻击行为的检测,借鉴StackGuard检测缓冲区溢出漏洞攻击的方法。StackGuard 是一种编译时使用的技术。它将一个特征值插入到桟中的函数返回地址之前。这样在攻击者进行缓冲溢出攻击时,溢出的字符串如果要改写函数返回地址就会通过改写特征值。在函数返回时,首先检查特征值是否被改写了,StackGuard 的特征值方法只是在攻击者猜测特征值情况下有效。如果特征值被改写了,就说明攻击者在利用缓冲区溢出漏洞,那么我们就可以停止程序的运用,避免被攻击。   以上是格式化字符串攻击检测算法的重要组成部分,具体实现时,由于之间存在很多的互相调用,信号传输,以及嵌套。所以,、它们会作为一个整体出现。   格式化字符串攻击检测算法的时间复杂度主要由默认参数个数表算法的复杂度决定。判定函数类型之前需要遍历整个文件,复杂度为O(n),找到并取出第一个参数复杂度为O(1)。对于较为简单的参数不定函数,只需判断参数个数,复杂度也为O(t);对于需解析va_list的vprintf()等函数,在参数类型确定的情况下,读取所有可变参数复杂度为O(t),参数类

文档评论(0)

fa159yd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档