slide - KSL

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