九州工業大学
飯田貴大
九州工業大学/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 2026 ExpyDoc