Oracle Virtualboxは仮想マシンが使用する仮想ディスクイメージを暗号化することが可能です。
これにより、もし仮想ディスクイメージが悪意のある第三者により外部に流失したとしても、ディスクの中身を見ることが不可能になり、セキュリティを高めることができます。

Disk Encryption機能は特定の仮想ディスクイメージフォーマット(vdi,vhd,vmdk)に依存しませんが、暗号化した仮想ディスクイメージは他のVirtualBoxや仮想ソフトウェアでは使用できなくなるので、注意が必要です。

対応する暗号化方式は、AES XTSの128ビットもしくは256ビットのデータ暗号化キー(DEK)が使用可能です。

DEKは仮想マシンの設定ファイル(~.vbox)に暗号化されて格納され、イメージの暗号化時に選択されたパスワードを入力することでVMの起動時に復号化されます。

DEKを失うことは、ディスクイメージに保存されているデータが使用不可能になるので、注意してください。

ハードディスクの暗号化(Disk Encryption)の制限事項

ハードディスクの暗号化(Disk Encryption)にはいくつか制限事項があります。

  • この機能はExtension Packで追加される機能の一部なので、Extension Packのインストールが必要です。
  • 暗号化は保存されているユーザーデータに対してのみ機能するため、現時点ではディスクイメージのメタデータの整合性を確認することはできません。
  • ディスクの暗号化ではイメージ内のデータブロックを削除または変更したり、ディスクサイズなどのメタデータ項目を変更するといった攻撃からは防ぐことはできません。
  • OVFの仕様では暗号化されたディスクイメージを含む仮想マシンののエクスポートはサポートされていないため、仮想ディスクイメージはエクスポート中に暗号は復号化されます。
  • ゲストが読み込んだデータを復号化したり、ゲストが書き込んだデータを暗号化したりできるように、VMが実行されている間、DEKはメモリ内に保持されます。
  • 攻撃者は侵入先のホストでキーを抽出してデータを復号化できる可能性があるため、キーの管理に注意を払う必要があります。
  • イメージを暗号化または復号化するとき、パスワードはOracle VM VirtualBox APIを使用して平文で渡されます。
    特にパスワードがネットワーク経由で送信される可能性があるWebサービスを利用するサードパーティのAPIクライアントを使用する場合は、この点に注意する必要があります。
    そのような場合、HTTPSの使用は必須です。
  • 差分ディスクを使用したディスクイメージの暗号化は、スナップショットがない、またはスナップショットの線形チェーンがない場合にのみ可能です。この制限は、将来のOracle VM VirtualBoxバージョンで解決される可能性があります。

仮想ハードディスクイメージの個別暗号化

ハードディスクの暗号化(Disk Encryption)はGUIで設定可能ですが、その場合、その仮想マシンに接続している全ての仮想ハードディスクイメージが暗号化の対象になります。

しかし、特定の仮想ハードディスクイメージのみを仮想化、もしくは複数の仮想ハードディスクイメージにそれぞれ別のDEKを設定したいといった場合にはVBoxManageコマンドを使用します。

VBoxManage encryptmedium "uuid|filename" --newpassword "file|-" --cipher "cipher id" --newpasswordid "id"

cipher idにはAES-XTS128-PLAIN64 または AES-XTS256-PLAIN64を選択します。

コマンドラインで暗号化イメージの起動

GUIから仮想イメージを起動した場合はパスワード入力のダイアログが表示されますが、コマンドラインでは以下のようにして起動するとができます。

VBoxManage controlvm "uuid|vmname" addencpassword "id" "password" [--removeonsuspend "yes|no"]

idとpasswordは仮想ディスクイメージを暗号化するときに指定したidとpasswordを入力します。。

–removeonsuspend “yes | no”のオプションは、仮想マシンの一時停止時に仮想マシンのメモリから暗号化のパスワードを削除するかどうかを指定できます。削除した場合は仮想マシンを再開する際にパスワードを再入力する必要があります。

仮想ハードディスクイメージの復号化

状況によっては、暗号化された仮想ディスクイメージを復号化する必要があるかもしれません。
これはGUIもしくは次のコマンドで実行できます。

VBoxManage encryptmedium "uuid|filename" --oldpassword "file|-"

–oldpasswordには暗号化時に使用したパスワードを入力します。