210 likes | 415 Views
IDS オフロードを考慮した 仮想マシンへの動的メモリ割当. 内田昂志 * 岡崎正剛 * 光来健一 *,** * 九州工業大学 ** CREST. IDS への攻撃. Tripwire. ディスク. 侵入検知システム (IDS) を攻撃してから本来の攻撃を行うことが増えてきた 例: Tripwire プロセスを停止 ポリシーファイル の 書き換え 改ざんしたファイル の チェックを回避 DB への再登録 改ざん後のファイルの内容を正しいと判定 レポートの改ざん 検出結果が管理者に通知されない. IDS オフロード. Tripwire. ディスク.
E N D
IDSオフロードを考慮した仮想マシンへの動的メモリ割当IDSオフロードを考慮した仮想マシンへの動的メモリ割当 内田昂志* 岡崎正剛*光来健一*,** *九州工業大学 ** CREST
IDSへの攻撃 Tripwire ディスク • 侵入検知システム(IDS)を攻撃してから本来の攻撃を行うことが増えてきた • 例:Tripwire • プロセスを停止 • ポリシーファイルの書き換え • 改ざんしたファイルのチェックを回避 • DBへの再登録 • 改ざん後のファイルの内容を正しいと判定 • レポートの改ざん • 検出結果が管理者に通知されない
IDSオフロード Tripwire ディスク ドメイン0 ドメインU • 仮想マシン(VM)を用いてIDSだけを別のVMで動かす手法が提案されている • IDSが攻撃を受ける可能性を減らす • Xenの場合、ドメイン0でIDSを動かす • プロセス、ポリシーファイル、DB、レポート • ドメインUのディスクイメージをマウントして監視
メモリに関する問題 IDS 1GB 1GB ドメイン0 ドメインU ドメインU • IDSがドメイン0のメモリを使うことになる • VM間の公平性が失われる • IDSをオフロードしたVMは割り当てられたサイズ以上のメモリを使える • システム全体の性能が低下する恐れがある • IDSがドメイン0のメモリを使いすぎた場合
静的なメモリ割り当ての問題 IDS 0.3 0.7GB 1GB ドメイン0 ドメインU ドメインU • VMとIDSのメモリサイズを静的に分割するとメモリの有効活用ができない • IDS分として固定メモリ量をドメインUから減らす • IDSは増えたドメイン0のメモリを使う • IDSが動いていない間もドメインUはそのメモリを使えない
Balloon Performer IDS 1GB 0.3 0.7GB ドメイン0 ドメイン0 ドメインU ドメインU • オフロードしたIDSが使用するメモリを考慮してVMのメモリを動的に割り当て直す • ドメイン0で実行されているIDSのメモリ使用量を測定 • その分をドメインUのメモリ割り当てから減らす • ドメイン0のメモリ割り当てを増やす
Balloon Performerの効果 • IDSのメモリ使用量とドメインUのメモリ割り当ての合計を一定に保つ • VM間のメモリ割り当ての公平性を確保 • IDSのオフロードの有無に関わらず • ドメイン0のメモリの圧迫を防止 • システム全体の性能低下を防ぐ • メモリを有効活用できる • IDSが動作していない間はドメインUが使える
IDSが使用するメモリ Tripwire OS ドメイン0 (27,752個のファイルをスキャン) • 大きく分けて2種類のメモリを使用 • プロセス自身が使用するメモリ • テキスト領域、ヒープ • ファイルの読み書きによって作られるファイルキャッシュ • OSカーネル内に作られる • Tripwireの場合
プロセスのメモリ消費量の測定 • ドメイン0のLinuxカーネルが記録している • /proc/<プロセスID>/status から情報を取得 • pidofコマンドでIDSのプロセス名からプロセスIDを取得 • VmRSS欄の値がメモリ消費量
プロセスが使っているファイルキャッシュはどれ?プロセスが使っているファイルキャッシュはどれ? プロセス プロセス ファイル キャッシュ ファイル キャッシュ • ファイルキャッシュをプロセスに対応づける必要がある • 従来のLinuxでは対応づけられていない • 複数のプロセスで共有されることがあるため • どのプロセスが使っているか判断できない • プロセスが終了しても残されるため • 対応づけるべきプロセスがなくなる
プロセスとファイルキャッシュの対応づけ IDS マウント ドメイン0 ドメインU • ファイルキャッシュを確保したプロセスが使用しているとみなす • IDSだけがドメインU上のファイルにアクセス • IDSプロセスに一対一に対応づけられる • IDS終了時には仮想ディスクをアンマウント • ファイルキャッシュが消去される
ファイルキャッシュの使用量の測定 IDS pid pid ドメイン0 • ドメイン0のLinuxがページキャッシュを確保する際にプロセスIDを記録 • ページキャッシュはメモリページ単位で管理 • page構造体にpidメンバを追加 • ページキャッシュを破棄したら0に初期化 • 使用量を調べるシステムコールを追加 • すべてのpage構造体を調べ、pidが一致するページ数を返す
VMへの動的メモリ割り当て • Xen APIを用いてドメインUのメモリサイズを変更する • Xen APIとは? • Xenの管理をプログラムから行うためのAPI • ドメインUの元々のメモリサイズからIDSのメモリ使用量を引いたサイズを割り当て直す • しきい値よりサイズが小さくならないようにする • ドメインUの動作に影響する場合があるため • 現在の実装では元の半分のサイズ
Xen APIの動作 ドメイン0 ドメインU xend Balloon Performer balloon driver VMM • xendとの間にセッションを確立してXML-RPCで通信 • ドメイン名を指定してメモリサイズを設定 • ゲストOSに組み込まれたバルーンドライバがメモリサイズを調整 • メモリを確保してXenに返却 • Xenからメモリを取得して解放
実験 • Balloon PerformerがVMのメモリ割り当てをうまく調整できているかどうか調べた • プロセスのメモリ消費量を変化させた場合 • Tripwireを動かした場合 • 実験環境 • Intel Core 2 Quad 2.83GHz, 4GBメモリ • Xen 3.4.0, Linux 2.6.18 • ドメイン0、ドメインUに1.5GBを割り当て
プロセスのメモリ消費量に応じたメモリ割り当てプロセスのメモリ消費量に応じたメモリ割り当て 合計 ドメインU メモリ量(MB) プロセス 時刻(秒) • 5秒おきにランダムにメモリの確保・解放を行うプログラムをドメイン0で実行 • プロセスのメモリ消費量とドメインUのメモリサイズの変化を測定 • 実験結果 • これらの合計はほぼ1.5GBになった
ファイルキャッシュの使用量に応じたメモリ割り当てファイルキャッシュの使用量に応じたメモリ割り当て 合計 ドメインU メモリ量(MB) ファイルキャッシュ 時刻(秒) • 27,752個のファイルをスキャンするTripwireをドメイン0で実行 • ファイルキャッシュの使用量とドメインUのメモリサイズの変化を測定 • 実験結果 • これらの合計はほぼ1.5GBになった
関連研究 • OffloadCage [新井ら’10] • IDSオフロードを考慮したCPUスケジューリング • IDSのCPU使用分をVMのCPU割り当てから減らす • SEDF-DC [Gupta et al.’06] • Xenのスプリットドライバを考慮したCPUスケジューリング • netbackのCPU使用量をパケット数から推定
まとめ • Balloon Performerを提案 • IDSオフロードを考慮してVMへの動的なメモリ割り当てを実現 • プロセスのメモリ消費量とファイルキャッシュ使用量を測定 • メモリ使用量に応じてVMのメモリ割り当てを増減 • IDSのメモリ使用量とVMのメモリ割り当ての合計を一定に保てることを確認 • IDSのメモリ使用量が実行時に変化する場合
今後の課題 • システム全体を考慮してVMにメモリを動的割り当てできるようにする • ドメインUが正常に動作できるかどうかや性能を測定しながらメモリ割り当てを減らす • オフロードしたIDSのメモリ使用を制御できるようにする • Tripwireの場合、ファイルキャッシュは小さくても性能に影響しない • ほとんどのファイルには1回しかアクセスしない
今後の課題:Cgroupsの利用 IDS プロセス グループ メモリ ドメイン0 • プロセスグループの単位でページキャッシュも含めたメモリ使用量を取得できる • IDSだけが所属するプロセスグループを作る • プロセスグループに割り当てるメモリ量の制限もできる • IDSによるメモリの使い過ぎを抑制 • Xen 4.0以降のLinuxカーネル(2.6.32)で利用可能 • 実装に用いた2.6.18では未サポート