アップデート一覧に戻る
New releaseAug 10, 2026

LibAFL v0.16.0

高度なファジングライブラリ - Rustでファザーを組み立てよう!コアやマシンを越えてスケール。Windows、Android、MacOS、Linux、no_std対応、...

共有

LibAFL、ファザーライブラリ

LibAFL ロゴ

高度なファジングライブラリ - 独自のファザーを組み合わせ、Rustを使用して機能を拡張しましょう。

LibAFL は、Rustで書かれた再利用可能なファザーの部品のコレクションであり、市販のファザーの利点の多くを提供しながら、完全にカスタマイズ可能です。 現在の主な特徴は次のとおりです:

  • fast: コンパイル時にできる限りのことを行い、ランタイムのオーバーヘッドを最小限に抑えます。ユーザーはスマートフォン上の frida モードで(全コア使用)120k execs/sec を達成しています。
  • scalable: Low Level Message Passing(略称 LLMP)により、LibAFL はコア数にほぼ線形にスケーリングし、TCP経由で複数のマシンにもスケーリングできます。
  • adaptable: LibAFL の各部品を置き換えることができます。例えば、BytesInput は入力形式の一例に過ぎません。構造化ファジングのためのASTベースの入力を自由に追加できます。
  • multi platform: LibAFLWindowsmacOSiOSLinuxAndroid などで動作します。LibAFLno_std モードでビルドでき、組み込みデバイスやハイパーバイザーなどの特殊なターゲットに注入できます。
  • bring your own target: Frida-Mode などのバイナリのみのモードと、ソースベースのインストルメンテーションのための複数のコンパイルパスをサポートしています。もちろん、カスタムのインストルメンテーションバックエンドを追加するのも簡単です。

コアコンセプト

LibAFL は高速、マルチプラットフォーム、no_std 互換で、コアやマシン間でスケーリングします。カスタムファザーのためのビルディングブロックを提供するメインクレート libafl、ターゲットインストルメンテーションに使用できる共通コードを含むライブラリ libafl_targets、およびコンパイラをラップする機能を提供するライブラリ libafl_cc を提供します。また、人気のインストルメンテーションフレームワークとの統合も提供しています。現在サポートされているバックエンドは次のとおりです:

ビルドとインストール

依存関係のインストール

  • Rust開発言語
    • Linuxディストリビューションのパッケージは古い可能性が高いため、使用しないことを強くお勧めします。代わりに Rust を直接インストールしてください。手順はこちらにあります。

    • 最小サポートRustバージョンが定義されています。現在必要なバージョンは LibAFL の Cargo.toml で確認できます。

      インストールされている Rust のバージョンが Cargo.toml に記載されているものより古い場合は、最新の安定版ツールチェーンにアップデートしてください:

      rustup update stable
      
  • LLVMツール
    • LLVMツール(clang、clang++ を含む)が必要です(LLVM 15.0.0 から LLVM 18.1.3 まで)。Debian/Ubuntu を使用している場合も、こちらからパッケージをインストールすることを強くお勧めします。
  • Just:
    • fuzzers/ ディレクトリ内のファザーをビルドするために just を使用します。お使いの環境へのインストール手順は Just Programmer's Manual にあります。

LibAFL リポジトリのクローン

git clone https://github.com/AFLplusplus/LibAFL

ライブラリのビルド

cargo build --release

APIドキュメントのビルド

cargo doc

LibAFL ブック(WIP!)の閲覧(mdbook が必要)

cd docs && mdbook serve

はじめに

すべてのサンプルファザーは ./fuzzers に集められています。それらのドキュメント(およびソース)を必ず読んでください。これが 自然な始め方です!

just run

ファザーディレクトリに Justfile ファイルがあれば、以下のコマンドで各サンプルファザーを実行できます。最もテストされているファザーは ./fuzzers/inprocess/libfuzzer_libpng で、libpng ハーネスに LibAFL を使用するマルチコア libfuzzer ライクなファザーです。

リソース

コントリビューター

LibAFL は以下のメンバーによって作成・管理されています:

コントリビューション

コントリビューションガイドラインについては、CONTRIBUTING.md をご確認ください。

デバッグ

ファザーが期待通りに動作しませんか? DEBUGGING.md を読んで、問題のデバッグ方法を理解してください。

引用

学術研究で LibAFL を使用する場合は、以下の論文を引用してください:

@inproceedings{libafl,
 author       = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},
 title        = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},
 booktitle    = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},
 series       = {CCS '22},
 year         = {2022},
 month        = {November},
 location     = {Los Angeles, U.S.A.},
 publisher    = {ACM},
}

ライセンス

選択により、Apache License, Version 2.0 または MIT license のいずれかの下でライセンスされています。
明示的に別途記載しない限り、Apache-2.0 ライセンスで定義されているように、あなたがこのクレートに含めるために意図的に提出したコントリビューションは、追加の条件なしに上記と同様にデュアルライセンスされるものとします。

カテゴリ