论文部分内容阅读
软件漏洞是软件安全性问题的重要表现。随着系统和软件的复杂度提高和应用场景的扩展,软件漏洞呈现出数量多、影响广、危害大的趋势。针对软件漏洞的研究一直是工业界和学术界共同关注的热点,围绕软件漏洞的发现、分析和防御,安全人员不断提出新的方法、技术和理论,以提高软件的安全性。同时,攻击者也在不断发展漏洞的发现与利用技术。在漏洞的“攻防拉锯战”中,更及时、高效的发现和分析漏洞是把握主动权的关键。 现实软件漏洞工作中,大量的目标软件是闭源商用软件,在缺少源代码的背景下,逆向分析方法成为软件漏洞研究的重要基础。动态逆向分析以程序的二进制代码为分析对象,通过目标程序的动态运行,逆向恢复高级语义,并结合程序执行过程中的内存状态、程序行为等动态信息,更准确的分析软件的安全性。 论文围绕动态逆向分析方法应用于软件漏洞分析的场景展开研究,从关键函数逆向、软件模糊测试、动态漏洞挖掘和漏洞威胁性分析四个方面入手进行了深入分析。首先通过软件动态逆向分析,解决二进制代码分析时关键函数语义缺失的问题,然后分别利用模糊测试和动态分析方法对软件漏洞进行挖掘,最后提出了一种面向利用的漏洞威胁性分析方法。论文的主要贡献如下: (1)提出了一种基于动态特征的关键函数逆向方法。对软件的代码结构、函数等语义信息进行准确分析是进一步开展漏洞挖掘与分析工作的基础,但软件自身的复杂性和各种自定义函数库的应用,使得定位和分析关键函数成为软件逆向分析中的关键挑战之一。本文通过分析程序的二进制执行记录中的关键函数的表现形式,总结了这些函数的动态代码特征,提出了在程序的执行记录中寻找动态特征的关键函数离线识别方法。本文基于QEMU硬件模拟器实现了高效的二进制执行记录提取功能,设计并实现了关键函数的识别系统,并完成了对7款应用软件的逆向分析过程,提升了软件逆向分析能力。 (2)提出了一种基于硬件辅助的模糊测试方法。结合程序动态执行信息优化模糊测试的测试用例生成,是提升模糊测试能力和软件漏洞挖掘能力的重要思路,但如何高效的提取软件运行过程中信息并加以利用是有待解决的关键难题。本方法利用Intel CPU的硬件记录功能Process Tracer,提出了一套基于硬件辅助的模糊测试方法,实现了具有通用性的高效反馈方案,对原有的模糊测试工具进行增强。该方法应用于实际程序的漏洞挖掘,发现了Apple QuickTime软件的未知漏洞。 (3)提出了一种基于主动构造的堆溢出漏洞挖掘方法。堆溢出漏洞是目前威胁最大的软件漏洞类型之一,其内存动态变化的特点给软件漏洞分析造成了困难。本文给出了堆溢出漏洞的关系模型,指出堆溢出发生的根本原因在于堆分配和访问的不一致,而堆溢出漏洞的触发需要外部输入能够影响某一方面的堆操作。根据该模型,在样本的动态执行记录提取堆操作的空间属性和可控属性,分析堆操作之间的关系,从而发现潜在的堆溢出可能,并通过主动构造溢出条件的方法验证溢出漏洞的存在。该方案应用于实际程序的漏洞挖掘,发现了17款常用软件中的47个未知漏洞,并和现有的模糊测试方法进行了对比,体现了该漏洞挖掘方法更具针对性和主动性。 (4)提出了一种面向利用的漏洞威胁性分析方法。软件漏洞的可利用性直接体现了其危害程度,但对崩溃样本的可利用性分析仍然依赖人工完成,提高分析过程的自动化水平或实现漏洞的自动化利用可以有效提高漏洞的危害评估能力。本文面向漏洞利用总结了漏洞触发过程和利用过程的关键要素,提出了利用关键要素刻画攻击者能力和漏洞威胁性的方法,针对内存破坏漏洞提出了基于内存修复的软件路径触发、利用要素提取、利用路径构造等方法。该分析系统在对实际软件漏洞的分析中展示了分析的有效性,和现有工具!exploitable相比,该方法在分析的能力、分析的准确性等方面具有明显优势。