祝100回: 容量固定VHDで実証実験
このブログもめでたく(?) 100 回目の投稿となりました。今回は連載「Windows お悩み相談室 第6回 容量固定のVHDはどうして作成に時間がかかるのか?」(2011年03月01日) のフォローアップとして、ちょっとした実証実験を行ってみます。
容量固定VHDを作成すると、サイズが大きければ大きいほど作成するのに長い時間がかかります。「第6回 容量固定のVHDはどうして作成に時間がかかるのか?」では、その理由として、割り当て領域をゼロ(0)クリアしているからと説明しました。そして、VHD Tool(VhdTool.exe)を使用すると、サイズに関係なく容量固定VHDを一瞬で作成できることを紹介しました。その際、領域をゼロクリアしないため「VHD Toolを使用すると情報漏えいのリスクがある」と説明しました。
VHD Tool 2.0 Final
[URL]http://code.msdn.microsoft.com/vhdtool
容量固定VHDの作成に時間がかかるのは、Hyper-Vマネージャーでも、Virtual PCの設定でも、「ディスクの管理」スナップインでも、DISKPARTツールでも変わりません。例えば、40GBの容量固定VHDを作成する場合、私のPCでは7分30秒ほどかかりました。
VHDTool.exeを使用すると、40GBの容量可変VHDを一瞬で作成できます。
VHDTool.exeのヘルプ(/?)を参照すると、次のような注意書きがあります。
Create: Creates a new fixed format VHD of size <Size>.
WARNING - this function is admin only and bypass
file system security. The resulting VHD file will
contain data which currently exists on the physical disk.
“ファイルシステムのセキュリティをバイパス”とはどういうことでしょうか?
Windows(Windows NT以降)はC2セキュリティに準拠しており、メモリやファイルシステムのオブジェクトを再利用する際に、ゼロクリアして、以前に格納されたデータにアクセスできないようになっています。しかし、これはメモリやファイルシステムの領域が不要になった際に行われるのではなく、新たに割り当てられる際に行われます。これは、リソースの制御をWindowsが行っていることを前提とした動作です。そのため、Windowsがオフラインの場合や、ローレベルのディスクツールを使用すると、ゼロクリアされていないデータを参照できてしまいます。
つまり、VHDTool.exeでVHDを作成する場合、Windowsが必ず行っている、再利用のためのゼロクリアを行わないということです。どうなるかと言うと、物理ディスクのローレベルの状態が、仮想ディスクにそのまま引き継がれるということになります。この容量固定VHDをコンピューターの外部にコピーすると、物理ディスクのローレベルの状態の複写されたものが外に出てしまうことになります。物理ディスクを適切に処理(ゼロクリアやランダムな書き込み)しないで取り外すのと同じことです。
VHD を外部にコピーしなくてもセキュリティ上のリスクはあります。仮想マシンをホストする物理サーバーのディスク(の一部)が、セキュアに処理されないまま、仮想マシンという別のコンピューターに渡されることになります。取り外した物理ディスクを中古業者に販売し、そのディスクをその状態のまま購入した第三者が、ローレベルディスクツールを使用して削除されたデータをサルベージしている姿を想像してください。VHDTool.exeで作成したVHDは、同じセキュリティ上のリスクを持ちます。
実際に試してみましょう。40GBの容量固定VHDを2つ用意しました。1つは「ディスクの管理」スナップインで正規の方法で作成したもの。もう1つはVHDTool.exeで作成したものです。この2つのVHDを1台の仮想マシンに接続し、どちらもフォーマットしてから、とあるディスク復元ツール(試用版ですが)でスキャンしてみました。
正規の方法で作成したVHDのほうは、ディスク上から回収(サルベージ)可能なファイルは見つかりませんでした。セクターを確認してみたところ、ディスクの先頭部分 (MBRとかある部分)を除いて、すべてゼロで埋め尽くされています。
続いて、VHDTool.exeで作成したVHDのほうです。フォーマット直後のディスクから、大量のファイルが検出されました。一目瞭然ですね。プレビューしたBMPファイルは、何かしらのソフトウェアのインストール時のセットアップ画面に使用されたイメージのようです。
というわけで、時間節約のためにVHDTool.exeを利用するのは決してお勧めしません(正規の方法でないことも、お勧めしない別の理由ですが)。VHDTool.exe で作成した VHD のコピーを第三者に渡すということは、セキュアに削除していない物理ディスクを渡してしまうのと同じこと。ローカルで使用するだけなら大丈夫と思うかもしれませんが、マルチ テナンシーな仮想環境の場合はそうとも言ってられません。
既にVHDTool.exeで作成して運用開始しちゃったよという方は、「ダイエットするつもりが太っちゃう!? (容量可変タイプの仮想ディスクの話)」(2011年12月19日)の投稿で紹介したWindows SysinternalsのSdeleteユーティリティを使って、ゼロクリア(-z)またはランダムな書き込み(-c)をするとよいでしょう。ところで、「太っちゃう!?」ブログで指摘したSDeleteの日本語サイトの古い記述(-cと-zオプションが逆)、今は直ってますね。このブログ見たのかしらん。