Honggfuzz
セキュリティ指向でフィードバック駆動型の進化的ファザー。
Honggfuzz は、コードカバレッジ(ソフトウェアおよびハードウェアベース)を利用してバグを発見する汎用ファザーです。マルチプロセス・マルチスレッドに対応し、極めて高速な永続的ファジング(persistent fuzzing)をサポートします。
主な特徴
- 高速: マルチプロセス・マルチスレッドエンジン。CPUの全能力を引き出します。
- 永続的ファジング: プロセス内でAPIを直接テストし、毎秒最大100万回の反復速度を実現します。
- フィードバック駆動: ハードウェア(Intel BTS/PT)およびソフトウェアのコードカバレッジを使用して入力を進化させます。
- 簡単: 空のコーパスから開始し、自動的に有効な入力セットを構築できます。
- 深い監視: 低レベルAPI(
ptrace)を使用して、乗っ取られたシグナルや隠れたクラッシュを検出します。
- 幅広いサポート: Linux、macOS、Android、NetBSD、FreeBSD、Windows(Cygwin)。
インストール
依存関係
Linux(Ubuntu/Debian)
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
macOS
Xcode(10.8以降)と libblocksruntime が必要です。
ビルド
make
# Compilation wrappers are created in hfuzz_cc/
使い方
1. ターゲットのコンパイル
提供されているコンパイララッパーを使用して、計測を自動的に追加します:
# 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. ファザーの実行
入力コーパスディレクトリ(空でも可)とバイナリを指定します:
# Basic run
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode (faster)
./honggfuzz -P -i input_dir/ -- ./my_target
注:___FILE___ は、honggfuzz によって生成される入力ファイル名のプレースホルダーです。
高度な例(Apache、OpenSSL、BIND など)については、examples/ ディレクトリを確認してください。
詳細なオプションは USAGE.md を参照してください。
トロフィー
Honggfuzz は、重要ソフトウェアにおける重大なセキュリティ脆弱性を多数発見してきました。
HTTP およびサーバー
- Apache HTTPD:
- CVE-2017-7659 (mod_http2 リモートクラッシュ)
- CVE-2017-9789 (Use-after-free)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH: 認証前リモートクラッシュ(コミット 28652bca)
- BIND: 複数のバグ
- NGINX Unit: 無限ループ
- ProFTPD: CVE-2019-18217(DoS)
- Samba: CVE-2019-14907、CVE-2020-10745、CVE-2021-20277
暗号化および SSL
- OpenSSL:
- CVE-2016-6309(深刻、RCE の可能性)
- CVE-2015-1789、CVE-2016-7054、CVE-2017-3731
- LibreSSL: 複数のクラッシュおよび不正な free
- BoringSSL: 未初期化メモリの使用
- Crypto++: CVE-2016-9939(リモート DoS)
言語およびインタープリタ
- PHP: WDDX バグ、一般的なインタープリタクラッシュ
- Python/Ruby: インタープリタのバグ
- Rust:
regex、h2、sleep-parser、lewton におけるパニック/安全性の問題
- Perl: 複数のインタープリタクラッシュ
メディアおよびフォーマット
- FreeType 2: CVE-2010-2497 から CVE-2010-2527(7件以上の CVE)
- LibTIFF: 複数のバグ
- LibJPEG/Turbo: 複数のバグ
- VLC: double-free による RCE
- Adobe Flash: CVE-2015-0316
- ImageIO(iOS/macOS): 複数のセキュリティ問題(Project Zero)
- LibreOffice: メモリ破損
システムおよびユーティリティ
- Systemd: honggfuzz によりテスト
- fwupd: 17件以上のバグを発見
- TCPDump: 複数のバグ
- Rsyslog: 複数のバグ
(さらに数百件については OSS-Fuzz を参照)
Honggfuzz を使用しているプロジェクト
- Google OSS-Fuzz: オープンソースソフトウェアの継続的ファジング。
- Android: Android セキュリティチームが使用。
- Rust: Rust コードをファジングするための
honggfuzz-rs クレート。
- Bitcoin Core: ファジングインフラストラクチャ。
- Apache HTTP Server: CI でのファジング。
- Systemd: CI でのファジング。
- Cifasis QuickFuzz
- Mozilla FuzzOS
ライセンス
Apache License 2.0.
これは Google 公式製品ではありません