XenによるゲストOSの解析に

XenによるゲストOSの解析に
基づくパケットフィルタリング
安積 武志* 光来 健一** 千葉 滋*
*東京工業大学
**九州工業大学
1
踏み台攻撃

sshで不正にログインされ、他のホストへ攻撃

特定ホストに対して大量のパケットを送信


不特定多数のホストにポートスキャン


サービスの妨害
更なる踏み台を求める
大量の
パケット
検出したらその通信を
即座に制限する必要がある

対象ホスト
sshd
不
正
ロ
グ
イ
ン
被害の拡大を防ぐため
2
一般的なパケットフィルタリング

外部のファイアウォールによる通信制限


ポートやIPアドレス単位で通信を制限する
踏み台攻撃でない通信まで制限してしまう

制限が大雑把過ぎる
ファイアウォール
メールサーバ
25
sshd
25
sendmail
不
正
ロ
グ
イ
ン
3
きめ細かいパケットフィルタリング

サーバ内部で通信制限

OS内部の情報も使って通信を制限する



例:プロセスID、ユーザID
ipfwやiptablesで利用可能
通信制限を無効化される恐れがある
メールサーバ
ファイアウォール
25
sshd
25
sendmail
不
正
ロ
グ
イ
ン
4
提案:xFilter

仮想マシンモニタ(VMM)によるきめ細かい
パケットフィルタリング

無効化することは難しい


VMMはVMから隔離されているため
ゲストOSの内部の情報を参照可能

物理マシン
VM
ゲストOS
メモリのバイト列を解析
VMM

VMからの通信はすべてVMM
を通過する
xFilter
パケット
5
システム構成

xFilterは2つの部分から構成される

メモリ解析部

ゲストOSのメモリを解析して
通信の情報を取得


VM
ゲストOS
解析
プロセスID、ユーザID
パケット
フィルタリング部


パケットのヘッダを解析
ゲストOSの情報も使って
フィルタリング
VMM
フィルタ
リング部
xFilter
依頼
メモリ
解析部
破棄
送信
6
メモリ解析部

型情報を用いてゲストOSのメモリを解析


型情報はカーネルの
デバッグ情報より取得
ページテーブルを
引いてアドレス変換

仮想メモリ
task_struct{
pid
}
物理メモリ
task_struc{
pid
}
仮想アドレスから
物理アドレスへ
7
通信情報の取得

Linux の場合の取得手順
GSレジスタ
task_struct
files_struct
fdtab
file
private_data
プロセスID順に
つながっている
task_struct ・・・ task_struct
files
fdtable
fd
socket
sk
プロセスID
ユーザID
を取得
sock
ポートやIP
アドレスなど
の情報
を取得
8
フィルタリング部

ルールの例


deny ip(src, dst) port(src, dst) uid/pid
フィルタリングのアルゴリズム

パケットのヘッダ情報に
マッチするルールがあるか



なければ許可
ヘッダ情報
ip(x, y) port(x, y)
ルール
deny ip(x, y) port(x, y) id
通信一覧
:
ip(x, y) port(x, y)
:
マッチしたルールで uid/pid
が指定されていれば、
通信一覧をメモリ解析部から取得
取得した一覧に一致するものがあれば破棄
9
一括検査

キューにためておいてまとめて検査

パケット到着毎だとオーバーヘッドが大きい




メモリ解析には時間がかかる
その間は一貫性のためにゲストOSを停止
検査を行う代わりにパケットをキューに入れる
一定時間毎にキュー内のパケットをすべて検査

一回のメモリ解析で検査できる
10
キャッシュ機能

TCP通信に関しては検査結果をキャッシュする


同じコネクションならば検査結果は変わらない
VM
パケットのTCPヘッダを
解析してフラグを取得

SYN:コネクションの確立
→フィルタリング結果をキャッシュ

