マイクロソフト製品のセキュリティにかかわる話を見聞きするとき、「多層防御」という言葉がよく出てきます。
そして多層防御には、さまざまな階層があり、そのひとつに「物理層」があります。
ところが、仮想マシンに対して多層防御を実践しようとしたときに、仮想マシンの「物理層」ってどこ?
という問題があります。
物理層については、Microsoft TechNet – セキュリティ対策の要件解説で次のように解説しています。
他の層をどれほど完璧に対策しても、サーバー自体が誰もが操作できる場所に置かれていたのでは意味がありません。たとえログオンできなくても、HDD を抜き出せばセキュリティ設定を無視してデータを読み出すのは容易です。入退室管理や盗難防止ワイヤーなどがこの層です。 |
これを仮想マシンに置き換えて考えてみると、「HDDを抜き出す」とはHyper-VのVHDファイルに直接
アクセスすること、と解釈することができます。そのため、Hyper-Vホスト上のVHDファイルに直接アクセスできれば、
仮想マシンのハードディスクに物理的にアクセスできるのと同じ意味になります。
そのため、仮想マシンのセキュリティを考えるうえで、仮想マシンのホストするHyper-Vホストの
セキュリティも重要になってくる、というのは前々から言われていたことだと思います。
一方、もうひとつの物理層の要素、メモリの内容に関してはどうか?というと、
IPA ISEC セキュア・プログラミング講座で次のように解説しています。
プログラムの異常終了時にメモリダンプが自動生成されることがあるが、これはメモリ上に展開していたデータをファイルに書き出しており、このデータに秘密データがあると流出につながる可能性がある。 |
ということで、こちらもメモリの内容がディスクに保存されることがあるため、
ディスクに物理的にアクセスできれば、メモリの内容についても盗み出される可能性があります。
さらに仮想マシンに関して言えば、メモリダンプを実行しなくても、
ホスト側からメモリダンプを手軽に生成できるツールが提供されており、
■Microsoft Hyper-V VM State to Memory Dump Converter (vm2dmp)
http://code.msdn.microsoft.com/vm2dmp
こうしたツールをホスト側から実行できれば、仮想マシンのメモリの内容はすべて取り出せてしまうという問題があります。
ということで、まわりくどい前置き&わかりずらい説明で申し訳ないですが、
今回はvm2dmpツールの利用から、仮想マシンのメモリに関するセキュリティについて考えてみたいと思います。
vm2dmpツールを上記サイトからダウンロードして、実行するときには
・Windows Server 2008 R2 または Windows 7 から実行すること
・Debuging Tools for Windows をインストールしておくこと (Windows SDKに同梱)
・Windbgなどで解析するときはシンボルファイルを用意しておくこと
の3点が必要になります。
そのほか、私の環境では、Debuging Tools for Windowsをインストールしたフォルダにある
symsrv.dllファイルをC:WIndowsSystem32フォルダにコピーしておかないと動作しない、というのがありました。
以上がそろったところで、実際に実行してみます。
(vm2dmp.exeの実行方法は上記サイトに掲載されているので参考にしてください)
実行してみると、仮想マシンのメモリサイズと同じサイズのファイルが生成されます。
(今回の私のケースでいうと、メモリは4GBに設定してあったので、4GBのファイルが生成されます)
生成されたファイルをデバッグするときは、WIndbgツールなどを使うところですが、
ここでは、あえてバイナリエディターで開いてみたいと思います。
4GBあるデータの中から、探し出すのに苦労しましたが、
ご覧のように、メモリ内に格納されているパスワードが見つけ出せたことが確認できます。
ここでは、どのあたりに記録されててあったかなどの詳細は書きませんが、
経験則から、どのあたりに重要な情報が記録されているか知っている人なら、
簡単に見つけ出すことができてしまいますね。
物理ホストを自由にアクセスできる状態になってしまったら、
仮想マシンの状態保存 → メモリのダンプ → 解析
のステップで、パスワードなどの重要情報が知られてしまう可能性があるので、
仮想マシンを動作させている物理ホストのセキュリティって、今まで以上に重要になってきますね。
(仮想マシン側で、できる対策ってあるのだろうか?)
それにしても、あまりに便利すぎる世の中って、ちょっと怖いですね。