
LibAFL v0.16.0
高度なファジングライブラリ - Rustでファザーを組み立てよう!コアやマシンを越えてスケール。Windows、Android、MacOS、Linux、no_std対応、...
LibAFL、ファザーライブラリ
高度なファジングライブラリ - 独自のファザーを組み合わせ、Rustを使用して機能を拡張しましょう。
LibAFL は、Rustで書かれた再利用可能なファザーの部品のコレクションであり、市販のファザーの利点の多くを提供しながら、完全にカスタマイズ可能です。
現在の主な特徴は次のとおりです:
fast: コンパイル時にできる限りのことを行い、ランタイムのオーバーヘッドを最小限に抑えます。ユーザーはスマートフォン上の frida モードで(全コア使用)120k execs/sec を達成しています。scalable:Low Level Message Passing(略称LLMP)により、LibAFLはコア数にほぼ線形にスケーリングし、TCP経由で複数のマシンにもスケーリングできます。adaptable:LibAFLの各部品を置き換えることができます。例えば、BytesInputは入力形式の一例に過ぎません。構造化ファジングのためのASTベースの入力を自由に追加できます。multi platform:LibAFLは Windows、macOS、iOS、Linux、Android などで動作します。LibAFLはno_stdモードでビルドでき、組み込みデバイスやハイパーバイザーなどの特殊なターゲットに注入できます。bring your own target: Frida-Mode などのバイナリのみのモードと、ソースベースのインストルメンテーションのための複数のコンパイルパスをサポートしています。もちろん、カスタムのインストルメンテーションバックエンドを追加するのも簡単です。
コアコンセプト
LibAFL は高速、マルチプラットフォーム、no_std 互換で、コアやマシン間でスケーリングします。カスタムファザーのためのビルディングブロックを提供するメインクレート libafl、ターゲットインストルメンテーションに使用できる共通コードを含むライブラリ libafl_targets、およびコンパイラをラップする機能を提供するライブラリ libafl_cc を提供します。また、人気のインストルメンテーションフレームワークとの統合も提供しています。現在サポートされているバックエンドは次のとおりです:
SanitizerCoverage、libafl_targets 内Frida、libafl_frida 内QEMUユーザーモードおよびシステムモード(エミュレーション用フック含む)、libafl_qemu 内TinyInst、libafl_tinyinst 内(作者:elbiazo)
ビルドとインストール
依存関係のインストール
- 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 ライクなファザーです。
リソース
- インストールガイド
- オンライン API ドキュメント
LibAFLブック(WIP)オンライン または リポジトリ- 研究論文
- RC3 トーク(コアコンセプトの説明)
- Fuzzcon Europe トーク(いくつかのサンプルファザーの構築方法に関するステップバイステップの議論(少し古いですが、それほどではありません))
- Fuzzing101 の解答とブログ記事シリーズ(作者:epi)
- バイナリのみのファジングライブラリ
libaf_qemuに関するブログ記事 Hacking TMNF - ゲームサーバーのファジング、作者:RickdeJager。 - LibAFL 入門ワークショップ、作者:Jordan Whitehead
コントリビューター
LibAFL は以下のメンバーによって作成・管理されています:
- Andrea Fioraldi [email protected]
- Dominik Maier [email protected]
- s1341 [email protected]
- Dongjia Zhang [email protected]
- Addison Crump [email protected]
- Romain Malmain [email protected]
コントリビューション
コントリビューションガイドラインについては、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 ライセンスで定義されているように、あなたがこのクレートに含めるために意図的に提出したコントリビューションは、追加の条件なしに上記と同様にデュアルライセンスされるものとします。