论文部分内容阅读
随着互联网和计算机应用的的迅猛发展,软件的安全问题已经成为计算机系统安全的一个至关重要的问题。如今的软件越来越复杂,不可避免包含着程序漏洞。程序漏洞攻击威胁日益严重。其中基于内存腐败漏洞的攻击最为普遍,如缓冲区溢出和格式化串漏洞。漏洞攻击带来了巨大的经济损失,迫切需要我们对各种漏洞攻击进行剖析,分析其表现、分类和本质,以期有针对性地防范。
要堵住程序漏洞,最根本和有效的做法还是应当从软件的载体--“程序”出发,检测出程序中的漏洞,定位出漏洞的位置,然后修复该漏洞。自动的错误定位使得程序开发者可以迅速地定位程序漏洞,修补程序漏洞。
本文提出一种针对内存腐败漏洞攻击的自动错误定位方法。基于内存更新操作记录,我们可以回溯找到程序源代码中腐败关键数据的语句。从而提供有益的信息修复漏洞并生成最终补丁。
我们的方法的基本思想是在程序运行时动态记录其内存更新操作,为后续的错误回溯诊断定位提供依据。
首先,我们利用C语言程序转换工具CIL在程序可能的漏洞攻击点插入一小段记录代码,使得程序在运行时能动态记录内存操作。
然后,我们利用地址随机化技术来检测针对内存腐败漏洞的攻击。漏洞攻击在地址随机化的程序上会导致程序崩溃,因此,我们截获该崩溃信号自动调用我们的错误诊断机制。
最后,通过分析程序出错时的内存镜像及记录的内存更新操作,回溯定位到导致程序错误的漏洞语句。
为检测该方法针对内存腐败漏洞攻击错误定位的效果,我们在Linux上实现了原型系统。我们使用由Wilander开发的缓冲区溢出测试平台测试方法的有效性,同时对几个真实的带有漏洞的GNU工具软件进行漏洞攻击的错误定位,实验证明我们的方法有效的定位到了程序漏洞的源程序行。