缓冲区溢出漏洞的原理及对攻击的防护

互联网 | 编辑: 杨剑锋 2006-11-18 00:00:00转载 一键看全文

本文详细分析了缓冲区溢出的原理,描述了网络攻击者利用缓冲区溢出漏洞进行系统攻击的一般过程,最后简单讨论了几种缓冲区溢出的保护方法。

 
 
五、缓冲区溢出的保护方法
 
      目前有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响:
 
1、强制写正确的代码的方法
      编写正确的代码是一件非常有意义但耗时的工作,特别像编写C语言那种具有容易出错倾向的程序(如:字符串的零结尾),这种风格是由于追求性能而忽视正确性的传统引起的。尽管花了很长的时间使得人们知道了如何编写安全的程序,具有安全漏洞的程序依旧出现。因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全正确的程序。虽然这些工具帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在。除非程序员能保证他的程序万无一失,否则还是要用到以下部分的内容来保证程序的可靠性能。
 
2、通过操作系统使得缓冲区不可执行,从而阻止攻击者殖入攻击代码
      这种方法有效地阻止了很多缓冲区溢出的攻击,但是攻击者并不一定要殖入攻击代码来实现缓冲区溢出的攻击,所以这种方法还是存在很多弱点的。
 
3、利用编译器的边界检查来实现缓冲区的保护
      这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。
 
4、在程序指针失效前进行完整性检查
      这样虽然这种方法不能使得所有的缓冲区溢出失效,但它的确确阻止了绝大多数的缓冲区溢出攻击,而能够逃脱这种方法保护的缓冲区溢出也很难实现。
 
      最普通的缓冲区溢出形式是攻击活动纪录然后在堆栈中殖入代码。这种类型的攻击在1996年中有很多纪录。而非执行堆栈和堆栈保护的方法都可以有效防卫这种攻击。非执行堆栈可以防卫所有把代码殖入堆栈的攻击方法,堆栈保护可以防卫所有改变活动纪录的方法。这两种方法相互兼容,可以同时防卫多种可能的攻击。
      剩下的攻击基本上可以用指针保护的方法来防卫,但是在某些特殊的场合需要用手工来实现指针保护。全自动的指针保护需要对每个变量加入附加字节,这样使得指针边界检查在某些情况下具有优势。
 
      最为有趣的是,缓冲区溢出漏洞--Morris蠕虫使用了现今所有方法都无法有效防卫的方法,但是由于过于复杂的缘故却很少有人用到。
 
      在本文中,我们详细描述和分析了缓冲区溢出的原理,并简单介绍了几种防卫方法。由于这种攻击是目前常见的攻击手段,所以进行这个方面的研究工作是有意义和成效的。
 
 
参考文献
[1]   网络入侵检测分析员手册.   Stephen Northcutt著.余青霓等译.人民邮电出版社,2000.3
[2]   C语言疑难问题解析.   严桂兰,刘甲耀编著.华东华工学院出版社,1993,1.
[3]   网络最高安全技术指南.  王锐等译.机械工业出版社,1998,5.

提示:试试键盘 “← →” 可以实现快速翻页 

总共 3 页< 上一页123
一键看全文

本文导航

相关阅读

每日精选

点击查看更多

最新快讯

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