论文部分内容阅读
近些年模糊测试技术取到了长足发展,从整个流程角度研究人员对各个阶段相关技术进行了大量研究使其更加自动化智能化。同时结合以往的符号执行、软件测试等相关技术,互相利用各自设计优势进行混合测试取得了不错的效果。例如,与动态符号执行结合用来探索复杂逻辑约束分支,与语法生成相结合可以产生更加合乎规范的测试用例,有的与传统污点分析相结合实现数据流相关性判定。此外内存类型漏洞检测和硬件辅助特性等相关技术也极大改进了测试有效性和效率。定向模糊测试是指针对目标程序指定代码区域或者特定功能进行针对性测试,主要用于漏洞挖掘、漏洞复现、补丁分析等场景。在高危漏洞挖掘方面,定向模糊测试结合研究人员的经验判断比随机性模糊测试常常有更好的效果。这些场景需要研究人员构造出可到达目标区域的测试用例。以往的研究中有的通过执行路径与目标区域的距离引导生成更近的种子输入,或者使用选择性符号执行求解可达目标的分支路径。距离导向鲁棒性较差,路径距离计算的失败会导致距离导向算法的失效。部分研究使用选择性符号执行用于定向测试缓解了路径爆炸问题但带来了较高的假阳率。本文首先提出了基于关键点覆盖的模糊测试技术,利用程序控制流图提取关键点列表,通过运行时插桩获取关键点列表覆盖信息,根据整体边覆盖率和关键点覆盖率使用能量调度算法计算种子的测试优先级,根据指定突变策略不断生成距离目标更近的测试输入。实现了混合测试框架,使用关键点覆盖导向的模糊测试生成覆盖关键点的种子队列,送入混合符号执行引擎。利用子代生成策略和混合执行技术,根据整体和关键点覆盖率变化,进一步探索随机生成和突变无法绕过的复杂逻辑分支路径,探索程序新状态。实验结果表明:基于关键点覆盖的模糊测试技术能高效诱导生成到达目标区域的种子队列,同时在探索路径深度和有效性上均高于基于边覆盖率和路径距离的定向模糊测试技术。结合混合符号执行的定向测试可以利用关键点覆盖测试生成的种子队列进行分支路径探索,同时比执行生成测试技术在测试集覆盖率效果要好。