仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
Download
Report
Transcript 仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
仮想マシンに対する
高いサービス可用性を実現する
パケットフィルタリング
安積武志 田所秀和
光来健一 千葉滋
東京工業大学
仮想マシンを用いたホスティング
データセンタが仮想マシンを貸し出し
ユーザが自由にOSをインストール
ユーザがOSを管理する必要
従来はデータセンタが管理
データセンタ
VM
VM
OS
OS
ユーザが管理する仮想マシ
ンは攻撃を受けやすい
VM
OS
適切な設定やパッチの適用が必要
ユーザのスキルが低いと脆弱性
2
データセンタで
攻撃に対処すべき
仮想マシンのユーザは信頼
できない
フルタイムで管理できるとは限
らない
攻撃ホスト
攻撃対象
ホスト
即座に対処できない
スキル不足だと問題の解決に
時間がかかる
問題が起きたときデータセン
タも責任を問われる可能性
踏み台攻撃
侵入
踏み台攻撃
仮想マシン 仮想マシン
仮想マシン
踏み台攻撃で外部に被害
データセンタ
3
仮想マシンの
サービス可用性が低下
データセンタ側では大雑把な通信制御しかでき
ない
問題のある仮想マシンからの通信を全て遮断
全てのアプリケーションが外部のサービスを使えない
外部の特定のポートへの通信を遮断
外部の特定のサービスは使えない
例:メールサーバに侵入されて25番ポートを使って踏み台攻撃
攻撃を
行っている
ユーザ
send
仮想 mail
マシン
データセンタ
fw
X
25
X
25
X
22
攻撃を行っ
ている通信
外部
4
xFilter
仮想マシンモニタでプロセス単位、ユーザ単位の
パケットフィルタリングを行うシステム
ゲストOS内部のプロセス情報を取得
取得した情報を用いてパケットのフィルタリング
全てのパケットは仮想マシンモニ
仮想マシン
タを通過する
プロ
セス
サービス可用性の低下を抑えら
れる
特定のプロセス、ユーザからの
通信のみを遮断できる
プロ
セス
プロ
セス
ゲストOS
参照
xFilter
仮想マシンモニタ
物理デバイス
5
仮想マシンモニタによる
プロセス情報の取得
ゲストOSの内部データを覗く
従来は不可能
ゲストOSのデータ構造の知識を
利用
取得するプロセスのデータ構造
プロセスの所有者(ユーザID)
プロセス名
行っている通信のポート番号とIP
アドレスの組
仮想マシン
ユーザA
プロ プロ
セス セス
0
ユーザB
プロ
セス
192.xxx.xxx.xxx
仮想マシンモニタ
25
192.yyy.yyy.yyy
6
ユーザ単位の
パケットフィルタリング
指定したユーザの通
信を拒否
パケットを受信したら
そのユーザのプロセ
ス一覧を取得
データセンタ管理者が
通信を禁止するユー
ザを指定
一致する通信があれ
ばパケットを破棄
例:メールサーバに
侵入されて
25番ポートを使って
踏み台攻撃
uid=81の通信リスト
vm1:10
vm1:14
vm1:8
vm1:54
vm1:29
vm1:63
vm1:47
vm1:39
host1:25
host2:25
host3:25
host4:25
host5:25
host6:25
host7:25
host8:25
仮想マシン
プロセス
vm1:14
参照
host2:25
xFilter
仮想マシンモニタ
破棄
許可
7
使用方法
攻撃元ユーザの特定
異常検知された通信から攻
撃元を探す
プロセス情報一覧を取得
一致する通信を行ったプロセ
スを見つける
そのプロセスIDまたは所有
者を攻撃元とする
pid = 315, uid = 81
vm1:10 host1:25
vm1:14 host2:25
vm1:8 host3:25
vm1:54 host4:25
pid = 330, uid = 0
vm1:57 host10:25
vm1:30 host40:25
pid = 372, uid = 81
vm1:29 host5:25
vm1:63 host6:25
pid = 397, uid = 0
vm1:79 host23:22
8
Xenにおける
パケットフィルタリング実装
ドメイン0のiptablesを使用
ドメインUの通信は全てドメイン0を通過
仮想マシンモニタ Xen3.1.0
ドメインのOS Linux2.6.18
ドメイン0のファイアウォールで制御可能
指定したプロセスやユーザの通信を遮断する
ルールを自動で追加
定期的にドメインUのメモリを見てルールを更新
ドメイン0
xFilter
パケット
の流れ
参照
Xen VMM
ドメインU
9
ゲストOSの
データ構造の追跡
仮想CPUのGSレジスタからカレントプロセス
のtask_struct構造体を取得
task_struct構造体はリング状に繋がっている
sock構造体からポート番号、IPアドレスなどの情
報を得る
ドメイン0
マッピング
ドメインU
task_struct
sock
仮想マシンモニタ
task_struct
file
inode
仮想CPU
GSレジスタ
task_struct
・・・
task_struct
10
ドメイン0による
ドメインUのメモリアクセス
ドメイン0からドメインUの
メモリを操作する機構
[田所ら ‘08]
ドメイン0
のメモリ
task_struct
ドメインUのメモリページを struct file*
file
ドメイン0のアドレス空間に
struct inode*
貼り付ける
inode
ドメインUのメモリにアクセス
sock
ドメインU
のメモリ
task_struct
sock
inode
可能
必要な型情報はデバッグ
情報から取得
file
gdbを利用
11
実験
実験環境
CPU: Athlon™ 64Processor3500+
Mem:1Gbyte
(Dom0/DomU 512Mbyte/256Mbyte)
ポーリングの間隔を変
えてオーバーヘッドを
測定
httperfを使って実験
毎秒150リクエスト
マッチしないルールを設
定
実験結果
ポーリング間隔が短くなると
平均処理時間は大きくなった
パケット受信ごとに行うと
オーバーヘッドはさらに大きく
なる
ポーリングの間隔と平均処理時間
平均処理時間(ミリ秒)
0.8
0.6
0.4
0.2
0
1秒 2秒 3秒 5秒 なし
ポーリング間隔
12
関連研究
Livewire[Garfmkel et al. ‘03]
ゲストOSの内部を見て侵入検知を行う
Antfarm [Jones et al. ’06]
仮想マシンモニタ上からゲストOSの中を見ずにプロ
セスの情報を取得
フィルタリングは行わない
取得できる情報はプロセスの状態の変化だけ
BSDのipfw
uidを指定してフィルタリングを行う
ただしOSの中で使う
13
まとめ
xFilterを提案した
仮想マシンモニタでプロセス単位、ユーザ単
位のパケットフィルタリング
仮想マシンに対する高いサービス可用性を実
現
データセンタ管理者がきめ細かい通信制御
メモリマップを使ってゲストOS内の情報を取得
14
今後の課題
パケットごとにフィルタリングできるようにす
る
ポーリング間隔の間に張られた通信は素通り
性能向上が実用化の鍵
パケットごとにプロセス情報を取得するとオーバー
ヘッドが大きい
パケットを仮想マシンモニタのキューにためて一括
処理することで改善
15