虽然有很多fuzzer提出,但是由于基准、性能指标、运行环境的不一致性,比较这些fuzzer是困难的。本文提出了UNIFUZZ,开源并且指标驱动的平台,可以以全面和定量的方式评估fuzzer。UNIFUZZ和35个有用的fuzzer合作,包含20个测试程序,有6个类目的性能指标。首先研究了已有fuzzer的可用性,找到并修复了一系列缺陷,并集成到UNIFUZZ内。基于这个研究,本文从6个实用视角评估了fuzzer。然后评估了知名fuzzer:AFL, AFLFast , Angora, Honggfuzz , MOPT , QSYM , T-Fuzz VUzzer64. 没有任何一个fuzzer在所有程序上超过了彼此,使用单一指标会导致片面结果,展示了合理指标的重要性。作者还发现并研究了之前忽视的因素,但是这些因素也影响fuzzer的性能,包括插桩方法和crash分析工具。
本文主要解决三个问题
fuzzer在实践中效果如何
如何实用公平合理的性能指标比较fuzzer的性能
哪个fuzzer更有前景,应该被提升
已有的研究无法回答这些问题
已有的研究没有进行适当的实验提供有效的结果
由于缺乏统一的基准,已有的fuzzer测试存在偏差
已有的指标可能不适用于评估fuzzer
已有的fuzzer大多不会评估计算资源的消耗
虽然大部分fuzzer开源,但是不一定可用
评估fuzzer应该基于一个实用的基准
指标应该足够有说服力
一个开源实用指标驱动的fuzzer评估平台。合作了35个流行的fuzzer,20个实际程序构成的基准和6个类目的指标。对于35个fuzzer,提供了Dockerfile。找到并修复了超过15个缺陷。还提供了20个基准程序的相关信息,可以保证它们的可用性。还方便了crash研究,和CVE匹配,分析漏洞严重性。六个类目的指标分别为
独特bug的数量
bug的质量
找到bug的速度
找到bug的稳定性
覆盖率
计算资源消耗
fuzzer的广泛评估。结果展示没有fuzzer超出了彼此,单一的指标是不公平的。
对fuzzing的新发现,可用于未来研究。找到了被忽视的fuzz影响因素:插桩方法和crash监测方法。即使是某个因素很小的改动也会影响结果。因此fuzz应该在一个更严格准确的环境下进行。