コンテンツにスキップ

LibAFL - モジュール型ファジング フレームワーク チートシート

LibAFL - モジュール型ファジング フレームワーク チートシート

LibAFLはファジング フレームワークで、ファザーではなく。Rustで書かれた合成可能ビルディング ブロック—オブザーバー、フィードバック、変異子、スケジューラー、ステージ、実行者—をターゲットに合わせたファザーに集約します。動機は単形式ファザーは従来型ターゲットで良好に動作し、異常なターゲット(カスタム プロトコル、エミュレートされたファームウェア、カーネル、文法)で不幸であり、それでツールと闘います。LibAFLでターゲットが必要なファザーを構築し、マルチコア スケーリングを無料で取得します。

ファザーをビルドするのは1つを実行することはより多くの作業です。オフザシェルフ ツール本当にフィットしない場合のみLibAFLに到達します。

セットアップ

StepCommand
New projectcargo new my_fuzzer && cd my_fuzzer
Add LibAFLcargo add libafl libafl_bolts
Target instrumentationcargo add libafl_targets(またはlibafl_qemulibafl_frida
Buildcargo build --release

コア概念

ComponentRole
Inputファジング対象(バイト、文法木、syscall)
Observer実行中にデータを記録(カバレッジ マップ、タイミング)
Feedback実行が「興味深い」かどうかを決定
Objective実行がソリューション(クラッシュ)かどうかを決定
Corpus興味深い入力のストレージ
Mutator入力を変形
Scheduler次の実行する入力を選択
Stage入力ごとに適用されるフェーズ(変異、トリミング、キャリブレーション)
Executor入力でターゲットを実行

最小限のファザー(形状)

// 概念的な構造—LibAFLの例で完全なコードを参照
let mut feedback = MaxMapFeedback::new(&edges_observer);
let mut objective = CrashFeedback::new();

let mut state = StdState::new(
    StdRand::with_seed(current_nanos()),
    InMemoryCorpus::new(),
    OnDiskCorpus::new("./crashes")?,
    &mut feedback,
    &mut objective,
)?;

let scheduler = QueueScheduler::new();
let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective);

let mut executor = InProcessExecutor::new(
    &mut harness, tuple_list!(edges_observer), &mut fuzzer, &mut state, &mut mgr,
)?;

let mutator = StdScheduledMutator::new(havoc_mutations());
let mut stages = tuple_list!(StdMutationalStage::new(mutator));

fuzzer.fuzz_loop(&mut stages, &mut executor, &mut state, &mut mgr)?;

実行者(ターゲットが実行される方法)

ExecutorUse
InProcessExecutor最速;同一プロセスでハーネス
ForkserverExecutorAFL形式 forkserver 外部バイナリー
CommandExecutor入力ごとに外部コマンド実行
libafl_qemuエミュレートされたターゲット / バイナリーのみのファジング
libafl_frida動的計測(バイナリーのみ)
libafl_nyxスナップショット ベースVM ファジング

フィードバック

FeedbackInteresting when
MaxMapFeedback新しいカバレッジ エッジ ヒット
TimeFeedback実行時間変更
CrashFeedbackターゲット クラッシュ(目標)
TimeoutFeedbackターゲット ハング(目標)
NewHashFeedback新しいユニーク クラッシュ スタック
Combinatorsfeedback_or!feedback_and!で合成

変異子

MutatorDoes
havoc_mutations()標準AFL スタイルのランダム 変異
tokens_mutations()辞書/トークン 挿入
Grammar mutators構造対応 生成
Customカスタム 入力タイプ用 Mutator トレイト 実装

カスタム 入力タイプ プラス カスタム 変異子はLibAFLを選ぶ主な理由です—プロトコルまたはASTインテリジェントにファジングするのではなくバイト フリップではなく。

マルチコア スケーリング

MechanismNote
LlmpRestartingEventManagerコア間 低オーバーヘッド メッセージ パッシング
Launcher共有コーパス 単一ファザーがコア実行
Corpus sync興味深い 入力が インスタンス間に伝播
Restartingファザー プロセスの クラッシュから生き残ります

LibAFL対オフザシェルフ ファザー

AspectLibAFLAFL++honggfuzz
Model独自に構築実行用準備実行用準備
Effort高い低い低い
Flexibility合計設定可能設定可能
Best for異常なターゲット、研究標準バイナリー高速スタート、ハードウェア フィードバック

AFL++またはhonggfuzzで開始;LibAFLにターゲットが理由を述べることができない場合に移動。

リソース