论文部分内容阅读
近年来,计算机安全问题一直受到人们的密切关注,这些问题的根源在于应用软件存在脆弱性,软件的脆弱性是指软件有潜在的异常或漏洞。目前,软件的脆弱性测试方法主要有手工分析,静态自动测试和动态自动测试。手工分析依赖大量人工操作,静态自动测试需要获得软件源代码,而且推理能力有限,所以这两种方法不适合现在越来越复杂和功能多样的软件。动态自动测试目前的主流方法主要是模糊测试,但是模糊测试本身存在着一些缺陷使得其难以发现某些漏洞。符号执行是一种动态测试方法,其动态的监视程序的执行流程,获得路径约束条件信息,并根据精确求解得到程序的下一步输入,通过有目的性的构造测试用例,符号执行既可以达到很高的测试代码覆盖率,又可以有针对性的去触发某些异常或漏洞。更重要的一点是,符号执行不需要获得程序的源代码和内部结构,使其适用于非开源和复杂的商用软件。本文综述了目前软件脆弱性测试和符号执行的现状,介绍了符号执行的基本概念和相关工具,描述了符号执行的主要过程,研究了目前符号执行所遇到的一些问题和解决方法,展望了符号执行以后在软件脆弱性测试领域的一些新的发展方向。实现了基于符号执行的软件脆弱性测试系统,相对于传统符号执行,提出了一些新的改进方法,最后通过测试证实了该系统的进步之处。研究的主要内容包括:动态捕捉程序输入并对其进行符号化;建立内存符号表用以维护输入数据与符号变量的映射关系;对符号在程序运行时的传播进行跟踪记录;路径约束条件的有效收集,包括求解所需要的重要信息;提出了简洁高效的中间语言;求解器的研究与选择;提出循环识别算法简化程序流程图;路径搜索算法的研究,新的路径搜索算法的提出;结合新路径搜索算法的智能的选择测试用例方法。通过对符号执行目前所存在的一些问题的研究,论文提出了相应的一些方案对其改进和缓解,尤其是对路径爆炸问题的缓解,使得符号执行的实际应用变得更加可行,也对符号执行在软件脆弱性测试方向的发展有一定的推动作用和积极意义。