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.
翻译:覆盖引导的模糊性测试有助于揭示数以万计的软件安全缺陷。 执行数十亿个测试案例要求快速代码覆盖跟踪, 而二进制目标的性质导致跟踪性能下降。 二进制模糊性表现的最新进展是覆盖引导追踪(CGT ), 将覆盖跟踪的成本限制在新覆盖得到保障时才带来吞吐量的增加。 不幸的是, CGT 只适合基本的块覆盖颗粒度 -- 但大多数 Fuzzer 需要精确的覆盖度: 边缘覆盖和点数。 正是这一限制使得今天所有最先进的模糊性指标都无法达到 CGT 的业绩效益。 本文应对了使 CGT 适应模糊性最易可见的覆盖度指标的挑战。 我们引入并实施了一套强化措施, 将CGT的内分流扩大至最常见的代码覆盖度, 同时保持其超常和超强的精确度速度。 QQ- 和最接近常规的覆盖度 Q- 和最接近的路径 。