アップデート一覧に戻る
New releaseSep 4, 2026

AFLplusplus v5.03c

ファザーafl++は、コミュニティパッチ、qemu 5.1アップグレード、衝突無しカバレッジ、強化されたlaf-intel & redqueen、AFLfast++パワースケジュール、MOptミューテーター、unicorn_mode、そしてさらに多くの機能を備えたaflです!

共有

American Fuzzy Lop plus plus (AFL++)

AFL++ logo

リリースバージョン: 5.03c

GitHub バージョン: 5.03c

リポジトリ: https://github.com/AFLplusplus/AFLplusplus

AFL++ は以下のメンバーによってメンテナンスされています:

元々は 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 を参照してください。

他のターゲットのファジングについては、以下を参照してください:

ステップバイステップのクイックスタート:

  1. ファジングするプログラムまたはライブラリを afl-cc を使用してコンパイルします。一般的な方法は 次のとおりです:

    CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared
    make clean all
    
  2. プログラムにとって意味のある、小さくても有効な入力ファイルを用意します。冗長な構文 (SQL、HTTP など) をファジングする場合は、dictionaries/README.md で説明されているように 辞書も作成します。

  3. プログラムが 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++ は自動生成されたファイル名をそこに挿入します。

  4. ファザー UI で赤く表示されているものがあれば、すぐに docs/afl-fuzz_approach.md#understanding-the-status-screen を参照して調査してください。

  5. 見つかったクラッシュとハングは、-o output_dir ディレクトリ内の crashes/ および hangs/ サブディレクトリにあります。クラッシュをターゲットにフィードして再生できます。 たとえば、ターゲットが stdin を使用している場合:

    cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]
    

    コアを生成するか、gdb を直接使用してクラッシュを追跡できます。

  6. ファジングのカバレッジ分析には、パートナーツール cov-analysis (ファジングコーパスからの ソースベースのカバレッジレポート) と fuzz-reachability (ハーネスが到達できる 関数の静的解析により、実行可能なカバレッジギャップとデッドコードを区別し、 インストルメンテーションの許可リストを生成) を推奨します。

  7. いくら強調してもしすぎることはありません - 効果的にファジングしたい場合は、 docs/fuzzing_in_depth.md ドキュメントをお読みください!

連絡先

質問は? 問題は? バグレポートは?

ブランチ

以下のブランチが存在します:

  • release: 最新の リリース
  • stable: AFL++ の安定状態 - 安定性に満足したときに dev から随時同期されます。これがデフォルトブランチです。
  • dev: AFL++ の開発状態 - 最先端であり、コンパイルできないチェックアウトやバグを含むものに遭遇する可能性があります。 PR (プルリクエスト) は 'dev' ブランチのみ受け付けています!
  • (その他): 特定の機能の開発や新機能・変更のテストのための実験的ブランチ。

ヘルプ募集

"help wanted" タグが付いたイシューリストを確認してください。 これは AFL++ をサポートし貢献する方法です - 何かクールなことをするように拡張してください。 他のアイデアがある場合は - イシューを作成して提案してください!

貢献したい方 (およびプルリクエストを送りたい方) は、提出前に 貢献ガイドラインをお読みください。

特別な感謝

元の AFL と AFL++ への多くの改善は、貢献者からのフィードバック、バグレポート、またはパッチがなければ 実現できなかったでしょう。

ありがとうございます! (プルリクエストを送る方は、このリストに自分を追加してください :-)

