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