论文标题
相同的覆盖范围,不太膨胀:加速仅二进制模糊,覆盖范围的覆盖范围引导的跟踪
Same Coverage, Less Bloat: Accelerating Binary-only Fuzzing with Coverage-preserving Coverage-guided Tracing
论文作者
论文摘要
覆盖范围引导的模糊性侵略性,大批量测试有助于揭示了成千上万的软件安全缺陷。在执行数十亿个测试案件的执行命令时,快速代码覆盖范围跟踪,仅二进制目标的性质会导致追踪性能降低。最近的二进制模糊性能进步是覆盖范围引导的跟踪(CGT),它通过将覆盖范围跟踪的费用限制为仅在保证新的覆盖范围时,才能通过限制覆盖范围的费用来实现吞吐量。不幸的是,CGT仅适用于基本的块覆盖范围 - 但是大多数模糊器都需要更细粒度的覆盖范围:边缘覆盖范围和命中率。正是这种局限性禁止当今几乎所有最先进的模糊不清获得CGT的性能优势。 本文应对将CGT适应模糊最普遍的覆盖范围的挑战。我们介绍并实施了一系列增强功能,这些增强功能将CGT的内省扩展到Fuzzing最常见的代码覆盖范围,同时维持其超级命令的速度,而不是常规的始终覆盖范围跟踪。我们评估了他们在12种不同的现实世界二进制文件(8个开放式和4个封闭源)中的构成性能和有效性方面的权衡。平均而言,我们提供覆盖范围的CGT达到了目前仅限覆盖的CGT的几乎相同的速度;胜过2-24X的二进制和源级别覆盖范围示踪剂Qemu,Dyninst,Retrowrite和AFL-Clang,在更少的时间内找到了更多的错误。
Coverage-guided fuzzing's aggressive, high-volume testing has helped reveal tens of thousands of software security flaws. While executing billions of test cases mandates fast code coverage tracing, the nature of binary-only targets leads to reduced tracing performance. A recent advancement in binary fuzzing performance is Coverage-guided Tracing (CGT), which brings orders-of-magnitude gains in throughput by restricting the expense of coverage tracing to only when new coverage is guaranteed. Unfortunately, CGT suits only a basic block coverage granularity -- yet most fuzzers require finer-grain coverage metrics: edge coverage and hit counts. It is this limitation which prohibits nearly all of today's state-of-the-art fuzzers from attaining the performance benefits of CGT. This paper tackles the challenges of adapting CGT to fuzzing's most ubiquitous coverage metrics. We introduce and implement a suite of enhancements that expand CGT's introspection to fuzzing's most common code coverage metrics, while maintaining its orders-of-magnitude speedup over conventional always-on coverage tracing. We evaluate their trade-offs with respect to fuzzing performance and effectiveness across 12 diverse real-world binaries (8 open- and 4 closed-source). On average, our coverage-preserving CGT attains near-identical speed to the present block-coverage-only CGT, UnTracer; and outperforms leading binary- and source-level coverage tracers QEMU, Dyninst, RetroWrite, and AFL-Clang by 2-24x, finding more bugs in less time.