貢献者のリスト
  Jann Horn                             Hanno Boeck
  Felix Groebert                        Jakub Wilk
  Richard W. M. Jones                   Alexander Cherepanov
  Tom Ritter                            Hovik Manucharyan
  Sebastian Roschke                     Eberhard Mattes
  Padraig Brady                         Ben Laurie
  @dronesec                             Luca Barbato
  Tobias Ospelt                         Thomas Jarosch
  Martin Carpenter                      Mudge Zatko
  Joe Zbiciak                           Ryan Govostes
  Michael Rash                          William Robinet
  Jonathan Gray                         Filipe Cabecinhas
  Nico Weber                            Jodie Cunningham
  Andrew Griffiths                      Parker Thompson
  Jonathan Neuschaefer                  Tyler Nighswander
  Ben Nagy                              Samir Aguiar
  Aidan Thornton                        Aleksandar Nikolich
  Sam Hakim                             Laszlo Szekeres
  David A. Wheeler                      Turo Lamminen
  Andreas Stieger                       Richard Godbee
  Louis Dassy                           teor2345
  Alex Moneger                          Dmitry Vyukov
  Keegan McAllister                     Kostya Serebryany
  Richo Healey                          Martijn Bogaard
  rc0r                                  Jonathan Foote
  Christian Holler                      Dominique Pelle
  Jacek Wielemborek                     Leo Barnes
  Jeremy Barnes                         Jeff Trull
  Guillaume Endignoux                   ilovezfs
  Daniel Godas-Lopez                    Franjo Ivancic
  Austin Seipp                          Daniel Komaromy
  Daniel Binderman                      Jonathan Metzman
  Vegard Nossum                         Jan Kneschke
  Kurt Roeckx                           Marcel Boehme
  Van-Thuan Pham                        Abhik Roychoudhury
  Joshua J. Drake                       Toby Hutton
  Rene Freingruber                      Sergey Davidoff
  Sami Liedes                           Craig Young
  Andrzej Jackowski                     Daniel Hodson
  Nathan Voss                           Dominik Maier
  Andrea Biondo                         Vincent Le Garrec
  Khaled Yakdan                         Kuang-che Wu
  Josephine Calliotte                   Konrad Welc
  Thomas Rooijakkers                    David Carlier
  Ruben ten Hove                        Joey Jiao
  fuzzah                                @intrigus-lgtm
  Yaakov Saxon                          Sergej Schumilo
  Ziqiao Kong                           Ryan Berger
  Sangjun Park                          Scott Guest
  Fabian Keil                           @Jay-1409
  Gergely Nagy

引用

科学的研究で AFL++ を使用する場合は、WOOT'20 で発表された 私たちの論文の引用を検討してください:

Andrea Fioraldi, Dominik Maier, Heiko Eißfeldt, and Marc Heuse. “AFL++: Combining incremental steps of fuzzing research”. In 14th USENIX Workshop on Offensive Technologies (WOOT 20). USENIX Association, Aug. 2020.
BibTeX
@inproceedings {AFLplusplus-Woot20,
author = {Andrea Fioraldi and Dominik Maier and Heiko Ei{\ss}feldt and Marc Heuse},
title = {{AFL++}: Combining Incremental Steps of Fuzzing Research},
booktitle = {14th {USENIX} Workshop on Offensive Technologies ({WOOT} 20)},
year = {2020},
publisher = {{USENIX} Association},
month = aug,
}

zread Ask DeepWiki

ライセンス

AFL++ は GNU AGPL-3.0-or-later の下でライセンスされています。簡単に言うと、AFL++ は 3 つの方法で使用できます:

  1. 無料、AGPL-3.0-or-later の下で: デフォルト。AFL++ を使用、変更、共有できます。 変更したバージョンをネットワークサービスとして実行する場合、AGPL はユーザーに対応する ソースコードを提供することを要求します。全文: LICENSE

  2. ファイルごとに、そのヘッダーのライセンスの下で: プロジェクトには SPDX-License-Identifier: AGPL-3.0-or-laterSPDX-License-Identifier: Apache-2.0 の両方の下にあるファイルが含まれています。使用するファイルの ヘッダーを常に確認し、そこに記載されているライセンスに従ってください。Apache-2.0 とマークされたファイルは、 Apache-2.0 License の下で個別に再利用できます。(いくつかの バンドルされたサードパーティファイルは他のライセンスを保持しています。例: GCC プラグインは GPL-3.0-or-later、LLVM SanitizerCoverage パスは Apache-2.0-WITH-LLVM-exception - それぞれ独自の SPDX 識別子でマークされています。) 組み合わせた afl-fuzz バイナリには AGPL ファイルが含まれているため、プログラム全体としては AGPL であることに 注意してください。

  3. 商用ライセンス: オプション。AGPL に準拠できない、または準拠したくない組織向け。 プロジェクトはいかなる金銭も受け取りません。 代わりに EUR 20,000 (€20,000) を EFF または CCC のいずれかに寄付し、証明を [email protected] にメールで送信してください。ライセンスは寄付日から 1年間有効です (再度寄付することで更新可能)。完全な条件: LICENSE.COMMERCIAL

バンドルされたサードパーティコンポーネント (例: xxHash、t1ha、libFuzzer、サブモジュール) は 独自のライセンスを保持します。完全な平易な言葉での概要については、 LICENSING.md を参照してください。

カテゴリ