FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

GhostWriteの論文を読む (2. RISCVuzzの仕組み)

GhostWrite アタックについて説明されているファジングの論文、RISCVuzzの論文を読んでいこうと思う。

ghostwriteattack.com


RISCVuzzのフレームワークについて。

  • テストを制御するサーバ & クライアント (RISC-V CPU)
    • クライアントはネットワーク経由で命令シーケンスと入力を受け取り、その結果の状態を返す

クライアントについて。 C言語とRISC-Vアセンブリの混合で実装されており、テストケース毎にレジスタを設定する。 テストケースを実行し、結果をサーバに報告する。 クライアントがセグメンテーションフォルトを検出すると、フォルトが発生したページとそれに続く2つのページをマッピングして、コーナーケースを処理する。

クライアントのノイズ除去について、以下の方針を取る。

  • すべてstatic library link を行い、各環境で動作が異なることのないようにする。
  • rdcycle命令のような自然なノイズを発生させる命令については、各命令を2回実行し、同じ結果を生成しないものを除去する。

次に、状態保護のために以下のようなポリシを取る。

  • レジスタ:ターゲットの命令が不正命令などをトリガすると、カーネルがCPUの状態を保存する。
  • メモリ:
  • 制御フロー:命令シーケンスが正常に実行されるために、ebreak命令をパディングする。

次に、サーバの役目についてまとめる。

  • シーケンス生成
    • 命令の分類
    • 命令の除外
    • 命令選択
  • 入力のクライアントへの配布
  • 差分の記録
    • 各アーキテクチャの状態を比較し、差分が見つかった場合、再現ファイルをログに記録する。

次に、評価について。

  • 性能:ハードウェア・コアでのテストは、エミュレートされたコアよりも桁違いに高速である。
  • スケーラビリティ:複数のコアを使用することで、ファジングのスループットを向上させることができる。シングルコアマシンの場合、複数のマシンを結合して同じ効果を得ることができる。