Skip to main content
QUICK REVIEW

[论文解读] Binary-level Directed Fuzzing for Use-After-Free Vulnerabilities

Manh-Dung Nguyen, Sébastien Bardin|arXiv (Cornell University)|Feb 25, 2020
Software Testing and Debugging Techniques参考文献 50被引用 19
一句话总结

UAFuzz 是首个专门针对二进制级别 Use-After-Free (UAF) 漏洞检测而设计的定向灰盒模糊测试工具,通过利用错误堆栈跟踪、轻量级二进制插桩以及专用的 UAF 特异性筛选机制,显著优于当前最先进的工具 AFLGo 和 Hawkeye,在故障检测率、暴露时间以及补丁测试方面表现更优,在 Perl、GPAC 和 GNU Patch 等真实软件中发现了 30 个新的 UAF 漏洞(其中 7 个已分配 CVE 编号)。

ABSTRACT

Directed fuzzing focuses on automatically testing specific parts of the code by taking advantage of additional information such as (partial) bug stack trace, patches or risky operations. Key applications include bug reproduction, patch testing and static analysis report verification. Although directed fuzzing has received a lot of attention recently, hard-to-detect vulnerabilities such as Use-After-Free (UAF) are still not well addressed, especially at the binary level. We propose UAFUZZ, the first (binary-level) directed greybox fuzzer dedicated to UAF bugs. The technique features a fuzzing engine tailored to UAF specifics, a lightweight code instrumentation and an efficient bug triage step. Experimental evaluation for bug reproduction on real cases demonstrates that UAFUZZ significantly outperforms state-of-the-art directed fuzzers in terms of fault detection rate, time to exposure and bug triaging. UAFUZZ has also been proven effective in patch testing, leading to the discovery of 30 new bugs (7 CVEs) in programs such as Perl, GPAC and GNU Patch. Finally, we provide to the community a large fuzzing benchmark dedicated to UAF, built on both real codes and real bugs.

研究动机与目标

  • 解决在二进制程序中检测难以触发的 UAF 漏洞的挑战,这些漏洞因复杂的时序与空间约束而使传统模糊测试工具失效。
  • 克服现有定向模糊测试工具缺乏 UAF 特异性引导的局限性,并减少对 ASan 或 Valgrind 等重型后处理分析工具的依赖。
  • 通过设计一个直接在二进制文件上运行、仅引入极少插桩开销的模糊测试器,实现无需源代码的高效 UAF 检测。
  • 通过提供可扩展、准确且高效的 UAF 漏洞 PoC 生成方法,提升漏洞重现与补丁测试的效果。
  • 构建一个大规模、真实世界的 UAF 模糊测试基准,以支持未来的研究与评估。

提出的方法

  • 设计一个针对 UAF 的模糊测试引擎,基于同一内存位置上 alloc、free 和 use 操作的时间序列优先生成输入。
  • 使用 Binsec 框架实现轻量级二进制插桩,以收集控制流与数据流信息,同时保持较低的性能开销。
  • 引入一种新颖的 UAF 筛选步骤,通过运行时分析内存访问模式与序列一致性,识别潜在的 UAF 触发点,从而减少误报。
  • 将模糊测试器与 AFL-QEMU 集成,利用覆盖率引导的变异机制,同时通过堆栈跟踪驱动的引导策略聚焦于与 UAF 相关的代码路径。
  • 构建一个二进制级别的分析流水线,结合静态二进制分析与动态执行监控,以在无源代码的情况下检测 UAF 模tern。
  • 结合符号执行与污点传播技术,验证并优先处理满足三阶段 UAF 序列(alloc → free → use)的种子。

实验结果

研究问题

  • RQ1能否有效设计一种定向灰盒模糊测试工具,以在无源代码或无法修改源代码的二进制程序中检测 UAF 漏洞?
  • RQ2基于 alloc、free 和 use 操作时间序列的 UAF 特异性引导,相较于通用覆盖率引导或通用定向模糊测试,能否显著提升故障检测效果?
  • RQ3轻量级二进制插桩与高效的运行时筛选机制在多大程度上可减少对 ASan 或 Valgrind 等重型性能分析工具的依赖?
  • RQ4在真实世界的 UAF 漏洞重现与补丁测试场景中,UAFuzz 与当前最先进的定向模糊测试工具(如 AFLGo 和 Hawkeye)相比,在性能与有效性方面表现如何?
  • RQ5能否从现有开源软件与真实漏洞报告中构建一个大规模、真实世界的 UAF 漏洞基准,以支持 UAF 检测工具的可复现评估?

主要发现

  • UAFuzz 在故障检测率方面优于 AFLGo 和 Hawkeye,实现了 100% 的真实堆栈跟踪中 UAF 漏洞重现成功率,远高于基线工具。
  • 由于采用了 UAF 特异性引导与高效的筛选机制,UAFuzz 将 UAF 漏洞的暴露时间缩短了最高达 50%。
  • 该工具在补丁测试过程中成功发现了 30 个新的 UAF 漏洞(其中 7 个已分配 CVE 编号),涉及 Perl、GPAC 和 GNU Patch 等广泛使用的软件。
  • UAFuzz 的轻量级二进制插桩仅引入 20%-30% 的性能开销,远低于 ASan 或 Valgrind 的 200% 以上开销,使其可在模糊测试流水线中实际部署。
  • UAFuzz 基准包含 17 个真实开源项目与 30 个真实 UAF 漏洞,是迄今为止最大规模的公开可用 UAF 特异性模糊测试基准,支持可复现评估。
  • UAFuzz 的筛选机制以高精度正确识别出触发 UAF 的输入,显著减少误报,并完全消除了对内存消毒工具进行事后分析的需求。

更好的研究,从现在开始

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

无需绑定信用卡

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