在过去的十年中,以缓冲区溢出为类型的安全漏洞占是最为常见的一种形式了.更为严重的是,缓冲区溢出漏洞占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的internet用户有机会获得一台主机的部分或全部的控制权!如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁可以得到缓解.在本文中,我们研究了各种类型的缓冲区溢出漏洞与攻击手段,同时我们也研究了各种的防御手段,这些手段用来消除这些漏洞所造成的影响,其中包括我们自己的堆栈保护方法.然后我们要考虑如何在保证现有系统功能与性能不变的情况下,如何使用这些方法来消除这些安全漏洞.
一.前言
缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普通了,并且易于实现.而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:殖入并且执行攻击代码.被殖入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权. 【程序编程相关:微软修改IE处理控件方式 需要多点一下鼠】
在过去的十年中,以缓冲区溢出为类型的安全漏洞占是最为常见的一种形式了.更为严重的是,缓冲区溢出漏洞占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的internet用户有机会获得一台主机的部分或全部的控制权!由于这类攻击使任何人都有可能取得主机的控制权,所以它代表了一类极其严重的安全威胁. 【推荐阅读:Google推电邮安全软件 杀除病毒和间】
缓冲区溢出漏洞与攻击有很多种形式,我们会在第二部分对他们进行描述与分类.相应地防卫手段也随者攻击方法的不同而不同,我们会放在第三部分描述,它的内容包括针对每种攻击类型的有效的防卫手段.我们还要要介绍堆栈保护方法,这种方法在解决缓冲区溢出的漏洞方面很有效果,并且没有牺牲系统的兼容性与性能.在第四部分,我们要讨论各种防卫方法的综合使用.最后在第五部分是我们的结论. 【扩展信息:新病毒借福娃传播 QQ、MSN等用户易受】
比如,在1998年lincoln实验室用来评估入侵检测的的5种远程攻击中,有3种是基于社会工程学的信任关系,2种是缓冲区溢出.而在1998年cert的13份建议中,有9份是是与缓冲区溢出有关的,在1999年,至少有半数的建议是与缓冲区溢出有关的.在bugtraq的调查中,有2/3的被调查者认为缓冲区溢出漏洞是一个很严重的安全问题.
二.缓冲区溢出的漏洞与攻击
缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了.一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的执行代码来获得root的shell,但不一直是这样的.为了达到这个目的,攻击者必须达到如下的两个目标:
1. 在程序的地址空间里安排适当的代码.
2. 通过适当地初始化寄存器与存储器,让程序跳转到我们安排的地址空间执行.
我们根据这两个目标来对缓冲区溢出攻击进行分类.在2.1部分,我们将描述攻击代码是如何放入被攻击程序的地址空间的(这个就是“缓冲区”名字的的由来).在2.2部分,我们介绍攻击者如何使一个程序的缓冲区溢出,并且执行转移到攻击代码(这个就是“溢出”的由来).在2.3部分,我们介绍综合在2.1与2.2部分所讨论的代码安排与控制程序执行流程的技术.
2.1 在程序的地址空间里安排适当的代码的方法
有两种在被攻击程序地址空间里安排攻击代码的方法:
植入法:
攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里.这个字符串包含的数据是可以在这个被攻击的硬件平台上运行的指令序列.... 下一页