「Black Hat Japan 2007 Briefings & Training」(開催期間:10月23日~26日)において行われた、Nguyen Anh Quynh氏による講演「バーチャルマシンのハイジャックの可能性」を紹介する。同氏は独立行政法人産業技術総合研究所(AIST)の博士課程修了研究員である。同氏の研究内容は、コンピュータセキュリティ、ネットワーキング、データフォレンジック、バーチャライゼーション、トラステッドコンピューティング、オペレーティングシステムと多岐に渡っている。また同氏は「Vnsecurity」というベトナムの情報セキュリティリサーチグループのパイオニアでもある。

同氏は講演の中で、いくつかのデモを交えながら攻撃者がホストバーチャルマシン(ホストOS)の操作権限を得た場合に「ゲストOSを直接操作することなく、あらゆる攻撃が行える可能性があること」をVMのハイジャックの可能性として説明していた。なお、今回同氏が取り上げたVMソフトウェアは「Xen」「QEMU」「KVM」であった。それでは、講演の詳細を以下に紹介していく。

IA32アーキテクチャと各VMソフトにおけるデバッギングサポート

はじめに同氏は、IA32にはデバックに関するアーキテクチャが存在することを説明した。その上で、ハードウェアブレイクポイントの設定に使用するデバックレジスタがDR0~DR07まで存在することや、int 1命令ならびにint 3命令によるデバッグの実現について説明。そして、これらを用いてXen、QEMU、KVMではそれぞれどのようにゲストOSを外部からデバックできるのかについて図を用いながら説明し、このテクニックを利用することで、ゲストVMをハイジャックできるのではないかと指摘した(図1)。

【図1】ゲストVMハイジャックの可能性(出典:Nguyen Anh Quynh & Kuniyasu Suzaki, Black Hat Japan 2007)

Hijacked VM

次に、同氏はこの技術を応用して、ゲストOSで稼働しているSSHサーバにログインして操作している内容をホスト側で記録、表示を行うデモを行った。このテクニックの概要はおおむね表1のとおりであるという。また、同氏はXen、QEMU、KVMに関してそれぞれどのようにしてこのようなホストOSの操作を行うかについての詳細も解説した。

(1)ブレークポイントをゲストOSに定義する
1. ゲストOSを一時停止する
2. ホストOSのデバック機能を利用してゲストVMのブレークポイントを定義する
3. ゲストOSをレジュームする

(2)ブレークポイント通過時のイベントを操る
1. ブレークポイント通過時のイベントを何かしらの方法で受信する
2. このイベントの詳細情報を調査する
3. ゲストVMをレジュームする

同氏はブレークポイントを「どこに設定するのが適切か?」を割り出すにはソースコードを読むことが最も重要であるとした。また、デバック情報を出力させるように設定した上でカーネルをコンパイルするとアドレス情報なども把握でき、より設定がしやすいという。

次に同氏は、ブレークポイントの取り扱いとしてブレークポイントを直接書き換える方法Inline-Execution Scheme(IE)と、命令を直接書き換えず別の場所に移動させる方法Outline-Execution Scheme(OE)のふたつがあると説明(図2)。両者にはそれぞれ長所と短所があり、IEの長所としては柔軟性があり、処理が行いやすい点があるという。また短所はSMP(Symmetric Multi Processing)に設計上の欠陥がある点だと指摘した。一方でOEの長所としてはSMPが効率良く稼動することや、パフォーマンスにおいてIEより長けていると説明していた。また短所としてはサーバの管理者に気付かれずにホストOSを操作するのが難しいと指摘した。

【図2】Inline-Execution(左)とOutline-Execution(右)の構成図(出典:Nguyen Anh Quynh & Kuniyasu Suzaki, Black Hat Japan 2007)

ゲストOSの操作テクニックは「もろ刃の剣」

次に同氏は、悪意のある人の目線(Blackhat motivation)と善意のある人の目線(Whitehat motivation)からそれぞれゲストOSに対する操作の脅威を説明していた。悪意のある人はホストOSへなんらかの方法で侵入し、その上で稼動しているゲストOSで発生するキー入力や重要なデータを盗むなどのスパイ行為を行う可能性があると指摘し、デモを交えながら、その脅威を伝えていた。一方で、善意のある人は、ホストOS上から稼動しているゲストOSの挙動をモニタリングしたり、利用者のプロファイリングが行えるとデモを交えながら説明していた。またこの方法はIDSやハニーポットとして応用できるという。

Detect and Anti-detect VM hijacking

次に同氏は、ゲストOSに対するハイジャックの脅威からどう守るのか、また守ろうとしている側からどう逃れるのか、を説明した。検知方法としては、int 1命令とint 3命令がそれぞれ実際のメモリの参照とブレークポイントの処理を行っていることから、カーネルに異常なアクセスがないか、または不審なカーネルモジュールがないか確認することや、認知されていないデバックモードでのVMの稼動を確認することだという。

一方、検知回避ではIEとOEの両方での可能性を取り上げ、IEはハイジャックされたゲストOSの中でロードされないために気付かれにくい、と指摘した。またOEではモジュールのロードやシステムコールを利用せずに攻撃を仕掛ける可能性があるため、IEと同様、気付かれにくいと指摘した。

最後に同氏は、ゲストOSに対するハイジャックには、ホストOSの動作するサーバ管理者の協力は必要ない、と説明していた。またゲストOSの種類(Windows/Unixなど)は問わず、かつゲストOSを直接操作せずにホストOSのみに攻撃を仕掛け、ゲストOSのハイジャックが行われていることを再度強調し、ホストOSをできるだけセキュアにするべきだと主張した。 なお、今回講演にて使用された手法は、こちらからダウンローできる。