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