论文部分内容阅读
随着计算机应用的不断发展,软件作为信息系统的实现载体,已广泛应用在现代社会的各个领域,软件中的任何安全漏洞都可能导致非常严重的后果。软件测试是保证软件正确性、完整性、安全性和质量的主要程序分析方法。而当前的软件测试方法,如模糊测试,因受制于代码覆盖率低,导致极大的限制了软件测试领域的发展。符号执行是一种应用广泛的程序分析技术,其将程序符号化执行来扩展程序的路径从而提高了程序代码覆盖率。本文主要针对符号执行技术进行研究和针对使用符号执行进行程序漏洞检测的实现与改进:(1)从符号执行基本概念出发,研究和总结了符号执行的三种基本分类;分别对符号执行的三种基本类别的定义、优缺点和应用场景进行了阐述,并列举了三种符号执行类别中最具代表性的工具。(2)总结了符号执行面临的三大难点:路径爆炸问题、符号执行精确性问题和复杂符号约束问题,研究并详细地总结了缓解这三个难点的解决方案及相关工作;总结了符号执行在自动测试用例生成、恶意软件分析、自动输入过滤器生成和软件漏洞检测这四个领域中的应用。(3)针对目前符号执行在程序漏洞检测领域的不足,提出了针对离线符号执行的三种改进:选择符号执行、改进的路径搜索算法和结合模糊测试的混合执行。其中选择符号执行策略选择通过不对库函数代码进行符号路径搜集从而缓解符号执行路径爆炸问题;改进的路径搜索算法通过引入新的测试用例打分机制来筛除由于符号执行的不精确性导致的重复执行相同路径的测试用例;结合模糊测试的混合执行通过引入三种优化措施来结合离线符号执行和模糊测试的优点。(4)实现了上述三种改进的离线符号执行工具Crashmaker。Crashmaker为基于Linux平台面向二进制代码的程序漏洞检测工具,该工具通过使用混合执行技术和约束求解器来对被检测二进制程序自动生成导致程序错误的测试用例从而检测出程序段错误和除数零错误。(5)使用Crashmaker对10个实际的程序进行了实验分析。共发现了10个段错误、3个无限循环错误和3个除数零错误;将部分结果与另一个类似的离线符号执行工具Avalanche进行了比较,并将集成不同改进方法的Crashmaker的不同版本进行了比较,实验数据表明,本文提出的针对离线符号执行的三种改进能够帮助离线符号执行工具更快地找到更多的程序漏洞。