缓冲区溢出攻击的原理与防范详解.pptVIP

  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文档。上传文档
查看更多
本课题的研究意义     随着信息与网络技术的发展,以及这些技术在军事领域的不断渗透,计算机网络已成为连接未来信息化战场的枢纽。对计算机的攻击,能够获得大量宝贵的情报以及达到其它武器系统所不能及的效果。因此对以计算机为基础的网络攻击与防护就自然成为军事领域密切关注的问题。近年来,缓冲区溢出漏洞的广泛性和破坏性受到国内外信息安全研究领域的极切关注。从1988年CERT(计算机紧急响应小组)成立以来,统计到的安全威胁事件每年以指数增长。缓冲区溢出攻击作为网络攻击一种主要形式占所有系统攻击总数的80%以上[1]。这种缓冲区溢出漏洞可以发生在不同的操作系统以及不同的应用程序上。   缓冲区溢出攻击是黑客攻击的主要手段,给网络信息安全带来了越来越大的危害。已有的防御手段研究相对滞后,目前国内外的研究大多集中在某个具体漏洞的利用与防范上,缺乏全面的研究。并且现有的缓冲区溢出防御手段也存在诸多不足之处。论文主要是对缓冲区溢出攻击的原理分析与防范进行深入研究。  论文首先介绍了缓冲区和堆栈的基本概念,研究并总结了缓冲区溢出的原理和过程,并介绍了一些常用的攻击方法。在此基础上,论文研究并总结了目前防御缓冲区溢出攻击的一些常用方法,主要从主客观两方面来讨论。主观方面,主要是要提高程序员编写代码的质量,形成良好的编程风格;客观方面,主要是从系统和软件做一些相关的检查和优化。 缓冲区溢出国内外研究现状   缓冲区溢出攻击作为一种主流的攻击手法,早在20世纪80年代,国外就有人开始讨论溢出攻击,例如1988年的Morris蠕虫,利用的攻击方法之一就是Fingerd的缓冲区溢出,这次蠕虫攻击导致全球6000多台机器被感染,损失巨大,由此,缓冲区溢出问题逐渐得到人们的重视。1989年,Spafford提交了一份分析报告,描述了VAX机上的BSD版unix的Fingerd的缓冲区溢出程序的技术细节,从而引起了一部分安全人士对这个研究领域的重视。1996年AlephOne详细的描述了Linux系统中栈的结构和如何利用基于栈的缓冲区溢出。1997年,Smith综合以前的文章,提供了如何在各种Unix家庭中写缓冲区溢出Exploit更详细的指导原则。1998年来自“Cult of the Dead cow”的Dildog详细地介绍了如何利用Windows的溢出,他提出了利用栈指针的方法来完成跳转,返回固定的指向地址,不论是在出问题的程序中还是在动态链接库中,该固定地址都包含了用来利用栈指针完成跳转的汇编指令,这是缓冲区溢出利用一个重大的进步。 在国内,这方面技术的研究起步较晚,2000年左右,才有部分安全人士和黑客开始研究这个领域,最早中联绿盟的袁仁广做过一些工作,他使用暴力探索的办法来获取kernel32.dll的基址,代码量太多,也不够准确,2003年安全焦点峰会上Flashsky做了关于堆溢出的演讲[3],总结了堆溢出漏洞利用的方法。2005年San写了关于如何溢出Windows CE的文章[4],Windows CE是PDA和手机上使用非常广泛的嵌入式操作系统,该文介绍了Windows CE内存管理,进程等基础知识,初步讨论了Windows CE的缓冲区溢出问题,只是对Shellcode的解码效率不高。 缓冲区溢出原理概述 缓冲区溢出的概念 缓冲区是内存中存放数据的地方,一般来说,它是“包含相同数据类型的实例的一个连续计算机内存块”[5],它保存了给定类型的数据。在C和C++中,缓冲区通常是使用数组和诸如malloc()和new这样的内存分配例程来实现的。最常见的缓冲区种类是简单的字符数组。 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,使得溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区又被称为“堆栈”.。在各个操作进程之间,指令会被临时储存在“堆栈”当中,“堆栈”也会出现缓冲区溢出。 比如 堆栈的定义     堆栈是内存中的一个连续的块。一个叫堆栈指针的寄存器(SP)指向堆栈的栈顶,堆栈的底部是一个固定地址。堆栈有一个特点就是,后进先出。也就是说,后放入的数据第一个取出。它支持两个操作,PUSH和POP。PUSH是将数据放到栈的顶端,POP是将栈顶的数据取出。    在高级语言中,程序函数调用和函数中的临时变量都用到堆栈,参数的传递和返回值时也用到了堆栈,通常对局部变量的引用是通过给出它们对SP的偏移量来实现的。另外还有一个基址指针(FP,在Intel芯片中是BP),许多编译器实际上是用它来引用本地变量和参数的。通常,参数的相对F

文档评论(0)

我是兰花草 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档