
高度なファジングライブラリ - 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)Linuxディストリビューションのパッケージは古い可能性が高いため、使用しないことを強くお勧めします。代わりに Rust を直接インストールしてください。手順はこちらにあります。
最小サポートRustバージョンが定義されています。現在必要なバージョンは LibAFL の Cargo.toml で確認できます。
インストールされている Rust のバージョンが Cargo.toml に記載されているものより古い場合は、最新の安定版ツールチェーンにアップデートしてください:
rustup update stable
fuzzers/ ディレクトリ内のファザーをビルドするために just を使用します。お使いの環境へのインストール手順は Just Programmer's Manual にあります。LibAFL リポジトリのクローンgit clone https://github.com/AFLplusplus/LibAFL
cargo build --release
cargo doc
LibAFL ブック(WIP!)の閲覧(mdbook が必要)cd docs && mdbook serve
すべてのサンプルファザーは ./fuzzers に集められています。それらのドキュメント(およびソース)を必ず読んでください。これが 自然な始め方です!
just run
ファザーディレクトリに Justfile ファイルがあれば、以下のコマンドで各サンプルファザーを実行できます。最もテストされているファザーは ./fuzzers/inprocess/libfuzzer_libpng で、libpng ハーネスに LibAFL を使用するマルチコア libfuzzer ライクなファザーです。
LibAFL ブック(WIP)オンライン または リポジトリlibaf_qemu に関するブログ記事 Hacking TMNF - ゲームサーバーのファジング、作者:RickdeJager。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},
}