一种防止堆缓冲区溢出的有效方法
缓冲区溢出的漏洞随着冯·诺依曼构架的出现就已经开始出现了。
在1988年随着莫里斯互联网蠕虫的广泛传播他们开始声名狼藉。
不幸的是,同样的这种攻击一直持续到今天。
一方面,根据程序运行存储设计的缺陷,攻击者通过各种渠道能够准确无误的攻击目标地址,并让自己的恶意代码来肆意运行,以破坏计算机系统安全;另一方面,对于攻击者的攻击,我们没有有效的方法从根本上来制止。
到目前为止,防范无穷无尽的缓冲区溢出攻击变种的唯一方法是对所有的应用程序进行完善的设计、编码和测试。
相比于其他因素,缓冲区溢出属于攻击中最典型的一类攻击。
对于缓冲区溢出,我们可以分为两类,一类是基于栈缓冲区的溢出,另一类是基于堆的缓冲区溢出,虽然基于栈的攻击仍然是更加频繁和重要,并取得了一定的进展;但基于堆的溢出最近获取了更多注意。
本文详细分析了进程的内存组织形式、堆缓冲区溢出的基本理论和堆缓冲区溢出的各种类型。
总结出堆缓冲区溢出是因为攻击者对堆中的关键数据进行篡改,或向堆缓冲区中注入恶意代码,以破坏计算机系统。
针对攻击者的攻击目标——堆元数据(堆管理结构信息),提出了一种新的堆缓冲区溢出的防范机制,其基本思想是通过分离堆元数据和堆中用户数据来防止堆缓冲区溢出,对堆元数据进行特殊存储,使得攻击者很难对其进行更改,以达到防止堆缓冲区溢出的目标。
实验表明新的堆缓冲区防范机制能够有效地防止堆缓冲区溢出。