FIN:コネクションの終了
→キャッシュからエントリを削除
OS
プロセス
SYN
パケット
FIN
パケット
xFilter
VMM
11
Xenを用いた実装

VMMとして Xen、ゲストOSとして Linux を使用



ドメイン0:
管理用の特権VM
ドメインU:
一般のVM
ドメイン0にxFilterを実装

ドメインUがパケット
を送信するときは
ドメイン0に依頼
domain0
domainU
プロ
セス
xFilter
driver netback
メモリ
解析
netfront
Xen VMM
12
実装(メモリ解析部)


ドメイン0のユーザランドプロセスとして実装
ドメインUのメモリマップ


仮想アドレスから
メモリフレーム番号を取得
ドメイン0のプロセスの
アドレス空間にマップ
domain0
xFilter
domainU
プロ
セス
analyzer
syscall
メモリ
解析
filter
driver netback
netfront
Xen VMM

解析結果をシステムコールで通知
13
実装(フィルタリング部)

ドメイン0のカーネル内に実装

netback ドライバと
実デバイスの間
domain0
xFilter
domainU
プロ
セス
analyzer

一定時間毎にanalyzer
がメモリを解析

システムコールハンドラ
でフィルタリング
syscall
メモリ
解析
filter
driver netback
netfront
Xen VMM
14
実験


ドメインU上で Apache 2.0 を動作
クライアントマシンで httperf 0.9.0 を動作



3918byteのHTMLファイルに100リクエスト/sで送信
パケットの送信が許可されている状態で測定
実験環境
 Athlon 64 Processor 3500+, 1Gbyte
 Xen 3.3.0 (x86_64)
 domain0:Linux 2.6.18.8, 512Mbyte
 domainU:Linux 2.6.18.8, 256Mbyte
15
メモリ解析のオーバーヘッド

メモリ解析の詳細を調査

一括検査の間隔:50ms
リクエスト処理時間(ms)
120

実験結果



1回のメモリ解析にかかる
時間:平均15.4ms
プロセス数:74
マップしたページ数:148
100
110.9
95.5
80
60
40
20
0
解析なし
解析あり
16
性能実験


処理時間とCPU使用率は
トレードオフの関係
200msの場合性能が悪い


タイムアウトするパケット
があったため
10ms以下では処理時間は
短くならなかった

メモリ解析がボトルネック
600
35
500
30
25
400
20
300
15
200
10
100
5
0
0
200
0
50
100
150
CPU使用率(%)
実験結果
リクエスト処理時間(ms)

検査間隔(ms)
リクエスト処理時間
CPU使用率
17
キャッシュ機能による性能改善

実験結果


キャッシュによってリクエスト処理時
間を57.2ms削減できた
処理時間はコネクション確立にかか
る時間+レスポンス


コネクション成立にかかる時間は改
善されない


1コネクション1リクエストで実験
120
100
80
60
40
20
0
まだキャッシュはないため
レスポンスは大幅に向上

リクエスト処理時間(ms)
キャッシュにヒットするため
レスポンス
コネクション
xFilterなし
キャッシュ
あり
キャッシュ
なし
0.3
0.2
2.6
35.7
59.7
35.8
18
関連研究

Livewire [Gerfinkel et al. ’03]



identd [RFC 1413]



VMMでVMの侵入検知
VMのメモリを解析してプロセスの情報を取得
TCPを張ったユーザのIDを取得することができる
正しい情報を返す保証がない
ステートフルインスペクション

SYNパケットはルールベースで、それ以降はステート
テーブルでチェック
19
まとめと今後の課題

xFilterを用いたVMMによるフィルタリングを提案

送信元のプロセスやユーザを指定してフィルタリング


踏み台攻撃に対して安全かつきめ細かい通信制限が可能
VMのメモリを解析してゲストOS内の情報を取得


カーネルの型情報を利用
今後の課題

メモリ解析部をVMM内に実装する

VMのメモリを直接参照できる

オーバーヘッドを削減
20