基于汤普森采样的模糊测试用例变异方法
2021-01-13马锐贺金媛王雪霏王夏菁李斌斌胡昌振
马锐, 贺金媛, 王雪霏, 王夏菁, 李斌斌, 胡昌振
(北京理工大学 计算机学院,软件安全工程技术北京市重点实验室,北京 100081)
近年来“0 day”漏洞收录数目连续攀升,给我国网络安全带来严峻挑战. 模糊测试(fuzzing)是目前最流行的漏洞检测方法之一,其基本思想是:利用一些特殊、有趣的或者随机的测试用例执行待测程序,同时保持对待测程序的异常监视,根据执行信息来分析和识别漏洞[1-2]. AFL[3]作为目前最先进的模糊测试工具之一,其性能消耗低、测试效率高且简单友好. 当目标程序提供源代码时,AFL对目标程序的源码重新编译,并且利用编译时插桩探测目标程序的执行路径;而在没有源码且只有可执行程序的情况下,需要用户使用QEMU模式,利用仿真模拟器来完成模糊测试. 但QEMU模式下AFL的性能成本通常是AFL基线模式的2~5倍. 国防科技大学的Zhang等[4]提出了利用英特尔程序跟踪[5](Intel processor trace,Intel PT)机制改善这一问题,并且在AFL的基础上实现了相应的开源工具PTFuzzer. 因此本文借鉴PTFuzzer使用PT的处理思路,对模糊器AFL进行同样地处理,并优化其中的变异策略,以实现对二进制程序进行高效模糊测试.
另外,在AFL的测试过程中,需要对测试用例进行变异以获得新测试用例,而变异策略的设置关系着测试用例是否能够执行程序更深层的位置、达到更高的代码覆盖率. AFL的变异策略分为2个阶段:确定性变异(deterministic fuzzing)和非确定性变异(non-deterministic fuzzing). 其中在非确定性变异的havoc阶段中,AFL对原测试用例文件进行大量的变异操作,具体来说,AFL对测试用例叠加随机次数的变异操作;……
