IaaS環境におけるVMのメモリ暗号化による情報漏洩の防止 田所 秀和(東京工業大学) 光来 健一(九州工業大学) 千葉 滋 (東京工業大学)
IaaSの普及 サービスとして仮想マシン(VM)を提供 ユーザVM管理者とクラウド管理者が存在 クラウド管理者が VM を管理
クラウド管理者による情報漏洩 クラウド管理者が信頼できるとは限らない 特権VMを経由した情報漏洩 VMはどのデータセンタで動くか不明 悪意ある管理者、怠慢な管理者 特権VMへ侵入を許してしまう 特権VMを経由した情報漏洩 サスペンドによりメモリ内容が漏洩 特権VM ディスク ユーザVM 保存 VMM メモリ読み込み メモリ サスペンド サスペンドプログラム
VMメモリからの情報漏洩 メモリ中には機密情報が存在 メモリ上の情報は暗号化すると正しく動かない パスワード ファイルキャッシュ ディスク暗号化では情報漏洩を防げない メモリ上の情報は暗号化すると正しく動かない 暗号化ディスク メモリを覗くだけで 機密情報取得可能 ユーザVM /etc/shadow web app パスワード .ssh/id_dsa
VMCrypt:VMのメモリ暗号化 特権VMには暗号化したメモリを見せる 管理に必要なメモリは暗号化せずに見せる 漏えいして困る情報ではない 特権VM ディスク ユーザVM 保存 VMCrypt VMM 暗号化メモリ メモリ 暗号化 サスペンド メモリ
VMCryptが想定する脅威モデル 特権VMは信頼しない VMMを信頼する ハードウェアを信頼する root権限奪取、カーネルの入れ替えもありうる VMMを信頼する Remote Attestationで正しさを証明 ハードウェアを信頼する マシンは物理的に隔離 ハードウェア VMM 特権VM ユーザVM TCB マシンルーム 信頼できる 第三者が検査
ページ単位の暗号化(Xen) ドメイン0によるページマップ時に暗号化 アンマップ後に復号化 VMMがページテーブルの書き換えを検出 ドメイン0によるページマップ時に暗号化 アンマップ後に復号化 VMMがページテーブルの書き換えを検出 ページフォールト、ハイパーコール メモリを直接書き換えて暗号化 ドメインが一時停止中を想定 ドメイン0によるマップを検出 ドメイン0によるアンマップ VMCryptによる暗号化 VMCryptによる復号化 ドメイン0 ドメインU ページ Xen
非暗号化ページ 非暗号化ページをビットマップで管理 非暗号化ページ: Shared Info サスペンド・レジュームでは4種類のページを暗 号化しない 非暗号化ページ: Shared Info ドメインUとXenの通信に使われる 仮想CPUの割り込み、時間など Xenが管理 ビットマップへの登録は容易 ドメインU Xen ドメイン0 shared info bitmap
非暗号化ページ: P2Mテーブル 疑似物理フレーム番号からマシンフレーム番号 への対応表 1 2 3 4 kernel VMM 5 疑似物理メモリ マシンメモリ Shared Infoからたどり、ビットマップに登録 ドメイン0がShared Infoをマップした時 ドメインU P2Mテーブル ドメイン0 Xen shared info
非暗号化ページ: Start Info ドメイン0とドメインUの情報共有に使われる ドメインUのレジスタを調べることでビットマッ プに登録 ブート時:rsiレジスタ 疑似物理アドレスからマシンフレームを求める M2Pテーブルを利用 レジューム時:edxレジスタ ドメインU Xen ドメイン0 start_info
非暗号化ページ: ページテーブル ページテーブルの変化を実行時に常に追跡 ページテーブル用のページが追加されたらビット マップに追加 ページ属性を設定するハイパーコールをチェック Xenはページがどう使われるかの属性を管理 ドメインU ページテーブル ドメイン0 ビットマップ ドメイン0 MFN32 … 1 … 32 Xen
VMCryptを用いた起動 ドメインUの作成時はメモリを暗号化しない 最初のunpauseハイパーコール後から暗号化 ビットマップの更新のみ行う 機密情報は漏洩しない 最初のunpauseハイパーコール後から暗号化 ゲストOSの起動は暗号化で保護 DomUのメモリ 起動後はドメイン0には 暗号化したメモリが見える ドメインの作成 カーネル書き込み ページテーブル設定 unpauseでOS起動 start info設定 kernel kernel ページテーブル start info kernel ページテーブル kernel ページテーブル start info kernel ページテーブル start info ビットマップ ディスク ページテーブルを登録 shared infoを登録 start infoを登録 1 1 1 1 Xen shared info …
VMCryptを用いたサスペンド ドメインUのメモリをファイルに保存 VMCryptが自動で暗号化 Shared InfoとP2Mテーブルを読み込み ドメインUのメモリ全体を取得するため ドメインUのページテーブルを書き換え 疑似物理フレーム番号に変換して保存 DomUのメモリ P2Mテーブルを使い メモリ全体のMFNを取得 kernel ページテーブル P2M kernel ページテーブル start info P2M ページテーブルなら書き換えて保存 通常のメモリはVMCryptが暗号化して保存 ディスク
ビットマップの埋め込み ビットマップをドメインUのメモリに埋め込む e820を操作し埋め込み用のメモリを確保 サスペンド時には暗号化されて保存 e820を操作し埋め込み用のメモリを確保 メモリ領域がreservedならゲストOSが使わない e820はBIOSのメモリマップ DomUのメモリ reserved として確保 bitmap bitmap ビットマップをコピー ディスク Xen bitmap
VMCryptを用いたレジューム ドメイン0がサスペンドイメージをメモリに戻す 最初の再開時にまとめて復号化 この時点では復号化しない ドメインUの非暗号化ページにアクセス ページテーブル書き換え、コンソールMFN設定 最初の再開時にまとめて復号化 ドメインUのメモリからビットマップを取得 DomUのメモリ kernel ページテーブル start info kernel ページテーブル start info bitmap kernel ページテーブル start info kernel ページテーブル start info bitmap bitmapを取得 unpause時に復号化 サスペンドイメージをメモリに戻す ページテーブルの書き換え start infoへ設定 ドメインの作成 ディスク Xen bitmap
実験 VMCryptによるオーバーヘッドを測定 情報漏洩防止の確認 vanilla Xen、null暗号化、AES暗号化 メモリマップ サスペンド・レジューム 情報漏洩防止の確認 Xen 4.0.2 Dom0/DomU Linux 2.6.32.27 Xeon 2.67GHz 8core 12GB
マップ・アンマップ時間 ドメイン0からドメインUのメモリをマップ ドメインU内から自身のメモリをマップ null:45%劣化 AES:295%劣化 ドメインU内から自身のメモリをマップ 18%劣化
サスペンド・レジューム時間 サスペンド・レジュームにかかる時間を測定 速度低下の大部分はAESによる暗号化 ドメインUのメモリ量を変化
パスワード漏洩防止の確認 攻撃 VMCryptを使った場合 VMCryptを使わなかった場合 サスペンドイメージからシャドウパスワード取得 文字列を抽出し特徴的な文字列を探索 VMCryptを使った場合 パスワードを取得できなかった VMCryptを使わなかった場合 パスワードを取得できた root@mach# strings quattro1.img | grep 'root:\$' acroot:$6$aCJuBx5O$5HqjJyEGM.hDUBnczt2J.j6jN41.G02kHlNXHZrurOZpqL/Elnbc489ZrZqLD2gsPDB.yVcK6trNXAquhKFkG0:14879:0:99999:7::: root@mach#
関連研究 TCCP [Santos et al. HotCloud'09] ドメインB [Murray et al. VEE'08] VMを管理者が信用できるサイトにだけ移動させる 信用できないサイトでは動かせない ドメインB [Murray et al. VEE'08] ドメイン作成専用のドメインBを用意 ドメイン0のカーネルとドメインBをTCBに含む OverShadow [Xiaoxin et al. ASPLOS'08] VMMがプロセスのメモリを暗号化し内容を保護 ゲストOSへの情報漏えいを防ぐ
まとめと今後の課題 VMCryptを提案 今後の課題 VMMがVMのメモリを暗号化 IaaS環境でのクラウド管理者への情報漏洩を防ぐ マイグレーションへの対応 暗号化鍵の管理 完全仮想化への対応