セキュリティ・コンサルタント
村上 純一

 前回,ルートキットを改ざん対象となるリソースの性質に基づいてタイプ0からタイプ3に分類した。本稿では,タイプ3のルートキット,すなわちハードウエアの仮想化支援機能を利用して動作するルートキットを紹介する。

仮想化技術の進展でハードウエアが進化

 コンピュータの仮想化技術と言えば,VMwareを想像される方も多いのではないだろうか。近年,VMware製品に限らず米マイクロソフトのVirtual Server,XenSourceのXenなど仮想化技術の実装した製品は多数登場しており,特にサーバー統合の分野で注目を集めている。

 ハードウエアの仮想化技術を平たく説明すると,1台のコンピュータ上で複数台のコンピュータが動作しているかのように見せる技術である。その実現方式は複数存在するが,現在VMM(Virtual Machine Monitor:仮想マシン・モニター)を利用した実装が主流である。

 OSは一般にCPUの各種システム・レジスタ,制御レジスタはもちろん,メモリー,ハード・ディスクなど全てのハードウエア・リソースを占有して動作している。そのため,そのままではコンピュータ1台で同時に複数のOSを実行できない。そこで,ハードウエアとこれらのOSの中間で動作し,あるOSが占有していたリソースが,他のOSが利用するリソースと競合しないよう管理するのがVMMである(図1)。この際,VMM上で動作するOSをゲストOS,またゲストOSから見た仮想的なハードウエアを仮想マシンと呼ぶ。

図1●VMMを利用した仮想化
図1●VMMを利用した仮想化

 仮想化を行なうにあたってまず問題になるのが特権命令である。第3回でも紹介したようにx86プロセッサにはリング0からリング3の特権レベルが存在し,リング0でのみ実行可能な特権命令が存在する。例えば,システム・レジスタのロードや制御レジスタの変更がこれにあたる。こうした特権命令はリング0で動作しているOSが実行するものである。

 そこで,VMMはゲストOSをリング1などのより低い特権レベルで動作させることで特権命令の実行をトラップし,動作をエミュレートすることでOSからは,まるでハードウエア・リソースを占有しているかのように見せかけている(図2)。

図2●ソフトウエア・ベースのVMMを利用した仮想化の仕組み
図2●ソフトウエア・ベースのVMMを利用した仮想化の仕組み

 このようにソフトウエア・ベースのVMMは,x86の仕組みを巧妙に利用したソフトウエア的な工夫の上に成り立っている。しかし,その反面こうした処理のオーバーヘッドやVMMの実装に伴う複雑さは避けることができない。

 こうした背景を受けて登場したのがIntel VTやAMD-Vと言ったプロセッサでの仮想化支援機能である。以降,本稿ではIntel VTに焦点をあてて話を進める。

VMMをリング「-1」を動作させるハードウエア仮想化支援機構

 Intel VTでは,新たに仮想化に関連する10個の命令(表1)とVMXモードと呼ばれるプロセッサの動作モードが追加されている。VMXモードは,VMMを実行するためのVMX root-operationとゲストOSを実行するためのVMX non-root-operationの二つから成り立っている。Intel VTを利用した仮想化は,各ゲストOSがVMX non-root-operationで実行され,あらかじめ設定された例外的な処理(特権命令など)を実行した際に自動的にVMX root-operationで実行されるVMMに処理が切り替わる仕組みになっている。VMMを一種の例外ハンドラと考えると理解しやすいだろう。このため,ソフトウエア・ベースのVMMのようにゲストOSのリングの付け替えの必要がない。VMMは従来のリングの概念で考えるとリング0よりもさらに高い特権の“リング-1”で動作すると言える。また,VMX non-root-operation(ゲストOS)からVMX root-operation(VMM)への状態遷移をVM Exit,逆にVMX root-operation(VMM)からVMX non-root-operation(ゲストOS)への状態遷移をVM Entryと呼んでいる(図3)。

表1●新たに追加された仮想化関連の命令
表1●新たに追加された仮想化関連の命令


図3●Intel VTを利用した仮想化の仕組み
図3●Intel VTを利用した仮想化の仕組み

 Intel VTを利用して仮想化を実現するには,まずVMXON命令を実行してVMXモードに入り,VMM上で実行するゲストOSごとにVMCS(Virtual Machine Control Structure)と呼ばれる管理構造を作成・初期化した後,VMLAUNCH命令を実行する。

 VMCSは,二つのステート・エリアと4種類の制御エリアから構成されている(表2)。二つのステート・エリアは,VM Exit,VM Entry発生時にゲストOS,VMMそれぞれのコンテキストを保存するために利用される。4種類の制御エリアは,VM Exitが発生する条件を設定するために利用される。

表2●VMCSの各論理グループ
表2●VMCSの各論理グループ


村上純一(むらかみ・じゅんいち)
国内の大手セキュリティ・コンサルティング会社に勤務。セキュリティ・コンサルタント業務やソフトウエアのぜい弱性を発見する業務に携わる。