预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共23页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

本课题的研究意义缓冲区溢出国内外研究现状缓冲区溢出原理概述比如堆栈的定义缓冲区溢出攻击原理缓冲区溢出攻击方式在程序的地址空间里安排适当的代码的方法攻击方式图示控制程序转移到攻击代码的方法长跳转缓冲区(Longjmpbuffers):缓冲区溢出影响及危害缓冲区溢出的防御方法通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码利用编译器的数组边界检查来实现缓冲区的保护 (2)CompaqC编译器 Compaq公司为AlphaCPU开发的C编译器支持有限度的边界检查(使用check_bounds参数)。 这些限制是: 只有显式的数组引用才被检查,比如“a[3]”会被检查,而“*(a+3)”则不会。由于所有的C数组在传送的时候是指针传递的,所以传递给函数的的数组不会被查。带有危险性的库函数如strcpy不会在编译的时候进行边界检查,即便是指定了边界检查。 由于在C语言中利用指针进行数组操作和传递是如此的频繁,因此这种局限性是非常严重的。通常这种边界检查用来程序的查错,而且不能保证不发生缓冲区溢出的漏洞。 (3)Purify:内存存取检查 Purify是C程序调试时查看内存使用的工具。Purify使用“目标代码插入”技术来检查所有的内存存取。通过用Purify连接工具连接,可执行代码在执行的时候数组的所有引用来保证其合法性。这样带来的性能上的损失要下降3-5倍。 (4)类型-安全语言 所有的缓冲区溢出漏洞都源于C语言缺乏类型安全。如果只有类型-安全的操作才可以被允许执行,这样就不可能出现对变量的强制操作。如果作为新手,可以推荐使用具有类型-安全的语言如Java。但是作为Java执行平台的Java虚拟机是C程序,因此通过攻击JVM的一条途径是使JVM的缓冲区溢出。 这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。在程序指针失效前进行完整性检查最普通的缓冲区溢出形式是攻击活动记录然后在堆栈中植入代码。这种类型的攻击在1996年中有很多记录。而非执行堆栈和堆栈保护的方法都可以有效防卫这种攻击。非执行堆栈可以防卫所有把代码植入堆栈的攻击方法,堆栈保护可以防卫所有改变活动记录的方法。这两种方法相互兼容,可以同时防卫多种可能的攻击。 虽然这些工具帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在。除非程序员能保证他的程序万无一失,否则还是要用到以下部分的内容来保证程序的可靠性能。 剩下的攻击基本上可以用指针保护的方法来防卫,但是在某些特殊的场合需要用手工来实现指针保护。全自动的指针保护需要对每个变量加入附加字节,这样使得指针边界检查在某些情况下具有优势。最为有趣的是,缓冲区溢出漏洞--Morris蠕虫使用了现今所有方法都无法有效防卫的方法,但是由于过于复杂的缘故却很少有人用到。总结与展望参考文献谢谢欣赏!此课件下载可自行编辑修改,供参考! 感谢您的支持,我们努力做得更好!