Transcript slide - KSL
九州工業大学大学院
情報工学府 情報創成工学専攻
11675501 塩田裕司
仮想マシン(VM)は必要なときだけ動かすことが多い
◦ クラウドでもデスクトップでも
◦ 長期間使わないVMが存在する
VMの再開時に攻撃を受ける可能性が高くなる
◦ 停止中にOSやアプリケーションの脆弱性が発見されることが
多い
◦ 長期間停止しているVMではセキュリティアップデートが適用
されない
アップデートA
アップデートB
アップデートC
危険
VM
VM
停止
VM
再開
VMの再開後にアップデートを行うのが一般的だが、
危険性が高い
◦ ネットワーク経由の攻撃を受ける
アップデータをダウンロードするためにネットワークに接続
接続後、即座に攻撃を受ける可能性がある
◦ 無防備な時間が長い
アップデートの処理に時間がかかる
完了するまでは攻撃にさらされる
サーバ
攻撃者
アップデータ
仮想
ディスク
仮想マシン
VMを再開する前にアップデートする手法も提案され
ている
◦ 例:VMの仮想ディスクを直接更新
◦ 完全に停止したVMが対象
サスペンド状態のVMには適用できない
◦ VMをサスペンドするとある瞬間の状態が保存される
◦ サスペンド状態で更新すると仮想ディスクが壊れる
オンライン
オフライン
オンライン
アップデート
サスペンド
シャットダウン
レジューム
ブート
サスペンド状態
停止状態
サスペンド状態のVMのオフラインアップデート
◦ オフラインでアップデートをエミュレーション
仮想ディスクが壊れるのを防ぐ
前処理・後処理のスクリプト実行を遅らせる
◦ VMのレジューム後にエミュレーション結果を反映
VMをネットワークに接続せずに安全に実行可能
オンライン時には短時間でアップデートを完了
オフライン
オンライン
アップデートのエミュレート
エミュレーション結果の反映
更新ファイル
の保存
サスペンド
スクリプト
の保存
更新ファイル
の反映
レジューム
スクリプト
の実行
VM Shadow [飯田ら’11]を用いてアップデータ実行
のエミュレーション環境を構築
◦ 既存のアップデータを実行できる
VM内のデータベースを参照
◦ システムコールとprocファイルシステムをエミュレート
VMのメモリを解析
◦ VMの仮想ディスクへのアクセスを提供
ホストOS
仮想マシン
VM Shadow
アップデータ
仮想
ディスク
Aufsを用いて仮想ディスクの更新をエミュレーション
◦ 保存用ディレクトリを仮想ディスクの上に重ねる
仮想ディスクを書き換えから守る
◦ 保存用ディレクトリには以下が書き込まれる
追加されたファイル(A)
変更されたファイル(B’)
削除されたことを表すwhiteoutファイル(.wh.ファイルC)
アップデータ
ファイルA
ファイルB’
.wh.ファイルC
ファイルB
ファイルC
保存用ディレクトリ
仮想ディスク
保存用ディレクトリを仮想ディスクへの更新情報とし
て抽出
◦ すべての更新ファイルは保存用ディレクトリに作成される
whiteoutファイルから削除リストを作成
◦ 保存用ディレクトリを検索して、whiteoutファイルのパス名を
取得
保存用ディレクトリ
ファイルA
ファイルB’
.wh.ファイルC
抽出
削除リスト
仮想ディスク
ファイルB
ファイルC
アップデータに含まれるスクリプトは実行せずに保
存
◦ アップデータによっては前処理や後処理を行うスクリプトを
含んでいる
◦ プログラムを実行するexecveシステムコールをエミュレー
ション
スクリプトを実行する代わりに保存
VM Shadow
アップデータ
execve
保存用ディレクトリ
スクリプト
保存
VMのレジューム直後にVM自身に仮想ディスクへの
更新を行わせる
◦ 保存用ディレクトリのアーカイブをVMに送る
仮想ネットワーク経由
◦ VM上でアーカイブを展開し、ファイルの追加・変更を行う
◦ 削除リストに基づいてファイルを消去
ホストOS
ファイルA
ファイルB’
Tar
ファイル
削除リスト
.wh.ファイルC
仮想マシン
ファイルA
ファイルB’
ファイルB
ファイルC
.wh.ファイルC
削除リスト
エミュレーション時に保存しておいたスクリプトを実行
◦ スクリプトは更新ファイルと一緒にVMに送られる
◦ 前処理スクリプト
設定ファイルの保存やサーバの停止など
仮想ディスクの更新の前に行う
◦ 後処理スクリプト
新しい設定ファイルの作成やサーバの再起動など
仮想ディスクの更新の後で行う
前処理
仮想ディスクの
更新
後処理
OUassisterと従来手法でパッケージのアップデート
時間を比較
◦ nginxウェブサーバのインストール・アンインストール
◦ OpenSSLのバージョンアップ
◦ Ubuntuのパッケージリストの更新
アップデート処理の内訳とアップデート時間の関係を
調査
CPU: Intel Xeon E5630 2.53GHz
メモリ: 6GB
NIC: ギガビットイーサネット
Xen 4.1.3
ドメイン0: 4 CPU、メモリ 5.3GB、Ubuntu 12.04
ドメインU: 1 CPU、メモリ 512MB、Ubuntu 12.04
オンラインでのアップデート時間を11〜57%に短縮
◦ nginxウェブサーバのアップデート: 21秒前後→2.5秒
◦ OpenSSLのバージョンアップ: 10.4秒→5.9秒
◦ パッケージリストの更新: 12.5秒→2.6秒
アップデート時間の合計は長くなる場合もあった
◦ OpenSSLのバージョンアップ、パッケージリストの更新
時間(s)
30
従来手法
20
OUassister(オンライン)
10
0
インストール
バージョンアップ
アンインストール
パッケージ更新
OUassister(オフライン+
オンライン)
OpenSSLのバージョンアップとパッケージリストの更
新では更新ファイルの合計サイズが大きい
◦ オンラインになってからのVMへの転送に時間がかかる
◦ オフラインでの更新ファイルの抽出にも時間がかかる
アップデートの
内容
更新ファイ 削除ファイ
ル数
ル数
更新ファイ
ルサイズ
(MB)
スクリプト数
インストール
149
0
44
9
アンインストール
41
68
40
9
バージョンアップ
203
1
110
2
パッケージリスト
81
1
108
-
停止状態のVMのオフラインアップデート
◦ NetChk Protect [VMware, Inc.]
オフラインでダウンロードしたアップデータを仮想ディスクに保存
VMの起動時にアップデータを実行
◦ Nuwa [Zhou et al.’10]
オフラインでアップデータを実行して仮想ディスクを更新
アップデータのスクリプトを書き換えてできるだけ実行
サスペンド状態のVMのオフラインアップデート
◦ Offline Virtual Machine Servicing Tool [Microsoft]
アップデート専用環境でVMをレジュームしてアップデート
専用環境を構築してメンテナンスする必要がある
サスペンド状態のVMのオフラインアップデートを可能
にするOUassister を提案
◦ オフライン時にアップデータ実行をエミュレーション
VM ShadowとAufsを用いて更新されたファイルを抽出
前処理・後処理スクリプトを保存
◦ レジューム後にエミュレーション結果を反映
スクリプトを実行
オンライン時のアップデート時間を削減
今後の課題
◦ 可能な範囲でのスクリプトのオフライン実行
◦ Windowsアップデートへの対応