図1●PacificaとVanderpoolの違い
Vanderpoolでは仮想化を支援する機能だけだが,PacificaにはOSのセキュア化を支援する機能が盛り込まれている。これは2006年に登場予定の次世代Windows「Longhorn」に組み込まれる予定のNGSCB(Next-Generation Secure Computing Base)機能を想定したものと考えられる。
図2●NGSCBの環境
ソフトウェアは改変される危険性があるため信頼できないという前提に立ち,ソフトウェアが改ざんされていないことを検証しながら起動していくことでシステム全体のセキュアさを確保するのがNGSCBの肝である。ただし,セキュアな環境を用意するだけでは従来のアプリケーションが動作しないため,従来型のOSをセキュア環境とは分離したモード(一般モード)で動作させる。
図3●SKINITの動作
OSローダーが正規のものかどうかを見分ける動作がSKINITである。黄色が新たに追加された手順。OSローダーを書き換えて,システムに不正なプログラムを読み込ませる攻撃に対処する。
図4●External Access Protectionの概略
DMA(Direct Memory Access)を使ってメモリーの任意の場所をコピーして解析する攻撃を防止するためのもの。I/Oデバイスごとにアクセスできないメモリー領域を定義しておくことで実現する。この領域のことをドメインと呼ぶ。
 米Advanced Micro Devices(AMD)社が2005年5月25日,ハードウェアでシステムの仮想化を支援する技術「Pacifica」の仕様書を公開した。米Intel社がこの1月に公開したVanderpool対抗の技術だ(本誌2005年3月号に関連記事)。PaicificaとVanderpoolの差は,Vanderpoolが仮想化の支援機構だけなのに対し,PacificaがOSのセキュア化支援機構を含んでいること(図1[拡大表示])。Intelも同様の機構を「LaGrande」というコードネームで以前から公表しているが,その詳細は明らかにしていない。

 Pacificaに組み込まれた仮想化とセキュリティの機構は,米Microsoft社がWindowsの新版「Longhorn」に搭載予定のNGSCB(Next-Generation Secure Computing Base)をターゲットとしている(本誌2004年1月号に関連記事)。このことは,Longhornの出荷開始予定が2006年末なのに対し,AMDがPacificaに対応したマイクロプロセッサの出荷を同年上半期に予定していることからもうかがえる。

NGSCB構想に応える仕様

 NGSCBの狙いは,不正なプログラムが重要なデータにアクセスできない環境を作り出すこと*1図2[拡大表示])。これを実現するために,LonghornではセキュアOS*2を動作させ,その上で信用できるプログラムだけを動かす。ただこの状況ではユーザーの使い勝手が下がるうえ,従来のWindowsのように自由にプログラムをインストールできない。そこでNGSCBは,セキュアなOSだけでなく,従来型OSを動かす仕組みも用意する。従来型OSからセキュアOS側が持つデータにアクセスする場合は認証を受ける。

 このような仕組みを実現するためには,次の三つの機構が必要になる。まず,セキュアなOSと従来型OSが同じプラットフォーム上で同時に動作する機構。二つ目は,OSが改ざんされていないことを保証する仕組み。OSが不正なプログラムを含んでいるようでは,根本部分でセキュリティを保てない。最後に,セキュアなOSが利用しているメモリー領域に従来型OSがアクセスできない仕組みである。いくらOSがセキュアでも,別のプログラムから直接メモリーにアクセスされれば不正なプログラムを埋め込まれたり,データが漏れるといった事態が起こり得る。

複数OSの実行を支援

 では,Pacificaは具体的にどういう仕組みを備えているのか。

 まず,複数のOSを一つのプラットフォーム上で動作させる仕組みは仮想化支援機構で実現する。具体的には,VMM(Virtual Machine Monitor)と呼ぶプログラムがその上で動作する複数のOS(ゲストOSと呼ぶ)を順番に切り替えることで,システムを仮想化する。実際の動作では,VMMがゲストOSを起動し,タイマーやハードウェア/ソフトウェアの割り込みによってVMMに制御を戻すことを繰り返す。

 VMMからゲストOSへの移行時は,起動するゲストOSが前回使用していたレジスタの値を所定のテーブルから取り出しプロセッサに設定する。ゲストOSからVMMに制御が移る場合は,ゲストOSの現在のレジスタ値を所定のテーブルに保存し,前回VMMが利用していたレジスタの値をセットする。Pacificaは,こうした切り替え動作を数個の命令実行で行えるように設計されている。

OSローダーの改ざんをチェック

 二つ目のOSのセキュアさを保証するために,Pacificaは「SKINIT」と呼ぶ動作モードを用意する。SKINITはOSローダーの改ざんをチェックする動作モードである。OSローダーは,OSをメモリー上に読み込み,起動するためのプログラム。これが不正なプログラムだった場合,システム全体の信頼性が損なわれる。

 一般にAT互換機ではBIOSがハードディスク・ドライブのMaster Boot Record(MBR)を読み出し,ここに書かれているブート・プログラムがOSローダーを読み出して実行する。ここで,OSローダーが改ざんされているかどうかはチェックしない。次にOSローダーがOSを読み出してこれに制御を渡す。

 SKINITでは,OSローダーが主記憶上に展開されてもすぐに実行せずに,改ざんがないかをまずチェックする(図3[拡大表示])。具体的にはプログラム全体をTPM(Trusted Platform Module)チップに送信する。TPMは,ハッシュ関数を用いて送られてきたデータからハッシュ値を作り,TPM内に格納してある正規のOSローダーのハッシュ値と比べる。ハッシュ値が同じなら改ざんがないと見なし,成功した旨をチップセットやマイクロプロセッサに通知する。成功ならマイクロプロセッサはOSローダーを実行する。

デバイスが直接触れない領域を作る

 ゲストOSが管理するデータを他のゲストOSからアクセスさせない仕組みは,二つの機構で実現する。一つは先の仮想化支援機構。仮想化支援機構では,仮想的なメモリー空間と物理的なメモリー空間との間の変換テーブルをゲストOSごとに用意し,切り替えて利用する。VMMがそれぞれのゲストOSに対して重複のない物理メモリー空間を割り当てれば,与えられた空間から逸脱してアクセスすることはなくなる。

 もう一つは,DMA(Direct Memory Access)機構を使った主記憶への直接アクセスを防止する機構「External Access Protection」である。逸脱した部分へのDMAを防ぐ。

 この防止機構では,I/OデバイスごとにDMAできないメモリー領域をあらかじめ定めておく(図4[拡大表示])。ただ,I/Oデバイスごとに定めるとデータが膨大になってしまうので,メモリーのアクセスリストをグループ化する。Pacificaではこのグループをドメインと呼んでいる。例えば,ハードディスクとDVD-ROMドライブはドメイン1,サウンドとグラフィックス・カードはドメイン2に属するという具合に設定する。ドメインの数の制限は仕様上ないが,「一般的に四つ」としている。

 DMA転送要求があった場合,まず対象となるI/OデバイスのデバイスIDからどのドメインに属するかを判断する。次に,そのドメインに対応したメモリー・アクセス禁止マップを読み込み,要求されたアドレス範囲と比べ,一致した場合はアクセスを拒否する。処理はノースブリッジ内で行われる。

(中道 理)