Skip to main content
QUICK REVIEW

[论文解读] Improving Function Coverage with Munch: A Hybrid Fuzzing and Directed Symbolic Execution Approach

Saahil Ognawala, Thomas Hutzelmann|arXiv (Cornell University)|Nov 26, 2017
Software Testing and Debugging Techniques参考文献 25被引用 6
一句话总结

Munch 是一种混合模糊测试-符号执行框架,通过结合模糊测试与定向符号执行,提升了 C 程序的函数覆盖率。它通过两种模式实现更高覆盖率——先模糊测试以识别未覆盖的函数,再对这些函数进行定向符号执行;反之亦然,从而减少 SMT 求解器查询次数和执行时间,同时优于纯模糊测试或符号执行。

ABSTRACT

Fuzzing and symbolic execution are popular techniques for finding vulnerabilities and generating test-cases for programs. Fuzzing, a blackbox method that mutates seed input values, is generally incapable of generating diverse inputs that exercise all paths in the program. Due to the path-explosion problem and dependence on SMT solvers, symbolic execution may also not achieve high path coverage. A hybrid technique involving fuzzing and symbolic execution may achieve better function coverage than fuzzing or symbolic execution alone. In this paper, we present Munch, an open source framework implementing two hybrid techniques based on fuzzing and symbolic execution. We empirically show using nine large open-source programs that overall, Munch achieves higher (in-depth) function coverage than symbolic execution or fuzzing alone. Using metrics based on total analyses time and number of queries issued to the SMT solver, we also show that Munch is more efficient at achieving better function coverage.

研究动机与目标

  • 解决深层程序组件中函数覆盖率低的问题,特别是那些通过标准模糊测试或符号执行难以触及的组件。
  • 通过有针对性的探索减少 SMT 求解器查询次数,降低符号执行的计算成本。
  • 提升高度模块化或组合式软件中的测试覆盖率,这些软件的组件在不同系统中被重复使用。
  • 提供一个开源、可投入生产的框架,其在覆盖率和效率方面优于现有混合方法。
  • 通过实证验证混合模糊测试-符号执行在真实世界开源程序中的有效性和效率。

提出的方法

  • 在 KLEE 中增强基于最短路径的定向搜索策略,以优先探索未覆盖的函数。
  • 使用 AFL 进行初始模糊测试,配合手动提供的种子输入,以识别易于到达的函数。
  • 通过计算模糊测试与符号执行结果之间的差异集,识别出未覆盖的函数,用于定向符号执行探索。
  • 通过符号执行生成功能多样的测试用例,以增强模糊测试输入的多样性与覆盖率。
  • 实现两种运行模式:(1) 先模糊测试,再进行定向符号执行;(2) 通过符号执行生成种子供模糊测试使用。
  • 对程序进行插桩,以追踪函数级覆盖率,并引导符号执行聚焦于未覆盖的目标。

实验结果

研究问题

  • RQ1结合模糊测试与符号执行的混合方法是否能实现比单独使用任一技术更高的函数覆盖率?
  • RQ2由未覆盖函数集合引导的定向符号执行是否能减少 SMT 求解器查询次数和执行时间?
  • RQ3该混合方法在真实世界复杂 C 程序中实现深层函数覆盖率的效果如何?
  • RQ4该框架是否能高效地在标准 Linux 系统上开箱即用?
  • RQ5与现有混合工具(如 Driller)相比,Munch 在覆盖率和效率方面的表现如何?

主要发现

  • 在九个真实世界开源程序中,Munch 的函数覆盖率均高于单独使用模糊测试或符号执行。
  • 在所有评估的程序中,Munch 在调用图的深层位置实现了更高的覆盖率,尤其对距离入口点较远的函数效果显著。
  • 与单独使用符号执行相比,该混合方法将总分析时间和 SMT 求解器查询次数减少了超过一半。
  • 通过聚焦于未覆盖函数进行符号执行,该框架显著提升了效率,避免了对已覆盖路径的冗余探索。
  • 在单位时间内的覆盖率和单位 SMT 求解器查询的覆盖率方面,Munch 均优于独立的模糊测试和符号执行。
  • Munch 的开源实现已具备生产可用性,可在标准 Linux 系统上直接部署,而某些早期工具(如 Driller)则不具备此特性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。