
AFLplusplus v5.03c
AFL++は最先端のファザーであり、ベンチマークで第1位です。元々はAFLをベースにしていました。現在はqemu 5.1、衝突のないカバレッジ、強化されたlaf-intel & redqueen、AFLfast++パワースケジュール、MOptミューテーター、unicorn_modeなどを備えています!
American Fuzzy Lop plus plus (AFL++)
リリースバージョン: 5.03c
GitHub バージョン: 5.03c
リポジトリ: https://github.com/AFLplusplus/AFLplusplus
AFL++ は以下のメンバーによってメンテナンスされています:
- Marc "van Hauser" Heuse [email protected]
- Dominik Maier [email protected]
- Andrea Fioraldi [email protected]
- Heiko "hexcoder-" Eissfeldt [email protected]
- frida_mode は @Worksbutnottested によってメンテナンスされています
元々は Michal "lcamtuf" Zalewski によって開発されました。
AFL++ は Google の AFL の優れたフォークです - より高速で、より多くの、より優れた ミューテーション、より多くの、より優れたインストルメンテーション、カスタムモジュールサポートなどを備えています。
AFL++ は AGPL-3.0-or-later の下でライセンスされており、Apache-2.0 License の下にあるファイルも含まれています。
ファジングハーネスにコンパイルされるすべてのものは、Apache 2.0 ライセンスのままです。
各ファイルは、その SPDX-License-Identifier ヘッダーに自身のライセンスを明記しています - それが
そのファイルに対して従わなければならないライセンスです。
AGPL を使用できない組織向けに、オプションの商用ライセンスも利用可能です
(善因団体への寄付によって取得可能 - プロジェクトおよびそのメンテナンス担当者は
いかなる金銭も受け取りません)。
平易な言葉での概要については LICENSING.md を、詳細については
以下のライセンスセクションを参照してください。
はじめに
ここでは、始めるための情報をいくつか紹介します:
- AFL++ ドキュメントの概要と非常に役立つグラフィカルガイドについては、 docs/README.md を参照してください。
- チュートリアルを始めるには、 docs/tutorials.md にアクセスしてください。
- リリースについては、リリースタブと
ブランチを参照してください。ただし、使用するのに最適なブランチは、リスク許容度に応じて
stableまたはdevです。また、AFL++ の 重要な変更点 と 機能 のリストも確認してください。 - 学術研究で AFL++ を使用する場合は、ウェブサイトの 論文ページ を確認してください。
- 私たちの研究を引用するには、引用セクションを参照してください。
- 比較には、fuzzbench の
aflplusplusセットアップ、またはAFL_LLVM_CMPLOG=1を指定したafl-clang-fastを使用してください。aflplusplusのデフォルト設定は、Google の fuzzbench にあります。
AFL++ のビルドとインストール
すべてがコンパイルされた AFL++ を簡単に利用するには、Docker Hub からイメージを直接プルしてください (x86_64 と arm64 の両方で利用可能):
docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus
このイメージは、stable ブランチへのプッシュが発生したときに自動的に公開されます
(ブランチを参照)。上記のコマンドを使用すると、コンテナ内の /src に
ターゲットのソースコードがあることがわかります。
注: aflplusplus/aflplusplus:dev もプルできます。これは AFL++ の最新の
開発状態です。
AFL++ を自分でビルドする場合 - これは推奨されています - docs/INSTALL.md に進んでください。
クイックスタート: AFL++ でのファジング
注: 開始する前に、ファジングの常識的なリスクについてお読みください。
これは、ソースコードが利用可能なターゲットをファジングするためのクイックスタートです。プロセスについて 詳しく読むには、docs/fuzzing_in_depth.md を参照してください。
他のターゲットのファジングについては、以下を参照してください:
- バイナリのみのターゲット: docs/fuzzing_binary-only_targets.md
- ネットワークサービス: docs/best_practices.md#fuzzing-a-network-service
- GUI プログラム: docs/best_practices.md#fuzzing-a-gui-program
ステップバイステップのクイックスタート:
-
ファジングするプログラムまたはライブラリを
afl-ccを使用してコンパイルします。一般的な方法は 次のとおりです:CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared make clean all -
プログラムにとって意味のある、小さくても有効な入力ファイルを用意します。冗長な構文 (SQL、HTTP など) をファジングする場合は、dictionaries/README.md で説明されているように 辞書も作成します。
-
プログラムが stdin から読み取る場合は、次のように
afl-fuzzを実行します:./afl-fuzz -i seeds_dir -o output_dir -- \ /path/to/tested/program [...program's cmdline...]辞書を追加するには、
-x /path/to/dictionary.txtを afl-fuzz に追加します。プログラムがファイルから入力を受け取る場合は、プログラムのコマンドラインに
@@を配置できます。 AFL++ は自動生成されたファイル名をそこに挿入します。 -
ファザー UI で赤く表示されているものがあれば、すぐに docs/afl-fuzz_approach.md#understanding-the-status-screen を参照して調査してください。
-
見つかったクラッシュとハングは、
-o output_dirディレクトリ内のcrashes/およびhangs/サブディレクトリにあります。クラッシュをターゲットにフィードして再生できます。 たとえば、ターゲットが stdin を使用している場合:cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]コアを生成するか、gdb を直接使用してクラッシュを追跡できます。
-
ファジングのカバレッジ分析には、パートナーツール cov-analysis (ファジングコーパスからの ソースベースのカバレッジレポート) と fuzz-reachability (ハーネスが到達できる 関数の静的解析により、実行可能なカバレッジギャップとデッドコードを区別し、 インストルメンテーションの許可リストを生成) を推奨します。
-
いくら強調してもしすぎることはありません - 効果的にファジングしたい場合は、 docs/fuzzing_in_depth.md ドキュメントをお読みください!
連絡先
質問は? 問題は? バグレポートは?
- 貢献者には (例: イシューを作成することで - ただし AFL++ の欠陥のみ!) 連絡できます: https://github.com/AFLplusplus/AFLplusplus。
- FAQ とベストプラクティスをご覧ください。
- 最良: Fuzzing Zulip サーバーに参加してください!
ブランチ
以下のブランチが存在します:
- release: 最新の リリース
- stable: AFL++ の安定状態 - 安定性に満足したときに dev から随時同期されます。これがデフォルトブランチです。
- dev: AFL++ の開発状態 - 最先端であり、コンパイルできないチェックアウトやバグを含むものに遭遇する可能性があります。 PR (プルリクエスト) は 'dev' ブランチのみ受け付けています!
- (その他): 特定の機能の開発や新機能・変更のテストのための実験的ブランチ。
ヘルプ募集
"help wanted" タグが付いたイシューリストを確認してください。 これは AFL++ をサポートし貢献する方法です - 何かクールなことをするように拡張してください。 他のアイデアがある場合は - イシューを作成して提案してください!
貢献したい方 (およびプルリクエストを送りたい方) は、提出前に 貢献ガイドラインをお読みください。
特別な感謝
元の AFL と AFL++ への多くの改善は、貢献者からのフィードバック、バグレポート、またはパッチがなければ 実現できなかったでしょう。
ありがとうございます! (プルリクエストを送る方は、このリストに自分を追加してください :-)