Coordinated and Secure Server Consolidation using Virtual Machines (仮想マシンを用いた調整可能で安全なサーバ統合) 田所 秀和 1 2 仮想マシンを用いたサーバ統合 サーバ統合 リソースの利用効率向上 物理マシンの台数削減 サーバを容易に増減できる P2V tool で動いているOSをそのまま統合 古いOSを使い続けられる VMs Server Server Server 統合 10% 30% 20% VMM 60% 3 仮想マシンが複数存在 複数の仮想マシン(VM)を同じマシンで動かす 共通のリソースをVM間で分割 仮想マシンモニタ(VMM)が物理CPUを仮想CPUに分配 管理VMを使いVMを管理 VMを他のマシンにマイグレーション 負荷分散やハードのメンテナンス 管理VM 管理者 VMs vCPU vCPU vCPU 管理 VMM CPU リソースをシェア CPUリソースの競合 他のVMが動き、重要なタスクが阻害 一つの物理CPUを取り合う 各VMは他のVMを認識できない 独立してCPUリソースを利用 素朴な解法:排他的なリソース割り当て 利用効率低下 VMs vCPU vCPU vCPU VMM CPU CPUリソースを取り合う 4 5 管理VMの脅威 管理VMに侵入されるとすべてのVMに影響 管理のための特権を悪用 管理VMへの攻撃 素朴な解法:管理VMの特権を減らす マイグレーションができなくなる 負荷分散や消費電力削減のためには必須 管理VM VMs 攻撃 侵入 VMM 6 OSによる協調スケジューリング 各VMのスケジューラが協調し重要なタスクを優 先的に実行 情報交換のために特別なスレッドが必要 スケジューリング対象にしてはいけないスレッド 協調のため、OSに変更が必要 動いているOSをそのままサーバ統合できない 不正確なスケジューリング 仮想化によりOS内の 統計情報が不正確 情報取得に時間がかかる sched sched CPU sched 7 情報漏洩防止のトレードオフ ゲストOSによる管理 管理VMによる管理を禁止し情報漏洩を防止 可能な管理に制限がある e.g. self-migration OS自身がメモリを暗号化し管理VMに見せる CPUが読み書きするメモリは復号化してある必要 必要なところだけ暗号化できる self-migration 管理VM 管理 自力でメモリコピー VMM 8 本研究の貢献 調整可能で安全なサーバ統合 仮想マシン間でのプロセススケジューリング CPUの競合回避と利用率向上を両立 VMMが直接スケジューリング 管理VMを経由した情報漏洩の防止 従来通りの管理と安全性を両立 VMMがメモリを暗号化 VMs 管理VM 管理者 管理 vCPU vCPU CPUを調停 CPU vCPU 暗号化 VMM I. 仮想マシン間でのプロセススケ ジューリング 9 10 サーバ統合でのスケジューリング システム全体でのスケジューリングが重要 CPUはVM間で共有 利用効率を高める 重要なタスクが他VMのタスクに阻害されうる 例:システム全体がアイドルの時 VM1 だけIndexingを動かす アイドル時スケジューリング Indexing: 検索のDB作成プロセス DB VM2 WEB Indexing VMM Hardware 優 先 度 システム全体のスケジューリングは 難しい 11 OSのスケジューリングとVMのスケジューリング だけではうまくいかない OSによるスケジューリング VM外のアイドルを検出できない VMスケジューリング VM内のプロセスを区別できない CPU使用率(%) Indexingだけを止めたい VM1 DB 100 VM2 WEB Indexing 50 indexer lighttpd 0 0 60 120 elapsed time (sec) VMM Hardware 優 先 度 目標 システム全体でのスケジューリング 重要なタスクを阻害させない CPU利用効率向上 OSを変更しない 既存のOSをそのままサーバ統合可能 複数OSに対応 サーバ統合では様々なOSが統合される 12 13 Monarch Scheduler VMMが全体を考慮しプロセスの実行を調整 柔軟にCPUリソースを割り当て可能 利用効率は向上 ゲストOSのスケジューラの動作を直接変更 元のスケジューラを活用 サーバ統合ではOSを変更せず そのまま統合したい VM1 DB プロセス実行時間を直接取得 正確な統計情報を取得可能 VM2 WEB Indexing 状況に応じて Indexingを止める Monarch Scheduler Hardware 14 VMMによるランキューの操作 VMMがゲストOSのランキューを操作しプロセス を制御 ランキューからプロセスを外すと停止 ランキューはプロセスの待ち行列 ランキューに再挿入し、再開 ランキュー CPUで実行中 実行待ちプロセス VM process run queue ランキューを 直接操作 Monarch Scheduler 15 プロセスの状態書き換え VMMが直接プロセスの状態を書き換え停止 次のスケジューリング時に停止 通常ならランキューの後ろに追加される 実行中のプロセス 実行中なのでランキューから単純に外せない I/O待ち状態に書き換え running I/O待ち(blocked)プロセス ランキューに存在しない 停止状態に書き換え ready blocked プロセスの状態遷移 16 直接プロセス実行時間を取得 VMMがプロセス時間を測定 仮想アドレス空間の変化を観察 [Jones et al. 2006] ゲストOS内のコンテキストスイッチを推測 e.g. CR3レジスタへの書き込みを観察 ゲストOSの統計情報を使わない 仮想化により不正確 スイッチを観察 実行時間 スイッチを観察 process1 process2 process3 時間 アドレス空間とプロセスの対応 17 仮想アドレス空間をプロセスに対応づける ゲストOSのすべてのプロセス構造体を解析 プロセスリストをたどる すべてのプロセスはリストにつながっている プロセス中に仮想アドレス空間の情報 VMMからわかるのは仮想アドレス空間の情報のみ どのプロセスかは不明 ProcHead Guest OS kernel lighttpd 仮想アドレス空間A ClamAV 仮想アドレス空間B 18 ポリシ記述用API ポリシーに従いプロセスを制御 実行時のプロセスやVMの増減に対応 サーバがfork 毎回マッチを取り直す OSの実装に依存しない記述が可能 void init() { d_all = get_domain_by_name(“.*”); p_all = get_task_by_name(d_all, “.*”); p_si = get_task_by_name(d_all, “SearchIndexer”); set_period(P); } void scheduler() { t_all = get_time(p_all, P); t_si = get_time(p_si, P); if (t_all – t_si > 0) suspend(p_si); else resume(p_si); } VM1 VM2 DB WEB Indexing WEB’ Monarch Scheduler 19 アイドル時スケジューリング 定期的にすべてのVMをチェック 必要なプロセスのCPU使用率を取得 WebやDBがCPUを使っているとき Indexingを止める CPUを使っているプロセスが存在しないとき VM1 Indexingを動かす void scheduler() { t_all = get_time(p_all, P); t_si = get_time(p_si, P); if (t_all – t_si > 0) suspend(p_si); else resume(p_si); } DB Indexing 状況に応じて Indexingを止める Monarch Scheduler VM2 WEB 20 実装 Xen 3.4.2 にMonarch Schedulerを実装 サポートしているゲストOS Linux 2.6 (x86_64) Windows Vista (x86_64) スケジューラはVMM内のタイマで定期的に起動 VMs process run queue interrupt Xen schedule Monarch Scheduler ゲストOSのデータ構造の操作 21 ゲストOSのデータ構造を直接操作 知識を事前に取得 デバッグ情報から型情報 ソースコード ゲストOSのメモリを直接読み書き 仮想アドレスからマシンフレーム番号を取得 ゲストOSのページテーブルを参照 P2Mテーブルを参照 VM kernel image virtual address machine memory page table P2M table Xen VMM Linux: データ構造の位置特定 init_taskがプロセスリストの起点 カーネルイメージから事前に取得 ランキューは仮想CPUごとに存在 ブートするまでアドレスは不明 仮想CPUのGSレジスタから GSレジスタはx8664_pdaを指す GS register Linux memory x8664_pda run queue struct x8664_pda { task_t* current; ulong data_offset; …}; data_offset + PER_CPU_RUNQUEUES 22 Windows: データ構造の位置推定 23 プロセスリストの取得 メモリ全体からプロセス候補を探す プロセスを表すビット列を探索 ProcHeadがプロセスリストの起点 リストのうちグローバル変数 ランキューはProcHead から一定距離 Windows Kernel ProcHead current 一定距離 summary 実行待ち リスト配列 IRQL ランキュー VMM 実行中プロセス 実行待ちプロセス I/O待ちプロセス 一貫性を保ったランキュー操作 24 ゲストOSが操作していないときランキュー操作 ロックをチェック ロックが解放中ならスケジューリング中でない ゲストOSと同時に操作すれば壊れる scheduler of Linux OS schedule() { spin_lock(runqueue); RUN QUEUE OPERATION spin_unlock(runqueue); } lock unlock runqueue spinlock check Monarch Scheduler 25 実験 スケジューリングが可能かを確認 アイドル時スケジューリング 優先度スケジューリング オーバーヘッド スケジューリングのオーバーヘッド CPU時間測定のオーバーヘッド スケジューリング間隔の性能への影響 OSバージョンの変化の影響 Core 2 Duo 2.4 GHz Memory 6GB Xen 3.4.2 Dom0: Linux 2.6.18.8 DomU: Linux 2.6.16.33 (1GB) DomU: Windows Vista SP1 (1GB) アイドル時スケジューリング 26 ポリシー lighttpdが動くときにSearchIndexerを停止 アイドルの時だけSearchIndexerが動いた ポリシー通り レスポンス時間が23%改善した VM2 lighttpd Search Indexer Xen VMM アイドル時だけ動かす 100 80 60 40 20 0 CPU utilization(%) VM1 indexer lighttpd indexer lighttpd 100 80 60 40 20 0 60 120 0 60 120 0 elapsed time (sec) elapsed time (sec) ポリシー ClamAVの優先度を下げる CPU使用率を1/10に 結果 CPU utilization (%) 優先度スケジューリング mencoder ClamAV Xen VMM 優先度を下げる CPU utilization(%) VM2 Monarch Schedulerなし clamav mencoder 100 50 0 0 ポリシー通り制御できた VM1 27 100 200 300 elapsed time (sec) Monarch Schedulerあり clamav mencoder 100 50 0 0 100 200 300 elapsed time (sec) スケジューリングのオーバーヘッド 28 VMMからプロセスリストをたどる時間 プロセス数を変化 プロセス数を固定しVM数を変化 現実的な状況では、オーバーヘッドは小さい 800 600 400 200 0 0 2000 4000 Execution Time (us) Execution Time (us) 100プロセスで、 3.6us (Linux), 12.1us (Windows) 5VMで4.4us Linux Windows 6000 Total Number of Processes 20 15 10 5 0 0 1 2 3 4 5 Total number of VMs 29 webサーバの性能低下 lighttpdのスループットと応答時間を測定 スケジューリング間隔とプロセス数を変化 リストをたどるだけ 間隔が短く、プロセス数が増えるほど性能低下 10msec以上なら、影響は小さい 36 processes 500 processes 2000 processes 36 processes 2000 processes 0.8 20000 15000 10000 5000 Throughput 0 0.1 1 10 scheduling interval (msec) 100 response time (msec) throughput (req/sec) 25000 500 processes 0.6 0.4 0.2 Response time 0 0.1 1 10 scheduling interval (msec) 100 30 OSバージョンアップの影響 OSのバージョンアップ時にMonarch Schedulerが 対応すべきことを調査 Monarch SchedulerはOSの内部構造に強く依存 Linux 2.6.0から 2.6.32 の33バージョンを調査 外部からCFSのランキューを操作する必要 赤黒木ライブラリを397行中91か所変更 CFSは赤黒木を利用 バージョン 変化 対応の難しさ 2.6.14 Spinlock_t の内部構造が変更 容易 2.6.18 runqueueの名前がrqに変更 容易 2.6.23 プロセススケジューラがO(1)からCFSに変更 難しいが可能 2.6.30 ランキューのアドレスの求め方が変更 容易 関連研究 ゲストOSの情報を使いVMをスケジューリング guest-aware VM scheduling [2009 Kim et al.] ゲストOSを変更 task-aware VM scheduling [2008 Kim et al.] gray box 知識を利用 Windowsの内部情報をVMMから利用 Vmwatcher [2007 Jiang et al.], EagleEye [2009 Nguyen et al.] GREPEXEC Lares [2008 Bryan et al.] 専用のドライバが必要 31 ここまでのまとめ Monarch Schedulerを提案 仮想マシンモニタがシステム全体を考慮してプロ セススケジューリングを調整 柔軟なCPU割り当て CPU利用効率の向上 OSの事前の変更が不要 VMMが直接メモリを書き換え 複数OSへの対応 高水準APIでOSの種類やVMの違いを抽象化 正確なスケジューリング プロセス時間をVMMが直接測定 32 II. 管理VM経由の情報漏洩防止 33 管理VMを経由した情報漏洩 34 管理VMへの攻撃 すべてのユーザVMに影響 管理のためにユーザVMに対して大きな権限 サスペンド・マイグレーション ユーザVMのメモリ内情報に簡単にアクセス可能 管理VMに侵入し ユーザVMの情報にアクセス 管理VM ユーザVM メモリ VMM 35 メモリからの情報漏洩 メモリ中には機密情報が存在 パスワード ファイルキャッシュ ディスク暗号化でも防げない メモリ上の情報は暗号化すると正しく動かない メモリを覗くだけで 機密情報取得可能 ユーザVM /etc /shadow .ssh/id_dsa 暗号化ディスク web app パスワード 目標 管理VM経由の情報漏洩を防止 従来通りの管理が可能 live migration 負荷分散 サービスを停止せずにハードウェアメンテナンス OSを変更しない 既存のOSをそのままサーバ統合可能 36 37 VMCrypt 管理VMへの情報漏洩を防ぐ VMMが管理VMに対してメモリを暗号化して見せる 管理に必要なメモリは暗号化せずに見せる 従来通りの管理が可能 live migrationに対応 準仮想化ゲストOSに対応 既存の管理ツールがそのまま使える 管理VM 暗号化 メモリ VMCrypt VMM ユーザVM メモリ 38 2つのメモリビュー VMCryptは2つのビューを提供 暗号化ビュー ノーマルビュー ユーザVMには暗号化せずそのまま見せる 2つのビューに同時にアクセス可能 live migrationに必要 動いているユーザVMのメモリを転送 管理VM 暗号化 メモリ VMCrypt VMM ユーザVM ノーマル ビュー ページ単位の暗号化・復号化 管理VMによるメモリマップ時に暗号化 アンマップ時に復号化 ページを複製することで、同時にアクセス可能 マップ後の変化を知ることができない live migration問題ない VMMがページテーブルの変化を検出 (4) 管理VMのアンマップを検出 (5) 復号化 (6) 書き戻す (1) 管理VMのマップを検出 (2) VMCryptがページを複製 (3) VMCryptがページを暗号化 管理VM ユーザVM ページ’ ページ Xen VMM 39 暗号化・復号化を省略し高速化 読み込み専用マップでは、アンマップ時に復号 化・書き戻しを省略 変更がないことを保証できる 未初期化ページのマップ時は、暗号化を省略 情報は漏れない もともと内容は不要 管理VMによって書きこまれたかを管理 40 非暗号化ページ 暗号化せずに管理VMに見せる 従来通りの管理を可能にする 機密情報は含まれない 実行時に追跡して自動的に区別 ビットマップで非暗号化ページを管理 5種類のページ start info ring shared info p2m table page table 41 非暗号化ページ: page table 42 マイグレーション時に管理VMがMFNを変更 ページテーブルの変化を実行時に追跡 増えたらビットマップに追加 ページ属性を設定するハイパーコールをチェック ユーザVM ページテーブル 管理VM ドメイ ン0 MFN32 Xen ビットマップ 0 0 0 … 1 … 0 32 43 VMCryptを使ったlive migration(1/2) 動いているユーザVMのメモリを別ホストに転送 VMCryptが自動で暗号化 ビットマップを埋め込み転送 メモリを転送 ページテーブル、P2Mは書き換えつつ転送 VMのメモリ bitmap kernel ページテーブル 管理VM 別ホストへ 44 VMCryptを使ったlive migration(2/2) 受け取ったメモリを新しいユーザVMに書き込み VMCryptが自動で復号化 ビットマップを取得 書き込み後、アンマップ時にVMCryptが復号化 ページテーブルを書き換え 新たに割り当てられたメモリを指すように 別ホストから bitmap kernel ページテーブル 管理VM VMのメモリ 45 暗号化鍵の管理 マイグレーション時は暗号化鍵を共有 Trusted Coordinator (TC) を経由 信頼できるVMMの公開鍵を管理 TC 1. Bの鍵を要求 2. Bの公開鍵 Host B Host A 管理VM ユーザVM VMM 管理VM 4. 移送 Session Key 3. セッション鍵を暗号化して渡す VMM 46 VMCryptはVMMを信頼 VMMは信頼できる TCがremote attestationによって確かめる 信頼できるbootかどうか 管理VMはVMMのメモリにアクセスできない Xenのアーキテクチャの特徴 管理VMを信頼しない 管理VM TCB ユーザVM VMM ハードウェア 検査 Trusted Coordinator TCB 47 実験 情報漏洩を防げるかテスト オーバーヘッド 暗号化ビューを作るオーバーヘッド ユーザVMの性能低下 live migrationにかかる時間 live migration時のオーバーヘッド 暗号化アルゴリズムはAES OpenSSLを移植 2.67GHz 8core Memory 12GB Xen 4.0.1 Dom0: Linux 2.6.32-5-xen-amd64 DomU: Linux 2.6.32.27 connected with gigabit ether 情報漏洩を防げるかのテスト 管理VMからユーザVMのメモリを解析 メモリ中にはAESやRSAの鍵 VMCryptなし AESやRSAの鍵を盗むことができた VMCryptあり AESやRSAの鍵は見つからなかった root@mach# aeskeyfind quattro1.dump bb2e3fe052aedffe8ddffd3fbcfa7d09 ea9b7567ae60e300d00bde56096d3170 Keyfind progress: 100% 48 49 暗号ビューを作るオーバーヘッド 管理VMからマップ・アンマップにかかる時間 1ページ、10万回繰り返し平均 実行時間の大部分は暗号化 Execution Time (us) それ以外のオーバヘッドは3usec 最適化の効果あり 100 80 60 writable 40 read-only uninitialized 20 0 Vanilla Xen VMCrypt (null) VMCrypt (AES) live migrationにかかる時間 50 暗号化により全体の時間は約1.8倍に増加 Execution Time (sec) 80 Vanilla Vanilla(SSL) VMCrypt(null) VMCrypt(AES) 70 60 50 40 30 20 Downtime (sec) ダウンタイムは1秒未満 10 0 0 1024 2048 3072 4096 memory size of domain U (MB) 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 Vanilla Vanilla(SSL) VMCrypt(null) VMCrypt(AES) 0 1024 2048 3072 4096 memory size of domain U (MB) 51 live migration時のwebサーバの性能 lighttpdのスループットを測定 10秒後からlive migration開始 VMCrypt (AES) の性能が安定しない 暗号化とネットワークI/Oを重ねられない throughput (req/sec) VMMで暗号化する代償 5000 4000 3000 Vanilla Xen 2000 Vanilla Xen (SSL) 1000 VMCrypt (null) 0 VMCrypt (AES) 0 10 20 30 execution time (sec) 40 関連研究 CloudVisor [2011 zhang et al.] VMMの下から管理VMによるユーザVMへのメモリ アクセスを暗号化 メモリをすべて暗号化するため準仮想化に非対応 Secure Runtime Environment [2010 Li et al.] live migrationに非対応 管理ソフトウェアに変更が必要 52 ここまでのまとめ VMCryptを提案 管理VM経由の情報漏洩を防止 管理VMからユーザVMのメモリアクセス時に暗号化 準仮想化Linuxやlive migrationに対応 非暗号化ページを自動的に認識 53 まとめ サーバ統合環境での問題 重要なタスクが他のタスクに阻害される 管理VMを経由した情報漏洩 調整可能で安全なサーバ統合 Monarch Scheduler VMMがプロセススケジューリング VMCrypt VMMがメモリ暗号化 54 今後の展望 55 Monarch Schedulerで様々なスケジューリングポ リシーを作成する Fair shareスケジューリング VMCryptを完全仮想化に対応 管理VMがさまざまなメモリにアクセスする DMA、VGA 論文 56 田所秀和, 光来健一, 千葉滋, "仮想マシン間にまたがるプロセ ススケジューリング", 情報処理学会論文誌: コンピューティン グシステム(ACS), Vol.1, No.2, pp.124-135, 2008月8月. Hidekazu Tadokoro, Kenichi Kourai, and Shigeru Chiba, "A Secure System-wide Process Scheduler across Virtual Machines", Proc. 16th IEEE Pacific Rim Intl. Symp. on Dependable Computing (PRDC'10), pp.27-36, Dec 2010. 田所秀和, 光来健一, 千葉滋, "実用性を考慮した仮想マシン間 プロセススケジューラ", 情報処理学会論文誌: コンピューティ ングシステム(ACS), Vol.4, No.3, pp.100-114, 2011年5月. Hidekazu Tadokoro, Kenichi Kourai, and Shigeru Chiba, "Preventing Information Leakage from Virtual Machines' Memory in IaaS Clouds", To be published in IPSJ Transactions on Advanced Computing Systems (ACS).
© Copyright 2024 ExpyDoc