Emulation-based fuzzing
TechniqueEmulation-based fuzzing is a technique for security testing that executes firmware or other binary-only targets inside an instruction-set emulator (e.g., QEMU, Unicorn, or a custom emulator such as Icicle) instead of on real hardware. It is widely used for embedded systems, microcontroller firmware, and cellular basebands, where on-device testing is slow, impractical, or destructive. Modern emulation-based fuzzers add coverage-feedback instrumentation directly inside the emulator to guide input mutation, but historically such instrumentation has been bolted on in an ISA-specific, ad-hoc manner, restricting state-of-the-art fuzzing techniques to a few ISAs (x86/x86-64, ARM/AArch64). New fuzzing-specific emulators such as Icicle add instrumentation once in an architecture-agnostic way, enabling coverage-guided fuzzing across diverse ISAs including RISC-V, MIPS, and MSP430, and have been used to discover new bugs in real-world MSP430 firmware and to replicate results of ARM firmware fuzzers such as Fuzzware.
WIKI
Overview
Emulation-based fuzzing is a class of software-security testing in which the target program—typically a firmware binary, embedded application, or other low-level system component—is executed inside an emulator rather than on its native hardware. The fuzzer generates random or mutated inputs, feeds them to the emulated target, observes execution behavior (notably code coverage), and uses that feedback to guide further input generation.
Emulation-based fuzzing is the dominant approach when: