论文部分内容阅读
软件功能在不断增强的同时,软件的庞杂程度也在提高,这样就无可避免的带来软件漏洞。软件漏洞攻击带来的巨大经济损失,迫切需要我们对各种漏洞攻击的方式进行剖析,从而深刻理解攻击的实现方式和攻击的本质,为攻击的防范和攻击的修复提供更多的信息。
近年来,对漏洞攻击的防范技术的研究已经取得了丰硕的成果。从针对特定已知漏洞和攻击方式的攻击防范技术,比如程序语言增强,主机运行环境增强等,到针对一般性的漏洞攻击防范方法,比如从程序的内部行为特征和外部行为特征进行行为建模规范。然而,这些漏洞攻击防范方法都有其局限性,它们的攻击防范能力取决于对漏洞攻击或环境影响的认知程度,缺乏基于程序分析的软件安全知识;而且,这些防范方法都没有过多的考虑攻击的后续处理,缺乏对攻击后续处理机制扩展性的支持。
本文提出一种基于访问控制的指针动态着色跟踪监控的攻击检测方法。通过对指针的完整性保护和限定指针的合法可访问内存区域,我们可以有效的检测多种类型的恶意攻击,并可以为攻击的后续处理,比如特征签名和自动补丁的生成,提供有用的信息和帮助。
首先,我们通过实验和分析,得到结论,指针是安全敏感(security-sensitive)的数据。底层漏洞攻击(比如,缓冲区溢出攻击,堆腐烂攻击,格式化字符串攻击等)和部分的非控制流攻击,它们攻击的本质,都是通过指针的恶意篡改和指针的越界访问造成的。指针,是绝大多数攻击发起的“元凶”。
其次,我们通过动态着色(dynamic taint analysis)的技术,对程序内部的指针类型的数据进行着色,使得指针和其可以访问的合法内存区域用相同的“颜色”标签指示,通过“颜色”标签来限定指针的合法访问区域;同时,对外来输入数据进行着色,并对外来数据在程序中的传播(propagation)进行跟踪。
最后,在每次指针访问内存操作前,首先检查指针本身的完整性(integrity),如果指针本身被外来数据污染,则表示这是一次攻击;否则,继续比较指针本身和该指针欲访问的内存的“颜色”标签,如果两者标签“颜色”不同,则表示这是一次越界访问错误;反之,这是一次合法的指针访问操作。
为了检测该方法对恶意攻击的实时检测能力,我们在虚拟机Valgrind和插件Flayer上实现了原型系统。我们使用了通用的测试平台Bugbench来进行测试。实验表明,我们的方法可以有效的检测出其中的漏洞程序攻击。