fuzzware  by fuzzware-fuzzer

Firmware fuzzer for ARM Cortex-M, using emulation and MMIO modeling

created 3 years ago
343 stars

Top 81.8% on sourcepulse

GitHubView on GitHub
Project Summary

Fuzzware is an automated, self-configuring fuzzing framework for ARM Cortex-M firmware images. It targets security researchers and embedded systems engineers seeking to discover vulnerabilities in firmware without requiring full hardware emulation. Fuzzware automates the process of understanding and modeling Memory-Mapped I/O (MMIO) interactions, enabling efficient fuzzing by providing realistic hardware behavior to the fuzzer.

How It Works

Fuzzware integrates an instruction set emulator (Unicorn Engine) with a fuzzer (AFL++). The fuzzer supplies inputs that are used to answer MMIO accesses. The core innovation lies in its MMIO access modeling component, which uses symbolic execution to analyze firmware states and automatically generate models for MMIO accesses. This reduces the fuzzer's burden of guessing hardware behavior, focusing on code coverage and functional logic. A pipeline component orchestrates the interaction between the emulator and the modeling component, iteratively refining MMIO models and guiding the fuzzing process.

Quick Start & Requirements

  • Install via Docker: ./build_docker.sh then ./run_docker.sh examples fuzzware pipeline --skip-afl-cpufreq pw-recovery/ARCH_PRO
  • Local setup requires Python < 3.10 for the MMIO modeling component (angr version 8.19.10.30). Cortex-M4f targets require compilation with a softfpu.
  • See fuzzware-experiments for datasets and experiment replication.

Highlighted Details

  • Automated MMIO modeling using symbolic execution.
  • Orchestrated pipeline for iterative model refinement and fuzzing.
  • Supports custom configurations for interrupt handling, boot guidance, and code hooks.
  • Detailed documentation for configuration and analysis available in subdirectories and the fuzzware-experiments repository.

Maintenance & Community

The project is associated with USENIX Security '22. Contribution opportunities are listed, including upgrading angr, improving architecture independence, and developing crash analysis tooling.

Licensing & Compatibility

The repository does not explicitly state a license in the README. Compatibility for commercial use or closed-source linking is not specified.

Limitations & Caveats

The MMIO modeling component is tied to an older version of angr, limiting Python support to versions below 3.10. The framework is primarily focused on ARM Cortex-M architectures, with ongoing work to improve architecture independence.

Health Check
Last commit

2 weeks ago

Responsiveness

1 day

Pull Requests (30d)
0
Issues (30d)
1
Star History
16 stars in the last 90 days

Explore Similar Projects

Starred by Elie Bursztein Elie Bursztein(Cybersecurity Lead at Google DeepMind), Chip Huyen Chip Huyen(Author of AI Engineering, Designing Machine Learning Systems), and
1 more.

oss-fuzz-gen by google

0.3%
1k
LLM-powered fuzz target generator for C/C++/Java/Python projects, benchmarked via OSS-Fuzz
created 1 year ago
updated 5 days ago
Starred by Boris Cherny Boris Cherny(Creator of Claude Code; MTS at Anthropic), Hiroshi Shibata Hiroshi Shibata(Core Contributor to Ruby), and
4 more.

oss-fuzz by google

0.2%
11k
Continuous fuzzing for open source software
created 9 years ago
updated 1 day ago
Feedback? Help us improve.