コンテンツにスキップ

syzkaller - カバレッジガイド付きカーネル ファザー チートシート

syzkaller - カバレッジガイド付きカーネル ファザー チートシート

syzkallerはGoogleの監視されていない、カバレッジガイド付きカーネル ファザーです。宣言型言語(syzlang)で記述されたシーケンスのsyscallを生成し、VM内で実行し、カーネル カバレッジ(KCOV)を使用して変異をコード未検査に操舵し、カーネル サニタイザーを介してクラッシュを検出します。入力なしで継続的に実行し、数千のLinuxカーネル バグを検出した—syzbot連続ファジング システムはそれに構築されています。また、BSD、Fuchsia、Windowsを含む他のカーネルもサポートします。

ファジングはデザインでカーネルをクラッシュさせます。常に使い捨てVM内で実行し、気にかけるマシンでは決して実行しないでください。

前提条件

RequirementNote
Go toolchainsyzkallerをビルド
Kernel sourceKCOV、KASAN、デバッグ情報でビルド
VM supportQEMU/KVM、GCE、またはフィジカル ボード
Disk imageゲスト用の最小ルートfs

ビルド

git clone https://github.com/google/syzkaller
cd syzkaller && make
BinaryRole
syz-managerVM、コーパス、レポートを オーケストレーション
syz-fuzzerゲスト内で実行、プログラム生成
syz-executorゲスト内で syscall プログラムを実行
syz-reproクラッシュを再ジューサーに最小化
syz-prog2csyzプログラムをCに変換

必須カーネル設定

OptionPurpose
CONFIG_KCOV=yカバレッジ フィードバック(エッセンシャル)
CONFIG_KASAN=yメモリー エラー検出
CONFIG_DEBUG_INFO=yシンボル化レポート
CONFIG_KASAN_INLINE=yより高速なKASAN
CONFIG_FAULT_INJECTION=yエラー パス探索
CONFIG_DEBUG_KMEMLEAK=yリーク検出(オプション)

KCOVなしでファザーはブラインド—カバレッジ フィードバックはそれを有効ではなくランダムより使用します。

マネージャー設定

{
  "target": "linux/amd64",
  "http": "127.0.0.1:56741",
  "workdir": "/home/user/syzkaller/workdir",
  "kernel_obj": "/home/user/linux",
  "image": "/home/user/image/bullseye.img",
  "sshkey": "/home/user/image/bullseye.id_rsa",
  "syzkaller": "/home/user/syzkaller",
  "procs": 8,
  "type": "qemu",
  "vm": { "count": 4, "kernel": "/home/user/linux/arch/x86/boot/bzImage", "cpu": 2, "mem": 2048 }
}
./bin/syz-manager -config my.cfg
FieldPurpose
targetテスト下のOS/arch
kernel_objカーネル ビルド ディレクトリー(シンボル化用)
image / sshkeyゲスト rootfs およびアクセス
procsVM当たり並列ファジング プロセス
vm.count同時VM数
httpWeb ダッシュボード アドレス

Webダッシュボード

ViewShows
Crashesユニーク クラッシュ タイトル +カウント
Corpusカバレッジに寄与するプログラム
Coverage到達されるカーネル ファイル/ライン
StatsExec レート、VM ヘルス

カバレッジは監視する数字です:プラトーの場合、ファザーは syscall 説明が到達できるものを枯渇してきました。

syzlang(Syscall説明)

# 簡略化された例:syscall の引数構造を説明
open(file ptr[in, filename], flags flags[open_flags], mode flags[open_mode]) fd
read(fd fd, buf buffer[out], count len[buf])

優れた説明はファザーが十分に有効なプログラムをビルドし、深いコード に到達することができます。sys/linux/*.txtを拡張して、テスト不足のサブシステムはしばしば最高値の貢献です。

クラッシュを再現

CommandPurpose
Automaticマネージャーは新しいクラッシュでsyz-reproを実行
syz-repro -config my.cfg crash.log手動で最小化
syz-prog2c -prog repro.syzスタンドアロンC再ジューサーを発行
C reproducerバグ レポートに添付する内容

syzkaller対他のファザー

AspectsyzkallerAFL++libFuzzer
TargetOSカーネル(syscall)ユーザースペース バイナリーインプロセス ライブラリー
InputSyscallプログラムファイル/stdinバイト バッファー
FeedbackKCOVエッジ カバレッジSanitizerCoverage
Best forカーネル バグ狩り一般的なバイナリー ファジングライブラリー API

ユーザースペース ターゲット用にAFL++またはhonggfuzzを使用;syzkallerはカーネル syscall 境界向けに特別に構築されています。

リソース