【セキュリティ最前線】仮想マシンとセキュリティ「セキュアVM」
第4回:土台となるハードウェアのアーキテクチャ
著者:東京工業大学 光来 健一
公開日:2008/1/30(水)
ダイレクトI/O対応VT(VT-d)
「第2回:強制アクセス制御機構「sHype」とは?」のMACドメインのところで述べたように、Xenでは複数のVMからのI/Oデバイスへのアクセスはドメイン0を介して行う。情報流を制御するために、MACドメインではSELinuxを動かしてsHypeと連携する必要があった。そのため、MACドメインもシステムの中で信頼しなければならない部分に含めなければならず、信頼すべきコードが増える結果となっていた。
ドメイン0を介さずにデバイスにアクセスするためには、デバイスをVMに割り当ててVMが直接デバイスにアクセスできるようにする方法が考えられる。例えば、ディスクが2台あれば、2つのVMにそれぞれを割り当てることで排他的に利用することができる。
この際に問題になるのはデバイスによる「DMA転送」である。多くのデバイスはCPUを介さずにDMAを用いてメモリとの間で直接データを転送する。しかし、デバイスは実際の物理メモリに対して割り振られた物理アドレス(ホスト物理アドレス)を使うのに対し、VMは仮想的な物理メモリに割り振られた物理アドレス(ゲスト物理アドレス)を使っている。
そのため、VMがゲスト物理アドレスを指定してDMA転送の要求を出すと、デバイスは指定されたアドレスをホスト物理アドレスだと思って意図しないメモリ領域にアクセスしてしまう。これを悪用すれば、あるVMから別のVMのメモリに対してDMA転送を行い、情報を盗んだり改ざんしたりすることができる(図2)。
この問題を解決するために、インテル社は「VT-d」と呼ばれるアーキテクチャの中でDMAリマッピング・ハードウェアを提供している。DMAリマッピング・ハードウェアはI/Oデバイスとメモリの間に置かれる。
図2:DMA転送による改ざんを防ぐ
DMAリマッピング
VT-dはホスト物理メモリのサブセットからなるDMA保護ドメインと呼ばれる環境を提供している。仮想マシンモニタはDMA保護ドメインを作成して、そのメモリをVMに割り当てることでVMとDMA保護ドメインを関連づけることができる。
DMA保護ドメインにはデバイスを割り当てることができる。1つのDMA保護ドメインに複数のデバイスを割り当てることができるが、1つのデバイスは1つのDMA保護ドメインにしか割り当てることができない。これはデバイスを1つのVM専用に割り当てることを意味する。
デバイスからのすべてのDMA転送は、そのデバイスが割り当てられたDMA保護ドメインのアドレス変換テーブルを使って行われる。VMからDMA転送の要求が出されると、指定されたゲスト物理アドレスはホスト物理アドレスに変換される。DMA保護ドメインに割り当てられたデバイス以外からはそのドメインのホスト物理メモリにアクセスすることはできないため、DMA転送を安全に行うことができる。
アドレス変換テーブルはMMUのページテーブルに似た構造となっている。性能を向上させるために、よく使われるエントリについては「IOTLB」と呼ばれるハードウェアを使ってキャッシュされる。
また、新たな仕様として「IOV(I/O Virtualization)」について解説する。デバイスをVMに割り当てると、1つのデバイスは1つのVMでしか使うことができなくなる。これではVMの数と同じ数のディスクやネットワークカードが必要になり、仮想化のメリットが失なわれてしまう。そこでPCI-SIGでは「IOV」という機能をPCI-Expressに追加し、デバイス自体を仮想化して複数のVMで共有して直接使えるようにしている。この仕様はまだ策定されたばかりであり、デバイスを共有できるようになるにはもうしばらくかかりそうである。 次のページ