SockFuzzer: XNUカーネルファジングフレームワーク
プロジェクトの現状
SockFuzzerは、元々はmacOSやiOSで使用されているXNUカーネルに特化したネットワーク中心のファザーとして設計されましたが、現在では包括的なカーネルファジングフレームワークへと進化しています。そのルーツを称えて元の名前を維持しつつ、SockFuzzerは現在、BSD、Mach、仮想メモリなど、幅広いカーネルサブシステムをカバーしています。このプロジェクトは、XNUカーネルをライブラリに変換し、ユーザースペースで「起動」してファジングできるようにするという独自のアプローチを実装しており、複数のサブシステムにわたる効率的な脆弱性の発見と再現を可能にします。
プロジェクトの目標
- 管理された環境でXNUカーネルを包括的にテストする
- さまざまなXNUサブシステムにわたる脆弱性を発見および再現する
- XNUセキュリティの継続的なファジングと改善のためのフレームワークを提供する
- カーネル研究における高度なファジング技術の実装の価値を実証する
- 複雑なカーネル相互作用とサブシステムの効率的なテストを可能にする
アーキテクチャ概要
SockFuzzerは、ホスト/「XNUゲスト」設計を採用しており、XNUカーネルはライブラリとしてコンパイルされ、カスタムユーザースペース環境内で実行されます。このアーキテクチャは、いくつかの主要なコンポーネントで構成されています。
- ホスト環境
- XNUゲストライブラリ
- カスタムスケジューラ(Concurrenceベース)
- ファジングエンジン(Googleのfuzztestプロジェクト由来のCentipede)
- テストランナーとハーネス
ホスト環境
ホスト環境は、XNUゲストライブラリを実行し、ファジングプロセスを管理するための基盤を提供します。これには以下が含まれます。
- コアカーネルサービスのカスタム実装
- ホストとXNUゲスト間の通信のためのハイパーコールインターフェース
- ファズテストを実行するためのテストランナーとハーネス
XNUゲストライブラリ
XNUカーネルは、ユーザースペースで実行するための最小限の変更を加えて、ライブラリ(libxnu)としてコンパイルされます。主な側面は次のとおりです。
- ホストシンボルとの競合を避けるためのシンボルプレフィックス化と管理
- バージョンスクリプトを通じた内部XNU関数の選択的な公開
- BSD、Mach、仮想メモリ、スレッド、プロセスなど、複数のサブシステムのサポート
- 仮想メモリサポートのためのnull pmapレイヤー(将来的にはARM pmapのサポートを計画中)
カスタムスケジューラ
改良されたConcurrenceプロジェクトに基づき、カスタムスケジューラは現在、完全なスレッド機能をサポートしています。
- Executor: スレッドの作成、削除、およびコンテキストスイッチを提供
- FuzzedScheduler: スレッド状態とスケジューリング決定を管理
- 適切なマルチスレッドサポートのためのXNUゲストライブラリとの統合
テストランナーとハーネス
テストランナーとハーネスは、ファズテストの実行を管理し、以下を提供します。
- XNUゲスト環境の初期化
- さまざまなサブシステムにわたるファズ入力の実行
- クラッシュの検出とレポート
主な機能
- 包括的なXNUカーネルカバレッジ: BSD、Mach、仮想メモリ、スレッド、プロセスなど複数のサブシステムをテスト
- ユーザースペースでのXNU実行: 制御されたユーザースペース環境でXNUカーネルコンポーネントを実行
- 完全なスレッドサポート: 改良されたConcurrenceを活用した適切なマルチスレッド機能
- 仮想メモリサポート: null pmapレイヤーを利用し、ARM pmapサポートを計画
- MIGファジング: Machインターフェースジェネレータ(MIG)インターフェースのファジングをサポート
- ハイパーコールインターフェース: ホストとXNUゲストコンポーネント間の通信を促進
サポートされている機能
- BSD
- Mach
- 仮想メモリ(null pmapレイヤー使用)
- スレッドとプロセス
- ネットワーキング
- Machメッセージ
- MIGインターフェース
ワークフロー
- XNUカーネルは、必要な変更を加えてライブラリとしてコンパイルされます
- ホスト環境がXNUゲストライブラリとカスタムスケジューラを初期化します
- Centipedeは、protobuf定義を使用して構造化入力を生成します
- テストハーネスは入力を実行し、syscall、Machメッセージ、その他のカーネルインターフェースを呼び出します
- カスタムスケジューラがXNUゲスト内のスレッド実行を管理します
- ASANがメモリ破損の問題を監視します
- クラッシュとカバレッジ情報が収集され、分析されます
制限事項と今後の作業
- IOKitサポート: 現在の実装はIOKitサブシステムをサポートしていません
- バイナリのみのファジング: 現在のアプローチは、すべてのモジュールを含むわけではないソースコードに依存しています
今後の作業には以下が含まれます。
- IOKitサポートの実装
- 仮想メモリのためのARM pmapサポートの統合
- バイナリのみのファジングシナリオへの技術適合
- XNUサブシステムのカバレッジとサポートの拡大を継続
公開リリースの制限事項
このリポジトリを適切に構造化された状態に保つために、xnu、bootstrap_cmds、およびその他のいくつかのライブラリなど、いくつかの依存関係はユーザー自身がthird_partyに追加する必要があります。