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
© Copyright 2024 ExpyDoc