コンテンツにスキップ

honggfuzz - セキュリティ志向カバレッジガイド付きファザー チートシート

honggfuzz - セキュリティ志向カバレッジガイド付きファザー チートシート

honggfuzzはGoogleのフィードバック駆動のセキュリティ志向ファザーです。ターゲットを指すことが簡単で既知、外のボックスからの堅いマルチプロセスおよびマルチスレッドファジング、および両方をサポートソフトウェア計測およびハードウェアベースカバレッジ フィードバック(Intel BTS/PT)—後者は再コンパイルできないバイナリーをファジングさせます。広く使用ソフトウェアの実際の脆弱性検出の長い トラック レコード。

ファジングは大量のCPUとディスクを消費できます。 専用容量で実行し、分離された環境で実行します。

インストール

PlatformCommand
Debian/Ubuntusudo apt install honggfuzz
From sourcegit clone https://github.com/google/honggfuzz && make
macOSbrew install honggfuzz
Verifyhonggfuzz --help

2つのモード

ModeUse
File-basedターゲット ファイル/stdinを読む;honggfuzz 入力を変異
Persistentターゲット フザー エントリー ポイント公開;はるかに高速

ファイルベースファジング

# ファイル引数を取るプログラムをファザー
honggfuzz -i ./input_corpus -W ./workspace -- ./target ___FILE___
FlagPurpose
-i DIR入力コーパス ディレクトリー
-W DIRワークスペース(クラッシュ、統計)
-o DIR出力コーパス
___FILE___入力ファイルで置換されたプレースホルダー
-sstdinで入力供給
-t SECS実行ごとのタイムアウト
-n N同時ファジング スレッド数

永続モード(高速)

#include <stdint.h>
#include <stddef.h>

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    parse_input(data, size);   // your target function
    return 0;
}
# honggfuzzのclangラッパーでコンパイルしてからファザー
hfuzz-clang -fsanitize=address fuzz_target.c -o fuzz_target
honggfuzz -i corpus -P -- ./fuzz_target
ElementNote
LLVMFuzzerTestOneInputlibFuzzerと同じエントリー ポイント—ターゲットはポータブル
-P永続モード有効化
hfuzz-clang / hfuzz-gcc計測を追加するコンパイラー ラッパー

永続モードは入力ごとのプロセス起動を回避し、しばしば秒当たり実行数の10–100倍を提供します。

カバレッジ フィードバック オプション

MechanismFlag / requirement
Software instrumentationhfuzz-clangでコンパイル(デフォルト、最良)
Intel BTS--linux_perf_bts_edge(再コンパイルなし)
Intel PT--linux_perf_ipt_block(再コンパイルなし)
Instruction/branch counts--linux_perf_instr--linux_perf_branch

ハードウェア フィードバックはクローズドソース バイナリーのエスケープ ハッチです—ソース アクセスなしでカバレッジ ガイダンスを取得します。

サニタイザー

# ASan + UBSanでビルドして、クラッシュ検出をより良く
hfuzz-clang -fsanitize=address,undefined target.c -o target
SanitizerCatches
ASanバッファー オーバーフロー、use-after-free
UBSan未定義動作
MSan初期化されていない読み取り
LeakSanitizerメモリー リーク

監視および出力

ItemWhere
Live statsターミナルUI(execs/sec、カバレッジ、クラッシュ)
CrashesWORKSPACE/*.fuzzファイル
ReportHONGGFUZZ.REPORT.TXT
Crash namingシグナルおよび障害アドレスを含む
FlagEffect
-N NN回の反復後に停止
--exit_upon_crash最初のクラッシュで停止
-v詳細
-Q静か

トリアージワークフロー

# 1) クラッシュを再現
./target < WORKSPACE/SIGSEGV.PC.*.fuzz

# 2) デバッガーの下でスタック トレースを取得
gdb --args ./target WORKSPACE/SIGSEGV.PC.*.fuzz

# 3) 入力を最小化して、再ジューサーでバグを供出

honggfuzz対他のファザー

AspecthonggfuzzAFL++libFuzzerLibAFL
Setup非常に簡単簡単簡単(インプロセス)独自に構築
Closed-source targetsはい(Intel PT/BTS)QEMUモードいいえはい
Persistent modeはいはいネイティブはい
Best for高速スタート、ハードウェア フィードバック最も広いエコシステムライブラリー APIカスタム ファザー

AFL++を比較し最も広いエコシステム向け、およびLibAFLカスタム ファザーが必要な場合。

リソース