SAND: Decoupling Sanitization from Fuzzing for Low Overhead
Ziqiao Kong, Shaohua Li, Heqing Huang, Zhendong Su
TL;DR
The paper tackles the high overhead of sanitizers in fuzzing by decoupling sanitization from the fuzzing loop. It introduces Sand, which fuzzes normally built binaries and only runs sanitizer-enabled inputs that exhibit unique execution patterns, as detected from the fuzzing bitmap via an inexpensive execution-pattern proxy. Through extensive evaluation on 20 real-world programs (implemented atop AFL++) with ASan, UBSan, and MSan, Sand finds more bugs than all baselines within 24 hours and does not miss any, while achieving near-native fuzzing throughput. The key contributions include the formalization of execution patterns, the design of conditional sanitization, and a practical, sanitizer-agnostic implementation with broad compatibility, offering a scalable path to deploying sanitizers in fuzzing without prohibitive overhead.
Abstract
Sanitizers provide robust test oracles for various software vulnerabilities. Fuzzing on sanitizer-enabled programs has been the best practice to find software bugs. Since sanitizers need to heavily instrument a target program to insert run-time checks, sanitizer-enabled programs have much higher overhead compared to normally built programs. In this paper, we present SAND, a new fuzzing framework that decouples sanitization from the fuzzing loop. SAND performs fuzzing on a normally built program and only invokes sanitizer-enabled programs when input is shown to be interesting. Since most of the generated inputs are not interesting, i.e., not bug-triggering, SAND allows most of the fuzzing time to be spent on the normally built program. To identify interesting inputs, we introduce execution pattern for a practical execution analysis on the normally built program. We realize SAND on top of AFL++ and evaluate it on 12 real-world programs. Our extensive evaluation highlights its effectiveness: in 24 hours, compared to all the baseline fuzzers, SAND significantly discovers more bugs while not missing any.
