论文部分内容阅读
符号执行是一种重要的形式化方法和软件分析技术,它把程序的输入表示为符号值,并把程序中变量的值以及输出表示为符号值和常量组成的计算表达式,通过对这些表达式进行求解来得到让特定代码区域执行的具体输入。符号执行主要分为静态符号执行和动态符号执行,在测试用例的自动生成、代码安全性的检测等软件安全领域中的多个方面都有着广泛的应用。软件安全确保软件在受到恶意攻击的情形下依然能够继续地正确运行及软件在授权范围内合法使用。软件安全领域主要包括逆向工程、漏洞挖掘、授权加密以及非法篡改等方面。代码混淆是逆向工程中对抗分析者的主要技术之一,通常恶意软件都会使用代码混淆的方法来延长自身的生存周期,而其中控制流平展化和不透明谓词混淆是两种常见的代码混淆手段。本文对这两种混淆方法进行了研究,同时提出针对这两种代码混淆的反混淆算法。另外随着人们生活中越来越多的软件出现,如果恶意的攻击者发现软件中存在的漏洞并且利用漏洞来偷窥用户的隐私、盗窃个人的财产等,这将会对整个社会造成严重的负面影响,因此快速地发现漏洞至关重要。本文针对这个问题对自动化漏洞挖掘进行了研究,提出结合模糊测试和符号执行的自动化漏洞挖掘系统。本文首先提出基于动态符号执行的控制流平展化反混淆算法,相比基于抽象语法树的静态反混淆算法,该算法不需要源代码就可以直接对二进制程序进行反混淆,同时还原出的代码基本与混淆前的一致。并对Coreutils 8.28软件集中LS程序的各个函数进行实验,实验分析结果表明该算法的平均反混淆率为93%。然后提出基于动态符号执行的路径不可达性分析方法,并利用此方法提出了对不透明谓词混淆进行反混淆的算法。相比数据流分析的静态分析方法,该算法在针对复杂的运算表达式方面有着更好的适应性,并且以Coreutils 8.28软件集作为测试集对所提算法进行了实验,实验分析结果表明该算法的平均反混淆率达到81%。最后提出结合模糊测试和符号执行的自动化漏洞挖掘系统,该系统充分地利用了模糊测试和符号执行的优势,结合这两者的优势可以快速地生成具有较高路径覆盖率的测试用例,其中模糊测试可以快速生成测试用例并执行,符号执行可以生成符合复杂检查的测试用例。同时使用本系统对CGC测试集进行漏洞挖掘实验,实验分析结果表明该系统发现的漏洞数量相比单一地使用模糊测试发现的漏洞数量提高了17%。