论文部分内容阅读
随着电子信息技术和计算机网络的飞速发展,系统安全问题受到越来越多的重视。网络攻击、蠕虫病毒和黑客等名词已经频繁地出现在各种杂志和视频中。由于程序设计语言本身的缺陷以及软件的复杂性,系统的正确性和安全性难以保证,存在各种各样的程序漏洞。其中,最为常见的是与内存篡改相关的程序漏洞,如缓冲区溢出、格式化字符串、堆篡改和整型溢出等。内存漏洞危害巨大,给社会经济带来了难以估量的损失。许多政府和研究机构都对系统安全问题给予了足够的重视。
整型漏洞是臭名昭著的软件安全漏洞之一,在C或C++程序中尤为突出。2006年CVE(Common Vulnerability and Exploit)指出缓冲区溢出漏洞呈下降趋势,而其他一些漏洞呈上升趋势,如:整型溢出、符号转换错误等。值得注意的是,2006年整型溢出在系统漏洞中的排名首次升至第二位,仅次于缓冲区溢出。更重要的是,整型漏洞往往会触发很严重的攻击,如任意代码执行,拒绝服务攻击等。传统的针对整型漏洞检测方法通常需要程序源码进行分析,检测的范围也很有限,而且几乎没有工作可以帮助定位错误的根源。
本文设计、实现并测试了一种针对整型溢出攻击的实时检测和定位的方法。针对整型溢出攻击,首先将二进制文件转化为一种中间语言VEX;然后在运行时,将与外部输入相关的数据着色,截获相关语句并且记录信息;最后依据制定的检测策略对着色的数据进行检测并定位。
为验证该方法针对整型溢出攻击检测与漏洞定位的效果,在Linux平台上,基于动态二进制分析工具Valgrind及其类型引用插件Catchconv工具实现了原型系统。使用常见的含有内存漏洞的程序来测试系统的有效性,以及它的性能损耗。实验结果证明方法既能够有效地检测到绝大部分的整型溢出攻击,而且可以有效的定位到整型漏洞的位置,具有很低的漏报率和误报率。