240 likes | 387 Views
仮想マシンを用いた 既存 IDS のオフロード. 九州工業大学 飯田貴大 九州工業大学/ JST CREST 光来健一. 侵入検知システム( IDS ). IDS は攻撃者の侵入を検知するために用いられる ファイル、ネットワーク、 OS などを監視 例: chkrootkit 攻撃者によって仕込まれた rootkit を発見 rootkit はファイルの改ざん等を行う攻撃者用ツール IDS が攻撃を受けると検知できなくなる ps コマンドが置き換えられると chkrootkit が騙される. 攻撃者. サーバ. chkrootkit. コマンド群. 置換.
E N D
仮想マシンを用いた既存IDSのオフロード 九州工業大学 飯田貴大 九州工業大学/JST CREST 光来健一
侵入検知システム(IDS) • IDSは攻撃者の侵入を検知するために用いられる • ファイル、ネットワーク、OSなどを監視 • 例:chkrootkit • 攻撃者によって仕込まれたrootkitを発見 • rootkitはファイルの改ざん等を行う攻撃者用ツール • IDSが攻撃を受けると検知できなくなる • psコマンドが置き換えられるとchkrootkitが騙される 攻撃者 サーバ chkrootkit コマンド群 置換 rootkit
仮想マシンを用いたIDSのオフロード • サーバを仮想マシン上で動かし、IDSだけ別の仮想マシン上で動かす手法 • IDSが停止される恐れがない • IDSの設定ファイルやデータベースを変更される恐れがない • ログが改ざんされる恐れがない IDS-VM サーバVM 攻撃者 サーバ IDS 侵入
IDSをオフロードする際の問題 • サーバVMを監視するようにIDSを修正する必要がある • 単純にIDS-VMで動かすだけではIDS-VMの監視を行ってしまう • chkrootkitのpsはIDS-VMのプロセス情報を返す • VMをまたがって監視を行うには特殊なアクセス方法を用いる必要がある • 例:サーバVMのメモリを覗く • VMwatcher [Jiang et al.’07] • VIX [Hay et al.’08] IDS-VM サーバVM IDS IDS IDS-VMの監視 サーバVMの監視
提案:Transcall • IDSに修正を加えることなくオフロードを可能にするシステム • サーバVMの監視を行うための実行環境であるVMシャドウを提供 • VMシャドウ内のIDSはサーバVM内と同様に実行できる • サーバVMの情報を安全に取得 IDS-VM サーバVM VMシャドウ IDS システムコールエミュレータ シャドウファイルシステム Transcall
システムコール・エミュレータ • VMシャドウ内のIDSが発行したシステムコールに対して必要に応じてサーバVMの情報を返す • 必要ならサーバVMのカーネルから直接情報を取得 • カーネルについての情報の取得 • 不必要ならIDS-VMのカーネルにシステムコールを発行 • メモリ管理 • ネットワーク処理 IDS-VM サーバVM VMシャドウ IDS システムコールエミュレータ Transcall カーネル カーネル
例:unameのエミュレーション • unameシステムコールが返す情報をサーバVMから取得 • サーバVMのカーネルメモリの中からutsname構造体を発見 • カーネル名、ホスト名、バージョン等が格納されている • init_task変数からたどることができる • unameが返す情報を上書き IDS-VM VMシャドウ サーバVM IDS Linux server-vm 2.6.27.35 システムコールエミュレータ uname init_task Transcall カーネル カーネル task_struct utsname
サーバVMのメモリを直接見る必要性 • サーバVMのカーネルが改ざんされない限り、正しい情報を取得できる • サーバVMへのRPCは脆弱 • システムコールをサーバVM上で実行させその結果を取得 • RPCサーバが改ざんされると偽の情報を返される可能性がある • OS名を改ざんされるとOSに依存した攻撃を見逃す危険性 IDS-VM サーバVM VMシャドウ IDS RPCサーバ 攻撃 Transcall カーネル uname uname
シャドウファイルシステム • VMシャドウ内のIDSからサーバVMで使われているファイルシステム全体を参照可能 • サーバVMの仮想ディスク • 仮想ディスクをVMシャドウのルートにマウント • ファイルシステムの整合性を保つために読み込み専用でマウント • 特殊なファイルシステム • サーバVMを参照してエミュレート • proc、sys、dev IDS-VM サーバVM VMシャドウ IDS シャドウファイルシステム シャドウファイルシステム カーネル Transcall 仮想ディスク
シャドウprocファイルシステム • サーバVMのプロセス情報を返すファイルシステム • Linuxのprocファイルシステムと同じインタフェースを提供 • /proc/PID/statはサーバVM上のプロセス番号PIDのプロセス情報を返す • プロセス情報はサーバVMのカーネルメモリから直接取得 • init_task変数から順番にたどれるtask_struct構造体を参照 • VMシャドウの/procにマウントする IDS-VM サーバVM init_task VMシャドウ IDS /proc/100/stat task_struct カーネル シャドウprocfs Transcall
psコマンドの実行例 • psコマンドは/proc を参照しながら実行 • /proc/self をチェック • サーバVM上にpsプロセスは存在しない • IDS-VMで実行中のpsプロセスの情報を返す(例外処理) • /proc 上のディレクトリエントリ一覧を取得 • サーバVM上で動いているプロセスのPIDの一覧を返す • 各プロセスのディレクトリからstat、statusファイルを読み込む • 実行されている端末、実行時間、コマンド名などを取得 IDS-VM サーバVM PS ps VMシャドウ カーネル Transcall シャドウprocfs
Transcallのポリシファイル • VMシャドウ内のIDSがIDS-VM上のファイルを使うことを可能にする • デフォルトではサーバVM上のファイルにアクセス • 設定ファイルやログなどはIDS-VM上のファイルを使うようにポリシを記述 • サーバVMの攻撃者に改ざんされるのを防ぐ IDS-VM サーバVM VMシャドウ IDS ポリシファイル Transcall /boot/vmlinuz /var/log/a.log
ポリシファイルの記述例 • IDSがアクセスするパスとIDS-VM上のパスの対応を記述 • 上から順番に調べ、パスの一部がマッチすれば対応するIDS-VM上のパスで置換 • Tripwireの例 • TripwireのポリシファイルはサーバVMごとに異なるパスに置く • サイトキーは共通のパスに置く • ログはサーバVMごとに異なるパスに保存 • それ以外のファイルはサーバVMを参照 /etc/tripwire/tw.pol /etc/tripwire/VM1/tw.pol /etc/tripwire /etc/tripwire /var/lib/tripwire /var/lib/tripwire/VM1
実装 ドメイン0 • Xenを使ってIDSのオフロードを実現 • ドメイン0をIDS-VM、ドメインUをサーバVMとする • Transcallはカーネルを変更せずに実現 • システムコールエミュレータの子プロセスとしてIDSを実行 • FUSEを用いてシャドウprocファイルシステムを実装 ドメインU IDS シャドウprocfs Transcall カーネル システムコールエミュレータ FUSE Linux カーネル
システムコールのトラップ • ptraceシステムコールを用いてシステムコールのトラップを行う • エミュレートするシステムコールの場合 • uname • 引数が指すメモリの内容を書き換える • ファイル関連のシステムコールの場合 • open,stat • 引数のパス名を置換する • ポリシ • /proc • / IDS uname(buf) open("/proc") システムコールエミュレータ
サーバVMのカーネル情報の取得 • カーネルの内部データ構造を基にメモリを解析 • あらかじめカーネルの型情報やシンボル情報を取得しておく • デバッグ情報やSystem.mapを利用 • サーバVMのメモリページをIDS-VMにマップしてアクセス • 仮想アドレス→疑似物理アドレス→マシンアドレスへの変換 1 Transcall ページ テーブル 3 2 ターゲット VMM P2Mテーブル
実験:Transcallの性能 • VMシャドウ内で動かしたpsコマンドの実行時間を測定 • サーバVMで直接動かした場合の3.3倍 • 原因はptraceおよびFUSEを用いたことによるオーバヘッド • サーバVMからの情報取得のオーバヘッドは含まれない • VMシャドウの作成時に取得しているため 表1 実行速度比較 • 実験環境 • CPU Intel Quad 2.83GHz • メモリ 4GB • Xen3.4.0 • ドメイン0Linux2.6.18.8 • ドメインU Linux2.6.27.35
実験:隠しプロセスの発見 • Transcallを用いて隠しプロセスの発見ができるかどうかの実験を行った • VMシャドウ内とサーバVM上でのpsの実行結果を比較 • サーバVMではinitプロセスを隠蔽するpsコマンドを実行 • 隠蔽されたinitプロセスの発見を行えた
関連研究(1/2) • HyperSpector [Kourai et al.’05] • IDS-VMからサーバVMを監視するシステム • シャドウファイルシステム、シャドウプロセスを提供 • 既存のIDSが利用可能だが、設定の変更は必要 • OSの仮想化機能を利用 • 名前空間の操作だけでサーバVMの情報を参照できる • Transcallはシステムレベルの仮想化を前提 • サーバVMの情報を取得するのは容易ではない
関連研究(2/2) • VIX [Hay et al.’08] • IDS-VMからサーバVMの情報を取得するコマンド群を提供 • 提供されているコマンドを使わないIDSは修正が必要 • VMwatcher [Jiang et al.’07] • IDS-VMで既存のアンチウィルスを動かすことができる • サーバVMのファイルシステムを参照するのみ • スキャンするパスをマウント先に変更する必要がある • Proxos [Ta-min et al.’06] • 機密情報を扱うプロセスを別のVMで実行 • ポリシファイルに従ってシステムコールのRPCを行う • 元のVMのカーネルの修正が必要
まとめ • 既存のIDSを変更することなく、VMを用いてオフロードできるようにするシステムTranscallを提案 • VMシャドウ内でIDSを動作させる • IDS-VMからサーバVMを監視するための実行環境 • Transcallの構成 • システムコール・エミュレータ • シャドウファイルシステム • シャドウprocファイルシステム • ポリシファイル • 既存のpsを動作させて隠しプロセスを見つけられた
今後の課題 • シャドウprocファイルシステムを完成させる • 取得できる情報がまだ不完全 • 実行中のプログラムのパス名が取得できない • 既存のIDSをオフロードできるようにする • Tripwire • ポリシファイルの実装を完成させる必要がある • chkrootkit • netstatコマンドもオフロードできるようにする必要がある • Transcallのオーバヘッドを削減する
仮想ディスクのマウント • 仮想ディスクがLVMを使っている場合 • 仮想ディスクに使われているループバックデバイスを探す • /dev/loop1 • 見つかったループバックデバイスに対してデバイスマップを作成 • LVMでなければ作成したデバイスを直接マウント可能 • 物理ボリュームを探してから、論理ボリュームを探す • 物理ボリューム名が一意である必要 • /dev/VolGroupXen00/LogVol00 • 論理ボリュームをアクティブにしてマウント