VC++缓冲区溢出攻击分析与防范策略.docVIP

VC++缓冲区溢出攻击分析与防范策略.doc

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

VC++缓冲区溢出攻击的分析与防范策略   [摘要]首先解释了缓冲区溢出的概念和溢出原理,并在VC++环境下比较了缓冲区非溢出、下标越界溢出、堆溢出、综合代码和激活记录溢出四种情况,由此总结出了避免缓冲区溢出的基本方法;其次通过一个导致缓冲区溢出的小程序对缓冲区溢出攻击的产生进行了实例分析,总结出缓冲区溢出攻击的类型;最后,从静态防范和动态防范两个方面提出了溢出的防范策略,缓冲区溢出攻击的分析与防范对网络信息安全具有非常重要的意义。   [关键词]缓冲区;堆溢出;静态防范:攻击      一、缓冲区溢出概念      缓冲区是用户为程序运行时在计算机中申请的一段连续的内存,它保存了给定类型的数据。缓冲区溢出指的是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。为了达到这个目的,攻击者必须达到如下的两个目标:(1)程序的地址空间里安排适当的代码。(2)通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。      二、缓冲区溢出概念危害      在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务;另外一种是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。      三、缓冲区溢出的原理      通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:   void function(char*str){   char buffer[16];   strcpy(buffer,str);}   上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在像strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf()等。当然,随便往缓冲区中填东西造成它溢出只会出现“分段错误”(Seg-mentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。   缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普遍,并且易于实现。缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者所想要的一切,植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,而得到被攻击主机的控制权。在1998年Lincoln实验室用来评估入侵检测的的5种远程攻击中,有2种是缓冲区溢出。在1998年CERT的13份建议中,有9份与缓冲区溢出有关,在1999年,至少有半数的建议和缓冲区溢出有关。在Bugtraq的调查中,有2/3的被调查者认为缓冲区溢出漏洞是一个很严重的安全问题。   缓冲区溢出漏洞和攻击有很多种形式,会在第二节对他们进行描述和分类。相应地防卫手段也随着攻击方法的不同而不同,将在第四节描述,它的内容包括针对每种攻击类型制定有效的防卫手段。      四、缓冲区溢出分类      1.堆栈溢出。破坏系统堆栈中被调用函数的返回地址是缓冲区溢出攻击者最常用的方法。首先通过输入大量的数据,以此造成缓冲区溢出,如果溢出改变了堆栈中保存的函数返回地址,则函数返回时,可使程序转向执行其它指令,以达到攻击的目的。攻击代码一般是类似于exce(“sh”)的这样能获得系统控制权的程序。通常情况下攻击者输入的超长字符串实际上是含一个二进制机器语言的小程序,这就是攻击代码。因此,改变的函数返回地址将指向溢出数据,也就是这段攻击代码。   2.修改函数指针溢出。如果程序中使用了函数指针变量,例如类似于“void(*foo)()”这样的语句。函数的指针可能位于堆栈静态数据区中等,如果被攻击者攻击的缓冲区点恰好就在某个指针的附近,攻击者就有机会修改函数指针,当程序通过指针变量调用该函数时就会转去执行攻击者事先放置的代码。   3.长跳转溢出。在c语言中包含了一个简单的检验/恢复系统,称为“set jmp/long jmp”,意思是

文档评论(0)

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

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

1亿VIP精品文档

相关文档