首页 理论教育缓冲区溢出攻击原理及防范

缓冲区溢出攻击原理及防范

【摘要】:缓冲区溢出的原理缓冲区是内存中存放数据的地方,在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。缓冲区溢出漏洞攻击方式缓冲区溢出漏洞可以使任何一个有黑客技术的人取得机器的控制权甚至是最高权限。原则上来讲攻击时所针对的缓冲区溢出的程序空间可为任意空间。攻击时定位在一个可供溢出的自动变量,然后向程序传递一个很大的字符串,在引发缓冲区溢出改变事件记录的同时植入代码。

(1)缓冲区溢出的原理

缓冲区是内存中存放数据的地方,在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为地造成溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,然后植入到缓冲区,再向一个有限空间的缓冲区中植入超长的字符串。这时可能会出现两个结果,一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个就是利用这种漏洞可以执行任意指令,甚至可以取得系统特级权限。

(2)缓冲区溢出漏洞攻击方式

缓冲区溢出漏洞可以使任何一个有黑客技术的人取得机器的控制权甚至是最高权限。(www.chuimin.cn)

1)在程序的地址空间里安排适当的代码。其实在程序的地址空间里安排适当的代码往往是相对简单的,但也同时要看运气如何。如果要植入的代码在所攻击程序中已经存在了,那么就简单地对代码传递一些参数,使程序跳转到目标中就可以完成了。很多时候这个可能性是很小的,此时就要用一种叫“植入法”的方式来完成了。向要攻击的程序里输入一个特定的字符串,程序就会把这个字符串放到缓冲区里,这个字符串包含的数据是可以在这个所攻击的目标的硬件平台上运行的指令序列。缓冲区可以设在堆栈(自动变量)、堆(动态分配的)和静态数据区(初始化或者未初始化的数据)等地方。也可以不必为达到这个目的而溢出任何缓冲区,只要找到足够的空间来放置这些攻击代码就够了。

2)将控制程序转移到攻击代码的形式。所有的这些方法都是在寻求改变程序的执行流程,使它跳转到攻击代码,最为基本就是溢出一个没有检查或者其他漏洞的缓冲区,这样做就会扰乱程序的正常执行次序。通过溢出某缓冲区,可以改写相近程序的空间而直接跳转过系统对身份的验证。原则上来讲攻击时所针对的缓冲区溢出的程序空间可为任意空间。但因不同地方的定位相异,所以也就带出了多种转移方式。

3)植入综合代码和流程控制。常见的溢出缓冲区攻击类是在一个字符串里综合了代码植入和流程记录。攻击时定位在一个可供溢出的自动变量,然后向程序传递一个很大的字符串,在引发缓冲区溢出改变事件记录的同时植入代码。