UNIFUZZ: A Holistic and Pragmatic Metrics-Driven Platform for Evaluating Fuzzers

虽然有很多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分析工具。

Motivation

本文主要解决三个问题

  1. fuzzer在实践中效果如何

  2. 如何实用公平合理的性能指标比较fuzzer的性能

  3. 哪个fuzzer更有前景,应该被提升

已有的研究无法回答这些问题

  1. 已有的研究没有进行适当的实验提供有效的结果

  2. 由于缺乏统一的基准,已有的fuzzer测试存在偏差

  3. 已有的指标可能不适用于评估fuzzer

  4. 已有的fuzzer大多不会评估计算资源的消耗

挑战

  1. 虽然大部分fuzzer开源,但是不一定可用

  2. 评估fuzzer应该基于一个实用的基准

  3. 指标应该足够有说服力

贡献和结果

  1. 一个开源实用指标驱动的fuzzer评估平台。合作了35个流行的fuzzer,20个实际程序构成的基准和6个类目的指标。对于35个fuzzer,提供了Dockerfile。找到并修复了超过15个缺陷。还提供了20个基准程序的相关信息,可以保证它们的可用性。还方便了crash研究,和CVE匹配,分析漏洞严重性。六个类目的指标分别为

    1. 独特bug的数量

    2. bug的质量

    3. 找到bug的速度

    4. 找到bug的稳定性

    5. 覆盖率

    6. 计算资源消耗

  2. fuzzer的广泛评估。结果展示没有fuzzer超出了彼此,单一的指标是不公平的。

  3. 对fuzzing的新发现,可用于未来研究。找到了被忽视的fuzz影响因素:插桩方法和crash监测方法。即使是某个因素很小的改动也会影响结果。因此fuzz应该在一个更严格准确的环境下进行。