ファズテストは、プログラムに大量の半ランダムな入力を与えることでソフトウェアの欠陥を発見する強力な手法です。AFL++はLinux上のCおよびC++ターゲットにおける主要なプラットフォームですが、高い効率を達成するにはサニタイザーと環境変数の意図的な設定が必要です。Address Sanitizer (ASan) と Undefined Behavior Sanitizer (UBSan) の両方を使用することは基本要件ですが、デフォルトのASan設定では不十分な場合があります。例えば、`max_malloc_fill_size` を大きな値(1GBなど)に増やすことで、初期化されていないメモリがパターンで埋められることが保証され、プログラムが小さな4KiBのデフォルトバッファを超えて初期化されていないデータを読み取る際にファザーが見逃すバグを防ぐことができます。さらに、`detect_stack_use_after_return` を有効にすることで、ファジングの速度がわずかに低下しても、より複雑なメモリエラーを捕捉できるようになります。

アーキテクチャの選択は、ファジングキャンペーンの速度と深度に大きな影響を与えます。最も効果的な最適化の一つは、AFL++の永続モード(persistent mode)を使用することです。これはターゲットプロセスを繰り返し再起動するオーバーヘッドを回避するため、インプレース・ファジングよりも桁違いに高速になる可能性があります。これを実装するために、開発者はターゲットのロジックをループで包むカスタムテストテンプレートを使用できます。このセットアップにおける重要な技術的ニュアンスは、生のAFL++バッファを直接ターゲットに渡すという一般的な間違いを避けることです。AFL++のバッファは入力長よりも大きいため、ASanが読み取りオーバーフローを検出できない可能性があります。代わりに、テストテンプレートは入力のサイズに合わせたコピーを作成すべきであり、これによりプログラムの境界が厳格に強制され、サニタイザーによって検出可能になります。

設定を超えて、「hacksaw」技術は複雑で密接に結合したコンポーネントのテストを簡素化できます。すべてのテストに対して複雑なビルドシステムを管理するのではなく、開発者はターゲットのソースファイルをファジングテンプレート内の単一の翻訳単位(TU)に直接含めることができます。これにより、ファザーは静的関数や変数に直接アクセスできるようになり、公開APIを介して公開されていない内部インターフェースのテストが可能になります。さらに、ファイルシステムパスを必要とするプログラムについては、メモリファイル記述子(`memfd_create`経由)を使用することで、ファザーは`/proc/self/fd/`パスを通じてデータを提供できます。このアプローチは、各プロセスが固有のファイルパスを持つことを保証することで並列ファジングをサポートし、同時に物理ストレージへの不要な摩耗を防ぎます。全体的なパフォーマンスを最大化するには、テストケースを小さく保ち、より単純なターゲットバイナリを使用することも推奨されます。これにより、ファザーが重要でない大きなデータの解析に時間を費やすのではなく、新しい実行パスの探索により多くの時間を費やすことができます。