見出し画像

ハードウェアセキュリティ検査システムMicroFuzz

杉山 優一(すぎやま ゆういち)

 杉山君は,ソフトウェアセキュリティ検査で利用されるファジングという技術を使って,ハードウェアであるプロセッサのセキュリティ検査を行うためのMicroFuzzというシステムを開発した.

 バグというと,一般的にはソフトウェアに含まれるものと考えられているが,今日のプロセッサでは,その実装にマイクロアーキテクチャを利用しているものが多く,そのコードにバグが含まれているとプロセッサ自身がバグを抱えることになる.

 たとえば,近年ではSpectreやMeltdownといったプロセッサのバグによってソフトウェアの保護機構をすり抜けるような問題も発生している.

 プロセッサ設計のステップは図-1のようになっているが,製造までの各ステップにおいてバグが入り込む余地があり,少なくともRTL (Register Transfer Level)実装の前にはバグを見つけ出し,修正しておかなければならない.

杉山01

図-1 プロセッサ設計のステップ

 本プロジェクトの特徴は,これまでプロセッサのテスト手法としてあまり注目されてこなかったファジングを用いて,RISC-Vプロセッサ向けのファザーであるMicroFuzzを開発し,従来のRISC-Vプロセッサのテストツールに比べて効率良くRISC-Vプロセッサのテストを可能にしたことである.

 従来のRISC-VテストツールであるRISC-V Complianceは事前に用意されたユニットテストであるため,テスト対象となる各プロセッサのマイクロアーキテクチャ実装に合わせたテストが行えず,テストカバレッジが限られていた.MicroFuzzは実行時の情報を利用することで,テスト対象となる各プロセッサのマイクロアーキテクチャに合わせた命令列を生成し,高いテストカバレッジを達成できる.

 実際のファザーの動作と全体像を図-2に示す.ファザーは以下の6つの操作で構成され,(1) から (6) の操作を順に実行し,それら一連の操作を繰り返す.
(1)スケジューラはシード集合からシード入力を選択する
(2)変異アルゴリズムを用いてシード入力の一部を変更した入力(テストケース)を作成する
(3)RTLシミュレータ上でその入力(テストケース)を用いてテスト対象のRISC-Vプロセッサを実行する
(4)監視プログラムはテスト対象のRISC-Vプロセッサの動作を監視し,実行時の情報をファザーにフィードバックする
(5)ファザーはフィードバックされた情報に基づいて入力(テストケース)を評価し,重要な入力(テストケース)を選別する
(6)重要な入力はサイズが縮小され,シード集合に追加される

杉山02

図-2 MicroFuzzの動作の構造

 上記のようなシステムを完成させたことはもちろんであるが,特筆すべきは実際に既存のテストツールを用いてすでにテストを行っているRISC-Vプロセッサからも,MicroFuzzによって未発見のバグ・脆弱性を発見することができたことである.

 実際に検出したバグは以下の杉山君のGitHubアカウントにおいて公開されており,実際のシステムを開発しただけでなく,しっかりとこのシステムでバグを見つけたことは素晴らしい.

https://github.com/lowRISC/ibex/issues/1277
https://github.com/lowRISC/ibex/issues/1282
https://github.com/rsd-devel/rsd/issues/37
https://github.com/rsd-devel/rsd/issues/38
https://github.com/rsd-devel/rsd/issues/39

 (田中邦裕PM担当)

[統括PM追記] ハードウェアにもバグがある.昔,竹内も仲間と自作したプロセッサにバグがあり,LSIチップを作り直す予算はないので,それらのバグを回避しながらその上にリアルタイムOSを書いたことを思い出した.実際にLSIにする前にこういうテストが行えていたらと思うと,技術の進歩,というか杉山君の力を実感せざるを得ない.

(2021年6月30日受付)
(2021年8月15日note公開)