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 2026 ExpyDoc