论文部分内容阅读
为了应对日益增加的恶意软件和网络攻击,软件的安全性得到了越来越多的重视。本文主要针对软件安全领域中的两个研究方向:软件测试用例自动化生成和软件漏洞自动化发掘进行研究。涉及到的关键技术包括动态符号执行和动态污点分析,这两者都属于动态程序分析技术范畴。本文的研究内容分为5个部分。第一,对动态符号执行的背景、研究现状、主要技术难题和解决方案进行了系统的研究,对现有12款动态符号执行软件进行了对比分析。研究表明,动态符号执行是近10年的研究热点,已取得了显著的进展,但仍然存在多个技术难题阻碍了该技术在实际中的广泛应用,例如:路径爆炸、浮点数运算、非线性运算、符号指针等。本研究内容为后续研究提供了理论依据和重要参考。第二,对软件测试用例自动化生成方法进行研究,核心技术为动态符号执行。实现了针对Windows可执行文件的动态符号执行软件SMAFE。SMAFE不需要被分析软件的源码,且具有4个创新点。首先,SMAFE直接符号执行x86指令,而不依赖于任何中间表达形式,提高了分析效率;然后,提出了约束语言,提高了软件本身的可移植性;随后,提出了启发式方法,解决了重叠符号问题,提高了符号执行的准确性;最后,设计了轻量级的约束生成方法,减少了软件运行开销。实验显示,SMAFE能够在合理的时空开销内达到理想的代码覆盖率。第三,在上一个研究内容的基础上,对软件漏洞自动化发掘方法进行了研究,实现了针对Windows可执行文件的漏洞自动化发掘软件SEVE。SEVE基于SMAFE进行开发,因此其核心技术也是动态符号执行。针对漏洞发掘,SEVE提出了4个创新点。其一,SEVE提出了主动式漏洞发掘,向路径条件中主动注入漏洞约束,从而能够发掘出更多的软件漏洞;其二,SEVE是一个漏洞发掘平台,可以通过开发插件的方式,增强其漏洞发掘能力;其三,SEVE实现了函数模型,提高了符号执行的准确性,同时不会增加运行时开销;其四,SEVE提出了优化的路径搜索算法,提高了漏洞发掘的效率。第四,继续对软件漏洞自动化发掘方向进行研究,所用到的核心技术是动态污点分析。从本质上讲,动态污点分析是一种单路径分析技术,所以能分析的软件规模比动态符号执行的更大。设计并实现了一款漏洞自动化发掘软件TVM,具有4个创新点。其一,设计了高效的污点存储数据结构,提高了污点分析的效率;其二,设计了快速的污点传播跟踪方法,这是一种完全且统一的方法,提高了污点分析的效率且降低了TVM的开发难度;其三,TVM能够跟踪由污点指针导致的污点传播,从而提高了污点分析的准确性,降低了漏报率;其四,提出了高级别的漏洞检测规则,因此TVM能够发掘内存函数漏洞。本文最后一个研究内容关于动态符号执行的发展,提出了动态符号执行的5点研究方向。首先,需要对动态符号执行的路径爆炸问题进行深入研究,因为目前路径爆炸是阻碍动态符号执行广泛应用的最主要难题。然后,求解器的研究也是未来的一个研究热点,由于动态符号执行依赖于求解器,所以求解器的能力提升对动态符号执行至关重要。此外,动态符号执行软件的专用化在未来也应该得到考虑。由于被分析软件千差万别,用户需求也差异很大,因此专用化是一个可行的办法。其四,高效的、易管理的摘要数据库系统需要引入到未来的动态符号执行软件中。摘要是解决路径爆炸的重要方法,且摘要具有良好的可重用性,引入摘要数据库可以极大的提高动态符号执行的效率。最后,动态符号执行的并行化也是一个重要的研究内容,利用已有的并行化基础设施,例如:多核CPU、多核GPU、簇、网格、云计算,对路径探索、约束求解等过程进行并行化,能够极大的提高动态符号执行的效率。