全体ミーティング 〜進捗報告〜
2006年12月22日(金)
島本 大輔
修士2年
研究内容
System Service 監視による Windows 向け異常検知
概要
Windows 版システムコールである System Service を利用し、プログラムの振る舞いを監視することにより異常検知を行い、Windows のセキュリティを高めたい。
モチベーション1
現在のセキュリティ対策はパターンマッチが主流
ウィルス対策ソフトにおけるウィルスの定義ファイル
ファイアウォールのポートやパケットの設定
侵入検知システムのルール
既存の攻撃に対する防御策 = 新種の攻撃に弱い
モチベーション2
Windows 向けの研究を行ってみたい
Windows 向けの(公開された)異常検知研究が少ない
研究に必要なデータが公開されているものも少ない
ベンダー内にはあるのかもしれない
どうする?
モチベーション1の問題に対する解決案
静的なデータとのパターンマッチングではなく、プログラムの振る舞いを利用した異常検知を行う
+モチベーション2
Windows 向けの異常検知手法について研究する
=
プログラムの振る舞いを利用した Windows 向け異常検知
プログラムの振る舞い
プログラムが動作したときに得られる情報
プロセスの実行時情報
[Forrest et. al. '96] のシステムコール
[Sekar et. al. '01] のプログラムカウンタ
[Feng et. al. '03] のスタック
外部へのアクセス
HDD への書き込み
パケットの通信
ログの情報
syslog のデータ
Apache のログ
システムコールの監視
Forrest らの "A Sense of Self for Unix Processes"(1996) が元祖
正常動作におけるシステムコールの流れを記録し、それを元に異常検知
利点
あらゆるプログラムに適用可能
プロセスの動作を細かく読み取ることが可能
プロセスの流れを把握することが可能
Windows へ応用できるのか?
Windows でのシステムコール
Windows でのシステムコール =
System Service
Windows の根本的な機能を提供
通常、直接書くことはなく、wrapper関数の中で呼ばれる
UNIX 系 OS のシステムコールと
似ている
点
ファイル、プロセス、スレッド関連のものが存在する
UNIX 系 OS のシステムコールと
異なる
点
まったく異なる機能のものが存在する
System Service の方が数が多い(WinXP SP2 で 951個)
System Service のリスト(xls)
System Service の監視手法
カーネルモードへ遷移する瞬間(interrupt)を intercept(hook)する
Windows 2000 以前ではソフトウェア割り込み(int 2e)
Windows XP 以降は sysenter 命令
sysenter 命令
システムコール用のカーネルモードへの遷移命令。インストラクションポインタやスタックポインタの書き換えを行ってくれる。
動作図(監視前)
SSDT (System Service Descriptor Table) : System Service のアドレスが格納してある
動作図(監視後)
実装
デバイスドライバ interceptor.sys
System Service の ID をバッファに記録
別スレッドが定期的にバッファ内のデータをファイルへ書き出す
C とインラインアセンブリで実装
GUI プログラム interceptor_gui.exe
デバイスドライバの開始、停止などの操作
C++ で実装
GUI のライブラリとして WTL (Windows Template Library) を利用
改善点
System Service の記録を落としていた可能性が高い
以前までの記録(および実験結果)には誤りがあった可能性大
記録の書き出し時にプロセスをサスペンドさせるようにした
(NtSuspendProcess, NtResumeProcess を利用)
ファイルへの書き出しをカーネルモードから行うように変更
以前はGUI(ユーザモード)のメモリへコピーしてから書き出していた
無駄なコピーがなくなり、高速化(したはず)
評価
普段利用しているプログラムのデータを取得(約1時間)
例:Firefox, IE, Google Video, Quicktime, Winamp, Adobe Reader, Explorer, etc.
データから各 System Service の5秒毎の発生回数の平均を計算
平均の計算は Python スクリプトで処理
結果のグラフ(xls)
結果より
何回か実行しても同じようなグラフになっている例が多い
プログラム毎の特徴を抽出できる可能性
プログラムによって、極端に多く発生する System Service が存在する
Firefox の NtUserValidatehandleSecure (1248)
Quicktime の NtQueryPerformanceCounter (00A5)
同じ種類のプログラムでも、大きく異なる結果になる
IE と Firefox
Quicktime と Google Video
今後の予定
目標をデータの取得・解析中心に変更
解析するプログラムの種類(分野)を増やす
ウィルス、ワーム、スパイウェアなどの分析
論文を書く
Fin
以上です。
ご清聴ありがとうございました。