GhostWrite アタックについて説明されているファジングの論文、RISCVuzzの論文を読んでいこうと思う。
RISCVuzzのフレームワークについて。
- テストを制御するサーバ & クライアント (RISC-V CPU)
- クライアントはネットワーク経由で命令シーケンスと入力を受け取り、その結果の状態を返す
クライアントについて。 C言語とRISC-Vアセンブリの混合で実装されており、テストケース毎にレジスタを設定する。 テストケースを実行し、結果をサーバに報告する。 クライアントがセグメンテーションフォルトを検出すると、フォルトが発生したページとそれに続く2つのページをマッピングして、コーナーケースを処理する。
クライアントのノイズ除去について、以下の方針を取る。
- すべてstatic library link を行い、各環境で動作が異なることのないようにする。
- rdcycle命令のような自然なノイズを発生させる命令については、各命令を2回実行し、同じ結果を生成しないものを除去する。
次に、状態保護のために以下のようなポリシを取る。
- レジスタ:ターゲットの命令が不正命令などをトリガすると、カーネルがCPUの状態を保存する。
- メモリ:
- 制御フロー:命令シーケンスが正常に実行されるために、
ebreak
命令をパディングする。
次に、サーバの役目についてまとめる。
- シーケンス生成
- 命令の分類
- 命令の除外
- 命令選択
- 入力のクライアントへの配布
- 差分の記録
- 各アーキテクチャの状態を比較し、差分が見つかった場合、再現ファイルをログに記録する。
次に、評価について。
- 性能:ハードウェア・コアでのテストは、エミュレートされたコアよりも桁違いに高速である。
- スケーラビリティ:複数のコアを使用することで、ファジングのスループットを向上させることができる。シングルコアマシンの場合、複数のマシンを結合して同じ効果を得ることができる。