Skip to main content
QUICK REVIEW

[论文解读] Compositional Fuzzing Aided by Targeted Symbolic Execution

Saahil Ognawala, Fabian Kilger|arXiv (Cornell University)|Mar 7, 2019
Software Testing and Debugging Techniques参考文献 46被引用 6
一句话总结

Wildfire 是一种新颖的组合式模糊测试框架,结合了自动种子生成、针对孤立函数的覆盖率引导模糊测试,以及针对特定漏洞的符号执行,以识别并验证可利用的漏洞。通过实现深度代码覆盖和组合可行性分析,Wildfire 在仅用时 10% 的情况下,相比最先进工具实现了更高的漏洞检测率,同时通过精确的调用链验证减少了误报。

ABSTRACT

Guided fuzzing has, in recent years, been able to uncover many new vulnerabilities in real-world software due to its fast input mutation strategies guided by path-coverage. However, most fuzzers are unable to achieve high coverage in deeper parts of programs. Moreover, fuzzers heavily rely on the diversity of the seed inputs, often manually provided, to be able to produce meaningful results. In this paper, we present Wildfire, a novel open-source compositional fuzzing framework. Wildfire finds vulnerabilities by fuzzing isolated functions in a C-program and, then, using targeted symbolic execution it determines the feasibility of exploitation for these vulnerabilities. Based on our evaluation of 23 open-source programs (nearly 1 million LOC), we show that Wildfire, as a result of the increased coverage, finds more true-positives than baseline symbolic execution and fuzzing tools, as well as state-of-the-art coverage-guided tools, in only 10% of the analysis time taken by them. Additionally, Wildfire finds many other potential vulnerabilities whose feasibility can be determined compositionally to confirm if they are false-positives. Wildfire could also reproduce all of the known vulnerabilities and found several previously-unknown vulnerabilities in three open-source libraries.

研究动机与目标

  • 解决最先进模糊测试工具在大型 C 程序深层、难以触及函数中的有限代码覆盖问题。
  • 通过在孤立函数上应用组合分析,克服符号执行中的路径爆炸问题。
  • 通过调用上下文分析验证可利用性,减少漏洞检测中的误报。
  • 通过在多个核心上并行执行,提升可扩展性和效率。
  • 通过智能驱动生成,实现对未知程序的自动化、无种子模糊测试。

提出的方法

  • 自动为 C 程序中任意孤立函数生成种子输入,即使在不了解输入格式的情况下亦可。
  • 在孤立函数上应用覆盖率引导模糊测试,以最大化代码覆盖,包括深层调用图路径。
  • 通过用函数摘要替换函数,总结已发现的漏洞,实现组合分析。
  • 应用针对性符号执行,验证孤立函数中的漏洞是否可被父函数(调用者)触发。
  • 在 LLVM 位码中使用指令级距离度量,包括内联函数和返回地址,以提高符号执行的精度。
  • 自底向上递归分析调用图,验证从主函数开始的可利用性链路。

实验结果

研究问题

  • RQ1与传统模糊测试相比,组合式模糊测试是否能显著提升在深层、难以触及函数中的代码覆盖?
  • RQ2针对性符号执行是否能有效验证通过模糊测试在孤立函数中发现的漏洞的可利用性?
  • RQ3将模糊测试与组合符号执行结合,是否能在保持或提升漏洞检测率的同时减少误报?
  • RQ4该框架是否可通过并行化和自动种子生成实现更高的性能和可扩展性?
  • RQ5与最先进符号执行和模糊测试工具相比,该方法在效率和有效性方面表现如何?

主要发现

  • Wildfire 发现的真实正例漏洞数量超过基线符号执行和模糊测试工具,并且仅用 10% 的分析时间就超越了最先进覆盖率引导工具。
  • 在 23 个开源程序(近 100 万行代码)上的评估显示,Wildfire 实现了更高的代码覆盖,并发现了比现有工具更多的可利用漏洞。
  • Wildfire 在三个开源库中复现了 15 个已知漏洞中的 16 个,证明了其强大的召回率和实际适用性。
  • 该框架在真实世界库中发现了多个此前未知的漏洞,验证了其在真实环境中的有效性。
  • 组合分析实现了对可利用性链路的精确报告,通过调用上下文确认可行性,显著减少了误报。
  • 将针对性符号执行与模糊测试结合,并借助 LLVM 位码中改进的距离度量,实现了更准确、更可扩展的漏洞验证。

更好的研究,从现在开始

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

无需绑定信用卡

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