No Linux, No Problem: Fast and Correct Windows Binary Fuzzing via Target-embedded Snapshotting

Published in USENIX Security Symposium, 2023

Recommended citation: Leo Stone, Rishi Ranjan, Stefan Nagy, & Matthew Hicks (2023). No Linux, No Problem: Fast and Correct Windows Binary Fuzzing via Target-embedded Snapshotting. In 32nd USENIX Security Symposium (USENIX Security 23) (pp. 4913–4929). USENIX Association. https://www.usenix.org/system/files/usenixsecurity23-stone.pdf

Coverage-guided fuzzing remains today’s most successful approach for exposing software security vulnerabilities. Speed is paramount in fuzzing, as maintaining a high test case throughput enables more expeditious exploration of programs—leading to faster vulnerability discovery. High-performance fuzzers exploit the Linux kernel’s customizability to implement process snapshotting: fuzzing-oriented execution primitives that dramatically increase fuzzing throughput. Unfortunately, such speeds remain elusive on Windows. The closed-source nature of its kernel prevents current kernel-based snapshotting techniques from being ported—severely limiting fuzzing’s effectiveness on Windows programs. Thus, accelerating vetting of the Windows software ecosystem demands a fast, correct, and kernel-agnostic fuzzing execution mechanism.

We propose making state snapshotting an application-level concern as opposed to a kernel-level concern via target-embedded snapshotting. Target-embedded-snapshotting com- bines binary- and library-level hooking to allow applications to snapshot themselves—while leaving both their source code and the Windows kernel untouched. Our evaluation on 10 realworld Windows binaries shows that target-embedded snapshotting overcomes the speed, correctness, and compatibility challenges of previous Windows fuzzing execution mechanisms (i.e., process creation, forkserver-based cloning, and persistent mode). The result is 7–182x increased performance.