Honggfuzz
Un fuzzer évolutionnaire, orienté sécurité et piloté par le feedback.
Honggfuzz est un fuzzer polyvalent qui utilise la couverture de code (matérielle et logicielle) pour trouver des bugs. Il est multi-processus, multi-threads et prend en charge le fuzzing persistant pour une vitesse extrême.
Principales caractéristiques
- Rapide : moteur multi-processus et multi-threads, exploitant tout le potentiel du CPU.
- Fuzzing persistant : testez les API directement dans le processus avec des vitesses d'itération allant jusqu'à 1 M/s.
- Piloté par le feedback : utilise la couverture de code matérielle (Intel BTS/PT) et logicielle pour faire évoluer les entrées.
- Facile : peut démarrer avec un corpus vide et construire automatiquement un ensemble d'entrées valides.
- Supervision avancée : utilise des API de bas niveau (
ptrace) pour détecter les signaux détournés et les crashs cachés.
- Large support : Linux, macOS, Android, NetBSD, FreeBSD et Windows (Cygwin).
Installation
Dépendances
Linux (Ubuntu/Debian)
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
macOS
Nécessite Xcode (10.8+) et libblocksruntime.
Compilation
make
# Compilation wrappers are created in hfuzz_cc/
Utilisation
1. Compiler la cible
Utilisez les wrappers de compilation fournis pour ajouter automatiquement l'instrumentation :
# C code
./hfuzz_cc/hfuzz-clang -o my_target my_target.c
# C++ code
./hfuzz_cc/hfuzz-clang++ -o my_target my_target.cpp
2. Lancer le fuzzer
Pointez-le vers un répertoire de corpus d'entrées (peut être vide) et votre binaire :
# Basic run
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode (faster)
./honggfuzz -P -i input_dir/ -- ./my_target
Note : ___FILE___ est un espace réservé pour le nom de fichier d'entrée généré par honggfuzz.
Pour des exemples avancés (Apache, OpenSSL, BIND, etc.), consultez le répertoire examples/.
Voir USAGE.md pour les options détaillées.
Trophées
Honggfuzz a découvert des vulnérabilités de sécurité majeures dans des logiciels critiques.
HTTP et serveurs
- Apache HTTPD :
- CVE-2017-7659 (crash à distance mod_http2)
- CVE-2017-9789 (Use-after-free)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH : crash à distance avant authentification (commit 28652bca)
- BIND : de nombreux bugs
- NGINX Unit : boucle infinie
- ProFTPD : CVE-2019-18217 (DoS)
- Samba : CVE-2019-14907, CVE-2020-10745, CVE-2021-20277
Cryptographie et SSL
- OpenSSL :
- CVE-2016-6309 (critique, RCE potentielle)
- CVE-2015-1789, CVE-2016-7054, CVE-2017-3731
- LibreSSL : de multiples crashs et libérations invalides
- BoringSSL : utilisation de mémoire non initialisée
- Crypto++ : CVE-2016-9939 (DoS à distance)
Langages et interpréteurs
- PHP : bugs WDDX, crashs génériques de l'interpréteur
- Python/Ruby : bugs d'interpréteur
- Rust : paniques/problèmes de sécurité dans
regex, h2, sleep-parser, lewton
- Perl : de multiples crashs d'interpréteur
- FreeType 2 : CVE-2010-2497 à CVE-2010-2527 (7+ CVE)
- LibTIFF : de multiples bugs
- LibJPEG/Turbo : de multiples bugs
- VLC : RCE par double free
- Adobe Flash : CVE-2015-0316
- ImageIO (iOS/macOS) : de multiples problèmes de sécurité (Project Zero)
- LibreOffice : corruption de mémoire
Système et utilitaires
- Systemd : testé avec honggfuzz
- fwupd : 17+ bugs trouvés
- TCPDump : de multiples bugs
- Rsyslog : de multiples bugs
(Voir OSS-Fuzz pour des centaines d'autres)
Projets utilisant Honggfuzz
- Google OSS-Fuzz : fuzzing continu pour les logiciels open source.
- Android : utilisé par l'équipe de sécurité Android.
- Rust : la crate
honggfuzz-rs pour le fuzzing de code Rust.
- Bitcoin Core : infrastructure de fuzzing.
- Apache HTTP Server : fuzzing en intégration continue (CI).
- Systemd : fuzzing en CI.
- Cifasis QuickFuzz
- Mozilla FuzzOS
Licence
Licence Apache 2.0.
Ceci n'est PAS un produit officiel de Google