论文部分内容阅读
符号执行技术是一种动态程序分析技术,具有代码覆盖率高和不会产生误报的优点。将符号执行技术应用于漏洞检测领域时,其追求代码覆盖率的路径探索过程反而会降低漏洞检测的效率,并且在时间与计算资源有限的情况下增加漏报。为此,本文针对符号执行技术进行研究,并使用静态程序分析辅助符号执行的路径探索以提高使用符号执行进行漏洞检测时的效率与精度。本文的主要研究工作如下:(1)在漏洞检测方面,介绍了漏洞的定义以及漏洞检测技术的分类,比较了源代码漏洞分析与二进制漏洞分析的优缺点以及静态漏洞分析和动态漏洞分析的优缺点。(2)在符号执行方面,根据对分支指令的不同处理方式,将符号执行分为了fork-based符号执行与execution-based符号执行两种模式,总结了两者的代表性工作并比较了它们在实际场景下的优缺点。针对符号执行面临的两大难点,即路径爆炸问题和符号地址/符号跳转问题,研究了它们的产生原因和影响并总结了常见的处理方法。最后,列举了符号执行在测试用例自动生成、恶意软件分析和漏洞检测三个领域的应用。(3)研究并总结了符号执行技术应用于漏洞检测时面临的三个问题:漏洞无关路径的无效探索、对种子输入的依赖和现有执行状态选择算法的缺点。针对上述三个问题,提出了静态分析辅助的符号执行漏洞检测方法。该方法通过静态程序分析减少了对漏洞无关路径的探索,使用了fork-based符号执行模式避免了对种子输入的依赖,并且提出了基于漏洞相关路径占总路径比例的执行状态选择算法以加快发现敏感操作的速度。(4)基于静态分析辅助的符号执行漏洞检测方法实现了漏洞检测工具SAF-SE,并对其进行了实验评估。实验结果表明,在符号执行过程能够正常完成的情况下,SAF-SE可以在保证检测能力的前提下有效降低时间开销与分析的指令数目;而对于大规模目标程序,在相同的时间内,SAF-SE能够检测到更多的敏感操作,有效提高有限时间内漏洞检测的精度。