缓冲区溢出攻击方式以及防范策略.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文档。上传文档
查看更多
缓冲区溢出攻击方式以及防范策略   摘要:缓冲区溢出是被广泛利用的网络攻击方式,该文分析缓冲区溢出攻击的基本原理,针对堆栈溢的攻击方式列举实例并分析其攻击方法,并根据该方法提出防范缓冲区溢出的措施。   关键字:缓冲区溢出攻击;堆栈;防御   中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)29-7117-02   Buffer Overflow Attack and Guard Strategy   HUANG Wen-qing   (Dept. of Computer and Information Engineering, Heze University, Heze 274015, China)   Abstract: Buffer overflow is widely used for network attack mode, this paper analyzes the basic principle of the buffer overflow attack, according to the stack overflow attack examples and analysis of its attack method, and according to the method proposed the measures of prevention of buffer overflow.   Key words: buffer overflow attack; stack; defense   1 缓冲区溢出攻击的原理   缓冲区是进程在计算机内存中的一个连续的地址空间,在这个空间中保存了给定的数据,当进程向缓冲区中写入超过地址空间长度的数据时,就会使缓冲区产生溢出,从而破坏程序的堆栈,从而运行其他指令达到攻击的目的。造成缓冲区溢出的原因有很多,但归根结底是因为程序设计过程中没有检查用户输入的参数是否符合计算机运行是的要求。   2 缓冲区溢出攻击方式   缓冲区溢出的攻击方式一般可分为以下四种情况:   1)栈溢出(stack smashing)   本方法是进程中断执行过程中利用strcpy()等函数覆盖堆栈。由于进程执行过程中未检查输入缓冲区的数据长度,攻击者找到溢出点后,输入超过缓冲区长度的数据(包括精心构造的填充缓冲区长度用的空指令以及shellcode编码),导致地址越界,越界部分覆盖栈中局部变量空间之上的栈桢指针EBP以及函数返回retaddr的地址,并恰好使shellcode覆盖EIP,当函数执行返回中断之前的指令ret指令时,retaddr从栈中弹出,作为返回指令的地址赋给EIP寄存器,EIP寄存器便由本来执行原进程中断之前的流程改变成了执行事先编辑好的shellcode(如图1所示)。   2)堆溢出(malloc()函数)   堆溢出是利用函数溢出来进行攻击。malloc()函数又叫动态内存分配函数,功能是分配长度为num_bytes字节的内存空间给应用程序。堆溢出方式和传统的栈溢出一样,当输入超出malloc()预先分配的内存空间大小时候,就会覆盖掉这段空间之后的一段存储区域,如果该存储区域有一个重要的变量比如euid(有效用户标示),那么就可以用它来导致攻击。另一种是典型的double-free堆腐败,在内存回收操作中,合并相邻空闲块重新插入双向链表时会有一个写4字节内存的操作,如果弱点程序由于编程错误free()一个不存在的块,就可以精心伪造这个块,从而覆盖任何想要的值:函数的返回地址、库函数的plt地址等。   例如,通过覆盖Windows 系统中异常处理链SEH来实现的(如图2所示)。在Windows系统中,当发生异常时,系统就会查找异常处理链SEH,找应对这种异常的处理程序,找到了对应的处理程序后,就把保存的处理程序的地址赋给EIP,这样系统就会执行处理程序,以避免系统崩溃。   在Windows系统中,SEH链保存在堆栈中。所以这种SEH覆盖方式,就是将顶层SEH中的指向下一节点的值覆盖成JMP 04,而处理程序的地址覆盖成call ebx的地址,后面再跟上shellcode。这样出错后,Windows就会跳转到处理程序中,执行call ebx t,进入前面的jmp 04中,再执行jmp 04就正好跳过覆盖的地址,到达shellcode 处(如图3所示)。   3)格式化字符串漏洞(format string vulnerability)   如果输入的字符串格式由用户定制,攻击者就可以伪造任意格式串,利用*printf()系列函数的特性就可以窥探堆栈空间的内容,超常输入可以引发传统的缓冲区溢出,或是用“%n”

文档评论(0)

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

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

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档