本文是一项关于多驱动模糊测试(multi-driver fuzzing)的实证研究。许多软件通过命令行选项、子命令和配置标志暴露多种执行模式。对于这类程序,模糊测试同时依赖于变异的输入和所调用的模式,但现有评估主要关注覆盖率和 bug 数量,尚未清楚执行模式如何划分、重叠和遗漏软件结构,以及这些差异如何影响模糊测试的有效性。为此,作者提出了一种结构抽象方法:以静态调用图作为共享骨干,将驱动特定的动态覆盖率投影到骨干上,从而派生出驱动诱导子图。基于该抽象,他们开发了四阶段方法论:骨干构建、模糊测试与剖析、基于图的分析、以及由研究问题驱动的评估。作者将该方法应用于从 OSS-Fuzz 派生的 27 个 C/C++ 项目,涵盖 43 个可执行文件和 854 个驱动配置。实验结果表明,在相同的总预算下,多驱动模糊测试优于最佳单驱动基线:覆盖的调用图节点增加了 27.9%,CFG 边覆盖增加了 73.5%,并发现了 11 个主要由单驱动模糊测试遗漏的独特 bug 和异常行为。然而,驱动贡献并不均匀:子图在凝聚力、碎片化、模块性、重叠等方面差异显著,残余的未探索区域遵循重复出现的模式而非均匀尾部。这些结果说明,多驱动模糊测试从根本上是一个结构探索问题。该研究为理解多驱动模糊测试的结构特性提供了深入见解,并为优化驱动配置和模糊测试策略提供了指导。
💡 推荐理由: 该研究揭示了多驱动模糊测试在软件结构覆盖上的显著优势,能够帮助安全团队更有效地配置多模式软件的模糊测试,提高漏洞发现效率。其结构化分析方法可迁移到其他模糊测试评估和优化场景。
🎯 建议动作: 研究跟进