以下、図面を参照しながら本発明の各実施の形態について説明する。なお、以下の説明において、略又は実質的に同一の機能及び構成要素については、同一符号を付し、必要に応じて説明を行う。
[第1の実施形態]
本実施形態においては、安全であることを必要とするセキュアOS(オペレーティングシステム:Operating System)(保護OS)と、安全であることを必要としない非セキュアOS(非保護OS)とで、アドレス変換のためのページテーブルの管理を切り替える。
セキュアOSは、改ざん検証により保護される。非セキュアOSのデータは、検証により保護される必要がない。一方で、非セキュアOSの誤動作による不正改変から、同一のシステム上に共存するセキュアOSのイメージを守るために、非セキュアOSのメモリアクセス範囲を限定するためのページテーブルは、検証により保護される。
図1は、本実施形態に係るメモリ管理装置の構成を例示するブロック図である。
メモリ管理装置1は、外部入出力部2、アドレス変換部3、検証計算部4、検証部5、更新部6、置換管理部40、判定部41、初期化部42を備える。
また、メモリ管理装置1は、第1の記憶部である外部メモリ7と、第2の記憶部である内部メモリ8と、第3の記憶部であるキャッシュメモリ45と、に対して、読み込み及び書き込みを行う。
外部メモリ7は、例えば、不揮発性の記憶装置である。例えば、外部メモリ7は、NAND型フラッシュメモリ、NOR型フラッシュメモリ、MRAM(Magnetoresistive Random access memory:磁気抵抗メモリ)、PRAM(Phase change Random access memory:相変化メモリ)、ReRAM(Resistive Random access memory:抵抗変化型メモリ)、FeRAM(Ferroelectric Random Access Memory)などの不揮発性半導体メモリでもよい。外部メモリ7は、主記憶装置として用いられてもよく、ハードディスク、SSD(Solid State Drive)などのような補助記憶装置として用いられてもよい。
外部メモリ7は、階層構造を持つページテーブルツリー9と、階層構造を持つ検証子ツリー10とを記憶する。本実施形態において、ページテーブルツリー9と検証子ツリー10とは、2段の階層を持つ。しかしながら、ページテーブルツリー9と検証子ツリー10とは当然に3段以上でもよい。
ページテーブルツリー9は、複数のページテーブルの階層構造で形成される。ページテーブルツリー9は、親テーブル101及び子テーブル201〜20mを含む。テーブルエントリEがアドレス情報Xを備えており、アドレス情報Xが最終のデータDのアクセス先を決定するための中間のテーブルT又はデータDを指している場合、テーブルエントリEは、テーブルT又はデータDを参照しているという。テーブルエントリEの参照先アドレスは、アドレス情報Xである。テーブルT又はデータDの参照元は、テーブルエントリEである。親テーブル101に含まれる親エントリpe1〜pemは、子テーブル201〜20mを参照するために用いられる。子テーブル201,20mに含まれる子エントリce1〜cexは、データ301〜30xを参照するために用いられる。
本実施形態では、典型的な例として、ページテーブルツリー9において、親テーブル101の親エントリpe1、子テーブル201の子エントリce1を経由して、データ301がアクセスされる場合を説明する。しかしながら、他の親テーブル、他の親エントリ、他の子テーブル、他の子エントリを経由して他のデータがアクセスされる場合も同様である。
検証子ツリー10は、親検証子pv1〜pvm及び子検証子cv1〜cvxを含む階層構造を持つ。親検証子pv1〜pvmは、親テーブル101に関連付けられる。子検証子cv1〜cvnは、子テーブル201に関連付けられる。他の子検証子と他の子テーブルとの関係についても、子検証子cv1〜cvnと子テーブル201との関係と同様である。
本実施形態において、子テーブル201と関連付けられている子検証子cv1〜cvnは、それぞれ、子テーブル201に含まれている子エントリce1〜cenによって参照されるデータ301〜30nに対する検証に用いられる。
親テーブル101と関連付けられている親検証子pv1は、親テーブル201に含まれている親エントリpe1によって参照される子テーブル201と、子テーブル201と関連付けられている子検証子cv1〜cvnとに対する検証に用いられる。他の親検証子と他の子テーブル及び他の子検証子との関係についても、親検証子pv1と子テーブル201及び子検証子cv1〜cvnとの関係と同様である。
内部メモリ8は、外部から直接参照不可能な記憶装置であり、不正なアクセスから防御される。例えば、内部メモリ8は、プロセッサパッケージ内部の記憶装置である。具体的には、内部メモリ8は、例えば、下記の第2の実施形態で説明される図2で、プロセッサ501のパッケージと一体化したハードウェアであり、内部バス515bを経由して外部バス504との間でデータ転送が行われるが、データ転送はプロセッサ501の命令実行ユニット505で実行された命令に基づいて行われる。内部メモリ8の内容は、外部バス504を経由して直接読み出し及び書き換えることはできないことを前提とする。このような内部メモリ8と同様の特徴を持つメモリを、安全なメモリと呼ぶ。これとは逆に、外部メモリ7は、外部バス504を経由して任意のアドレスに対して読み出し及び書き換えが可能であり、安全なメモリとは異なる。
内部メモリ8は、外部メモリ7と同じ物理アドレス空間に配置される。内部メモリ8は、命令実行ユニット505で実行されるソフトウェアから外部メモリ7と同様にアクセス可能である。
内部メモリ8は、ページテーブルツリー9の一部であり、第1のアドレスを第2のアドレスに変換するためのセキュアページテーブルツリー121、検証子ツリー10のうちの一部であるセキュア検証子ツリー122を記憶する。内部メモリ8は、親テーブル101と親検証子pv1〜pvmとの検証に用いられるルート検証情報13を備える。
アドレス変換部3は、内部メモリ8に記憶されている親テーブル101の親エントリpe1〜pem及び子テーブル201〜20mの子エントリce1〜cexを経由してデータ301〜30xの物理アドレスを求める。
外部メモリ7から内部メモリ8へ親テーブル101がコピー(移動又は読み込み)される場合には、この親テーブル101に関連付けられている親検証子pv1〜pvmも、外部メモリ7から内部メモリ8へコピーされる。
本実施形態において、ページテーブル又はデータは、外部メモリ7から、改ざんに対して安全な内部メモリ8にコピーされ、検証される。内部メモリ8のページテーブル又はデータが変更され、その後内部メモリ8から削除される場合には、変更された内部メモリ8のページテーブル又はデータは、外部メモリ7に書き出される。内部メモリ8のページテーブル又はデータが変更されることなく内部メモリ8から削除される場合には、内部メモリ8のページテーブル又はデータは、書き出されてもよく又はそのまま破棄されもよい。以下において、外部メモリ7と内部メモリ8との間でのページテーブル又はデータのコピーを、ページテーブル又はデータを移動する、読み込む、又は書き出す、と表現する場合がある。例えば、ページテーブルの参照先が内部メモリ8にコピーされたページテーブル又はデータに変更されることを、ページテーブル又はデータの移動又は読み込み、と表現する場合がある。この場合に、外部メモリ7のコピー元のページテーブル又はデータは、消去されなくてもよい。
外部メモリ7から内部メモリ8へ子テーブル201がコピーされる場合には、この子テーブル201に関連付けられている子検証子cv1〜cvnも、外部メモリ7から内部メモリ8へコピーされる。
外部入出力部2は、外部メモリ7に記憶されているページテーブルツリー9と検証子ツリー10とに対する読み込み及び書き込みを行う。
判定部41は、OSの種別がセキュアOSか又は非セキュアOSかを、予め判定しておく。例えば、OSの種別は、ページテーブルツリー9及び検証子ツリー10の生成とともに、予めOSのイメージから取得され、ルート検証情報13に含められる。例えば、判定部41は、新規データの割り当てを要求するOSの種別を、OSのイメージに付されているヘッダ又はフッタに基づいて判定する。
初期化部42は、OSのブートイメージを分割して得られる部分ブートイメージを参照するために必要なページテーブルが、外部メモリ7におけるページテーブルツリー9に組み込まれた場合に、組み込まれたページテーブルのエントリに、初期化状態の完了を示す情報を設定する。
第1に、外部メモリ7から内部メモリ8へ子テーブル201及び子検証子cv1〜cvnがコピーされる場合の例を説明する。
アドレス変換部3は、内部メモリ8に記憶されているセキュアページテーブルツリー121に基づいて、仮想アドレスを物理アドレスに変換する。また、アドレス変換部3は、仮想アドレスを物理アドレスに変換するために必要な子テーブル201がセキュアページテーブルツリー121に含まれていない場合に、テーブル不足通知(フォールト)14を検証計算部4に送り、更新された後のセキュアページテーブルツリー121に基づいて、仮想アドレスを物理アドレスに変換する。
検証計算部4は、テーブル不足通知14をアドレス変換部3から受けた場合に、外部入出力部2経由で、外部メモリ7のページテーブルツリー9の子テーブル201と検証子ツリー10の子検証子cv1〜cvnとを読み込み、読み込まれた子テーブル201と子検証子cv1〜cvnとに基づいて検証情報15を計算し、検証情報15を検証部5に送る。
検証部5は、検証計算部4によって計算された検証情報15と、セキュアページテーブルツリー121において参照元エントリpe1を含んでいる親テーブル101に関連付けられている親検証子pv1とに基づいて、検証情報15と親検証子pv1とが整合するか否か判断し、検証を行い、検証結果16を更新部6に送る。
更新部6は、検証部5から検証結果16を受け、検証結果16が正当の場合、内部メモリ8のセキュアページテーブルツリー121に子テーブル201を組み込み、セキュア検証子ツリー122に子検証子cv1〜cvnを組み込む。より具体的には、更新前に、親テーブル101の親エントリpe1は、外部メモリ7のページテーブルツリー9に含まれている子テーブル201を参照しているとする。更新部6は、セキュアページテーブルツリー121における更新前の親テーブル101の親エントリpe1を、内部メモリ8におけるセキュアページテーブルツリー121に組み込まれた子テーブル201を参照するように、更新する。
本実施形態に係るメモリ管理装置1では、例えば、検証結果16の確認に先立って、外部入出力部2が、内部メモリ8に子テーブル201及び子検証子cv1〜cvnを読み込み、検証結果16が正当な場合に、セキュアページテーブルツリー121及びセキュア検証子ツリー122に、子テーブル201及び子検証子cv1〜cvを組み込むとしてもよい。
このように、本実施形態において、子テーブル201が内部メモリ8に記憶されておらず、外部メモリ7から内部メモリ8へ子テーブル201及び子検証子cv1〜cvnがコピーされる場合には、親テーブル101の親エントリpe1は、外部メモリ7の子テーブル201を参照する。子テーブル201が内部メモリ8に記憶された場合には、内部メモリ8の親テーブル101の親エントリpe1は、内部メモリ8の子テーブル201を参照するように更新される。
本実施形態において、親テーブル101が内部メモリ8に記憶されておらず、外部メモリ7から内部メモリ8へ親テーブル101及び親検証子pv1〜pvnがコピーされる場合には、検証計算部4は、外部メモリ7から読み込まれた親テーブル101、親検証子pv1〜pvn、外部メモリ7の親テーブル101の記憶されている物理アドレスに基づいて検証情報を生成する。外部メモリ7における親テーブル101の物理アドレスを用いて検証情報を生成することにより、親テーブル101の入れ替え攻撃に対して防御することができる。検証部5は、ルート検証情報13と生成された検証情報に基づいて検証を行う。更新部6は、検証結果が正当の場合に、セキュアページテーブルツリー121に、外部メモリ7から読み込まれた親テーブル101を組み込み、セキュア検証子ツリー122に、外部メモリ7から読み込まれた親検証子pv1〜pvnを組み込む。
第2に、セキュアOSにおいて、外部メモリ7から内部メモリ8データ301がコピーされる場合の例を説明する。
アドレス変換部3は、仮想アドレスを変換した物理アドレスが外部メモリ7を参照している場合に、データ読み込み通知17を検証計算部4及び置換管理部40に送る。
例えば、アドレス変換部3は、データ参照先が外部メモリ7か否かを判断することなく、参照データの内部メモリ8への読み込み状態を予めページテーブル内の有効/無効フラグにより管理し、データ参照先の判断を高速化してもよい。内部メモリ8に記憶されているデータを参照するセキュアページテーブルツリー121のテーブルエントリには、有効フラグがセットされる。セキュアOSにおいて、外部メモリ7に記憶されているデータを参照するセキュアページテーブルツリー121のテーブルエントリには、無効フラグがセットされている。アドレス変換部3は、アドレス変換のページフォールトが発生した場合に、外部メモリ7のページテーブル又はデータを、内部メモリ8にコピーする。アドレス変換部3は、参照されるデータが内部メモリ8に記憶されている場合、ページフォールトを発生することなく、高速にデータを参照することができる。
検証計算部4は、データ読み込み通知17をアドレス変換部3から受けた場合、外部入出力部2経由で物理アドレスによって参照される外部メモリ7のデータ301を読み込み、読み込まれたデータ301、外部メモリ7のデータ301の記憶されている物理アドレスに基づいてデータ検証情報18を計算し、データ検証情報18を検証部5に送る。外部メモリ7におけるデータの物理アドレスを用いてデータ検証情報18を生成することにより、データ301の入れ替え攻撃に対して防御することができる。
検証部5は、検証計算部4によって計算されたデータ検証情報18と、セキュアページテーブルツリー121において参照元の子テーブル201に関連付けられている子検証子cv1とに基づいて、データ検証情報18と子検証子cv1とが整合するか否か判断するデータ検証を行い、データ検証結果19を更新部6に送る。
更新部6は、検証部5からデータ検証結果19を受け、データ検証結果19が正当の場合、内部メモリ8のセキュアページテーブルツリー121に、データ301を組み込む。より具体的には、更新前に、子テーブル201の子エントリce1は、外部メモリ7のページテーブルツリー9に含まれているデータ301を参照しているとする。更新部6は、セキュアページテーブルツリー121における更新前の子テーブル201の子エントリce1を、内部メモリ8におけるデータ301を参照するように更新する。
本実施形態に係るメモリ管理装置1では、例えば、データ検証結果19の確認に先立って、外部入出力部2が、内部メモリ8にデータ301を読み込んでおき、データ検証結果19が正当な場合に、セキュアページテーブルツリー121に、データ301を組み込むとしてもよい。
このように、本実施形態において、データ301が内部メモリ8に記憶されておらず、外部メモリ7から内部メモリ8へデータ301がコピーされる場合には、子テーブル201の子エントリce1は、外部メモリ7のデータ301を参照する。データ301が内部メモリ8に記憶された場合には、内部メモリ8の子テーブル201の子エントリce1は、内部メモリ8のデータ301を参照するように更新される。
仮想アドレスは、親テーブル101の親エントリpe1、子テーブル201の子エントリce1を経由してデータ301の物理アドレスに変換される。参照されるデータ301は、物理アドレスの示す安全な内部メモリ8に記憶されている。このようなアドレス解決により参照される全てのテーブルとデータは、検証で正当と判断されており、安全な内部メモリ8に配置されている。
第3に、セキュアOSにおいて、内部メモリ8から外部メモリ7へデータ301がコピー(書き出し)される場合の例を説明する。
検証計算部4は、アドレス変換を要求したOSがセキュアOSであり、内部メモリ8に記憶されているデータ301を外部メモリ7に記憶する場合に、内部メモリ8のデータ301に基づいて子検証子(データ検証情報)cv1を計算する。
外部入出力部2は、データ301を外部メモリ7に記憶する。
更新部6は、セキュアページテーブルツリー121における子テーブル201の子エントリ(物理アドレス)ce1の参照先を、外部メモリ7におけるデータ301の記憶位置に更新する。さらに、更新部6は、検証計算部4によって計算された子検証子cv1を、セキュアページテーブルツリー121における子テーブル201に関連付けてセキュア検証子ツリー122に組み込む。例えば、更新部6は、内部メモリ8のデータ301がセキュアページテーブルツリー121から参照されていない場合に、子テーブル201の子エントリce1を無効状態とする。次に、データ301が参照されたときはページフォールトが発生し、上述の処理にしたがって外部メモリ7のデータ301の検証と内部メモリ8へのコピーが行われる。
本実施形態において、更新部6は、セキュアページテーブルツリー121が子テーブル201を含まない場合に、親テーブル101の親エントリpe1を無効状態とし、セキュアページテーブルツリー121が子テーブル201を組み込んだ場合に、親テーブル101の親エントリpe1を有効状態とする。
更新部6は、内部メモリ8がデータ301を記憶していない場合に、子テーブル201の子エントリce1を無効状態とし、内部メモリ8がデータ301を記憶している場合に、子テーブル201の子エントリce1を有効状態とする。
上記第1及び第2の例において、置換管理部40は、例えばアドレス変換部3からデータ読み込み通知17を受けた場合などのように、内部メモリ8にテーブル又はデータが記憶される場合に、内部メモリ8の空き領域の容量を確認する。置換管理部40は、内部メモリ8の空き領域の容量が不足する場合に、メモリ解放(削除)されるために選択された内部メモリ8のテーブル又はデータに対する検証情報要求46を検証計算部4に送る。置換管理部40は、検証計算部4から、検証情報要求46の応答として、内部メモリ8の選択されたテーブル又はデータに対する検証子を受ける。そして、置換管理部40は、内部メモリ8の選択されたテーブル又はデータ及びその検証子を、外部入出力部2経由で外部メモリ7に書き出し、内部メモリ8における選択されたテーブル又はデータの領域を解放し、内部メモリ8の空き領域を増やす。
第4に、非セキュアOSにおいて、メモリ管理装置1が外部メモリ7に記憶されているデータ301を読み込む場合の例を説明する。
非セキュアOSのセキュアページテーブルツリー121において、外部メモリ7に記憶されているデータ301を参照するテーブルエントリには、有効状態が設定されている。
アドレス変換部3は、非セキュアOSのセキュアページテーブルツリー121に基づいて、仮想アドレスを外部メモリ7における物理アドレスに変換する。
外部入出力部2は、変換された物理アドレスに基づいて、参照対象のデータ301を、外部メモリ7から読み込み、例えばキャッシュメモリ45に記憶する。
第5に、非セキュアOSにおいて、メモリ管理装置1が外部メモリ7のデータ301を参照する子テーブル201を外部メモリ7へ記憶する場合の例を説明する。
更新部6は、非セキュアOSのセキュアページテーブルツリー121において、子テーブル201を、外部入出力部2経由で、外部メモリ7のページテーブルツリー9に組み込む。ここで、組み込まれる子テーブル201における子エントリce1には、外部メモリ7におけるデータ301の物理アドレスと有効状態とが設定されている。
更新部6は、セキュアページテーブルツリー121の子テーブル201を参照する上位の親エントリpe1に、無効状態を設定する。
第6に、非セキュアOSにおいて、メモリ管理装置1が外部メモリ7に記憶されている子テーブル201を読み込む場合の例を説明する。
メモリ管理装置1は、上記第1の例と同様の処理により、外部メモリ7に記憶されている子テーブル201を読み込み、セキュア検証子ツリー122に基づく検証処理を実行し、内部メモリ8のセキュアページテーブルツリー121に子テーブル201を組み込む。ここで、セキュアページテーブルツリー121に組み込まれた子テーブル201の子エントリce1には、有効状態と外部メモリ7のデータ301の物理アドレスが設定されている。
更新部6は、セキュアページテーブルツリー121の子テーブル201を参照する上位の親エントリpe1に、有効状態を設定する。
第7に、OSのブート処理の例を説明する。
本実施形態において、OSのブートイメージは、このブートイメージを分割して得られる部分ブートイメージごとにメモリ管理装置1に読み込まれる。
OSのブートイメージに付されているブートイメージヘッダは、ブートイメージの署名情報を含むとする。
外部入出力部2は、OSのブート処理において、外部メモリ7から、選択された部分ブートイメージ(例えばデータ301〜30x)を逐次取得する。
検証計算部4は、外部入出力部2から選択された部分ブートイメージ301〜30xを逐次受ける。検証計算部4は、選択された部分ブートイメージ301〜30xの検証子と、選択された部分ブートイメージ301〜30xを参照するために必要なページテーブルに対する検証のための検証子とを逐次生成する。また、検証計算部4は、部分ブートイメージ301〜30xの署名情報を逐次生成する。
更新部6は、部分ブートイメージ301〜30xの検証子とページテーブルの検証子とを、内部メモリ8に逐次記憶する。
更新部6は、外部入出力部2経由で、内部メモリ8における選択された部分ブートイメージ301〜30xの検証子、選択された部分ブートイメージ301〜30xを参照するために必要なページテーブル、このページテーブルに対する検証のための検証子を、外部メモリ7におけるページテーブルツリー9と検証子ツリー10に組み込む。
初期化部42は、選択された部分ブートイメージ301〜30xを参照するために必要なページテーブルが外部メモリ7におけるページテーブルツリー9に組み込まれた場合に、組み込まれたページテーブルのエントリに、初期化状態の完了を示す情報を設定する。
検証部5は、ブートイメージの署名情報と、逐次生成された選択された部分ブートイメージ301〜30xの署名情報とに基づいて、検証を行う。検証部5は、検証が成功の場合には、OSを有効とし、ルート検証情報13を設定する。検証部5は、検証が失敗の場合には、ページテーブルツリー9及び検証子ツリー10を破棄し、OSを無効とする。
以下で、本実施形態に係る効果について説明する。
本実施形態においては、非セキュアOSのデータが内部メモリ8に読み込まれることなく、外部メモリ7に配置されたままで使用される。本実施形態においては、非セキュアOSのデータに対して検証を省略することができ、スループットを向上させることができる。本実施形態においては、非セキュアOSが攻撃者に乗っ取られた場合であっても、他のセキュアOS及び他のソフトウェアに被害が及ぶことを防止することができる。
本実施形態においては、内部メモリ8より大きなサイズのブートイメージをロードし、ページテーブルツリー9及び検証子ツリー10を生成し、OSを起動させることができる。
本実施形態においては、ブートイメージの署名情報に基づいて、ブートイメージに対する検証を行うことができる。
本実施形態においては、ページテーブルツリー9及び検証子ツリー10のうち使用可能な部分に対して初期化が完了していることを認識することができる。このため、ブート処理中であっても、初期化の完了している部分を使ってOSを起動させることができ、立ち上げ処理を迅速化することができる。
本実施形態においては、外部メモリ7に記憶されたページテーブルツリー9、検証子ツリー10、データ301〜30xのうちの必要な部分を選択的に検証することができ、検証された必要な部分を外部メモリ7よりも小容量の内部メモリ8に記憶することができる。これにより、外部メモリ7に対する物理攻撃を検出することができ、データの完全性を検証し、データの改ざんを防止することができる。本実施形態においては、改ざん検証後にページテーブルツリー9、検証子ツリー10及びデータ301〜30xが改ざんされることを検出することができ、情報処理装置の安全性を向上させることができる。
本実施形態に係る検証は、仮想化技術に対して適用され、内部メモリ8に記憶されたセキュアページテーブルツリー121、セキュア検証子ツリー122を参照することにより、ゲストOS及びアプリケーションを変更することなく容易に適用することができる。
本実施形態においては、ページテーブルと検証子との階層構造が合致しており、さらに、ページテーブルと検証子とが一体で検証される。換言すれば、ページテーブルツリー9と検証子ツリー10とは同じグラフ構造を持つ。これにより、検証子がページング対象の場合であっても、検証子の配置先アドレスを解決する必要がない。また、ページテーブルと検証子とを階層構造で管理する。したがって、セキュアページテーブルツリー121、セキュア検証子ツリー122、ページテーブルツリー9、検証子ツリー10をアドレス空間の不連続なメモリ領域に配置することができ、メモリを効率的に利用することができる。本実施形態においては、検証子を階層構造で管理することにより、効率的に管理することができる。
本実施形態においては、ページテーブル及びデータが内部メモリ8に記憶されているか否かを、上位のページテーブルのエントリが有効か無効かで管理する。これにより、汎用のハードウェアであるアドレス変換機構を利用して効率よく、ページテーブル及びデータが内部メモリ8に記憶されているか否かを判断することができる。
本実施形態に係るメモリ管理装置1の各種の構成要素はハードウェアで実現されてもよく、メモリ管理プログラムによって制御されるプロセッサによって実現されてもよい。プロセッサは、メモリ管理プログラムによって制御されることにより、上記のメモリ管理装置1と同様のメモリ管理方法を実施する。
[第2の実施形態]
本実施形態においては、上記第1の実施形態に係るメモリ管理装置1を備える情報処理装置について説明する。
図2は、本実施形態に係る情報処理装置を例示するハードウェア構成図である。
情報処理装置500は、プロセッサ501、外部メモリ7、外部デバイス503、外部バス504を備える。プロセッサ501、外部メモリ7、外部デバイス503は、外部バス504を介して、データ、信号、命令を互いに送受信可能とする。
情報処理装置500の仮想化支援機構は、例えば、2ステージのアドレス変換を実行する。
プロセッサ501は、命令実行ユニット(プロセッサコア)505、MMU(Memory Management Unit)506、キャッシュメモリ507a〜507c、セキュアブートローダ508aを記憶するマスクROM(Read Only Memory)508、アドレス変換キャッシュ(TLB:Translation Lookaside Buffer)509a,509b、内部メモリ8、セキュアDMA(Direct Memory Access)コントローラ511、入出力デバイス512、鍵保存ユニット513、内部バス515a,515bを備える。プロセッサ501の各種の構成要素は、内部バス515a,515bを介して、データ、信号、命令を互いに送受信可能とする。
外部メモリ7は、セキュアVMM(Virtual Machine Monitor)516、セキュアOS517、非セキュアOS518を記憶する。
本実施形態において、セキュアOS517、非セキュアOS518は、セキュアVMM516によって管理されるゲストOSとする。
外部デバイス503は、例えばハードディスク又はメモリカードなどのような不揮発性記憶装置である。
プロセッサ501の命令実行ユニット505は、階層化されたキャッシュメモリ507a〜507cを用いてデータ参照を行う。以下では、まず、アドレス変換の後に行われるデータ参照について説明し、次に、アドレス変換について説明する。
キャッシュメモリ507aは、データ用1次キャッシュメモリである。キャッシュメモリ507bは、データ及び命令用の1次キャッシュメモリである。キャッシュメモリ507cは、データ及び命令用の2次統合キャッシュメモリである。
命令実行ユニット505は、キャッシュメモリ507cに記憶されているデータ又は命令を、内部メモリ8又は外部メモリ7に記憶されているデータ又は命令よりも高速に参照可能である。また、命令実行ユニット505は、キャッシュメモリ507a,507bを、キャッシュメモリ507cよりも高速にアクセス可能である。
命令実行ユニット505は、キャッシュメモリ507a〜507c又は内部メモリ8からデータ又は命令を読み込み、処理を実行する。
キャッシュメモリ507a,507bが参照対象データを記憶している場合には、キャッシュメモリ507c、及び、内部メモリ8へのデータ参照は実行されない。
キャッシュメモリ507a,507bが参照対象データを記憶しておらず、キャッシュメモリ507cが参照対象データを記憶している場合には、内部メモリ8へのデータ参照は実行されない。これにより、データ参照が短時間で行われる。
なお、内部メモリ8から読み込まれるデータは、内部メモリ8から、キャッシュメモリ507cを経由することなく、キャッシュメモリ507a,507bに記憶されてもよい。
鍵保存ユニット513は、ルート検証情報13と、情報処理装置500における暗号化又は検証に使用される鍵情報とを記憶する。
セキュアDMAコントローラ511は、各種の構成要素間のデータ転送を行う。セキュアDMAコントローラ511は、例えば、ハードウェアによって実装され、MAC値計算を実行する。しかしながら、MAC値計算は、ソフトウェアで実行されてもよい。
情報処理装置500は、仮想記憶管理とメモリ検証処理とを連携して実行する。本実施形態では、主記憶装置に不揮発性半導体メモリを使用する。本実施形態では、階層構造を持つページテーブルツリー9と階層構造を持つ検証子ツリー10とを生成する。ページテーブルツリー9と検証子ツリー10とは、互いに階層構造が整合する。ページテーブルツリー9と検証子ツリー10とは、不揮発性の外部メモリ7に保存され、必要に応じて一部が内部メモリ8にコピーされる。外部メモリ7は不揮発性の記憶装置であるため、電源がOFFされ、その後に電源がONされた場合に、電源OFF前の記憶状態を維持する。
例えば、CPU(Central Processing Unit)、MPU(Micro-Processing Unit)などのようなプロセッサのパッケージと主記憶装置とを一体化した一体型ハードウェアでは、上述のようなデータの窃視・改ざん、及び、物理的攻撃が困難である。しかしながら、一体型ハードウェアは一般に高価であるため、汎用プロセッサパッケージと汎用メモリとの組み合わせで、安全な処理を可能にする技術が求められる。
本実施形態においては、プロセッサ501のパッケージ内部に設けられた内部メモリ8は、ハードウェア的な攻撃から安全であると仮定する。ただし、不正なソフトウェアを実行させることで、内部メモリ8からデータを出力させる攻撃は可能であると仮定する。情報処理装置500への攻撃者は、任意のタイミングで外部メモリ7の任意の位置を自由に書き換えることができると仮定する。
データ改ざんから保護されるメモリ領域、及び、暗号化されるメモリ領域を、保護メモリとする。
情報処理装置500の主記憶装置に対する攻撃を防ぎ、脅威を取り除くために、安全性とシステム構成との観点から、以下の第1乃至第5の条件を満たすことが要求される。
第1の条件は、安全性に関する条件である。第1の条件では、リプレイ攻撃を含むデータの改ざんを厳密に検出可能であることが要求される。
第2の条件は、ハードウェア構成に関する条件である。第2の条件は、専用のハードウェアが不要であることを要求する。より具体的に説明すると、第2の条件は、メモリ改ざん検証専用のハードウェアが不要であることを要求する。第2の条件は、多数のプロセッサが備えるアドレス変換機構、仮想化支援機構、プロセッサ内の汎用内部メモリ、高速化補助機構、DMAコントローラと連携した高速暗号エンジンに基づいて、攻撃を防ぎ、脅威を取り除くことを要求する。また、第2の条件は、ファームウェアなどのソフトウェアに基づく処理が可能であることを要求する。さらに、第2の条件は、仮想化技術との親和性が高いことを要求する。第2の条件は、安全な内部メモリ8のメモリサイズが1メガバイト程度のように小さくても動作可能であることを要求する。
第3の条件は、メモリに関する条件である。第3の条件は、大容量のメモリ、例えば32ビットのアドレス空間もしくはそれを越えるサイズのメモリに適用可能であることを要求する。第3の条件は、メモリの検証対象領域が選択可能なことを要求する。第3の条件は、保護対象のメモリ領域をメモリマップ上でいくつもの不連続な領域に配置可能であり、メモリの必要な部分だけを選択的に改ざん検証の対象にできることを要求する。第3の条件は、メモリのうち選択的に改ざん検証対象に定められた選択領域を定義するデータそのものも、攻撃から保護可能であることを要求する。第3の条件は、保護対象のメモリ領域の配置が不連続の場合であっても、選択領域だけを検証可能なことに加えて、選択領域を除く他の領域に対して検証子用のメモリ領域の確保を不要とし、メモリを効率的に利用可能なことを要求する。
第4の条件は、ソフトウェア構成と安全性とに関する条件である。第4の条件は、OS全体を保護対象とすることができることを要求する。第4の条件は、改ざん検証が不要な外部との通信用ハードウェアなどは改ざん検証対象とせず非選択領域とすることができることを要求する。第4の条件は、透過性を有すること、換言すれば、OS及びアプリケーションを修正する必要がないことを要求する。第4の条件は、OSに不具合があって不正な命令が実行された場合に、当該OS自身が破壊され誤動作することは許容してもその誤動作によってメモリ改ざん検証機能が検証の迂回又は制御情報の破壊に対して安全であり頑健であることを要求する。
第5の条件は、処理の効率性に関する条件である。第5の条件は、例えばメモリアクセスごとの改ざん検証の要・不要の判定などのような頻繁に発生する処理はできる限りハードウェアにより実行することで効率化することを要求する。
本実施形態においては、不揮発性の主記憶装置が適用されることを想定し、セキュア検証子ツリー122に基づく検証を行い、セキュアページテーブルツリー121に基づいて多段階のアドレス変換を行い、仮想化技術を想定し、上記の第1乃至第4の条件を満たす情報処理装置500を実現する。
本実施形態には、主要なポイントが4つある。まず、本実施形態の第1のポイントを説明する。
第1のポイントは、アドレス透過性の担保、未検証データ参照の検出機能の提供に関する。具体的には、ゲストOSによるデータ参照が発生した場合に、まずセキュアVMM516がページテーブルエントリを確認し、内部メモリ8を経由した検証が必要な場合に、外部メモリ7のデータを内部メモリ8に動的に確保されているバッファメモリに記憶する。
内部メモリ8を経由した検証に成功した場合に、ゲストOSのデータ参照先の実態である物理メモリのデータが、本来の外部メモリ7のデータから、内部メモリ8の配置先アドレスのデータに代わるように、セキュアVMM516が、管理されているセキュアページテーブルツリー121(例えば後述の図3に示すステージ2ページテーブルツリー)を書き換える。
ゲストOSは、参照先の変更を認識する必要がない。このため、本実施形態に係る検証を導入してもゲストOSを変更する必要はなく、ゲストOSの透過性を得ることができる。
なお、内部メモリ8の書き込み単位はページだが、書き込み単位を小さくしてキャッシュメモリを含むプロセッサ501全体のメモリ利用効率を向上させるために、外部メモリ7から、キャッシュメモリ507a,507b,507cを経由して、命令実行ユニット505がデータを取得する場合には、ページテーブルエントリの参照先を変更することなく、外部メモリ7からキャッシュメモリ507a,507b,507cへデータがコピーされる際に、検証が行われてもよい。この場合、キャッシュメモリからの読み込みと検証処理とを連動させるハードウェア機構が必要となる。
改ざん防止には、外部メモリ7への参照の検出と、検証の実行と、そして検証済みデータの安全な内部メモリ8へのコピー(読み込み)と、参照先の変更とが必要である。ハードウェアキャッシュが用いられる場合には、キャッシュメモリ507cへの読み込みに対応する参照先変更がソフトウェアの介在なしに専用ハードウェア機構によって行われるため、ゲストOSに対するアドレス透過性が保証される。これに対して、ファームウェアによる検証では、検証済みデータの配置先は元のデータのアドレスと異なるため、ゲストOSから何らかの方法で参照先の変更を隠ぺいしなければ、ゲストOSの変更が必要となり、ゲストOSに対するアドレス透過性が担保されない。
本実施形態は、検証済みデータを改ざんなどの攻撃から守り、かつ、内部メモリ8へのコピーをゲストOSから隠蔽するために、2段階のアドレス変換を行う仮想化支援機構を利用し、外部メモリ7から内部メモリ8へのデータ読み込み後にセキュアページテーブルツリー121のデータ参照先を変更することで、セキュアOS517に対するアドレス透過性を実現する。
本実施形態では、セキュアOS517における未検証データの参照を検出する。このために、本実施形態では、セキュアOS517に対して、初期状態においてセキュアページテーブルツリー121のエントリを「無効」としておき、ページテーブル又はデータの検証と読み込みに成功した場合にセキュアページテーブルツリー121のエントリを「有効」とする。これにより、セキュアOS517における未読み込みのページテーブル又はデータの検出を、汎用のハードウェアであるアドレス変換機構を利用して効率よく行うことができる。
次に、本実施形態の第2のポイントを説明する。
第2のポイントは、セキュアページテーブルツリー121とセキュア検証子ツリー122の階層構造とを整合させることに関する。本実施形態では、大規模データの検証を可能にするために、外部メモリ7から内部メモリ8への読み込み状態を管理する。本実施形態では、透過的な改ざん検証をファームウェアの処理で実現するために、アドレス変換機構を活用する。もし、アドレス変換機構の動作が妨害され、例えば内部メモリ8が参照されるべきであるにもかかわらず外部メモリ7が参照された場合などのように、不正操作が行われた場合、上記の検証と読み込みデータの保護は正しく機能しない。したがって、本実施形態では、アドレス変換機構の動作を攻撃から守る。
アドレス変換機構は、ページテーブルを参照し、アドレス変換を行う。ページテーブルは、内部メモリ8に配置されており、仮想アドレスを物理アドレスに変換するための定義情報である。アドレス空間が広くなると、ページテーブルを記憶するために必要なサイズも大きくなる。単純にページテーブルのアドレス空間を物理メモリに固定的に確保することは、情報処理装置にとって大きな負担となる。このため、ページテーブルのアドレス空間を小さくする2つの方法がある。第1の方法は、ページテーブルを階層化し、内部メモリ8の階層的なページテーブルを参照し、ページテーブル自体をページングの対象とする。第2の方法は、第1の方法における階層化と関連する。この第2の方法は、内部メモリ8のメモリ空間の中で参照が不要な部分のテーブル定義状態を未定義のままとし、不連続なメモリ空間定義を許可することでテーブル量を削減する。
アドレス変換機構は、多くのプロセッサに備えられる汎用的な機構である。しかしながら、ページテーブルのページング又は未定義状態を無制限に許すことは、ページング時に正当なページテーブル又はデータを不当なページテーブル又はデータにすり替える、又は、定義されたページテーブル又はデータを一度未定義に書き換えた後に再度初期化する、などの攻撃を引き起こす可能性がある。特に、不揮発性メモリシステムでは、内部メモリ8ではない他の全てのメモリのデータが改ざんされる可能性がある。よって、MMUによって参照されるページテーブル又はデータは、すべて検証された後に内部メモリ8に配置される必要がある。上述のように、ページテーブルのデータサイズは大きい。したがって、ページテーブルに対する検証を伴うページング処理が必要となる。ページテーブルを階層化すると、どのレベルのテーブルまで検証と読み込みが完了しているかに関する状態管理、及び、各テーブルの参照頻度に応じた状態管理が必要となる。
さらに、ページテーブル又はデータに対する検証処理も、限られた容量の内部メモリ8を作業領域として完結する必要がある。単純な検証の方法として、データに対する検証子とは別に、ページテーブル専用の検証子を設ける方法が考えられる。しかしながら、階層的なページテーブルはメモリ上の参照関係によって定義されており、必ずしも連続したアドレス領域にマップされていない。例えば、ページテーブルの第1のエントリがアドレス空間上の最下位番地に配置され、第2のエントリが最上位番地に配置され、第1のエントリと第2のエントリとが参照関係を持つことが、仕様上可能である。このような不連続なページテーブルに対して、連続したアドレス領域に記憶される検証子を適用することは、非効率的である。加えて、検証子も、ページテーブルと同様に階層的な構成を持つ場合、検証子のどの段階まで検証が完了しているか認識し、かつ、検証子の検証済みの部分を再利用するための状態管理を行う必要がある。
そこで、本実施形態では、第2のポイントとして、ページテーブルの階層構造と検証子の階層構造とを整合させている。ページテーブルの階層構造と検証子の階層構造とを整合させ、ページテーブルと検証子とが他の検証子によって保護される。本実施形態では、ページテーブルと検証子とで整合した階層構造を持つことで、ページテーブルと検証子との読み込み状態及び検証状態の管理を共通化し、階層構造のデータ管理の処理負荷を軽減する。そして、情報処理装置500は、広大かつ不連続に定義されたアドレス領域に対して、効率よく検証子を割り当て、安全に管理する。
例えば、1ページテーブルに512個のエントリを格納する3階層のセキュアページテーブルツリー121は、グラフとしては、3階層の512分木のグラフである。このようなセキュアページテーブルツリー121に対するセキュア検証子ツリー122は、セキュアページテーブルツリー121と同様に、3階層の512分木のグラフとし、両者の構造を整合させる。これにより、セキュアページテーブルツリー121とセキュア検証子ツリー122の読み込み状態及び検証状態の管理単位が整合する。
外部メモリ7から内部メモリ8へ未読み込みのページテーブル又はデータに対する参照と未読み込みの検証子に対する参照との検出がそれぞれ個別に行われた場合、VMMによる処理では、ページテーブル又はデータ、及び検証子に対する参照が発生するたびにゲストOSからVMMへの切り替えが発生し、切り替えのオーバーヘッドが大きくなる。本実施形態では、ページテーブルと検証子との階層構造を整合させ、未読み込みのページテーブル及び未読み込みの検証子の2種類の制御データに対する参照の検出を同時に行う。これにより、ゲストOSからセキュアVMM516への切り替え回数を低減させ、さらに処理負荷を軽減させることができる。
次に、本実施形態の第3のポイントを説明する。
多くの機器では、全ての処理に対して完全性を検証する必要はない。オーバーヘッドが増加する完全性検証を実行することよりも、完全性検証を省略してスループットを向上させることを優先すべき場合がある。そこで、本実施形態においては、非セキュアOS518に対しては、データの改ざん検証を省略する。
しかしながら、非セキュアOS518の脆弱性に対して攻撃された場合、又は、外部メモリ7の非セキュアOS518の改ざんを通じて非セキュアOS518が攻撃者に乗っ取られた場合であっても、セキュアOS517及びセキュアVMM516のデータの改ざんを防止する必要がある。本実施形態においては、非セキュアOS518が攻撃された場合であってもセキュアOS517を安全に共存させる。
このために、本実施形態では、外部メモリ7に記憶されている非セキュアOS518用のページテーブルツリー9(例えば、ステージ2ページテーブルであり、以下、未検証ページテーブルともいう)がN階層の場合に、この非セキュアOS518用のページテーブルツリー9の1階層からN−1階層までのページテーブルに含まれているテーブルエントリを、無効状態とする。この非セキュアOS518用のページテーブルツリー9の1階層からN−1階層までのページテーブルに含まれているテーブルエントリは、外部メモリ7から内部メモリ8にコピーされる場合に、有効状態とされる。
また、本実施形態では、非セキュアOS518用のページテーブルツリー9のN階層のページテーブルに含まれているテーブルエントリを、有効状態に設定する。このN階層のページテーブルは、データを参照する。
本実施形態においては、N階層のページテーブルが外部メモリ7から内部メモリ8へコピーされる場合には、このN階層のページテーブルは改ざんの検証が実行される。しかしながら、本実施形態では、外部メモリ8に記憶されている非セキュアOS518のデータは、セキュアページテーブルツリー121のN階層のページテーブルに基づいて読み込まれ、内部メモリ8に記憶されることなく、検証もされず、キャッシュメモリ507a〜507cに記憶される。命令実行ユニット505は、キャッシュメモリ507a〜507cに記憶されている非セキュアOS518のデータを受ける。
このため、本実施形態において、非セキュアOS518のデータに対する参照では、検証が実行されず、非セキュアOS518によって参照されるデータが内部メモリ8を占有することもなく、情報処理装置500の処理ペナルティを小さくすることができる。
さらに、本実施形態では、非セキュアOS518に対するデータの改ざん検証を省略するために、外部メモリ7に記憶されているページテーブルツリー9に基づいてアクセス可能なアドレス領域を、セキュアOS517及びセキュアVMM516の作業領域のアドレス領域と区別する。
次に、本実施形態の第4のポイントを説明する。
本実施形態においては、情報処理装置500の起動からページテーブルツリー9及び検証子ツリー10の生成までの処理を安全に実行する。第1の機器が情報処理装置500を備え、別の第2の機器が情報処理装置500と同種の情報処理装置を備える場合に、この第2の機器のメモリに第1の機器の外部メモリ7の内容を複写することで行われるデータの不正利用を防止するために、情報処理装置500に固有の秘密鍵に基づいて検証子ツリー10が生成される。
同種の情報処理装置500においては、起動のための初期のOSイメージは同じ場合が多い。情報処理装置500にこの初期のOSイメージが取得された後、ブート処理が実行され、OSイメージが情報処理装置500によって利用される。
本実施形態では、ゲストOSのページテーブルツリー9及び検証子ツリー10の生成とブート処理とを共存させる。初期状態ではページテーブルツリー9及び検証子ツリー10が未生成である。本実施形態では、ページテーブルツリー9及び検証子ツリー10の生成されていない非安全な状態から、ページテーブルツリー9及び検証子ツリー10が生成された安全な状態になるまでの処理を説明する。
本実施形態において、セキュアブートローダ508aは、プロセッサ501内のマスクROM508に記憶されている。セキュアブートローダ508aは、プロセッサ501内部でセキュアブートされ、内部メモリ8に記憶される。セキュアブートローダ508aは、ゲストOSのブートイメージの改ざん防止のために、検証を行う。
典型的には、ブートイメージには署名情報が付される。この署名情報は、大きなサイズのブートイメージ全体に対して付される。例えば、ゲストOSのブートイメージのサイズは、安全な内部メモリ8のサイズよりも大きい場合がある。この場合、ブートイメージの全体を内部メモリ8に記憶し署名検証を実行することはできない。署名計算のために、ブートイメージが分割されて得られる部分ブートイメージが内部メモリ8に記憶される場合には、既に署名計算が終了して外部メモリ7に記憶された部分ブートイメージが、改ざんされる可能性がある。
このため、本実施形態では、ゲストOSのブートイメージのうちの一部である部分ブートイメージを読み込み、読み込み済みの部分ブートイメージに対して検証子ツリー10を生成し、外部メモリ7に書き出された部分ブートイメージに対する改ざんを検出する。これにより、限られたサイズの内部メモリ8を備えた情報処理装置500において、安全にゲストOSのブートイメージの署名検証を実行することができ、さらに、検証後の部分ブートイメージの改ざんを防止することができる。
本実施形態においては、起動時の署名検証とページテーブルツリー9及び検証子ツリー10の生成とを並行して行うことにより、署名検証とページテーブルツリー9及び検証子ツリー10の生成とをそれぞれ単独に行う場合よりもブート時間を短縮する。
本実施形態においては、ページテーブルツリー9において未初期化の部分が残っていても処理を開始する。これにより、巨大なメモリ領域を割り当てられたゲストOSが起動される場合に、割り当てられたメモリ領域のうち、必要な部分の初期化とページテーブルツリー9及び検証子ツリー10の生成とが完了した時点で、ゲストOSを稼働することができ、さらに起動時間を短縮することができる。
本実施形態においては、メモリ領域が利用可能か否かを示す初期化状態情報を管理する。これにより、ゲストOSが将来利用可能なメモリ領域に対して未初期化のままであってもゲストOSのサービス開始が可能となり、立ち上げを高速化できる。
未初期化のメモリ領域には、ページテーブル及び検証子が配置されておらず、後でページテーブル及び検証子が配置される。セキュアブートローダ508aは、この未初期化のメモリ領域を参照する最上位のページテーブルエントリに、未初期化であることを示す初期化状態情報を設定する。この初期化状態情報の設定されているページエントリを含むページテーブルは、検証子ツリー10に基づいて保護されている。このため、未初期化であることを示す初期化状態情報を含むページエントリを攻撃者が変更しても、この攻撃は検出される。よって、情報処理装置500は、未初期化のメモリ領域に不正データを挿入する攻撃から防御される。
ゲストOSが未初期化のメモリ領域に対応する中間物理アドレス(Intermediate Physical Address)領域を利用したい場合、ゲストOSからセキュアVMM516に対して利用したい中間物理アドレス領域の初期化要求を明示的に発行する。初期化要求を受け取ったセキュアVMM516は、外部メモリ7及び内部メモリ8にメモリ領域を確保し、例えばゼロなどの所定の初期値でメモリ領域を初期化する。セキュアブートローダ508aは、部分ブートイメージのロードを繰り返しながら、ページテーブルツリー9と検証子ツリー10を生成する。
(2ステージのアドレス変換)
図3は、2ステージのアドレス変換を実行する構成を例示するブロック図である。
セキュアOS517上でアプリケーション520a〜520cが実行され、非セキュアOS518上でアプリケーション521a〜521cが実行される。
セキュアOS517のゲストページテーブル522a〜522cは、アプリケーション520a〜520cの仮想アドレスから中間物理アドレスへの変換を定義する。
セキュアOS517は、ゲストページテーブル522a〜522cに基づいて、仮想アドレスを中間物理アドレスに変換する。
非セキュアOS518のゲストページテーブル523a〜523cは、アプリケーション521a〜521cの仮想アドレスから中間物理アドレスへの変換を定義する。
非セキュアOS518は、ゲストページテーブル523a〜523cに基づいて、仮想アドレスを中間物理アドレスに変換する。
セキュアVMM516のVMMページテーブル524は、セキュアOS517の中間物理アドレスから物理アドレスへの変換を定義する。
セキュアVMM516のVMMページテーブル525は、非セキュアOS518の中間物理アドレスから物理アドレスへの変換を定義する。
セキュアVMM516は、VMMページテーブル524,525に基づいて、中間物理アドレスを物理アドレスに変換する。
ここでは、複数のアプリケーション520a〜520c,521a〜521cのうちのアプリケーション520aに基づくアドレス変換について説明するが、他のアプリケーション520b〜520c,521a〜521cに基づくアドレス変換も同様である。
2ステージのアドレス変換では、まずステージ1で、セキュアOS517によるアドレス変換が実行され、次にステージ2で、セキュアVMM516によるアドレス変換が実行される。セキュアOS517は、セキュアVMM516によって管理されるゲストOSである。セキュアOS517によって制御されるアプリケーション520aは、ゲストページテーブル522aと対応付けられる。
アプリケーション520aは、命令読み込み要求及びデータアクセス要求を仮想アドレスとして発行する。セキュアOS517は、仮想アドレスを、ゲストページテーブル522aの定義に基づいて中間物理アドレスに変換する。中間物理アドレスのメモリ領域は、予めセキュアVMM516によって各ゲストOSに割り当てられている。各ゲストOSは、割り当てられたメモリ領域を、ゲストページテーブルの定義に基づいて、さらに稼働中のアプリケーションに割り当てる。
セキュアVMM516は、中間物理アドレスを、セキュアVMM516によって管理されるVMMページテーブル524の定義に基づいて、物理アドレスに変換する。仮想アドレスとして発行された要求は、この物理アドレスを用いて処理される。
(セキュアページテーブルツリー121のデータ構造)
図4は、アドレス変換とデータ参照とを実行するハードウェア構成及びセキュアページテーブルツリー121のデータ構造を例示するブロック図である。
この図4で示されるセキュアページテーブルツリー121は、例えば、4ギガバイトの仮想アドレス空間を持つ。セキュアページテーブルツリー121のデータ構造は、様々なアーキテクチャで適用可能である。特定のアーキテクチャでは、物理ページ拡張のため、ステージ1とステージ2でページテーブルのサイズが異なるが、本実施形態では、ステージ1とステージ2とで同一形式のページテーブルが使用される場合を例として説明する。
プロセッサ501は、MMU506を備える。MMU506は、セキュアページテーブルツリー121の最上位を示すレジスタ526を備える。
レジスタ526は、物理アドレスにより最上位のページテーブルT101の上位20ビットを示す。4キロバイト単位で構成されるページテーブルの下位12ビットは省略される。レジスタ526によってインデックスされる最上位のページテーブルT101は、テーブルエントリE101-0〜E101-3を含む。各テーブルエントリは、8バイトであり、次のレベルのページテーブルへのインデックスと、次のレベルのページテーブルが有効か無効かを示す有効/無効ビットを持つ。
各テーブルエントリから次レベルのページテーブルへの参照は、ポインタにより行われる。ゆえに、各ページテーブルT101,T101-1,T101-1-0は、メモリでどのような順序で配置されてもよい。同じレベルのページテーブル、例えばレベル2のページテーブルT101-1〜T101-n(nは2以上の自然数)についても、メモリにおいてどのような順序で配置されてもよい。
ページテーブルT101-1-0のテーブルエントリE101-1-0〜E101-1-511は、それぞれ、データB101-0-0〜B101-511-511を参照する。
図5は、本実施形態に係るブロックの定義を例示する概念図である。
本実施形態では、ページテーブルツリー9、検証子ツリー10、セキュアページテーブルツリー121、セキュア検証子ツリー122を構成するページ単位のブロックを、ページブロックと呼ぶ。ページブロックは、テーブルブロック又はデータブロックである。
アドレス解決に使用されるページテーブルを、テーブルブロックと呼ぶ。
実際に読み込み又は書き込みされるデータを、データブロックと呼ぶ。
あるテーブルブロックから参照可能な1つのページブロックを、参照ブロックと呼ぶ。
あるテーブルブロックから参照可能な全てのページブロックを、関連ブロックと呼ぶ。
あるページブロックの参照元となるテーブルブロックを、参照元ブロックと呼ぶ。
検証に使用されるMAC値とカウンタ値とは、それぞれ対応するテーブルブロックごとに集約され、管理される。
MAC値を集約して形成されるブロックを、MACブロックと呼ぶ。
カウンタ値を集約して形成されるブロックを、カウンタブロックと呼ぶ。
あるページブロックに対応するMACブロックとカウンタブロックとの組合せを、検証ブロックと呼ぶ。なお、カウンタブロックが存在しない場合には、ページブロックに対応するMACブロックを検証ブロックとする。
あるページブロックの検証ブロックは、このページブロックの参照元ブロックに付けられる形式を持つ。
(アドレス変換の詳細)
上記図4を用いて、仮想アドレスMA01=0x40000000が発行された場合を例として、アドレス変換を詳細に説明する。
仮想アドレスMA01=0x40000000の上位2ビットは01#bである。ページテーブルT101から仮想アドレスの上位2ビット01#bによってインデックスされるテーブルエントリE101-1が参照される。
次に、テーブルエントリE101-1が持つ次のページテーブルポインタによってアドレス変換が進む。仮想アドレスMA01が0x40000000の場合には、レベル1で選択されるテーブルエントリはE101-1であり、テーブルエントリE101-1によって参照されるレベル2のページテーブルはT101-1である。
続いて、レベル2で選択されたページテーブルT101-1に対して、仮想アドレスMA01のビット[29:21]によってインデックスされるテーブルエントリが選択される。なお、仮想アドレスのビット[A:B]という表記は、仮想アドレスのAビット目からBビット目までの範囲を表すとする。仮想アドレスMA01のビット[29:21]は全てゼロなので、ページテーブルT101-1のうちのテーブルエントリE101-1-0が選択される。テーブルエントリE101-1-0によって参照されるレベル3のページテーブルはT101-1-0である。
レベル3で選択されたページテーブルT101-1-0に対して、仮想アドレスMA01のビット[20:12]によってインデックスされるテーブルエントリが選択される。レベル3で選択されるテーブルエントリはE101-1-0-0である。
このようなアドレス変換により、最終的にデータB101-1-0-0の上位アドレスが決定される。
(ページテーブルの仮想化)
以下においては、ページテーブルの仮想化について詳細に説明する。
まず、メモリ空間とページテーブルサイズについて説明する。4ギガバイトの仮想アドレス空間をすべて定義するページテーブルのサイズは、8メガバイト以上になり、物理メモリに固定的にページテーブルを割り当てることはメモリサイズを圧迫する。このため、セキュアOS517及びセキュアVMM516は、ページテーブルを仮想化する。
ページテーブルの仮想化は、テーブルエントリの有効/無効ビットを用いて行う。テーブルエントリE101-1の場合を例にとって説明する。テーブルエントリE101-1の有効/無効ビットが無効状態を示す場合、当該テーブルエントリE101-1の参照先テーブルT101-1は、物理メモリに存在しない。よって、この参照先ページに対するアクセスが発生した場合、MMU506は、プロセッサ例外(フォールト)を発生させ、参照先ページを物理メモリへ読み込む処理を実行する。フォールトを受けたセキュアOS517及びセキュアVMM516は、例えばハードディスクなどの外部デバイス503から、参照先テーブルに対応するデータを物理メモリの空きページに記憶し、テーブルエントリE101-1の有効/無効ビットを有効状態に更新し、中断した処理を再開する。
上記のような制御を行うことで、セキュアOS517及びセキュアVMM516は、巨大な仮想アドレス空間を物理メモリに動的に割り当てることが可能となり、限られたメモリを有効に活用することができる。
上記図4に示すセキュアページテーブルツリー121の構造及び機能は、各種の仮想化アドレス変換機構に適用可能である。後述するように、本実施形態においては、メモリ完全性検証に必要なデータ構造を適用し、ゲストOSに対して透過的なメモリ完全性検証機構を実現する。
(仮想化による複数回ページテーブル参照とアドレス変換キャッシュ509a,509b)
以下で、仮想化による複数回ページテーブル参照とアドレス変換キャッシュ509a,509bについて説明する。
多くのアーキテクチャでは、上記のページテーブルの参照は、MMUによりハードウェアによる処理で実行される。2階層で仮想化されている場合、上記のアドレス変換が2回行われ、ゲストOSのページテーブルへのアクセスも、アドレス変換の対象になる。例えば、2ステージのアドレス変換を行うと、最悪の場合には4×3個のページテーブルへの参照が必要になる。
データ参照ごとにこのようなページテーブル参照が実行され、オーバーヘッドが増加することを避けるため、アドレス変換の結果をキャッシュするアドレス変換キャッシュ509a,509bが用いられる。
2ステージのアドレス変換を行う場合、MMU506は、アドレス変換キャッシュ509aに、ゲストOSの仮想アドレスと、仮想アドレスを2回アドレス変換した後に得られる物理アドレスとを対応付けて記憶する。この場合のタグには仮想アドレスが用いられる。次のデータ参照時に、仮想アドレスとアドレス変換キャッシュ509a,509bのタグとが一致すれば、MMU506は、セキュアページテーブルツリー121によるアドレス変換を行うことなく、物理アドレスを得ること(アドレス解決)ができる。セキュアページテーブルツリー121が複数存在する場合、アドレス変換キャッシュ509a,509bは、セキュアページテーブルツリー121を識別する識別子とアドレス変換情報とを関連付けて記憶する。識別子としては、例えばセキュアページテーブルツリー121の最上位のアドレスを用いてもよい。これにより、同じ仮想アドレスが複数発生しても、正しい物理アドレスを得ることができる。
アドレス変換はページごとに行われるため、仮想アドレスと物理アドレスとはそれぞれページ内(12ビット)よりも上位のビットを保持しておくだけでよい。
アドレス変換キャッシュ509bは、アドレス変換キャッシュ509aと機能的に同じであるが、アドレス変換キャッシュ509aより大容量であり低速である。
(階層化の概念)
以下に、階層化の概念について説明する。
例えば、データ参照を高速化するためにキャッシュメモリは2レベルに階層化される。例えば、アドレス変換のためのページテーブルツリーは3レベルに階層化される。例えば、仮想化の制御は2レベルの階層を持っており、3階層のページテーブルによって制御されるアドレス変換が2回適用される。このようなキャッシュメモリのレベル、ページテーブルツリーの階層、仮想化における複数回のアドレス変換の回数(ステージ数)は直交した概念であり、論理的には任意の組み合わせが可能である。例えばキャッシュメモリは3レベルに階層化され、アドレス変換のためのページテーブルツリーは3レベルに階層化され、仮想化によるアドレス変換は2ステージとしてもよい。
図6は、本実施形態に係る情報処理装置500によるデータ取得及びアドレス変換の概念を例示するブロック図である。
命令実行ユニット505は、キャッシュメモリ507a又はキャッシュメモリ507b、キャッシュメモリ507cにデータが存在しない場合に、内部メモリ8からデータを取得する。
命令実行ユニット505は、アドレス変換が必要な場合に、MMU506に仮想アドレスを送る。
MMU506は、アドレス変換キャッシュ509a,509bに記憶されているアドレス変換情報に基づいて、仮想アドレスを物理アドレスに変換することができない場合に、セキュアページテーブルツリー121に基づく2ステージのアドレス変換を実行する。
このアドレス変換において、ページテーブル又はデータにページフォールトが発生すると、ページフォールトの発生したページテーブル又はデータが、ページングに基づいて、外部メモリ7から内部メモリ8にコピーされる。
(情報処理装置500の初期状態)
上述のアドレス変換及び仮想化機構を前提とし、以下で本実施形態に係る情報処理装置500の初期状態を概説する。
初期状態において、セキュアVMM516、及び、セキュアVMM516によって管理されるセキュアOS517と非セキュアOS518は、休眠状態である。セキュアOS517と非セキュアOS518とは、ゲストOSである。セキュアVMM516、セキュアOS517、非セキュアOS518は、不揮発性の外部メモリ7に退避されている。
本実施形態において、セキュアVMM516及びセキュアOS517の完全性及び秘匿性の信頼の基盤(Root of Trust)となる鍵情報とMAC値は、プロセッサ501の内部に記憶される。より具体的に説明すると、プロセッサ501は、鍵保存ユニット513を備える。鍵保存ユニット513は、秘密鍵とルート検証情報13とを記憶する。プロセッサ501が書き換え可能な記憶領域を備えていない場合、プロセッサ501は、安全なメモリとして、鍵保存ユニット513に記憶されている固定鍵に基づいてバインドされる外部のTPM(Trusted Platform Module)における不揮発性メモリを用いてもよい。ホストのプロセッサ501とTPMとの間で認証が行われることで、TPMの情報が確実にプロセッサ501と対応付けられる。
(メモリマップとエンティティ)
図7は、本実施形態に係るメモリマップを例示する図である。
情報処理装置500のメモリは、例えば、内部メモリ8、マスクROM508、セキュアVMM永続的(Persistent)領域519b、非セキュアOS領域519c、予備領域519d、セキュアOS領域519eを含む。内部メモリ8は、割込ベクタ格納領域519f、セキュアVMMプログラム領域519g、バッファ領域519hを含む。バッファ領域519hは、バッファ管理情報領域519i、検証バッファ領域519j、一時バッファ領域519kを含む。セキュアVMM永続的領域519b、非セキュアOS領域519c、予備領域519d、セキュアOS領域519eは、外部メモリ7に配置される。
セキュアVMM永続的領域519bは、セキュアVMMプログラム領域519l、物理アドレス領域519m,519n、セキュアOSページテーブル領域519o、セキュアVMM作業領域519p、セキュアVMM MAC領域519q、予備領域519rを含む。物理アドレス領域519mは、レベル1,2のページテーブル、カウンタ値、MAC値を記憶する。物理アドレス領域519nは、レベル3のページテーブル、ページテーブルのカウンタ値及びMAC値、及び、データ、データのカウンタ値及びMAC値を記憶する。レベル3の物理アドレス領域519nは、セキュアVMM516に対するレベル3エントリ領域519s、セキュアOS517に対するレベル3エントリ領域519t、非セキュアOS518に対するレベル3エントリ領域519uを含む。
セキュアVMM516は、セキュアブートされる。セキュアVMM516のうちの検証を行うカーネル部分は、外部メモリ7に対する改ざん攻撃から防御するために、安全なメモリに常駐される。本実施形態においては、安全なメモリの一例として、プロセッサ501のチップ内の内部メモリ8が適用される。本実施形態では、セキュアVMM516によるメモリ検証機能は、内部メモリ8に常駐されるメモリ検証プログラムによって実現される。セキュアVMM516のうち、メモリ検証プログラムではない他のプログラム、例えば、デバイス仮想化機能のためのプログラムなどは、ページング及び検証により、オンデマンドで内部メモリ8に記憶され、実行されてもよい。
外部メモリ7に記憶されているセキュアVMM516は、マスクROM508に記憶されているプログラムに基づいて例えば起動時に検証され、その後、内部メモリ8のセキュアVMM516のプログラム領域519gに記憶される。
検証子ツリー10は、外部メモリ7のセキュアVMM永続的領域519bに記憶される。検証子ツリー10のうちのセキュアVMM516によって検証された部分が、内部メモリ8のバッファ領域519h内の検証バッファ領域519jに記憶される。
バッファ領域519hは、セキュアVMM516によって用いられるデータ領域である。バッファ管理情報領域519iは、バッファ管理情報、セキュアVMM516で使用される変換リストを記憶する。検証バッファ領域519jは、検証対象データを記憶する。検証バッファ領域519jのうちの未使用の領域を、検証バッファ空き領域と呼ぶ。一時バッファ領域519kは、セキュアVMM516の検証時に、一時的に利用されるデータを記憶する。バッファ領域519hのバッファ管理情報とは、バッファ領域519hの使用状況を表す情報であり、例えば、記憶されている又は記憶されていないデータの種別、量、使用頻度などを含む。
メモリマップは、さらに、非セキュアOS518の記憶領域519d、セキュアOS517の記憶領域519eを含む。
(検証計算の方法)
以下に、本実施形態に係る検証計算の方法について説明する。
1ページのサイズは4096バイト、アドレスサイズは8バイト(64ビット)、カウンタサイズは16バイト(128ビット)として説明する。しかしながら、各サイズはこれに限定されず、他のサイズを用いてもよい。
検証計算で用いられるパラメータを以下で説明する。
Addrは、検証対象ページテーブルの先頭アドレスである。
D[Addr]は、Addrで始まるiページ分のデータであり、iは任意の自然数である。
Ctr[Addr]はAddrで始まるページに紐付けられたカウンタ値である。
Kはメモリ領域全体で共通に使われる機密値である。Kは、常にプロセッサ501の内部に記憶される。例えば、Kは、鍵保存ユニット513に記憶される。
Ekは秘密鍵Kによるj-bitブロック暗号である。本実施形態において、暗号化アルゴリズムは、j=128であるAES128であるとする。例えば、ブロック長は16バイト(128ビット)とする。しかしながら、AES128ではない他の暗号アルゴリズムを用いてもよい。
Paddingはバディングである。
暗号演算については、Y=MAC[Ek](X)という標記を用いる。MAC値Yは、入力Xを共通鍵ブロックサイズに分割した[X0,X1,…,Xn]に対し、秘密鍵Kに基づく共通鍵ブロックベースの固定長CMACアルゴリズムを適用し、計算される。MAC値Y、秘密鍵kのデータサイズは、共通鍵ブロックサイズと一致する。入力Xを共通鍵ブロックサイズに分割できない場合は、パディングPaddingが用いられる。
アドレスAddrから始まるiページ分のデータD[Addr]のMAC値Yは、D[Addr]を共通鍵ブロックサイズに分割した[D0,D1,D2…D255i]と、Dに紐付けられたカウンタ値Ctr[Addr]、アドレスAddr、パディングPaddingに基づいて、次式で計算される。
Y=MAC[Ek]([D0,D1,…,D255i] || Ctr[Addr] || Addr || Padding)
D[Addr]、Ctr[Addr]、Addrは、いずれの順番で入力されてもよい。Paddingは、MAC関数への入力が共通鍵ブロックサイズに分割できる場合は利用しなくてもよい。アドレスAddrから始まるデータD[Addr]のサイズは、検証子ツリーの構成にしたがって同一の検証ツリー内でも異なる場合がある。
Ctr[Addr]は、検証対象データのバージョン管理に用いられる。よって、データの読み込み時にはCtr[Addr]はそのまま使用される。データの書き戻し時には、Ctr[Addr]はインクリメントしてから使用される。
本実施形態において、アドレスAddrは、外部メモリ7のアドレスとして説明する。しかしながら、アドレスAddrは、中間物理アドレスでもよい。
(セキュア検証子ツリー122の構造)
以下に、本実施形態に係るセキュア検証子ツリー122のデータ構造について説明する。
本実施形態では、セキュアページテーブルツリー121のデータ構造とセキュア検証子ツリー122のデータ構造とを整合させることにより、アドレス解決とデータ検証とを同時に行う。
セキュアページテーブルツリー121とセキュア検証子ツリー122との第1のデータ構造として、ページテーブルとMAC値とで形成されるツリー構造(MACツリー構造)を説明する。セキュアページテーブルツリー121とセキュア検証子ツリー122との第2のデータ構造として、ページテーブルとMAC値とバージョンを管理するためのカウンタ値とで形成されるツリー構造(MAC+カウンタ構造)を説明する。
本実施形態においては、テーブルブロックとカウンタブロックとが連続したアドレスに存在するとして説明するが、テーブルブロックとカウンタブロックとでアドレス空間を分けてもよい。
(MACツリー構造)
図8は、本実施形態に係るセキュアページテーブルツリー121及びセキュア検証子ツリー122のMACツリー構造を例示するデータ構造図である。
各データブロックのMAC値は、データブロックの内容とその配置アドレスとに基づいて生成され、生成されたデータブロックのMAC値は、そのデータブロックを参照する参照元ブロックに付されるMACブロックで管理される。上述したように、MACブロックは検証ブロックに相当する。
その一方で、テーブルブロックの検証に用いられるMAC値は、このテーブルブロックの内容、このテーブルブロックに付されるMACブロックの内容、そのテーブルブロックの配置アドレスに基づいて、生成される。生成されたテーブルブロックの検証に用いられるMAC値は、上記のデータブロックのMAC値と同様に、このテーブルブロックの参照元ブロックに付されるMACブロックで管理される。この操作を続けていくと、最終的に1つのMACブロックを頂点とする大規模なツリー構造が形成される。
例えば、データブロックB201-1-0-511のMAC値M201-1-0-511は、データブロックB201-1-0-511とアドレスaddr(B201-1-0-511)とに基づいて生成される。
例えば、テーブルブロックT201-1-0の検証に用いられるMAC値M201-1-0は、テーブルブロックT201-1-0、このテーブルブロックT201-1-0に付されるMACブロックT202-1-0、テーブルブロックT201-1-0のアドレスaddr(T201-1-0)に基づいて生成される。データブロックB201-1-0-511のMAC値M201-1-0-511は参照元ブロックT201-1-0に付随するMACブロックT202-1-0に、テーブルブロックT201-1-0のMAC値M201-1-0は参照元ブロックT201-1に付随するMACブロックT202-1に含まれる。
MACツリー構造において正当性を保証するために、テーブルブロックとこのテーブルブロックに付されるMACブロックとが同時に読み込まれ、検証される。例えば、テーブルブロックT201-1-0が読み込まれる場合には、このテーブルブロックT201-1-0と合わせてMACブロックT202-1-0が読み込まれ、テーブルブロックT201-1-0とMACブロックT202-1-0とを用いて検証が実行される。MACツリー構造においては、下位ブロック(子ブロック)の正当性が上位ブロック(親ブロック)に付されているMACブロックによって保証される。したがって、下位ブロックの検証時には上位ブロックに付されているMACブロックが検証済みであることが必要である。
(MAC+カウンタ構造)
図9は、本実施形態に係るセキュアページテーブルツリー121及びセキュア検証子ツリー122のMAC+カウンタ構造を例示するデータ構造図である。
カウンタ値は、テーブルエントリ単位に設定され、参照ブロックのバージョン管理に使用される。カウンタ値は、値の重複を回避できる条件を満たし、データ又はページテーブルが更新される度に変化する値であればよく、カウントアップ又はカウントダウンされる値でなくてもよい。
各データブロックのMAC値は、データブロックの内容と配置アドレスとカウンタ値とに基づいて生成され、使用されたカウンタ値と生成されたデータブロックのMAC値とはその参照元ブロックに付されたカウンタブロックとMACブロックとで管理される。一方、テーブルブロックのMAC値は、テーブルブロック、テーブルブロックに付されているカウンタブロック、テーブルブロックの配置アドレス、テーブルブロックのカウンタ値に基づいて生成される。使用されたカウンタ値と生成されたテーブルブロックのMAC値は、その参照元ブロックに付されたカウンタブロック、MACブロックで管理される。このような操作を続けていくと、一段上位のテーブルブロックに付される検証ブロックに含まれるカウンタブロックでバージョン管理を行い、MACブロックで改ざん検証を行う小規模なツリー型データを構成することができる。
例えば、データブロックB301-1-0-511のMAC値M301-1-0-511は、データブロックB301-1-0-511、アドレスaddr(B301-1-0-511)、カウンタ値C301-1-0-511に基づいて生成される。
一方、テーブルブロックT301-1-0のMAC値M301-1-0は、テーブルブロックT301-1-0、カウンタブロックT302-1-0、アドレスaddr(T301-1-0)、テーブルブロックT301-1-0のカウンタ値C301-1-0に基づいて生成される。
データブロックB301-1-0-511のカウンタ値C301-1-0-511、MAC値M301-1-0-511は、参照元ブロックT301-1-0に付されているカウンタブロックT302-1-0、MACブロックT303-1-0に含まれる。
テーブルブロックT301-1-0のカウンタ値C301-1-0、MAC値M301-1-0は、参照元ブロックT301-1に付されているカウンタブロックT302-1、MACブロックT303-1に含まれる。
MAC+カウンタ構造では、テーブルブロックの読み込み時に、テーブルブロックとこのテーブルブロックに付されているカウンタブロックとを共に読み込み、検証する必要がある。しかしながら、テーブルブロックとこのテーブルブロックに付されているMACブロックとを共に読み込み、検証する必要はない。この理由は、あるページブロックの正しいMAC値を生成するためには、その上位ブロックに付されているカウンタ値が必要であり、MACブロック自体はMAC値生成に関係しないためである。
(セキュアページテーブルツリー121とページテーブルツリー9)
図10は、セキュアページテーブルツリー121とページテーブルツリー9との関係の一例を示すデータ構造図である。
内部メモリ8は、アドレス変換に用いられるセキュアページテーブルツリー121を記憶する。レジスタ526は、内部メモリ8のセキュアページテーブルツリー121の最上位テーブルT401を参照する。レジスタ526によって参照されるページテーブルツリーの定義に基づいて、物理アドレスへの変換が実行され、命令実行ユニット505によるメモリ参照が実行される。
内部メモリ8のセキュアページテーブルツリー121を生成するための元データとなるページテーブルツリー9の全体は、外部メモリ7に記憶されている。本実施形態においては、外部メモリ7に記憶されているページテーブルツリー9は、アドレス変換テーブルとして直接参照されることはなく、セキュアページテーブルツリー121の元データであることを除いて、特別な機能を持たない。外部メモリ7のページテーブルツリー9は改ざんの危険があるため、本実施形態においては、外部メモリ7のページテーブルツリー9が、検証なしに直接アドレス変換に利用されることを避ける。アドレス変換に用いられるのは、内部メモリ8に記憶されているセキュアページテーブルツリー121である。セキュアページテーブルツリー121は、ページテーブルツリー9のサブセットである。
本実施形態に係る情報処理装置500は、外部メモリ7に記憶されているページテーブルツリー9及びデータの必要部分に対して、内部メモリ8へのコピーとセキュア検証子ツリー122に基づく検証を行い、既に内部メモリ8に記憶済みのセキュアページテーブルツリー121及びデータに追加する。情報処理装置500は、内部メモリ8に記憶されていないページテーブル又はデータが参照されと、ページフォールトを発生させ、セキュアVMM68がページテーブルツリー9又はデータの必要部分を検証し、検証結果が正当であれば内部メモリ8に記憶する。
(データブロックの記憶先とアドレス、外部メモリ7のページテーブルツリー9の構成)
以下で、データブロックの記憶先とアドレス、及び、外部メモリ7のページテーブルツリー9の構成について説明する。
本実施形態においては、外部メモリ7に記憶されたページブロックを、物理改ざんに対して安全な内部メモリ8に一時的にコピーし、処理を実行し、処理後の結果を元の外部メモリ7に書き戻す。
したがって、同一のページブロックが外部メモリ7のアドレスと内部メモリ8のアドレスとに記憶される場合がある。説明を簡略化するために、データブロックB401-0-0-511が記憶されている外部メモリ7のアドレスをEaddr(B401-0-0-511)と表記する。データブロックB401-0-0-511が記憶されている内部メモリ8のアドレスをIaddr(B401-0-0-511)と表記する。厳密に言えば内部メモリ8のアドレスは、検証バッファ領域519jに動的に確保される。このため、Iaddr(B401-0-0-511)の値は、同一のデータブロックB401-0-0-511についても読み込みの度に変化する。しかしながら、以下の読み込みと書き戻しの一連の動作の説明では、この変化を考慮する必要がないため、単純にIaddr(B401-0-0-511)と表記する。
外部メモリ7に記憶されているページテーブルの各エントリには、Eaddr(B401-0-0-511)のように参照ブロックの外部メモリ7のアドレスが記憶される。ただし、MMU506が認識するページテーブルの実体は、外部メモリ7に記憶されたページテーブルではなく、内部メモリ8に記憶されるとともに検証されたページテーブルである。MMU506は、内部メモリ8に記憶されるとともに検証されたページテーブルを参照する。例えば、上記の図10において、レジスタ526によって参照される実体のアドレスは、Iaddr(T401)である。ページテーブルT401-0-0の外部メモリ7のアドレスEaddr(T401-0-0)は、ページテーブル構築時に与えられており、最上位のページテーブルT401から順番に検証読み込みを行うことでアドレス解決を実行することができる。一方、ページテーブルT401-0-0の内部メモリ8上のアドレスIaddr(T401-0-0)は、内部メモリ8の一時バッファ領域519kにおけるメモリ確保時に決められる。
(検証処理発生までの流れ)
以下で、検証処理発生までの流れについて説明する。
図11は、本実施形態に係るデータ参照処理を例示するフローチャートである。
この図11は、本実施形態に係る検証処理が発生する前までの流れを表す。以下で発生するアドレス変換は、ステージ2ページテーブルを使用する処理であり、ステージ1ページテーブルを使用するゲストOSによるアドレス変換はすでに終了しているとする。
命令実行ユニット505は、ステップS001において、データ参照要求をMMU506に発行する。
MMU506は、ステップS002において、アドレス変換キャッシュ509a,509bに、仮想アドレスと物理アドレスとのアドレス変換情報がキャッシュされているか確認する。
アドレス変換情報がアドレス変換キャッシュ509a,509bにキャッシュされている場合(TLBヒットの場合)、処理はステップS005に移動する。
アドレス変換情報がアドレス変換キャッシュ509a,509bにキャッシュされていない場合(TLBミスの場合)、MMU506は、ステップS003において、アドレス解決処理を行い、ステップS004において、解決されたアドレス変換情報をアドレス変換キャッシュ509a,509bにキャッシュする。
ステップS005において、MMU505は、参照要求されたデータを、解決された物理アドレスから読み込む。
図12は、本実施形態に係るアドレス解決処理を例示するフローチャートである。
この図12で示すアドレス解決処理は、データ参照処理で発生する。
ステップS101において、MMU506は、アドレス解決処理を開始すると、ページウォークによるアドレス解決を行う。
ステップS102において、MMU506は、ページウォーク中にテーブルエントリが無効か否かチェックする。
テーブルエントリが有効の場合、処理はステップS104に移動する。
テーブルエントリが無効の場合、MMU506は、制御をセキュアVMM516に移し、ステップS103において、セキュアVMM516は、無効のテーブルエントリによって参照されるページブロックのツリー検証処理を行う。検証処理終了後、セキュアVMM516は、無効であった検証されたテーブルエントリを有効にし、制御をMMU506に移す。ステップS104において、MMU506は、データブロックまでのアドレスが解決したかチェックする。
アドレスが解決していない場合には、処理はステップS101に戻る。これにより、アドレスが解決するまでページウォークが繰り返される。
アドレスが解決した場合、ステップS105において、MMU506は、データ参照処理を再開し、アドレス解決処理を終了する。
このように、検証処理は、ステージ2ページテーブルツリーのページフォールトによるアドレス解決処理時にセキュアVMM516によって逐次実行される。ページウォークでは、テーブルブロックとデータブロックとのページングが一度に行われてもよい。この場合、セキュアVMM516とMMU506との間の遷移回数が削減される。
(情報処理装置500の構成)
図13は、本実施形態に係る情報処理装置500の第1の構成を例示するブロック図である。
情報処理装置500は、命令実行ユニット505、アドレス変換キャッシュ527、MMU506、検証管理部529、検証情報生成部531、外部読込部532、外部書出部534、記憶領域管理部535、検証記憶部536、鍵保存ユニット513、外部メモリ7を備える。
MMU506は、アドレス解決部537を備える。
検証管理部529は、検証情報取得部540、改ざん判定部539、検証情報計算部541を備える。
記憶領域管理部535は、参照関係更新部(ページテーブル参照関係更新部)546、バッファ領域管理部547、バッファ書出管理部(検証用バッファ書出管理部)548を備える。
ここで、アドレス変換キャッシュ527とMMU506とは、アドレス変換部3に対応する。アドレス変換キャッシュ527は、アドレス変換キャッシュ509a,509bに対応する。
外部読込部532及び外部書出部534は、外部入出力部2に対応する。
検証情報計算部541及び検証情報生成部531は、検証計算部4に対応する。
改ざん判定部539は、検証部5に対応する。
参照関係更新部546は、更新部6に対応する。
バッファ領域管理部547及びバッファ書出管理部548は、置換管理部40に対応する。
検証記憶部536は、内部メモリ8に対応する。
(データ参照処理と情報処理装置500の構成との関係)
上記の図13の各構成要素と上記図11,12のフローチャートとの関係を説明する。
命令実行ユニット505は、ステップS001において、データ参照要求を発行し、ステップS002において、アドレス変換キャッシュ527に、セキュアOS517の仮想アドレスに対応する物理アドレスがキャッシュされているか否かを問い合わせる。
アドレス変換キャッシュ527に参照要求された仮想アドレスに対応する物理アドレスがキャッシュされていない場合、MMU506のアドレス解決部537は、ステップS003において、アドレス解決処理を実行する。
アドレス解決処理において、MMU506は、ステップS101でページウォークを実行し、ステップS102において検証記憶部536に記憶されている該当のテーブルブロックT301のテーブルエントリE301-1をチェックする。
テーブルエントリが有効の場合、処理はステップS104に移動する。
テーブルエントリが無効の場合、その旨を示す結果を検証管理部529に通知し、結果を受けた検証管理部529は、ステップS103において、このテーブルエントリによって参照されるページブロックに対して検証処理を行う。検証処理終了後、検証管理部529は、参照関係更新部546に通知を行い、参照関係更新部546は、無効であったテーブルエントリを有効化する。その後、検証管理部529は読み込みを完了として制御をMMU506に戻す。
ステップS104において、MMU506は、データブロックまでのアドレスが解決したかチェックし、アドレスが未解決の場合にはステップS101のページウォークに処理が戻る。
アドレスが解決された場合、ステップS105において、MMU506は、データ参照処理を再開し、アドレス解決処理を終了する。
アドレス解決が完了した段階で、検証管理部529及び記憶領域管理部535は、検証済みの状態で、アドレス解決に必要なページテーブルを、検証記憶部536に動的に確保されたバッファ領域519hに記憶する。
MMU506は、ステップS004において、アドレス解決の結果であるアドレス変換情報をアドレス変換キャッシュ527にキャッシュする。
アドレス変換キャッシュ527に参照要求された仮想アドレスに対応する物理アドレスがキャッシュされている場合、又は、アドレス解決が実行された場合、MMU506は、ステップS005において、対応する物理アドレスを用いてデータを読み込む。
アドレス変換キャッシュにアドレス変換情報が記憶されており、既にデータ参照が行われていた場合には、検証済みデータが検証記憶部536に記憶されている。アドレス変換キャッシュ527には、検証記憶部536のバッファのアドレスが記憶されている。アドレス変換キャッシュ527から変換済みの物理アドレスが検証記憶部536に送られ、ステップS005において、検証記憶部536のデータが命令実行ユニット505に返される。
(ツリー検証処理)
ツリー検証処理は、ページ単位のデータに対して実行される。セキュアVMM516は、ページフォールトを発生させたデータに対する外部メモリ7から内部メモリ8への読み込みとツリー検証とを実行する。ツリー検証処理では、必要に応じて、置き換え処理及び追い出し処理が発生する。ツリー検証処理は、上記図12のアドレス解決処理で発生する場合がある。
図14は、本実施形態に係るツリー検証処理を例示するフローチャートである。
ステップS201において、セキュアVMM516は、データのツリー検証処理を開始し、内部メモリ8の検証バッファ領域519jに空き領域が存在するか否かチェックする。検証バッファ領域519jに空き領域がない場合、セキュアVMM516は、ステップS202において、置き換え処理により領域の解放を行う。
続いて、セキュアVMM516は、ステップS203において、検証されるデータを外部メモリ7から内部メモリ8の検証バッファ領域519jの空き領域へコピーする。このとき、セキュアDMAコントローラ511は、MACツリー構造又はMAC+カウンタ構造で定義されるMAC生成方法に基づいて、読み込まれたデータのMAC値を生成する。
そして、セキュアVMM516は、ステップS204において、生成されたMAC値に基づいて検証対象データの改ざん検証を行う。改ざん検証において、外部メモリ7からMAC値を読み込む必要がある場合、セキュアVMM516は、検証対象データに対応するMAC値を外部メモリ7から読み込み、読み込まれたMAC値を内部メモリ8の一時バッファ領域519kに記憶する。内部メモリ8のMAC値が使用される場合、セキュアVMM516は、検証対象データに対応するMAC値を内部メモリ8から読み込み、読み込まれたMAC値を一時バッファ領域519kに記憶する。そして、セキュアVMM516は、一時バッファ領域519kに記憶されたMAC値と、セキュアDMAコントローラ511で生成されたMAC値とを比較する。
セキュアVMM516は、ステップS205において、MAC値が整合しない場合、検証失敗と判断し、ステップS206の検証失敗後処理に制御を移す。ステップS206において、セキュアVMM516は、検証失敗後処理でエラー処理などを行い、その後に検証処理を終了させる。
セキュアVMM516は、ステップS205において、MAC値が整合した場合、検証成功と判断する。セキュアVMM516は、ステップS207において、無効となっていたテーブルエントリの参照先アドレスに、検証対象データの内部メモリ8のアドレスを書き込む。このとき、データの外部メモリ7のアドレスは、バッファブロック単位にバッファ管理情報領域519iに記憶される。その後、セキュアVMM516は、検証処理を終了する。
ツリー検証は、検証対象がデータブロックの場合と、テーブルブロックの場合とで処理が異なる。
(置き換え処理)
図15は、本実施形態に係る置き換え処理を例示するフローチャートである。図15に示す置き換え処理は、上記図14のツリー検証処理で発生する場合がある。
置き換え処理では、置き換え元と同種類のデータが、置き換え対象として、置き換えアルゴリズムにしたがって選択される。すなわち、テーブルブロックの置き換え時には、テーブルブロックが選択される。データブロックの置き換え時は、データブロックが選択される。置き換えアルゴリズムは、LRU(Least Recently Used)を用いて説明を行うが、他の置き換えアルゴリズムを用いて置き換え対象を選択してもよい。本実施形態においては、置き換え対象としてテーブルブロックが選択された場合、この選択された置き換え対象のテーブルブロックと、この置き換え対象のテーブルブロックに従属する関連ブロックとを置き換え対象とする場合を例として説明する。
セキュアVMM516は、置き換え処理を開始し、ステップS301において、例えばLRUに基づいて内部メモリ8の置き換え対象を選択する。さらに、セキュアVMM516は、置き換え対象がテーブルブロックの場合に、置き換え対象のテーブルブロックと、この置き換え対象のテーブルブロックに従属する関連ブロックとを置き換え対象として決定する。
セキュアVMM516は、ステップS302において、置き換え対象から1つの追い出し対象を選択する。セキュアVMM516は、追い出し対象としてテーブルブロックとデータブロックが存在する場合は、データブロックを優先的に選択する。
セキュアVMM516は、ステップS303において、追い出し処理を実行する。
追い出し処理終了後、セキュアVMM516は、ステップS304において、置き換え対象がまだ内部メモリ8に存在するかチェックする。
置き換え対象が内部メモリ8に存在する場合、置き換え対象が内部メモリ8に存在しなくなるまでステップS302以降の処理が繰り返される。セキュアVMM516は、置き換え対象が内部メモリ8に存在しなくなると、置き換え処理を終了する。なお、置き換え対象が内部メモリ8に存在するか否かをチェックする理由は、バッファ管理の方針に依存して、後述のように置き換え対象がテーブルブロックの場合に参照ブロックの追い出しを必要とし、複数回の追い出しが必要となる場合があるためである。
上述の置き換え処理終了後、内部メモリ8の検証バッファ領域519jには、空き領域が確保される。
(追い出し処理)
図16は、本実施形態に係る追い出し処理を例示するフローチャートである。図16に示す追い出し処理は、上記図15の置き換え処理で発生する。
例えば、内部メモリ8のバッファ管理情報領域519iは、データ及びページテーブルごとの外部メモリ7のアドレスと内部メモリ8のアドレスとを関連付けた変換リストを記憶する。内部メモリ8のアドレスIaddrと外部メモリ7のアドレスEaddrとの変換は、変換リストを用いる方法に代えて、例えば逆ページウォークなどの他の方法が用いられてもよい。
以下の図16の説明では、上記の図10において内部メモリ8に読み込まれたレベル2のテーブルブロックT401-0の追い出し処理を例として説明する。
セキュアVMM516は、追い出し処理を開始し、ステップS401からステップS405までのループ処理を、追い出し対象のテーブルブロックT401-0内のすべてのテーブルエントリE401-0-0〜E401-0-511に対して実行する。
以下の説明では、テーブルエントリE401-0-0〜E401-0-511のうちで有効なテーブルエントリはE401-0-0のみであり、他のテーブルエントリE401-0-1〜E401-0-511の参照先は内部メモリ8に読み込まれていない状態とする。
ステップS401からステップS405までのループ内のステップS402において、セキュアVMM516は、有効なテーブルエントリE401-0-0を選択し、有効なテーブルエントリE401-0-0の参照ブロックT401-0-0の配置位置が外部メモリ7か内部メモリ8かを判断する。
参照ブロックの配置位置が外部メモリ7の場合には、処理はステップS405に移動する。
この例では、参照ブロックT401-0-0の配置位置が内部メモリ8であるため、ステップS403とS404が実行される。
ステップS403において、セキュアVMM516は、参照ブロックT401-0-0の追い出し処理を実行する。この例では、参照ブロックT401-0-0を対象として、この図16の追い出し処理が再帰的に行われる。
ステップS404において、セキュアVMM516は、選択された有効なテーブルエントリE401-0-0を無効化し、選択された有効なテーブルエントリE401-0-0に格納されるアドレスを、ステップS403で内部メモリ8から外部メモリ7へ書き戻された参照ブロックT401-0-0の外部メモリ7のアドレスEaddr(T401-0-0)に書き換える。ここでは、参照ブロックT401-0-0の追い出し処理は後述し、先にステップS401からステップS405までのループより後の処理を説明する。追い出し対象のテーブルブロックT401-0の残りのテーブルエントリE401-0-1〜E401-0-511はすべて無効であるため、その後処理はステップS401からステップS405までのループ処理を脱出し、ステップS406へ移動する。
ステップS406において、セキュアVMM516は、追い出し対象のテーブルブロックT401-0の内容に更新があるか確認する。
更新がない場合、セキュアVMM516は、ステップS410の領域の解放へ進む。
更新がある場合は、セキュアVMM516は、ステップS407において、追い出し対象のテーブルブロックT401-0を検証するためのMAC値を計算し、MAC値をMACブロックT402のテーブルエントリE402-0に格納する。
ステップS408において、セキュアVMM516は、追い出し対象のテーブルブロックT401-0の外部メモリ7の書き出し先アドレスを決定する。
ステップS409において、セキュアVMM516は、追い出し対象のテーブルブロックT401-0及びこのテーブルブロックT401-0に関連付けられるMACブロックT402-0を外部メモリ7に書き出す。
ステップS410において、セキュアVMM516は、内部メモリ8に対する領域の解放を実行し、追い出し処理は終了する。
続いて、上記のステップS403における参照ブロックT401-0-0の追い出し処理を説明する。
参照ブロックT401-0-0に含まれるテーブルエントリE401-0-0-0〜E401-0-0-511のうちで有効なテーブルエントリは、E401-0-0-0及びE401-0-0-511の2つであり、他のテーブルエントリE401-0-0-1〜E401-0-0-510は無効とする。
この説明では、有効なテーブルエントリE401-0-0-0及びE401-0-0-511はそれぞれ外部メモリ7のデータブロックB401-0-0-0及びB401-0-0-511を参照しているとする。
この場合、セキュアVMM516は、追い出し処理を開始し、ステップS401において、参照ブロックT401-0-0を追い出し対象とし、この追い出し対象のテーブルブロックT401-0-0のすべてのテーブルエントリE401-0-0-0〜E401-0-0-511に対して、ステップS401からステップS405までのループ処理を行う。
まず、セキュアVMM516は、ステップS402で、有効なテーブルエントリE401-0-0-0を選択し、選択された有効なテーブルエントリE401-0-0-0の参照ブロックB401-0-0-0の配置位置が外部メモリ7か内部メモリ8かを判断する。ここでは上記のように参照ブロックB401-0-0-0の配置位置が外部メモリ7であると仮定しているため、ステップS603とS604は実行されることなく、セキュアVMM516は、次のテーブルエントリE401-0-0-1に対する処理を開始する。この次のテーブルエントリE401-0-0-1に対する処理が始まるとき、テーブルエントリE401-0-0-0は有効かつ外部メモリ7のデータブロックB401-0-0-0を参照する状態を維持している。
テーブルエントリE401-0-0-1〜E401-0-0-510は無効状態であるため、ループ内の処理はスキップされる。
そして、セキュアVMM516は、選択された有効なE401-0-0-511に対して、上記のテーブルエントリE401-0-0-0と同様の処理を実行し、テーブルエントリE401-0-0-511に対するループ内の処理が終了したとき、テーブルエントリE401-0-0-511は有効かつ外部メモリ7のデータブロックB401-0-0-511を参照する状態を維持している。
ループ処理の終了後、セキュアVMM516は、ステップS406において、追い出し対象のテーブルブロックT401-0-0の更新の有無を判断する。
追い出し対象のテーブルブロックT401-0-0に更新があった場合、セキュアVMM516は、ステップS407において、追い出し対象のテーブルブロックT401-0-0の検証に用いられるMAC値を計算し、MAC値をMACブロックT402-0のテーブルエントリE402-0-0に格納する。
ステップS408において、セキュアVMM516は、追い出し対象のテーブルブロックT401-0-0の外部メモリ7の書き出し先アドレスを決定する。
ステップS409において、セキュアVMM516は、追い出し対象のテーブルブロックT401-0-0及びこのテーブルブロックT401-0-0に関連付けられるMACブロックT402-0-0を外部メモリ7に書き出す。
ステップS410において、セキュアVMM516は、内部メモリ8の領域を解放し、追い出し処理が終了される。
もし、追い出し対象のテーブルブロックT401-0-0に更新がない場合、セキュアVMM516は、ステップS406の判断の後、追い出し対象のテーブルブロックT401-0-0に関連付けられるMACブロックT402-0-0の書き出しを行うことなく、ステップS410で内部メモリ8の領域の解放を行い、追い出し処理が終了され、外部メモリ7のテーブルブロックT401-0-0及びMACブロックT402-0-0がそのまま維持される。
したがって、テーブルブロックT401-0-0の追い出し処理が完了したとき、テーブルエントリE401-0-0-0及びE401-0-0-511は、それぞれ外部メモリ7のデータブロックB401-0-0-0及びB401-0-0-511を参照しかつ有効状態がそのまま維持される。これはステップS401からS405の有効なテーブルエントリに対するループ処理で、以下の処理が行われることによる。ステップS402において、有効なテーブルエントリの参照先が内部メモリ8の参照ブロックの場合、ステップS403の参照ブロックの追い出し処理とステップS404のテーブルエントリの無効化処理が行われる。有効なテーブルエントリの参照ブロックが外部メモリ7に存在する場合、すなわち上記の例で非セキュアOS518のデータブロックの場合、ステップS403の参照ブロックの追い出し処理とステップS404のテーブルエントリの無効化処理は行われず、テーブルエントリが外部メモリ7のデータブロックを参照しかつ有効状態で維持される。このため、非セキュアOS518のデータに対しては、外部メモリ7を直接参照するように設定されたテーブルブロックの初期状態がそのまま維持される。
なお、この効果はセキュアOS517のデータブロックの一部が、非セキュアOS518の場合と同様に外部メモリ7のデータブロックを参照するように設定された場合にも成立する。例えば、セキュアOS517が、非セキュアOS518又は他のセキュアOSとのデータ交換用に割り当てられた仮想物理アドレス空間の一部を、非セキュアなメモリ領域として用いる場合であっても、上記の効果を得ることができる。
(情報処理装置500の構成とツリー検証処理との関係)
上記のようなツリー検証処理と、上記図13に示す情報処理装置500との構成とを関連付けて説明する。
検証管理部529は、ステップS201において、記憶領域管理部535のバッファ領域管理部547に、検証記憶部536の空き領域の有無を照会する。空き領域がない場合、検証管理部529は、ステップS202において、記憶領域管理部535に読み込み済みバッファ領域解放を要求する。
要求を受けたバッファ領域管理部547は、ステップS301において、置き換えアルゴリズムにしたがって検証記憶部536から置き換え対象を選択する。このとき、バッファ領域管理部547は、置き換え対象がテーブルブロックの場合は、このテーブルブロックとこのテーブルブロックの関連ブロックを追い出し対象として選択する。バッファ領域管理部547は、ステップS302において、追い出し対象の中から1つを選択し、バッファ書出管理部548に追い出し処理を要求する。
要求を受けたバッファ書出管理部548は、ステップS401からステップS405のループ処理を実行し、ステップS406において、選択された追い出し対象の内容に更新があるか確認し、更新がない場合はステップS410に移動する。
更新がある場合、バッファ書出管理部548は、ステップS407において、MACツリー構造又はMAC+カウンタ構造で定義されるMAC値生成方法に基づいて、追い出し対象の新しいMAC値の生成を依頼する。検証情報生成部531は、新しいMAC値を生成する。
参照関係更新部546は、ステップS408において、検証記憶部536の変換リストから書き出し先のアドレスを決定し、書き出し先のアドレスを検証情報生成部531に通知する。
検証情報生成部531は、追い出し対象、書き出しが必要なデータ、書き出し先アドレスを、外部書出部534に送る。外部書出部534は、ステップS409において、追い出し対象、書き出し先のアドレスに基づいて外部メモリ7への書き出しを行う。その後、ステップS410において、参照関係更新部546は、検証記憶部536の該当テーブルエントリの参照先アドレスを外部メモリ7のアドレスに書き換え、エントリを無効化する。そして、バッファ領域管理部547は、検証記憶部536に記憶されていた追い出し対象に関する制御情報を削除し、検証記憶部536の追い出し対象が記憶されていた領域を解放する。
バッファ領域管理部547は、ステップS304において、選択された全ての書き換え対象が検証記憶部536から追い出されるまで、ステップS302の追い出し対象の選択と、ステップS303の追い出し処理とを繰り返す。
全ての書き換え対象が追い出されると、検証記憶部536には、追い出されたデータ分の空き領域が生じる。
検証管理部529の検証情報取得部540は、ステップS203において、検証に使用されるデータの読み込みを外部読込部532に要求する。外部読込部532は、要求されたデータを外部メモリ7から読み込み、読み込まれたデータのうち検証対象データを検証情報計算部541に送る。
検証情報計算部541は、ステップS204において、検証対象データに基づいて、MACツリー構造又はMAC+カウンタ構造で定義されるMAC生成方法により、読み込まれたデータのMAC値を生成する。改ざん判定部539は、予め生成されたMAC値と検証情報計算部541で計算されたMAC値を照合する。
検証管理部529は、ステップS205においてMAC値が整合せず検証が失敗した場合、ステップS206において、命令実行ユニット505に検証失敗を通知して以後の処理を中止する。
検証管理部529は、ステップS205においてMAC値が整合し、検証が成功した場合、参照関係更新部546に読み込み成功を通知する。参照関係更新部546は、ステップS307において、無効のテーブルエントリの参照先アドレスに、検証記憶部536における検証対象データのアドレスを書き込む。このとき、参照関係更新部546は、検証対象データの外部メモリ7のアドレスをバッファブロック単位に検証記憶部536に記憶する。
(テーブル参照テーブルとデータ参照テーブル)
本実施形態の非セキュアOS518におけるデータ検証処理に関して説明する。
例えば、外部メモリ7のページテーブルツリー9では、レベルN(N階層目)のテーブルエントリがデータを参照する。外部メモリ7のデータを参照するレベルNのテーブルエントリは、予め有効状態であると設定される。非セキュアOS518によって参照されるデータは、非セキュアOS518に割り当てられているアドレス領域に配置される。
本実施形態において、ページテーブルPに含まれる複数のテーブルエントリE0〜Enは、複数のテーブルT0〜Tn又はデータD0〜Dnを参照する。テーブルエントリE0〜Enの参照先がページテーブルT0〜Tnの場合、ページテーブルPをテーブル参照テーブルと呼ぶ。テーブルエントリE0〜Enの参照先がデータD0〜Dnの場合、ページテーブルPをデータ参照テーブルと呼ぶ。
図17は、本実施形態に係るデータ参照テーブルに含まれるテーブルエントリの参照状態を例示するデータ構造図である。この図17を用いて、非セキュアOS518のデータは、フォールト及び内部メモリ8へのコピーの双方が発生することなく、外部メモリ7からキャッシュメモリ507a〜507c経由で命令実行ユニット505に送られ、内部メモリ8のメモリ領域に配置されないことを説明する。
テーブル参照テーブルT401,T401-0は、内部メモリ8に記憶されている。データ参照テーブルT401-0-0及びデータB401-0-0-0は、内部メモリ8にまだ記憶されていない。この状況で、非セキュアOS518のデータB401-0-0-0が参照される場合を例として説明する。
テーブル参照テーブルT401,T401-0が外部メモリ7に記憶されている未検証ページテーブルの状態の場合には、テーブル参照テーブルT401,T401-0の各テーブルエントリは、無効状態である。
しかしながら、非セキュアOS518のデータB401-0-0-0を参照するデータ参照テーブルT401-0-0が外部メモリ7に記憶されている未検証ページテーブルの状態の場合、データ参照テーブルT401-0-0に含まれている例えばテーブルエントリE401-0-0-0などのテーブルエントリは、メモリ領域が割り当てられていれば、既に有効状態とされる。
データ参照テーブルT401-0-0が検証されて内部メモリ8にコピーされると、データ参照テーブルT401-0-0を参照するテーブル参照テーブルT401-0のテーブルエントリE401-0-0が、内部メモリ8のデータ参照テーブルT401-0-0を参照するように更新され、さらに、有効状態とされる。
テーブル参照テーブルT401-0のテーブルエントリE401-0-0の更新が完了すると、MMU506は、即座にデータB401-0-0-0のアドレスを解決することができる。このデータB401-0-0-0のアドレス解決では、データ参照テーブルT401-0-0のテーブルエントリE401-0-0-0は、コピーされた時点で、有効状態であり、ページフォールトは発生しない。
データB401-0-0-0の参照において、テーブルエントリE401-0-0-0は、読み込み時点で外部メモリ7のアドレスEaddr(E401-0-0-0)を参照している。このため、アドレス解決に続いて、フォールトなしにデータB401-0-0-0を参照することができる。
この非セキュアOS518のデータB401-0-0-0の参照は、通常のデータ参照である。データB401-0-0-0は、内部メモリ8に記憶されることなく、直接キャッシュメモリ507a〜507cに記憶され、内部メモリ8のメモリ領域に配置されない。
キャッシュメモリ507a〜507cの読み込み単位はキャッシュライン単位であり、ページよりも小さい。このため、キャッシュライン単位での読み込みは、ページ単位での読み込みよりも、読み込み時間を抑制して遅延を防止することができ、メモリ利用効率を向上させることができる。
(非セキュアOS518におけるレベルNのテーブルエントリの有効状態)
非セキュアOS518においては、外部メモリ7に記憶されるデータ参照テーブルのテーブルエントリに有効状態が設定されている。
本実施形態において、データ参照テーブルのテーブルエントリの有効状態は、データ参照テーブルが内部メモリ8から外部メモリ7へ書き戻された場合でも維持される。
非セキュアOS518のデータ参照テーブルは、参照先のデータの検証子と関連付けされない。具体例を挙げると、ページ参照テーブルT401-0は、検証子ブロックT402-0と関連付けられている。しかしながら、非セキュアOS518用のデータ参照テーブルT401-0-0は、データB401-0-0-0の検証子と関連付けされない。
(非セキュアOS518用のセキュアブートローダ508aの構成)
上記の特徴を持つページテーブル9を生成する一例として、セキュアブートローダ508aによるOSイメージの初期化を説明する。
セキュアブートローダ508aは、非セキュアOS518のブートイメージを外部メモリ7の所定のメモリ領域にロードする。また、セキュアブートローダ508aは、非セキュアOS518の実行時に、セキュアVMM516により参照されるページテーブルツリー(ステージ2ページテーブル)9と検証子ツリー10とを生成し、ページテーブルツリー9と検証子ツリー10とを外部メモリ7に記憶し、処理を終了する。
セキュアブートローダ508aは、セキュアページテーブルツリー121のルート検証情報13を、安全なレジスタ526に記憶する。
本実施形態では、非セキュアOS518は改ざんされることを許容しているため、非セキュアOS518のブートイメージ全体の改ざん検証は行われなくてもよい。非セキュアOS518のブートイメージ全体に対する改ざん検証は、ページテーブルツリー9と検証子ツリー10との生成と独立に行われてもよい。
図18は、本実施形態に係る情報処理装置500の第2の構成を例示するブロック図である。
情報処理装置500は、部分読込部552、ブートローダ制御部553、検証情報生成部531、外部読込部532、外部書出部534、記憶領域管理部535、検証記憶部536、鍵保存ユニット513、外部メモリ7を備える。
記憶領域管理部535は、参照関係更新部546、バッファ領域管理部547、バッファ書出管理部548を備える。
部分読込部552は、ヘッダ取得部554、署名情報計算部555を備える。
ブートローダ制御部553は、メモリ領域制御部556、参照先判定部557を含むページテーブル初期化部558、署名検証部559を備える。
例えば、部分読込部552のうちのヘッダ取得部554、外部読込部532、外部書出部534は、上記図1の外部入出力部2に対応する。
例えば、署名情報計算部555及び検証情報生成部531は、上記図1の検証計算部4に対応する。
例えば、署名検証部559は、上記図1の検証部5に対応する。
例えば、メモリ領域制御部556及び記憶領域管理部535は、上記図1の更新部6及び置換管理部40に対応する。
例えば、ページテーブル初期化部558は、上記図1の初期化部42に対応する。
検証記憶部536は、内部メモリ8に対応する。
図19は、本実施形態に係る情報処理装置500によるブート処理を例示するフローチャートである。
ステップZ101において、ヘッダ取得部554は、外部メモリ7から外部読込部532経由で、ブートイメージのヘッダを取得し、このヘッダに基づいて、ゲストOSが非セキュアOS518であること、非セキュアOS518のメモリ領域のサイズ、を取得する。メモリ領域制御部556は、外部メモリ7におけるステージ2アドレス変換に必要な非セキュアOS518のページテーブルツリー9及び検証子ツリー10のメモリ領域を計算する。
ステップZ102において、メモリ領域制御部556は、セキュアVMM516によって管理される外部メモリ7に、計算によって得られたサイズのメモリ領域を確保する。
次に、ページテーブル初期化部558は、非セキュアOS518によって要求される中間物理アドレス領域と物理アドレスとの対応関係を定義するページテーブルツリー9及び検証子ツリー10の生成を開始する。
ステップZ103において、ページテーブル初期化部558は、バッファ領域管理部547経由で、最上位のページブロックT401と、このテーブルブロックT401に関連付けられている検証ブロックT402とのメモリ領域を検証記憶部536に確保する。検証ブロックT402には、テーブルブロックT401に含まれている各テーブルエントリE401-0〜E401-3によって参照されるテーブルブロックT401-0〜T401-3及び検証ブロックT402-0〜T402-3の検証子が配置される。
ステップZ104において、ページテーブル初期化部558は、バッファ領域管理部547経由で、検証記憶部536に配置可能なサイズのテーブルブロックT401-0〜T401-3と、このテーブルブロックT401-0〜T401-3に関連付けられる検証ブロックT402-0〜T402-3とを選択する。
ステップZ105において、ページテーブル初期化部558は、バッファ領域管理部547経由で、選択されたテーブルブロックT401-0〜T401-3と検証ブロックT402-0〜T402-3とのメモリ領域を、検証記憶部536に確保する。ページテーブル初期化部558は、参照関係更新部546経由で、テーブルブロックT401-0〜T401-3の外部メモリ7のアドレスEaddr(T401-0)〜Eaddr(T401-3)と、その他のフィールド情報を、テーブルブロックT401のテーブルエントリE401-0〜E401-3に書き込む。
これにより、レベル2のテーブルブロックT401-0〜T401-3及び検証ブロックT402-0〜T402-3のメモリ領域の確保、及び、レベル1のテーブルブロックT401及び検証ブロックT402のメモリ領域の確保及びテーブルエントリE401-0〜E401-3の初期化が完了する。
ページテーブル初期化部558は、同様の処理により、レベル3のテーブルブロックT401-0-0〜T401-3-511のメモリ領域の確保、及び、レベル2のテーブルブロックT401-0〜T401-3に含まれているテーブルエントリE401-0-0〜E401-3-511の初期化を行う。
例えば、レベル3のテーブルブロックはT401-0-0〜T401-3-511まで存在するとすると、レベル3のテーブルブロックT401-0-0〜T401-3-511全体では、計2048ブロック、8192キロバイトのサイズとなる。例えば、検証記憶部536のサイズが全体で1メガバイトの場合には、レベル3のテーブルブロックT401-0-0〜T401-3-511を検証記憶部536に記憶することはできない。
そこで、本実施形態では、レベル3のテーブルブロックT401-0-0〜T401-3-511を例えば32個ごとのグループに分割し、順次、検証記憶部536及び外部メモリ7にメモリ領域を確保し、初期化を行い、検証記憶部536から外部メモリ7へ書き出しを行う。
例えば、バッファ領域管理部547及びメモリ領域制御部556は、テーブルブロックT401-0によって参照されるテーブルブロックT401-0-0〜T401-0-511のうち、第1のグループに所属するテーブルブロックT401-0-0〜T401-0-127の128個、512キロバイトのメモリ領域を、検証記憶部536及び外部メモリ7に確保する。
さらに、メモリ領域制御部556は、第1のグループに所属するテーブルブロックT401-0-0〜T401-0-511によって参照されるデータのメモリ領域を外部メモリ7に確保する。
非セキュアOS518のデータは検証対象外のため、非セキュアOS518のデータのメモリ領域は、検証記憶部536には確保されない。非セキュアOS518に対する3階層のテーブルブロックT401-0-0〜T401-3-511によって参照されるデータの検証子は不要である。
次に、ページテーブル初期化部557は、第1のグループに所属するテーブルブロックT401-0-0〜T401-0-127によって参照されるデータの外部メモリ7におけるアドレスEaddr(B401-0-0-0)〜Eaddr(B401-0-127-511)を、対応するページエントリE401-0-0-0〜E401-0-127-511に書き込み、その他のフィールド情報を書き込み、初期化を行う。
ステップZ106において、参照先判定部557は、第1のグループに所属するテーブルブロックT401-0-0〜T401-0-127がデータ参照テーブルであると判定し、ページテーブル初期化部558は、参照関係更新部546経由で、上述のように、データB401-0-0-0〜B401-0-127-511を参照するレベル3のテーブルブロックT401-0-0〜T401-0-127のテーブルエントリE401-0-0-0〜E401-0-127-511の有効/無効フラグを、有効状態に設定する。
この段階で、第1のグループに所属するテーブルブロックT401-0-0〜T401-0-127のうち、テーブルエントリT401-0-0〜T401-0-127の初期化が完了する。
ステップZ107において、参照先判定部557が、レベル2のテーブルブロックT401-0がテーブル参照テーブルであると判定する。この場合、ページテーブル初期化部557は、レベル3のテーブルブロックT401-0-0〜T401-0-127のテーブルエントリT401-0-0〜T401-0-127とは異なり、テーブルブロックT401-0のテーブルエントリE401-0-0〜E401-0-127の有効/無効フラグを無効状態に設定する。
ステップZ108において、記憶領域管理部535の検証用バッファ書出部548は、レベル3のテーブルブロックT401-0-0〜T401-3-511のうち、上記の初期化が完了した第1のグループに所属するテーブルブロックT401-0-0〜T401-0-127に対する検証子計算を検証情報生成部531に要求する。検証情報生成部531は、第1のグループに所属するテーブルブロックT401-0-0〜T401-0-127に対する検証子を計算する。そして、外部書出部534は、第1のグループに所属するテーブルブロックT401-0-0〜T401-0-127を外部メモリ7に書き出す。バッファ領域管理部547は、書き出されたテーブルブロックT401-0-0〜T401-0-127が記憶されていた検証記憶部536のバッファ領域を空き領域とする。参照関係更新部546は、第1のグループに所属するテーブルブロックT401-0-0〜T401-0-127の外部メモリ7におけるアドレスEaddr(T401-0-0)〜Eaddr(T401-0-127)を、レベル2のテーブルブロックT401-0のテーブルエントリE401-0-0〜E401-0-127に書き込み、テーブルエントリE401-0-0〜E401-0-127にその他のフィールド情報を設定する。
バッファ領域管理部547及びメモリ領域制御部556は、テーブルブロックT401-0によって参照されるレベル3のテーブルブロックT401-0-0〜T401-0-511のうち、第2のグループに所属するテーブルブロックT401-0-128〜T401-0-255のメモリ領域を、検証記憶部536及び外部メモリ7に確保する。ページテーブル初期化部558は、上記と同様の処理により第2のグループに所属するテーブルブロックT401-0-128〜T401-0-255を初期化する。
バッファ領域管理部547、メモリ領域制御部556、ページテーブル初期化部557は、同様の処理を、第3のグループに所属するテーブルブロックT401-0-256〜T401-0-383及び第4のグループに所属するテーブルブロックT401-0-384〜T401-0-511に対して繰り返す。
この結果、レベル2のテーブルブロックT401-0によって参照されるレベル3のテーブルブロックT401-0-0〜T401-0-511が全て初期化された状態になる。
レベル3のテーブルブロックT401-0-0〜T401-0-511が全て初期化されると、選択されたテーブルブロックT401-0は書き出し可能となる。
バッファ書出管理部548は、初期化が完了したテーブルブロックT401-0に対する検証子計算を検証情報生成部531に要求する。検証情報生成部531は、テーブルブロックT401-0に対する検証ブロックT402-0を計算する。そして、外部書出部534は、テーブルブロックT401-0及び検証ブロックT402-0を外部メモリ7に書き出す。バッファ領域管理部547は、書き出されたテーブルブロックT401-0が記憶されていた検証記憶部536のバッファ領域を空き領域とする。参照関係更新部546は、テーブルブロックT401-0の外部メモリ7におけるアドレスEaddr(T401-0)を、レベル1のテーブルブロックT401のテーブルエントリE401-0に書き込み、テーブルエントリE401-0にその他のフィールド情報を設定する。
選択されたテーブルブロックT401-1,T401-2に対しても同様の処理が繰り返され、外部メモリ7に書き出される。
ステップZ109において、メモリ領域制御部556は、選択されたテーブルブロックT401-0〜T401-2を経由して参照される外部メモリ7のメモリ領域に、非セキュアOS518のブートイメージを配置する。
ステップZ110において、ページテーブル初期化部558は、非セキュアOS518のブートイメージに対する全てのテーブルブロックが選択され、外部メモリ7のメモリ領域に配置されたか否かを判断し、未選択のテーブルブロックがある場合に、処理はステップZ104に戻る。上記の処理を全てのテーブルブロックが選択されるまで繰り返されると、全てのテーブルブロックの初期化及び外部メモリ8への配置が完了する。
上記の処理において、テーブルブロックが検証記憶部536から外部メモリ7へ書き出される場合には、そのテーブルブロックと関連付けられている検証ブロックも、同期して書き出されるとしてもよい。
本実施形態において、部分読込部552は、外部メモリ7のセキュアOS517のブートイメージを分割して得られる部分ブートイメージを読み込むとしてもよい。この場合、署名情報計算部555は、部分ブートイメージの署名情報を生成する。署名検証部559は、セキュアOS517のブートイメージのヘッダに含まれている署名情報と部分ブートイメージに基づいて計算された署名情報とに基づいて、署名検証を行う。これら部分読込部552、署名情報計算部555、署名検証部559の詳細な説明は、後述する。
以上説明した本実施形態においては、非セキュアOS518のブート時に、ブートイメージなどのようなデータに対しては、外部メモリ7におけるメモリ領域の確保と書き出しとが行われるが、外部メモリ7から内部メモリ8へデータの読み込みは行われない。したがって、外部メモリ7に対するデータの改ざんの影響を受けることなく、非セキュアOS518を起動することができる。
本実施形態においては、安全に非セキュアOS518用のセキュアページテーブルツリー121及びセキュア検証子ツリー122を生成することができる。
本実施形態においては、書き出し済みのテーブルブロックが外部メモリ7から内部メモリ8への読み込まれる場合に、セキュア検証子ツリー122に基づく検証によって改ざんを検出することができる。
本実施形態においては、非セキュアOS518に対するセキュアページテーブルツリー121をセキュア検証子ツリー122による改ざん検証の対象とし、データをセキュア検証子ツリー122による検証の対象外とする。これにより、セキュアVMM516及び改ざん検証されるべきセキュアOS517のデータを、非セキュアOS518に対する書き換えから防御することができる。
あるデータブロックに対して検証を行わない上記ページテーブルの設定は、セキュアOS517の仮想物理アドレス空間に配置された一部のデータメモリについても適用することが可能である。例えばセキュアOS517と非セキュアOS518が相互に読み書き可能な共有データ領域をもつとき、セキュアOS517が読み込み時にすべてのデータを検証対象とすると、非セキュアOS518によるデータ書き込みではそもそも検証子が書き込まれないのでセキュアOS517による当該データの読込みは必ず検証に失敗する。この問題を回避するため、セキュアOS517は後述の第3の実施形態におけるセキュアブートによるブートイメージのロード後、新規データを確保するとき、内部メモリ8の検証読込みを行うように、内部メモリ8上にデータ領域を確保してセキュアページテーブルツリー121に組み込むセキュアメモリと、外部メモリ7に確保したデータを直接参照するようセキュアページテーブルツリー121を設定する非セキュアメモリを選択可能とするが可能である。
本実施形態においては、非セキュアOS518に対するセキュアページテーブルツリー121をセキュア検証子ツリー122による改ざん検証の対象とし、データをセキュア検証子ツリー122による検証の対象外とする。これにより、セキュアVMM516及び改ざん検証されるべきセキュアOS517のデータを、非セキュアOS518に対する書き換えから防御することができる。
この防御の効果は、ゲストOSが非セキュアOS518のみであり、セキュアOS517を含まない場合であっても有効である。
例えば、情報処理装置500で、異なるユーザ企業が共通のセキュアVMM516により複数のゲストOSを運用する場合、セキュアページテーブルツリー121の不正な書き換えが発生するとユーザ企業間で情報が漏れる可能性がある。情報処理装置500が厳重に管理されており、物理メモリに対して悪意の攻撃が発生しないとしても、自然現象によるメモリエラーで情報漏れが発生する可能性もある。自然現象によるメモリエラーは、例えばECC(Error Correcting Code)などの訂正機能付きメモリを導入することで情報漏れの発生確率を低減できる。しかしながら、訂正機能付きメモリは高価である。また、不正な書き換え及び情報漏れを厳密に防止するためには、メインメモリ全体を訂正機能付きとすることが必要である。
これに対して、本実施形態に係るセキュア検証子ツリー122による検証は、高価な訂正機能付きメモリを導入することなく、安価に、メモリエラーに対してゲストOS及びセキュアVMM516を防御することができる。
本実施形態においては、非セキュアOS518のデータが参照される場合には、検証が実行されない。検証されないデータは、内部メモリ8に読み込まれない。したがって、検証されないデータのサイズは、内部メモリ8のサイズより大きくてもよい。例えば、ゲストOSのメモリサイズが同じ場合、データのサイズを大きくすれば、ページテーブルツリー9及びセキュアページテーブルツリー121のサイズが小さくなり、内部メモリ8の利用効率を向上させることができ、情報処理装置500の性能を向上させることができる。
なお、上記の第4の条件で説明したように、セキュアOS517に割り当てられたメモリであっても、外部との通信に用いられるハードウェアにマッピングされた領域からの入力、又は、他のOSとメモリ経由で行われる通信においては、外部から書き換えられたメモリ内容を読み込む必要がある。このような場合、検証は失敗してしまうため、検証を無視する設定を行う必要がある。つまり、セキュアOS517においても、入出力処理に限定して当該OSが正しく使うことを前提に、一部のメモリ領域を、上記の非セキュアOS518の場合と同様の設定としてもよい。
[第3の実施形態]
本実施形態においては、上記第2の実施形態に係るブート処理の変形例について説明する。
情報処理装置500の初回起動又は再インストール時に、セキュアブートローダ508aは、ゲストOSのブートイメージを読み込み、外部メモリ7に互いに整合したデータ構造を持つページテーブルツリー9と検証子ツリー10とを記憶し、内部メモリ8に互いに整合したデータ構造を持つセキュアページテーブルツリー121とセキュア検証子ツリー122とを記憶する。
セキュアブートローダ508aは、ゲストOSの実行は行わず、ページテーブルツリー9と検証子ツリー10と、セキュアページテーブルツリー121とセキュア検証子ツリー122との生成が完了した時点で、処理を終了する。
その後は、通常運用のセキュアVMM516が、ページテーブルツリー9と検証子ツリー10と、セキュアページテーブルツリー121とセキュア検証子ツリー122と、ゲストOSイメージとを引き継いで、ゲストOSを制御する。
ゲストOSブートイメージは、起動用のイメージであり、例えば、外部メモリ7に記憶されている。ゲストOSブートイメージは起動時にのみアクセスされ、ワード単位でアクセスされることがない。ゲストOSブートイメージは、外部デバイス503に記憶されていてもよい。
(ページテーブルの初期化状態の管理)
本実施形態では、セキュアブートローダ508aは、起動時のページテーブルツリー9及び検証子ツリー10の生成状態を示す初期化状態情報(フラグ)を管理する。初期化状態情報は、例えば、ページテーブルに含まれるテーブルエントリの空き領域で管理されることが望ましい。
セキュアブートローダ508a及びセキュアVMM516は、フラグを扱うことができる。したがって、既存のハードウェアであるMMU506は初期化状態情報を認識できなくてもよい。
初期化状態情報は、利用可能又は利用不可のいずれかを示す。
以下では、データB401-0-0-0〜B401-0-0-511,B401-0-1-0〜B401-0-1-511がゲストOSのブートイメージであるとして説明する。
本実施形態では、ゲストOSごとに、ページテーブルツリー9及び検証子ツリー10が生成されてもよい。
セキュアブートローダ508aは、ゲストOSのページテーブルツリー9及び検証子ツリー10の記憶されている物理アドレスと、ゲストOSのアドレス領域とを取得する。また、セキュアブートローダ508aは、ゲストOSの中間物理アドレスを取得する。
セキュアブートローダ508aは、ゲストOSのブートイメージをロードするために、最初のブートイメージB401-0-0-0を選択し、内部メモリ8に、ブートイメージB401-0-0-0のアドレス変換に必要なページテーブル及び検証子のメモリ領域を確保し、外部メモリ7のメモリ領域も確保する。セキュアブートローダ508aは、子テーブルのテーブルエントリが生成された時点で、親テーブルのテーブルエントリに含まれる初期化状態情報に利用可能を設定する。
図20は、本実施形態に係る情報処理装置によるブート処理を例示するフローチャートである。以下で、この図20の処理を、上記図18の情報処理装置500の構成を用いて説明する。
ステップZ201において、ヘッダ取得部554は、外部メモリ7から外部読込部532経由で、ブートイメージのヘッダを取得し、ブートイメージのヘッダに基づいて、ゲストOSのメモリ領域のサイズ及びブートイメージ署名情報を取得する。メモリ領域制御部556は、外部メモリ7におけるステージ2アドレス変換に必要なゲストOSのページテーブルツリー9及び検証子ツリー10のメモリ領域を計算する。
ステップZ202において、メモリ領域制御部556は、セキュアVMM516によって管理される外部メモリ7に、計算によって得られたサイズのメモリ領域を確保する。
ステップZ203において、ページテーブル初期化部558は、部分読込部552及び外部読込部532経由で、外部メモリ7におけるアドレスEaddr(T401)に、最上位のテーブルブロックT401及び検証ブロックT402のメモリ領域を確保し、検証記憶部536におけるアドレスIaddr(T401)に、最上位のテーブルブロックT401及び検証ブロックT402のメモリ領域を確保し、検証記憶部536におけるメモリ領域のアドレスIaddr(T401)と外部メモリ7における未検証ページテーブルのアドレスEaddr(T401)との対応関係をセキュアVMM516の作業領域に記憶する。
ステップZ204において、ページテーブル初期化部558は、バッファ領域管理部547経由で、検証記憶部536に配置可能なサイズのテーブルブロックT401-0〜T401-3を選択し、選択されたテーブルブロックT401-0〜T401-3と、選択されたテーブルブロックT401-0〜T401-3に関連付けられる検証ブロックT402-0〜T402-3と、選択されたテーブルブロックT401-0〜T401-3を経由して参照される部分ブートイメージを選択する。
ステップS205において、ページテーブル初期化部558は、バッファ領域管理部547経由で、選択されたテーブルブロックT401-0〜T401-3と、選択された検証ブロックT402-0〜T402-3と、選択された部分ブートイメージのメモリ領域を検証記憶部536に確保する。ページテーブル初期化部558は、参照関係更新部546経由で、検証記憶部536において、選択されたテーブルブロックT401-0〜T401-3を参照するテーブルブロックT401の各テーブルエントリE401-0〜E401-3を初期化する。
ステップS206において、ページテーブル初期化部558は、参照関係更新部546経由で、各テーブルエントリE401-0〜E401-3の初期化状態情報に、利用不可を設定する。
ブートローダ制御部553及び記憶領域管理部535は、部分ブートイメージB401-0-0-0のアドレス変換に必要なレベル2のページテーブルT401-0、レベル3のページテーブルT401-0-0を順次同様に外部メモリ7及び内部メモリ8で初期化する。
ブートローダ制御部553及び記憶領域管理部535は、レベル2のページテーブルT401-0の初期化が完了すると、外部メモリ7において、このレベル2のページテーブルT401-0を参照するレベル1のページテーブルT401のテーブルエントリE401-0に、アドレスEaddr(T401-0)を書き込み、内部メモリ8において、アドレスIaddr(T401-0)を書き込む。レベル3のページテーブルT401-0-0とレベル2のページテーブルT401-0のテーブルエントリE401-0-0についても同様である。
ページテーブル初期化部558は、これらの設定が完了すると、レジスタ526にアドレスIaddr(T401)を設定する。
ステップZ207において、部分読込部552の署名情報計算部555は、外部読込部532経由で、検証記憶部536のブートイメージ用バッファに、最初に検証する部分ブートイメージB401-0-0-0をロードし、ブートイメージのヘッダに含まれているブートイメージ署名情報に基づいて検証を行うためのハッシュ値(署名情報)を計算する。例えば、ハッシュ値は、セキュアDMAコントローラ511によるデータ転送時と並行して、セキュアDMAコントローラ511内蔵の暗号ハードウェアによって計算される。ハッシュ計算の中間データは、セキュアDMAコントローラ511のレジスタに記憶される。このレジスタは、セキュアVMM516からのアクセスは許可されるが、他の構成要素からのアクセスは禁止される。例えば、署名情報計算部555は、検証記憶部536に、512キロバイト、128ページ分の部分ブートイメージ用のメモリ領域を用意し、署名計算用のハッシュ計算が完了した部分ブートイメージB401-0-0-0〜B401-0-0-127を記憶する。
ステップZ208において、検証用バッファ書出部548は、次の部分ブートイメージB401-0-0-128〜B401-0-0-255のハッシュ計算を行うため、部分ブートイメージB401-0-0-0〜B401-0-0-127を検証情報生成部531に送る。検証情報生成部531は、この部分ブートイメージB401-0-0-0〜B401-0-0-127を検証するための検証子M402-0-0-0〜M402-0-0-127を計算する。外部書出部534は、外部メモリ7の対応するメモリ領域に、部分ブートイメージB401-0-0-0〜B401-0-0-127を書き出す。バッファ領域管理部547は、検証記憶部536における部分ブートイメージB401-0-0-0〜B401-0-0-127のメモリ領域を解放する。これら部分ブートイメージB401-0-0-0〜B401-0-0-127の検証子M402-0-0-0〜M402-0-0-127の計算にも、セキュアDMAコントローラ511が用いられる。
ページテーブル初期化部558は、参照関係更新部546経由で、解放されたメモリ領域を参照するテーブルエントリの初期化状態情報に、利用可を設定する。
セキュアブートローダ508aは、部分ブートイメージB401-0-0-128〜B401-0-0-255のハッシュ計算、検証子の計算、書き出し、部分ブートイメージB401-0-0-256〜B401-0-0-383のハッシュ計算、検証子の計算、書き出し、部分ブートイメージB401-0-0-384〜B401-0-0-511のハッシュ計算、検証子の計算、書き出し、を繰り返し、テーブルブロックT401-0-0のテーブルエントリの全ての初期化状態情報に利用可を設定し、テーブルブロックT401-0-0の初期化が完了する。
これにより、セキュアブートローダ508aは、テーブルブロックT401-0-0の書き出し、検証ブロックT402-0-0の計算及び書き出しが可能である。セキュアブートローダ508aは、テーブルブロックT401-0-0と検証ブロックT402-0-0とを書き出し、書き出し対象テーブルブロックT401-0-0の参照元であるテーブルブロックT401-0のテーブルエントリE401-0-0の初期化状態情報を利用可に設定する。
上記の部分ブートイメージB401-0-0-0〜B401-0-0-511と同様の処理が、次の部分ブートイメージB401-0-1-0〜B401-0-1-511に対して実行される。具体的には、セキュアブートローダ508aは、部分ブートイメージB401-0-1-0〜B401-0-1-511を参照するテーブルブロックT401-0-1、検証ブロックT402-0-1、部分ブートイメージB401-0-1-0〜B401-0-1-511のメモリ領域を確保し、上記と同様の処理として、部分ブートイメージB401-0-1-0〜B401-0-1-511の読み込み、ハッシュ計算、検証子計算、部分ブートイメージB401-0-1-0〜B401-0-1-511の書き出し、対応するテーブルエントリE401-0-1の初期化状態情報の設定を行う。
上記の処理が終了すると、セキュアブートローダ508aは、テーブルブロックT401-0-1の書き出し、検証ブロックT402-0-1の計算及び書き出しが可能である。
ステップZ209において、セキュアブートローダ508aは、全ての部分ブートイメージに対して上記のステップZ204〜Z208の処理が実行されたか否か判断する。
全ての部分ブートイメージに対して上記のステップZ204〜Z208が実行されていない場合には、処理はステップZ204に移動する。このように、上記の処理を繰り返すことにより、セキュアブートローダ508aは、全ての部分ブートイメージに対して、逐次的にハッシュ値の計算を行い、ブートイメージ全体に対する検証子の中間データを逐次的に更新し、最終的に上記のファイルヘッダの署名検証に必要なハッシュ値を生成する。多くの場合、単一のブートイメージ検証に用いられるハッシュ値は単一であり、ブートイメージに対するハッシュ値の計算は逐次的に行われる。もしブートイメージの署名のハッシュ値が予め部分ごとに分割して与えられている場合には、その分割にしたがって複数のハッシュ値を計算する。
ステップZ210において、署名検証部559は、ヘッダ取得部554から取得したブートイメージ署名情報と、計算された部分ブートイメージのハッシュ値とに基づいて署名検証を行う。
署名検証の結果が成功を示す場合、ステップZ211において、署名検証部559は、ルート検証情報を例えば鍵保存ユニット513などの安全な記憶装置に記憶し、ゲストOSが有効か否かを示す情報に、有効であることを設定する。外部メモリ7は、最上位までの全てのページテーブル及び検証子テーブルを記憶する。その後、セキュアブートローダ508aは、終了する。
署名検証の結果が失敗を示す場合、Z212において、署名検証部559は、ルート検証情報13を破棄し、ゲストOSが有効か否かを示す情報に無効であることを設定し、生成されたページテーブルツリー9及び検証子ツリー10を無効とする。その後、セキュアブートローダ508aは、処理を終了する。
以上の処理によって外部メモリ8にロードされたブートイメージと、このブートイメージに対するアドレス変換に用いられるページテーブルツリー9と、ブートイメージ及びページテーブルツリーの検証のための検証子ツリー10とは、外部メモリ7から読み込まれ、セキュアVMM516によって検証され、内部メモリ8に記憶される。これにより、ブートイメージを安全に実行し、ゲストOSのサービスを提供することができる。
本実施形態においては、初期化状態情報を管理することにより、ゲストOSが将来利用可能なメモリ領域に対して未初期化の部分があっても、ゲストOSのサービスを開始することができ、情報処理装置500の立ち上げを高速化できる。
本実施形態において、セキュアブートローダ508aは、プロセッサ501内のマスクROM508に記憶されており、セキュアブートされ、内部メモリ8に記憶される。セキュアブートローダ508aは、ゲストOSのブートイメージの改ざん防止のために、検証を行う。例えば、ブートイメージの署名情報は、ブートイメージ全体などのように大きなサイズに対して付されている。ゲストOSブートイメージのサイズは、一般に安全な内部メモリ8のサイズよりもはるかに大きい。このため、ゲストOSのブートイメージ全体を内部メモリ8に読み込み、ゲストOSのブートイメージの署名検証を行うことは物理的にできない。ゲストOSのブートイメージの署名計算のために、ゲストOSのブートイメージを分割して読み込む場合、既に署名計算を終えて外部メモリ7に記憶されている部分ブートイメージが改ざんされる場合がある。しかしながら、本実施形態においては、ゲストOSのブートイメージを部分的に読み込み、読み込み済みの部分ブートイメージに対してセキュアページテーブルツリー121及びセキュア検証子ツリー122を生成し、外部メモリ7のゲストOSのブートイメージのうち、読み込み済みの部分ブートイメージに対する改ざんを検出可能とする。これにより、内部メモリ8のサイズが限られている場合であっても、安全にゲストOSのブートイメージの署名検証を行うことができ、署名検証後のゲストOSのブートイメージの改ざんを防止することができる。さらに、ブート時の署名検証と、ページテーブルツリー9及び検証子ツリー10の生成とを並行して行うことで、それぞれを単独に行う場合よりブート時間を短縮する。
本実施形態においては、ページテーブルツリー9及び検証子ツリー10のうちの一部が未初期化であっても、ゲストOSの処理を開始できる。すなわち、本実施形態においては、巨大なメモリ領域を割り当てられるゲストOSの起動において、割り当てられたメモリ領域のうち必要な部分の初期化とページテーブルツリー9及び検証子ツリー10のうちの必要な部分の生成が完了していれば、ゲストOSを稼働することができ、さらに起動時間を短縮することができる。
未初期化の部分は、ページテーブルが生成されていないが、この未初期化のページテーブルに対して最上位のテーブルエントリは利用不可を示す。この未初期化のページテーブルに対して最上位のテーブルエントリを含むページテーブル及びこのページテーブルより上位のページテーブルは、検証子によって保護可能である。このため、未初期化のページテーブルに対して最上位のテーブルエントリの状態を攻撃者が変更することはできない。したがって、本実施形態においては、未初期化のメモリ領域に不正データを挿入する攻撃を防御することができる。
例えば、ゲストOSが、利用不可を示す初期化状態情報の設定されている中間物理アドレス領域を利用したい場合、ゲストOSは、セキュアVMM516に対して当該中間物理アドレス領域の初期化要求を明示的に発行するとしてもよい。この場合、初期化要求を受けたセキュアVMM516は、外部メモリ7及び内部メモリ8にメモリ領域を確保し、所定の初期値ゼロでデータを記憶するためのメモリ領域を初期化し、セキュアブートローダ508aのブートイメージのロードと同様の処理により、ページテーブルツリー9及び検証子ツリー10とを生成する。
上記の本実施形態においては、外部メモリ7又は外部デバイス503に記憶されたブートイメージが、別のメモリ領域にコピーされる。しかしながら、外部メモリ7又は外部デバイス503に記憶されているブートイメージは、別のメモリ領域にコピーされることなく、そのままページ単位にゲストOSに割り当てられた中間物理アドレスにマッピングされてもよい。これにより、データコピーの処理を減らすことができる。この場合、データ参照処理は上記の処理と同様であるが、書き出し処理は、ページテーブルの書き出しを行わず、検証子のみを書き出せばよい。このデータコピーの省略により、ブート時間を短縮させることができる。
本実施形態において、初期化状態情報を用いることにより、未初期化のメモリ領域に対する改ざんを防止することに加えて、ゲストOS自身の不具合によって未初期化のメモリ領域からページテーブル又はデータが読み込まれることを防止することができる。例えば、ゲストOS自身の不具合によって、初期化状態情報が利用不可を示すページテーブルに対して読み込みが行われた場合、セキュアVMM516がゲストOSにその旨を通知することで、不具合を検出することができる。
情報処理装置500は、ゲストOSのブートに先立ってメモリテストを実行してもよい。ゲストOSのブートに先立って、メモリテスト時に、ページテーブルツリー9及び検証子ツリー10が生成されると、上記の不具合検出の効果は得られない。したがって、本実施形態において、メモリテスト時に、ページテーブルツリー9及び検証子ツリー10の生成は実行されないとしてもよい。また、メモリテストが実行される場合においては、初期化状態情報に、メモリテスト完了かつゲストOSイメージのロードが未完了であることを示す情報を付加し、未初期化状態のページテーブル又はデータに対するアクセスを検出してもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。