如何识别优秀的模糊测试研究:关键指标与实用指南

本文探讨模糊测试研究中的评估挑战,提供10项关键基准测试准则,包括工具对比、启发式差异处理、数据集选择和统计严谨性,帮助研究者客观评估模糊测试工具的有效性和可靠性。

如何识别优秀的模糊测试研究

特伦特·布鲁森
2018年10月5日
模糊测试, 指南, 论文评审

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

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

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

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

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

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

  2. 输出应易于阅读和比较:最终,这是关于找到能提供最佳结果的模糊测试工具。“最佳”是主观的(至少在那个共同基准出现之前),但如果评估者能够轻松解释模糊测试工具的结果,他们的工作将会更容易。正如鲁夫及其同事所说:“清楚地了解基本事实可以避免对对应同一漏洞的输入进行过度计数,并允许评估工具的错误正例和错误负例。”

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

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

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

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

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

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

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

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

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

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

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

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

页面内容
模糊测试工具基准测试快速清单
近期文章
我们构建了MCP一直需要的安全层
利用废弃硬件中的零日漏洞
Inside EthCC[8]:成为智能合约审计员
使用Vendetect大规模检测代码复制
构建安全消息传递很难:对Bitchat安全辩论的细致看法
© 2025 Trail of Bits.
使用Hugo和Mainroad主题生成。

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