One Fuzz Doesn’t Fit All: Optimizing Directed Fuzzing via Target-tailored Program State Restriction
Open Access
- 5 December 2022
- conference paper
- Published by Association for Computing Machinery (ACM)
- p. 388-399
Abstract
Fuzzing is the de-facto default technique to discover software flaws, randomly testing programs to discover crashing test cases. Yet, a particular scenario may only care about specific code regions (for, e.g., bug reproduction, patch or regression testing)—spurring the adoption of directed fuzzing. Given a set of pre-determined target locations, directed fuzzers drive exploration toward them through distance minimization strategies that (1) isolate the closest-reaching test cases and (2) mutate them stochastically. However, these strategies are applied onto every explored test case—irrespective of whether they ever reach the targets—stalling progress on the paths where targets are unreachable. Accelerating directed fuzzing requires prioritizing target-reachable paths. To overcome the bottleneck of wasteful exploration in directed fuzzing, we introduce tripwiring: a lightweight technique to preempt and terminate the fuzzing of paths that will never reach target locations. By constraining exploration to only the set of target-reachable program paths, tripwiring curtails directed fuzzers’ search noise—while unshackling them from the high-overhead instrumentation and bookkeeping of distance minimization—enabling directed fuzzers to obtain up to 99 × higher test case throughput. We implement tripwiring-directed fuzzing as a prototype, SieveFuzz, and evaluate it alongside the state-of-the-art directed fuzzers AFLGo, BEACON and the leading undirected fuzzer AFL++. Overall, across nine benchmarks, SieveFuzz’s tripwiring enables it to trigger bugs on an average 47% more consistently and 117% faster than AFLGo, BEACON and AFL++.Keywords
Funding Information
- SNSF (PCEGP2_186974)
- ERC (H2020 StG 850868)
- DARPA (HR001119S0089-AMP-FP-034 , N6600120C4031)
- AFRL (FA8655-20-1-7048)
This publication has 11 references indexed in Scilit:
- Typestate-guided fuzzer for discovering use-after-free vulnerabilities2020
- Finding semantic bugs in file systems with an extensible fuzzing framework2019
- Fuzzing File Systems via Two-Dimensional Input Space Exploration2019
- Full-Speed Fuzzing: Reducing Fuzzing Overhead through Coverage-Guided Tracing2019
- Hawkeye2018
- T-Fuzz: Fuzzing by Program Transformation2018
- SlowFuzz2017
- Continuous Fuzzing with libFuzzer and AddressSanitizer2016
- SVF: interprocedural static value-flow analysis in LLVM2016
- Taint-based directed whitebox fuzzing2009