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アップデートへの対応