Digger:采用新路径记录方法的fuzzing工具
2021-03-19梁洪亮陈奕修裴霄潇谢卓思
北京理工大学学报 2021年2期
关键词:程序
梁洪亮, 陈奕修, 裴霄潇, 谢卓思
(北京邮电大学 计算机学院,北京 100876)
本文关注软件测试的两个重要技术:fuzzing和混合执行. fuzzing背后的关键思想是生成大量测试用例并将其提供给目标程序,以便发现潜在的缺陷. fuzzing的原则之一是最大化计算资源的使用. 研究人员可能希望他们的fuzzer(即fuzzing工具)每秒评估上百万个测试用例[1]. 然而,由于其固有的盲目性(即在测试用例生成过程期间缺乏足够的引导),fuzzer通常不能到达目标程序较深的代码分支. 相比之下,混合执行使用白盒方法来生成测试用例,这可以引导目标程序执行某些路径. 从理论上讲,它可以覆盖大多数程序路径. 然而,路径爆炸、约束求解等实际挑战使其成为一种耗时且相对复杂的技术[2].
因此,fuzzing和混合执行之间互补的优势使得它们的组合成为有价值的研究方向. 例如,Stephens等[3]实现了一个名为Driller的二进制分析工具. Driller的设计基于以下观察:程序的输入可以分为两类:“一般输入”,具有广泛的有效值,“特定输入”,只能从几个可能的值中选择. “特定输入”将程序分成几个区域,这些区域中不同的程序路径映射到不同的“一般输入”,并且这些“一般输入”可以通过fuzzing来产生. 此外,由于混合执行有出色的约束求解能力,因此它适合于生成“特定输入”. 实验显示,这种以混合执行为辅、fuzzing为主的方法找的程序缺陷数量要超过单独使用fuzzing和混合执行找到的程序缺陷数量的总和.
但是,由于无法区分同一函数的不同调用,Driller可能会……
登录APP查看全文
