如何识别高质量的模糊测试研究

本文探讨了模糊测试研究中的基准测试问题,提供了评估模糊测试工具性能的实用指南,包括工具比较、启发式算法差异、数据集选择和统计严谨性等关键要素。

如何识别高质量的模糊测试研究

在近三年发表的近200篇关于软件模糊测试的论文中,大多数——甚至包括一些来自高影响力会议的论文——都是学术上的喧嚣。模糊测试研究因不一致和主观的基准测试而受到影响,这使得这一强大领域处于停滞发展的状态。我们想解释为什么会发生这种情况,并为如何阅读模糊测试出版物提供一些指导。

研究人员在追求构建下一代模糊测试工具的过程中进行着一场高风险的博弈。一项重大突破可能会使曾经最先进的技术变得过时。没有人愿意使用世界上第二好的模糊测试工具。因此,研究人员必须以某种方式证明他们的工作在发现漏洞方面如何超越了现有技术。

问题在于试图客观测试模糊测试工具的有效性。目前还没有一套普遍接受的、统计严谨、可靠且可复现的基准测试。不一致的模糊测试测量在整个文献中持续存在,阻碍了有意义的元分析。这正是Andrew Ruef在多伦多举行的2018年SIGSAC计算机与通信安全会议上发表的论文《评估模糊测试》背后的动机。

《评估模糊测试》提供了一套全面的最佳实践,用于构建一个可靠的参考框架来比较模糊测试工具。无论您是在提交您的模糊测试研究以供发表、同行评审他人的提交,还是试图决定在实践中使用哪种工具,Ruef及其同事的建议都为评估模糊测试工具提供了一个客观的视角。如果您没有时间阅读整篇论文,我们总结了我们在评估模糊测试研究中的性能声明时建议您使用的标准。

模糊测试工具基准测试快速清单

  • 与流行的基线工具进行比较:将新研究与流行的基线工具进行比较,如american fuzzy lop (AFL)、Basic Fuzzing Framework (BFF)、libfuzzer、Radamsa和Zzuf。在没有共同基准的情况下,回顾这些广受认可的工具的研究将帮助您确定其他模糊测试研究的质量。作者指出:“确实需要一个坚实、独立定义的基准测试套件,例如,用于模糊测试的DaCapo或SPEC10。”我们同意。

  • 输出应易于阅读和比较:最终,这是关于找到能提供最佳结果的模糊测试工具。“最佳”是主观的(至少在共同基准出现之前),但如果评估者能够轻松解释模糊测试工具的结果,他们的工作将更容易。正如Ruef及其同事所说:“清楚地了解真实情况可以避免过度计算对应于同一漏洞的输入,并允许评估工具的假阳性和假阴性。”

  • 考虑启发式算法的差异:启发式算法影响模糊测试工具如何开始和通过代码路径进行搜索。如果两个模糊测试工具的启发式算法引导它们到不同的目标,那么这些工具将产生不同的结果。评估者必须考虑这种影响,以便比较一个模糊测试工具的结果与另一个的结果。

  • 使用具有可区分漏洞的代表性数据集:如Cyber Grand Challenge二进制文件、LAVA-M、Google的模糊测试测试套件以及原生程序如nm、objdump、cxxfilt、gif2png和FFmpeg。再次由于缺乏共同的基准测试套件,模糊测试工具评估者应寻找使用了上述数据集之一的研究(或者更好的是,一个原生和一个合成数据集)。这样做可以鼓励研究人员“为测试而模糊测试”,这对任何人都没有好处。尽管如此,这些数据集提供了一些比较的基础。相关:随着我们在模糊测试工具上投入更多努力,我们也应该投资更新用于评估的数据集。

  • 模糊测试工具配置为在相似和可比较的初始状态下开始:如果两个模糊测试工具的配置参数反映不同的优先级,那么这些工具将产生不同的结果。期望所有研究人员使用相同的配置参数是不现实的,但期望这些参数在他们的研究中明确指定是相当合理的。

  • 超时值至少为24小时:在作者审查的32篇论文中,有11篇将超时上限设置为“少于5或6小时”。他们自己对AFL和AFLFast的测试结果因超时长度而异:“当在nm上使用非空种子集时,AFL在6小时内表现优于AFLFast,具有统计显著性,但在24小时后趋势逆转。”如果所有模糊测试研究人员为他们的模糊测试运行分配相同的时间段——24小时——那么评估者将少一个变量需要考虑。

  • 在整个实验中一致定义不同的崩溃:由于专业领域关于如何分类唯一崩溃和漏洞(通过输入或触发的漏洞)存在一些分歧,评估者需要寻求研究人员的定义以便进行比较。也就是说,要警惕作者的结论:“我们进行的实验表明,启发式算法[用于去重或分类崩溃]可能会显著高估漏洞数量,并且可能通过错误地分组崩溃输入来抑制漏洞。”

  • 一致的输入种子文件:作者发现模糊测试工具的“性能可能因使用的种子而有很大差异。特别是,两个不同的非空输入不一定产生相似的性能,而空种子的效果可能比预期的更好。”有些令人惊讶的是,评估的32篇论文中有许多没有仔细考虑种子选择对算法改进的影响。

  • 每个配置至少运行30次并测量方差:通过这么多次运行,可以忽略异常值。不要比较单次运行的结果(作者报告说“近三分之二的审查论文似乎这样做了!”)。相反,寻找不仅进行了多次运行,而且使用统计测试来解释这些测试性能差异的研究。

  • 优先考虑发现的漏洞而非代码覆盖率指标:我们在Trail of Bits认为,我们的工作应该具有实际影响。尽管代码覆盖率是选择模糊测试工具的重要标准,但这关乎发现和修复漏洞。模糊测试研究的评估者应首先根据已知漏洞来衡量性能。

尽管这些建议可能看起来显而易见或简单,但作者审查了32篇关于模糊测试的高质量出版物,并没有找到一篇符合所有10条标准的论文。然后,他们通过使用AFLFast和AFL作为案例研究,展示了严谨和客观的实验结果如何具有决定性。他们确定:“最终,虽然AFLFast比AFL发现了更多‘唯一’崩溃输入,但在给定运行中发现更多唯一漏洞的可能性仅略高。”

作者的结果和结论明确表明,为了推进软件模糊测试的科学,研究人员必须努力实现严格的统计测量和更好的经验测量。我们相信,这篇论文将为计算机科学家提供一套优秀的标准,用于设计、评估和报告未来的软件模糊测试实验,从而开启模糊测试研究的新篇章。

同时,如果您正在为工作评估模糊测试工具,请谨慎行事并使用此清单。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计