仮想化ソフトにはさまざまなメリットが存在する。その一つが,システムの高セキュリティ化である。

 例えば,仮想化ソフト「Xen」では,ハードウエアの上で仮想マシン・モニターが直接動作するため,ゲストOS(ドメイン)はハードウエアに直接アクセスできない(図1)。複数のゲストOSを1台のマシンで稼働させる場合も,各ゲストOSが論理的に分離されるため,あるOS上から別のOSの管理下にあるメモリー領域に直接アクセスできない。例えば,AというOSの権限のみを持つユーザーはBというOSにアクセスできない。Aが侵入を受けても,Bはセキュアなまま運用できる。

図1●Xenの構成図
図1●Xenの構成図
Xenでは,ハードウエアへのアクセスは,すべて仮想マシン・モニターを経由する。

 これは,仮想マシン・モニターがすべての権限を握っているからである。逆にいえば,システム全体のセキュリティは,仮想マシン・モニターが信頼できるかどうかにかかっている。

 しかしながら2006年までは,仮想マシン・モニターの信頼性を検証する統一した方法が無かった。

 仮想マシン・モニターは,OS起動前に動作を始める。つまり,仮想マシン・モニター自体の信頼性を保証するには,ハードウエア側からのサポートが必要になる。そこでIntelが,セキュリティ機能を組み込んだCPUやチップセットなどを開発。それが,「インテル トラステッド・エグゼキューション・テクロノジー」(インテルTXT)である。

 インテルTXTは,CPU,チップセットのほか,ハード・ディスクに組み込む「SINITモジュール」および「BIOS ACモジュール」と呼ぶ小さなソフトウエアで実現する。TXT対応のCPUとチップセットは2007年下半期に出荷される見込みである注1。インテルTXTに対応したPCには,TXT対応のCPUとチップセット,サードパーティが製造するセキュリティ・チップ(TPMチップ注2)が不可欠だ注3

 なお,インテルTXTは,仮想化ソフトだけではなく,単体で稼働するLinux OSやWindowsのセキュリティも高められる。

起動時にハッシュ値を確認

 では,インテルTXTはどのような仕組みで動作するのだろう。

 まず,仮想マシン・モニター自体が(悪意ある第三者などによって)改ざんされてないことを確認するには,そのソフトのバイナリ・ファイルから計算したハッシュ値(20バイト)をあらかじめハードウエア内に記録しておく。具体的には,前述したTPMチップのレジスタに記録しておく。後述するように,パソコンを起動して仮想マシン・モニターをロードする段階で,このハッシュ値が参照される仕組みだ。

 パソコンの電源を投入したところから順にTXTの動作を追ってみよう。通常,パソコンに電源が投入されると,(1)BIOS内のコードが動作し,(2)ディスク装置からブート・ローダーが読み込まれる。その後,(3)仮想マシン・モニター,(4)OSの順にロードされる。

 インテルTXTでは,仮想マシン・モニターが改変を受けていないかどうかを監視するため,(3)の前に仮想マシン・モニターのセキュリティをチェックするフェーズが入る。

 ブート・ローダーはロードされた後,仮想マシン・モニターのコードではなく,ディスク上に配置されているインテル製のSINITモジュールをロードする。このモジュールは,インテルTXTに対応するためにCPUに追加された新命令セットSMX(Safer Mode Extension)で記述されている。

 そして,TXT対応CPUは,このSMX命令を実行すると,メモリー内部に特別に保護されたパーティションを作成する。この中で,SINITモジュールが動作して,TPMチップのレジスタに格納された仮想マシン・モニターのハッシュ値と,これからロードしようとする仮想マシン・モニターのファイルから計算した値を比較する。もし,改変されていれば警告を出力する。

メモリー・アクセスを監視する

 さらに,仮想マシン・モニター自体が改変を受けていなくても,管理下の物理メモリーに不正にアクセスできてしまう経路が存在する恐れもある。これは仮想マシン・モニター側の対応だけでは防げない。

 例えば,伝統的なDMA(Direct Memory Access)を使うだけで,CPUを経由せず,メモリーと周辺装置の間で直接データを転送できる。周辺装置側からはすべてのゲストOSのメモリーが見えてしまう。

 そこで,インテルTXTでは,メモリー・アクセス時に必ずTXT対応チップセットを経由させる。

 TXT対応チップは,周辺装置からのDMAによるアクセスを監視する。

 これは,インテルTXT対応としてチップセットに追加された「VT-d」注4と呼ばれる新命令セットで実現する。指定されたアドレス範囲以外のDMA転送や指定された特権レベルを超えるアクセスを検知,遮断できる(図2の下)。

図2●TXT対応ハードウエアの構成図
図2●TXT対応ハードウエアの構成図
物理メモリーは仮想マシン・モニターにより,ゲストOSごとに分離されている(図の上半分)。装置bがDMAを用いて物理メモリーにアクセスする際(図の下半分),現在の仕組みではゲストOS Bに割り当てられた領域にも無条件でアクセスできる。インテルTXT対応のチップセットは,DMAを用いたアクセスを制限し,割り当て外のメモリーへのアクセスを禁止する。

 ただ,これだけではまだ不十分。チップセット内部のレジスタの値を不正に書き換えられてしまう恐れもあるからだ。例えば,ある値を特定のレジスタにセットすると,複数の物理アドレスを同一のアドレスとしてアクセスできるように不正に設定できる。

 これを阻止するのが前述のBIOS ACモジュールである。BIOS ACモジュールは,パソコンの起動時にプロセッサを1つ残して停止し,割り込みも止める。その後,チップセットのレジスタ値を初期化し,不正な設定を防ぐ。この後で仮想マシン・モニターを起動すれば,それ以前に受けた改変をすべて元に戻せるという仕組みだ。