四缓冲区溢出攻击与防范实验报告_第1页
四缓冲区溢出攻击与防范实验报告_第2页
四缓冲区溢出攻击与防范实验报告_第3页
四缓冲区溢出攻击与防范实验报告_第4页
四缓冲区溢出攻击与防范实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程名称计算机实验成绩实验名称学号320005男班级网工1日期一、实验目的及要求二、实验过程及要点bomain工程,在Release8-2下,在“Win32Release”的“Debug”页中,设定“Programarguments”为字符串“Thisistestresultofbufferoverflowdemocode.”。加双引号的目的是将整个字符串作为一个参数,即argv[1],否则,这个字符串将被分解为多个参数,argv[1]=This,argv[2]=is等等。8-2设定程序运行参提示没有调试信息,按“OK”按钮继续运行。这时,按Ctrl+G,在左侧选择“Address”,编辑框内输入main8-3所示。图8-3显示指定地址处的汇编代 ”一行按F9设置断点,按F5执行程序,执行到“ ESP、EBP寄存器的值为:EIP ESP=0012FF30EBP=0012FF3054686973206973207465737420726573Thisistest0012FF40756C74206F6620627566666572206F76ultofbuffer0012FF506572666C6F772064656D6F20636F6465erflowdemo0012FF602E00FFFF8D16F577691E4000000037000012FF7000000000884937000000000061124000 0012FF80C0FF1200C411400002000000800E4100 ”为堆栈中的argc,“00410E80”为堆栈中的argv,“004011C4”为堆栈中的0012FF800012FFC0004011C4 (2)分析缓冲区溢 原理和危的数据。缓冲区溢出指的是一种常见且危害很大的系统,通过向程序的缓冲行其他的指令,以达到的目的。 ,如C/C++语言中,不对缓冲 令,如果这些指令是放在有Root权限的内存里,那么一旦这些指令得到了运行,RootU2R(UsertoRootAttacksUnixSUID(FDFORMAT)Unix意味着可以随意控制系统。为了避免这种利用程序设计语言而对系统的,须要仔细分析缓冲区溢出的产生及类型,从而做出相应的防范策 chars voidf(char{chardest[4];}void{int sentry[0]=(int)scode;sentry[1]=(int)scode;sentry[2]=(int)scode;f(sentry);} 的关键:因为memcpy并 dest溢出时,使s code的地址覆盖了子程序的返回地址,当子程序执行ret指令时,CPU的指令指针寄存器EIP指向s code这里讨论一个现实中的Unix环境下,利用缓冲区溢出的到一个S 方法的实现。其中,S代表S code,A代表填写的返回地址,由于 code(32bit) 启动一个一个 的代码—— code的获 voidmain(){char*name[2];}把上述程序编译之后,可以用gdb得到上面程序的汇编代码及二进制代码,适当优化后即可得到二进制的S 这里要解决的一个问题是,无论S code被装置到内存的什么位置,字符串“/bin/sh”的地址都可以得到。解决方法是在“/bin/sh”之前加一条CALL指令,这样当CALL被执行时,“/bin/sh”的地址将被自动压入堆栈,紧接着用一条popl指令即可获得这个地址。 code的结构如下:(J代表JMP指令,C代表CALL指令,S代表启动 的代码,s代表串“/bin/sh”,A指向S code的起始地址)。SCOUnix下的S code的汇编代码如下:Jmp #3 CALLPopl%esi #1byte CALLesi#3#4#7#5#2leal0x8(%esi), #3leal0xc(%esi), #3int #2bytes #5bytes #执行exit(0)movl$0x0,%ebx #5bytesint #2call 5 popl #8 的措 计很差, 出,我们可以采关闭不需要 程由于缓冲区溢出只有在获得更高 时才有意义,所以带 的下的suid程序和Windows下由系统管理员启动的服务进程都经常是缓冲区溢出 的风险。如Solaris下的fdformat是个有缓冲区溢出 的suid程序,因为这个格式化软盘 少,最直接的措施是去掉这个程序或者去掉suid位。当有缓冲区溢出 及时给程 打补 软件开发 的防范策据不越界并有效,则就可以避免缓冲区溢出,更不可能使程序跳转到 代码上。但是诸如C/C++自身是一种不进行强类型和长度检查的一种程序设计语言,而程序员在写代码时由于开发速度和代码的简洁性,往往忽视了程序的健壮性,从而导致缓冲区溢出,因此 须从程序语言和系统结构方面加强防范。很多不安全程序的出现是由于调用了一些不安全的库函数,这些库函数往往没有对数strcpy()、sprintf()、strcat()grepstrcpy()不定循环中对数组的赋值等。 faultinjection等。 程序输入缓冲区的代码,这种技术被称为缓冲区不可执行技术。事实上,很多UnixUnixMSWindowsLinuxSolaris丁。因为几乎没有任何合法的程序会在堆栈中存放代码,这种做法几乎不产生任何兼容性问题。 程序输入缓冲区的代码,这种技术被称为非执行的缓冲区技术。事实上,很多UnixUnixMSWindowsLinuxSolarisLinux例,这时可执行的代码必须被放入堆栈中:a.Linux通过向进程堆栈释放代码然 中断来执行在堆栈中的代码来实现向进程发Unixb.GCC 重用研究发现gcc在堆栈区里放置了可执行的代码作为 非执行堆栈的保护可以有效地对付把代码植入自动变量的缓冲区溢出,而对于其他形式的则没有效果。通过一个驻留的程序的指针,就可以跳过这种保护措 改进CC语言中存在缓冲区溢出 隐患的系统函数有很多。例如gets(),sprintf(), 在堆栈区中。通过修改操作系统,在层引入保护机制,限制代码在堆栈区的执行,这样,缓冲区溢出就不可能成功。到目前为止,我们讨论利用函数返回地址控制程序转移到代码的方法时,有一个基本的前提,那就是当堆栈被压入数据时,栈顶向低地址方向增长,,缓冲区溢出时才可能覆盖低地址处的函数返回地址指针,从而控制程序转移到代出,都不可能覆盖低地址处的函数返回地址指针,也就避免了缓冲区溢出。但是这种方法仍然无法防范利用堆和静态数据段的缓冲区进行溢出的。 因此,即使一 者成功地改变程序的指针,由于系统事先检测到了指针的改变护;第三,保护指针。在手写的堆栈检测中会介绍Snarskii为 BSD开发了一套定制的能通过监测cpu堆栈来确定缓冲区溢出的libc。在堆栈保护中会介绍我们自己的Snarskii为 BSD开发了一套定制的能通过监测cpu堆栈来确定缓冲区溢出的libc。这个应用完全用手工汇编写的,而且只保护libc中的当前有效 应用达到了设计要求,对于基于libc库函数的 。2)堆栈保护:编译器生成的有效 gcc2果发生过缓冲区溢出的,那么这种很容易在函数返回前被检测到。但是,如果者预见到这些附加字节的存在,并且能在溢出过同样地制造他:利用在C0(null),CR,LF,-1(EOF)等不能在常用的字符串函数利用一个在函数调用时产生的一个32位的随机数来实现 通过检查堆栈的完整性的堆栈保 是从Synthetix方法演变来的。Synthetix方法过使用准不变量来确保特定变量的正确性。这些特定的变量的改变是程序实现能预知的,而且只能在满足一定的条件才能可以改变。这种变量我们称为准不变量。Synthetix开发了一些工具用来保护这些变量。 者通过缓冲区溢出而产生的改变以被系统当做 的动作。在某些 的情况下,这些准不变量有可能被 改变,这是就需要堆栈保护来提供更完善的保护了。 中列出。随后,我们用堆栈保护的方法重新构造了一个完整的Linux系统(RedHat5.1)。然后我们用X 86-3.3.2-5和lsof的 RedHatLinux5.1Web55我们已经用各种性能测试来评测堆栈保护的性能。Mircoben arks的结果表明在函的调用,堆栈保护中增加了系统的开销。而在网络的测试中(需要用到堆栈保护的地方),则表明这种开销不是很大。我们的第一个测试对象是SSH,它提供了极强的加密和认证,用来替代Berkeley的r系列指令。SSH使用了软件加密,因此系统的占用的带宽不大,我们用网络间 scpbigsourceSSH第二个测试使用了ApacheWeb服务器。如果这种服务器存在基于堆栈的 击者就可以轻易地取得Web服务器的控制权,允许 主页的内容。同时,Web服务器也是对性能和带宽要求较高的一个服务器部件。WebStoneApacheWebSSH8%优势。象以前一样,我们把这些归结为噪声的影响。因此,我们的结论是:堆栈保护Web3)指针保护:编译器生成程序指针完整性检查 (在1996年的时候)。从此,很多简单的 b.每次程序指针被的时候都要检查附加字节的完整性。这个也存在问题;因为“从于从器中读入变量。c.已经开发的指针保护的一个原型(gcc),成了,那

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论