
GUSTAVEは、組み込みOSカーネル向けのファジングプラットフォームです。QEMUとAFL(およびそのすべてのフォークサーバー関連ツール)に基づいています。OSカーネルをシンプルなアプリケーションのようにファジングすることができます。
(c) Airbus 2021, sduverger
GUSTAVEは、組み込みOSカーネルのためのファジングプラットフォームです。これは QEMU と AFL (およびその forkserver の関連ツール全て) に基づいています。これにより、OSカーネルをシンプルなアプリケーションのようにファジングできます。
QEMUのおかげで、マルチプラットフォーム対応です。GUSTAVEは、QEMU内部でのAFL forkserver 実装であり、細かい粒度でのターゲット検査が可能です。
GUSTAVEは主に組み込みOSカーネルを対象として設計されています。Windows、Linux、macOSなどにみられる大規模で複雑なカーネルをファジングするには最適なツールではないかもしれません。
しかし、ユーザーの操作なしで起動する1つまたは2つのアプリケーションを準備できるターゲットがあるなら、GUSTAVEを試してみる価値があるかもしれません。
AFLプロジェクトのafl-fuzzツールを使用して、ターゲットを自動的にファジングします。ただし、AFLはOSカーネルを直接ファジングできず、生成されたテストケースをターゲットが直接解析することを期待しています。
簡単に言えば、afl-fuzzはGUSTAVE統合版のQEMUをターゲットとして実行します。そしてGUSTAVEは以下を処理します:
AFL++プロジェクトにあるAFL/QEMUユーザーモードと同様に、GUSTAVEはコードカバレッジのためにQEMU TCG IRレベルのバイナリ計装を実装しています。
ただし、これを無効にして、コードカバレッジ解析の対象を特定の部分のみに限定したターゲットカーネルコードを再構築することもできます。その場合は、ビルド時にAFLシムを注入してトレースビットマップを更新する必要があります。それが当初のアプローチでした(出版物参照)。
既存のソリューションではあまり一般的ではありませんが、GUSTAVEはkernel panicsの監視を気にしません。それらは管理されたエラーとみなし、アラームをトリガーしない不正な動作を発見したいと考えています。
その目的のために、GUSTAVEはO(1)のバイト指向メモリフィルタリングビットマップを使用して、カーネルからの不正なアクセスを検出します。カーネルの観点から何が不正と見なされるかを定義することについては大きな議論があるかもしれません。しかし、制限された組み込みの、高度に決定論的な環境では、ファームウェアの正当なメモリ領域を定義し、範囲外のアクセスを追跡することに安心感を得られるかもしれません。
同等のアプローチが存在します。例えば:
GUSTAVEの設計上の選択は以下の違いを意味します:
ただし、GUSTAVEに以下のことを伝える必要があります:
現時点ではx86ホストのみサポートされています。多くの作業環境がこのアーキテクチャに基づいているため、これを大きな制限とは考えていません。
この制限は、QEMUのロード/ストア高速パス用にtcg-targetレベルでメモリフィルタリングバックエンドを当初実装した方法に由来します。最近のTCGPluginメモリコールバックアーキテクチャは、任意のホストをサポートするための代替アプローチとなる可能性があります。
私たちはIntel x86およびPowerPCのサポートを実装しテストしました。GUSTAVEの実装はアーキテクチャに依存しません。QEMUでターゲットを実行できるなら、少しの労力でGUSTAVEを使ってファジングできます。
GUSTAVE統合版のIntel 440FXおよびPowerPC PREPボードの例を提供しています。独自のボードの実装は非常に簡単で、特定のアーキテクチャのMACHINE_INIT関数をラップするだけです。
また、TCGバイナリ計装を進めたくない場合に備えて、afl-gccにx86およびPowerPC GUSTAVE計装シムのサポートを追加しました。
私たちはPOKマイクロカーネル固有の開発を提供します:
以下が必要です:
マニュアルを読んでPOKターゲットの詳細を確認してください。
GUSTAVEに関するさまざまな講演の資料は、https://airbus-seclab.github.io/ で見つけることができます。