论文部分内容阅读
软件漏洞作为一种战略资源被人们所积极关注,并且每年新增的漏洞数量一直居高不下。漏洞一旦被攻击者利用,往往会造成严重的后果。因此,一个关键性的问题是哪些漏洞是可被利用的。自动利用生成技术是发现并验证漏洞的重要而有效的手段,并且为开发者决定先修复哪些缺陷提供了具体、可行的信息。自动利用生成面临的难题是如何自动寻找缺陷和自动产生利用,这其中包含路径爆炸、路径选择、NP-hard求解问题、可利用性判定方式等问题。 本论文以二进制程序为分析对象,提出了基于符号执行的自动利用生成方法。本论文的前提是一个含有漏洞的程序和造成该程序崩溃的字符串输入。首先,我们搜集二进制程序执行过程的运行时信息,获取程序的崩溃状态;其次,根据收集到的路径约束、符号内存信息和崩溃动作等信息,判断此崩溃的可利用性;最后,当可利用性为真时,尝试产生一个控制流劫持的利用输入。 根据上述提出的方法,本论文设计并实现了一个基于符号执行的自动利用生成系统原型:HAVOC。HAVOC为发现的每一个漏洞产生一个控制流劫持的利用,因此保证了它所发现的漏洞都是安全相关并且可利用的。HAVOC针对输入造成程序崩溃的情况进行分析,面临的挑战主要有两点:1)如何重现崩溃路径,获取崩溃状态;2)如何自动生成控制流劫持利用。对于第一点,本论文提出路径导向算法,将崩溃输入作为符号值,重现崩溃路径。对于第二点,我们总结多种控制流劫持的利用原理,建立对应的利用产生模型。此外,对于非法符号读、写操作,HAVOC还可以让程序从崩溃点继续执行,探索程序深层次代码,检测崩溃路径逻辑深处是否还有利用点。为了验证本方法的有效性,本文对HAVOC进行了一系列的测试:通过样本代码测试,保证HAVOC的通用性和正确性;通测试被保护的程序,确定HAVOC能够绕过系统保护机制(ASLR、W⊕R);通过对实际漏洞程序的测试,保证HAVOC对具有实用性。测试结果表明,本文所提出的研究方法和原型系统已达到预期目标。