Upload
dinos
View
100
Download
1
Embed Size (px)
DESCRIPTION
仮想マシンを用いて既存 IDS を オフロードするための実行環境. 九州工業大学 大学院 情報工学府情報創成工学専攻 10675002 飯田貴大. 侵入検知システム( IDS ). IDS は攻撃者の侵入を検知するために用いられ る ファイル、ネットワーク、 OS などを監視 例: Tripwire ファイルの修正や追加などについて監視を行う ポリシファイルに従ってデータベースを 作成 データベースと比較することで検出を行う. 攻撃者. policy. Tripwire. DB. 異常. IDS への 攻撃. IDS が攻撃を受けると検知できなくなる - PowerPoint PPT Presentation
Citation preview
仮想マシンを用いて既存 IDSをオフロードするための実行環境九州工業大学大学院情報工学府情報創成工学専攻
10675002飯田貴大
IDS は攻撃者の侵入を検知するために用いられる◦ ファイル、ネットワーク、 OS などを監視◦ 例: Tripwire
ファイルの修正や追加などについて監視を行う ポリシファイルに従ってデータベースを作成 データベースと比較することで検出を行う
侵入検知システム( IDS)
Tripwire攻撃者
異常policy
DB
IDS が攻撃を受けると検知できなくなる◦ IDS が停止させられたり IDS 本体が置き換えられてしまう◦ 例: Tripwire のポリシファイルやデータベースが改ざんされると Tripwire が騙される
ポリシファイルを改ざんされると特定のファイルやパスを検査できなくなる データベースを改ざんされるとファイルを書き換えられていないと誤認する
IDSへの攻撃
Tripwire攻撃者
policy
DB
サーバを仮想マシン (VM) 上で動かし、 IDS だけ別の仮想マシン上で動かす手法◦IDS が攻撃の影響を受けにくくなる
サーバ VM に侵入した攻撃者から実行ファイルや設定ファイル等を改竄されることはない◦IDS-VM はサービスを提供しないため脆弱性を利用した攻撃はされにくい
仮想マシンを用いた IDSのオフロード
IDS-VM サーバ VM 攻撃者
Tripwirepolicy
DB
オフロードすると既存の IDS を使えなくなる◦ 単純に動かすだけでは IDS-VM の監視を行ってしまう◦ サーバ VM を監視するように IDS を修正するのは大変
内部構造を基にサーバ VM のメモリを解析する必要がある マウントしたサーバ VM のディスクを監視するために監視対象のパスの書き換えが必要となる
既存の IDSへの修正が必要
IDS-VM サーバ VM
IDSカーネル
メモリ解析
仮想ディスク
パスの書き換え
オフロードした既存の IDS に修正を加えることなく動作させることを可能にする実行環境◦ IDS-VM からサーバ VM の監視を行える◦ サーバ VM 内で実行しているかのように IDS を実行できる◦ サーバ VM のカーネルが攻撃されない限り安全に監視できる
提案: VM Shadow
VM ShadowIDS
サーバ VMIDS-VM
VM ShadowIDS
サーバ VM
VM Shadow は IDS と OS の間のインターフェースをエミュレートする◦ システムコールのエミュレーション
IDS がシステムコールを使ってサーバ VM の情報を取得できるようにする◦ ファイルシステムのエミュレーション
サーバ VM のファイルシステムを提供する◦ ネットワークのエミュレーション
サーバ VM と同じネットワークインタフェースを提供する
VM Shadowの実現
VM Shadow 内の IDS が発行したシステムコールに対して必要に応じてサーバ VM の情報を返す◦ 必要ならサーバ VM のカーネルを解析して情報を取得
サーバ VM についての情報の取得 例: uname
◦ それ以外は IDS-VM のカーネルにシステムコールを発行 メモリ管理
システムコール・エミュレータ
VM ShadowIDS
システムコールエミュレータ
サーバ VMIDS-VM
カーネルカーネル
uname
init_task
Linuxserver-vm2.6.27.35
task_struct utsname
VM Shadow 内の IDS からサーバ VM で使われているファイルシステム全体を参照可能◦ サーバ VM と同じディレクトリ構成を提供する◦ IDS 関連のファイルは IDS-VM のファイルを提供する
Shadowファイルシステム
VM ShadowIDS
Shadowファイルシステム
サーバ VMIDS-VM
仮想ディスク
bin lib
/
tripwirels
実行ファイルは IDS-VM から安全に読み込む◦ execve システムコールによる読み込みは IDS-VM から◦ 共有ライブラリの読み込みも IDS-VM から
ダイナミックリンカによる読み込みかどうかで判別◦ 実行しない場合にはサーバ VM から
実行されるファイルの判別
VM Shadow
IDS
Shadowファイルシステム
サーバ VMIDS-VM
仮想ディスク
execveダイナミックリンカ
ダイナミックリンカopen
IDS の設定ファイル等を IDS-VM から読み込めるようにする◦ サーバ VM から隔離したいファイルを管理者が指定できる◦ マッピングを記述することで IDS-VM 上の指定したファイルを使わせることができる
VM ごとに異なるファイルにマッピングできる
マッピングファイルによる指定
/etc/tripwire/tw.pol /etc/tripwire/vm1/tw.pol/etc/tripwire /etc/tripwire/var/lib/tripwire//etc/lib/tripwire/vm1
Tripwire のマッピングファイル
IDS-VM 上のパスIDS がアクセスするパス
サーバ VM の OS 内の情報を返すファイルシステム◦ Linux の proc ファイルシステムと同じインタフェースを提供◦ プロセスやネットワーク、システムの情報を返す
例: /proc/*/stat◦ VM Shadow 作成時にサーバ VM のメモリを解析して構築
プロセスリスト、ソケット一覧
Shadow procファイルシステム
サーバ VM
カーネルShadowprocfs
IDS
/proc/*/stat
IDS-VMVM Shadowinit・・
firefoxvncservermalware
サーバ VM が持つネットワークインタフェースにアクセスできるようにする◦ 対応する仮想ネットワークインタフェース( vif )が
IDS-VM に作成される サーバ VM へのパケットが取得可能
◦ サーバ VM のネットワークインタフェースにアクセスすると vif にアクセスさせる 例: eth0→vif
ネットワーク・エミュレータ
VM ShadowIDS
サーバ VMIDS-VM
eth0vif
ネットワークエミュレータ
eth0
VM Shadow を提供するシステム Transcall を開発◦ Xen を使って IDS のオフロードを実現◦ Transcall はカーネルを変更せずに実現
ptrace を用いてシステムコール・エミュレータを実装 FUSE を用いて Shadow proc ファイルシステムを実装 全て合わせて 3848 行で実装
実装
IDS
Linux
サーバ VMIDS-VM
FUSE
Shadow
procfs カーネル
システムコールエミュレータ
Tran
scal
l
カーネル
VM Shadow を用いて既存の IDS がオフロードできるのか実験を行った◦ VM Shadow 内で既存の IDS が正常に監視できるかどうかの動作テスト◦ VM Shadow 内で動かす IDS の性能評価
実験
実験環境•CPU Intel Quad 2.83GHz•メモリ 4GB•Xen3.4.0•IDS-VM Linux2.6.18.8•サーバ VM Linux2.6.27.35
chkrootkit を用いてサーバ VM のルートキットの検出を行った◦ 検査項目は大きく分けて 4 種類
◦ ネットワーク周り以外の検査項目はほぼ IDS-VM から異常検出することができた ネットワークは完全に対応できていない
chkrootkitの動作テスト
検査項目コマンドamd cron echo egrep ifconfig login ls netstat passwd ps
sshd su…ファイルaliens asp inetdconf OSX_RSPLUG w55808 wted z2
ネットワークbindshell scalper slapper sniffer
プロセスchkutmp lkm
Tripwire/Snortの動作テスト Tripwire を用いてサーバ VM のファイルの整合性チェックを行った
◦ 最初にサーバ VM の「正常な」状態を記録◦ サーバ VM 内で適当なファイルを変更◦ Tripwire は変更されたファイル数を正しく報告
Snort を用いてサーバ VM のパケット監視を行った◦ サーバ VM に攻撃パケットを送信◦ Snort は正しく警告を出した
VM ShadowTripwire
サーバ VMIDS-VM
policyDB
ファイル変更
VM ShadowSnort
サーバ VMIDS-VM
eth0vif
攻撃パケット
監視
監視
VM Shadow 内で動かした chkrootkit の実行時間を測定◦ サーバ VM で直接動かした場合の約 1.5倍遅い◦ lkm の検査がほとんどを占めている
Shadow proc ファイルシステムを利用するため実行に時間がかかる
chkrootkitの実行時間
010203040506070
38.6
58.5
chkrootkit の実行時間
サーバ VM
VM Shadow
実行時間(秒)
05
10152025303540
19.2
34.8
lkm の実行時間
サーバ VMVM Shadow
時間(秒)
VM Shadow 内で動かしたTripwire の実行時間を測定◦ Xen では IDS-VM からサーバ VMの仮想ディスクにアクセスするほうが高速
VM Shadow 内で動かしたSnort の CPU 使用率を測定◦ ネットワークが仮想化されていない IDS-VM の方が高速
Tripwire/Snortの性能
0
20
40
60
80
100
120
140120.8
97.1
Tripwireの実行時間
サーバ VMVM Shadow
実行時間(秒)
0
10
20
30
40
50
60 55.8
35.2
Snortの CPU使用率
サーバ VMVM Shadow
平均CPU使用率(%)
1.2倍高速
20%低減
VIX [Hay et al.’08]◦ IDS-VM からサーバ VM の情報を取得するコマンド群を提供◦ 提供されているコマンドを使わない IDS は修正が必要
VMwatcher[Jiang et al.’07]◦ IDS-VM で既存のアンチウィルスを動かすことができる◦ サーバ VM のファイルシステムを参照するのみ
スキャンするパスをマウント先に変更する必要がある HyperSpector [Kourai et al.’05]
◦ IDS-VM で既存の IDS を実行できる◦ OS の仮想化機能を利用しているため比較的容易
VM Shadow はシステムレベルの仮想化を前提
関連研究
既存の IDS を変更することなく、オフロードすることを可能にする VM Shadow を提案◦ IDS-VM からサーバ VM を監視するための実行環境
システムコール・エミュレータ、 Shadow ファイルシステム、ネットワーク・エミュレータから成る◦ 既存の chkrootkit 、 Tripwire 、 Snort の動作を確認できた
今後の課題◦ より多くの既存の IDS を動作させられるようにする
まとめ
オープンソースで公開◦ URL:http://www.ksl.ci.kyutech.ac.jp/~yone/
Transcall を利用した研究◦ OUassister :仮想マシンのオフラインアップデート機構
Transcall が提供する VM Shadow 内でアップデータを動作させることでファイルの更新をエミュレートする◦ ファイルキャッシュを考慮した IDS オフロード
Transcall の機能を拡張し、ファイル検査時にファイルキャッシュも含めて検査できるようにしている
Transcallの公開
VM Shadow を用いて隠しプロセスの発見ができるかどうかの実験を行った◦ VM Shadow 内とサーバ VM 上での ps の実行結果を比較◦ サーバ VM では init プロセスを隠蔽する改竄された psを実行
隠蔽された init プロセスの発見を行えた
隠しプロセスの発見
VMサーバIDS-VM
VM ShadowIDS
サーバ VMIDS-VM
chkrootkit を用いてサーバ VM のルートキットの検出を行った◦ chkrootkit は ps や netstat コマンド等を用いており、
proc ファイルシステムも参照する◦ サーバ VM には改ざんされた ps コマンドを置いた
chkrootkit の検査に引っ掛かる文字列を埋め込んだ IDS-VM からサーバ VM の改ざんされた ps コマンドを検知できた
chkrootkitの動作テストVM ShadowIDS
サーバ VMIDS-VM
uname システムコールが返す情報をサーバ VMから取得◦ サーバ VM のカーネルメモリの中から utsname 構造体を発見
カーネル名、ホスト名、バージョン等が格納されている init_task 変数からたどることができる
例 :unameのエミュレーション
VM ShadowIDS
システムコールエミュレータ
サーバ VMIDS-VM
カーネルカーネル
uname
init_task
Linuxserver-vm2.6.27.35
task_struct utsname
/proc/net/◦ tcp, udp, unix
TCP/IP, UDP/IP, UNIX ドメインソケットの情報 サーバ VM のカーネル内の sock 構造体から取得
例: TCP/IP の場合◦ tcp_hashinfo 変数が指すハッシュ表をたどることで取得できる
ネットワーク情報の構築
サーバ VM
カーネルShadowprocfs
IDS
/proc/net/tcp
IDS-VMVM Shadow tcp_hashinfo
sock
…
IDS-VM
IDS-VM からサーバ VM の監視が行えるか実験を行った◦ VM Shadow 内とサーバ VM 上の chkrootkit の実行結果を比較◦ 大部分で同じ結果が得られることを確認
まだ対応出来ていない個所がある
実験: chkrootkitの実行
・・・ ・・・
サーバ VM
VM Shadow を用いてネットワーク情報が取得できるかどうかの実験を行った◦ VM Shadow 内とサーバ VM 上の netstat の実行結果を比較◦ 同じ情報が取得できていることを確認
実験:ネットワーク情報取得
VMサーバIDS-VM
VM Shadow 内で動かした ps コマンドの実行時間を測定◦ サーバ VM で直接動かした場合の 2.3倍◦原因は ptraceおよび FUSE を用いたことによるオーバヘッド◦ サーバ VM からの情報取得のオーバヘッドは含まれない
VM シャドウの作成時に取得しているため
実験: Transcallの性能
平均実行時間(ミリ秒)
ps( サーバ VM) 59.2VM Shadow+ps(IDS-VM) 137.3
表1 実行速度比較 実験環境•CPU Intel Quad 2.83GHz•メモリ 4GB•Xen3.4.0•IDS-VM Linux2.6.18.8•サーバ VM Linux2.6.27.35
ptrace システムコールを用いてシステムコールのトラップを行う◦ エミュレートするシステムコールの場合
uname 引数が指すメモリの内容を書き換えて IDS に出力を返す
◦ ファイル関連のシステムコールの場合 open,stat 引数のパス名を置換する
ポリシ /proc /
システムコールのトラップ
IDS
システムコールエミュレータ
open("/proc")uname(buf)
ps コマンドは /proc を参照しながら実行◦ /proc/self をチェック
サーバ VM 上に ps プロセスは存在しない IDS-VM で実行中の ps プロセスの情報を返す(例外処理)
◦ /proc 上のディレクトリエントリ一覧を取得 サーバ VM 上で動いているプロセスの PID の一覧を返す
◦各プロセスのディレクトリから stat 、 status ファイルを読み込む 実行されている端末、実行時間、コマンド名などを取得
psコマンドの実行例
サーバ VM
カーネルShadowprocfs
PSIDS-VM
VM Shadow ps
前回◦ access◦ chdir◦ execve◦ open◦ readlink◦ stat◦ uname
VM シャドウ内で行える動作が増加◦ cp,cd など基本的な動作は一通り出来る
対応しているシステムコール 追加
◦ chmod◦ chown◦ fchmodat◦ fchownat◦ link◦ lstat◦ mkdir◦ newfstatat◦ openat
◦ rename◦ rmdir◦ statfs◦ symlink◦ unlink◦ unlinkat◦ utime◦ utimensat
カーネルの内部データ構造を基にメモリを解析◦ あらかじめカーネルの型情報やシンボル情報を取得しておく
デバッグ情報や System.map を利用 例: init_task( アドレス: 0xffffffff814a8340)
◦ サーバ VM のメモリページを IDS-VM にマップしてアクセス
サーバ VMのカーネル情報の取得
Transcall Init_task
0xffffffff814a83400x2b1ceb7a1340
IDS-VM サーバ VM
/proc/ プロセス ID [/task/ スレッド ID] /◦ stat, status
サーバ VM のカーネル内の task_struct 構造体から取得◦ cmdline
プロセスのメモリから取得 /proc/self/
◦ IDS-VM の IDS プロセスの情報をコピーする /proc/net/
◦ tcp, udp, unix TCP/IP, UDP/IP, UNIX ドメインソケットの情報
エミュレートするファイル
サーバ VM のカーネルが改ざんされない限り、正しい情報を取得できる◦ サーバ VM への RPC は脆弱
システムコールをサーバ VM 上で実行させその結果を取得 RPC サーバが改ざんされると偽の情報を返される可能性がある
OS名を改ざんされると OS に依存した攻撃を見逃す危険性
サーバVMのメモリを直接見る必要性
Transcall
VM シャドウIDS
サーバ VMIDS-VM
RPCサーバ
カーネルuname uname
攻撃
MAC アドレス◦ サーバ VM のコンフィグファイルに記述されているのでその値を流用する◦ 例 vif = [ ‘mac=00:16:3e:5b:b3:ec, bridge=eth0’ ]
IP アドレス◦ RARP パケットを利用して IP アドレスを取得する
RARP パケットは MAC アドレスから IP アドレスを調べるパケット
サーバ VMの IF情報取得
IDS-VM とサーバ VM の仮想ディスクへのアクセス速度を測定◦ 1GB のファイルに 1MB のブロックサイズでシーケンシャルリードを行った
ディスクアクセス速度
0.0
500.0
1000.0
1500.0
2000.0
2500.0
3000.0
327.5
2520.1
サーバ VM からのディスクアクセスIDS-VM からのディスクアクセスアク
セス速度(M
B/s)
FUSEのアーキテクチャexample/hello
/tmp/fuse
FUSE
ls –l /tmp/fuse libfuse
glibcglibc
Ext3
NFSVFS
userspacekernel