slide (PowerPoint)

異常検知システムにおける
正常動作データのモジュール化
大山恵弘 (科学技術振興事業団)
王維
(筑波大学)
加藤和彦 (筑波大学・科学技術振興事業団)
2002/11/19
コンピュータシステム・シンポジウム
1
研究の背景

セキュリティへの脅威が依然として存在


ウィルス、トロイの木馬、Buggyなプログラム
対策

脆弱性の除去:


異常の早期発見:

2002/11/19
Non-executable stack、型安全な言語、…
アンチウィルス、侵入検知システム、…
コンピュータシステム・シンポジウム
2
侵入検知システム
「異常」のDBを保持 「正常」のDBを保持
ネットワーク
を監視
ホストの動作
を監視
多くの
Network IDS
アンチウィルス
ホストベース
異常検知システム
異常検知システム

基本アイデア




プログラムの正しい動きを表現するDB
(正常動作データ)を作成
プログラムの実行を監視
正常動作データに合わない実行 = 異常
長所

未知の攻撃・異常を検知可能
本研究の目的

独立したコンポーネントを組み合わせた
アプリケーションに適した異常検知システム

ライブラリ、モジュール、外部プログラム、、、
発表の流れ





既存の異常検知システム(3分)
SQUIDS: 我々の異常検知システム(9分)
実験結果(4分)
関連研究(1分)
結論と今後の課題(2分)
2002/11/19
コンピュータシステム・シンポジウム
6
正常動作データ

材料?





パケットの内容
バッファの内容
キーストローク
システムコール
作成方法?



ソースコードから自動生成する
人間が全部書く
機械学習させる
近年活発に
研究されている
システムコール列の学習に基づく
異常検知システム

正常動作データの作り方



実際に発行されたシステムコール列を記録
記録された動作を一般化
既存システム



2002/11/19
計算機免疫系 [Hofmeyr et al. ’98]
オートマトンの自動生成 [Sekar et al. ’01]
テキスト分類による方法 [Liao et al. ’02]
コンピュータシステム・シンポジウム
8
既存の方法 [Sekar et al. ’01]


訓練モード:
 システムコールでアプリケーション停止
 システムコール、PC等の情報を記録
 オートマトン(正常動作データ)作成
検査モード:
 システムコールでアプリケーション停止
 実行がオートマトンに合っているか検査
既存の方法 [Sekar et al. ’01]
httpd
read
0x600412dc
open
0x3fc08070
fstat
0x3fc08094
mmap
0x600412dc
write
0x600412dc
…
既存の異常検知システムの特徴

アプリケーションごとに「正常」を定義




計算機免疫系 [Hofmeyr et al. ’98]
オートマトンの自動生成 [Sekar et al. ’01]
テキスト分類による方法 [Liao et al. ’02]
etc.
我々の着眼


アプリケーション = コンポーネントの集合体
「アプリケーションってどこからどこまで?」




UNLHA.DLLはアプリケーションに含まれるんでしょうか?
VBランタイムは? libgtkは? libxmlは?
ライブラリを変えたら、アプリケーションの正常動作データは
使えなくなる? それはいやだ!
「結合されるコンポーネントが実行時に初めて決まる
アプリケーションもありますよ」

2002/11/19
臨機応変に動的リンクするアプリケーションでは、「正常」も
めまぐるしく変わるぞ!
コンピュータシステム・シンポジウム
12
我々のアプローチ

鍵アイデア:
コンポーネントごとに正常動作データを作る

正常動作をオートマトンで表現

Sekarの方法をベースに設計
異常検知システムSQUIDS
© Heather Bruton
直感的なイメージ(1)
キメラの正しい動作を
どう記述するか?
© Chimera project in CMU
キメラの動作が正常 =
ライオンの動作が正常
∧ 羊の動作が正常
∧ 蛇の動作が正常
∧ 動物間の相互作用が正常
直感的なイメージ(2)
mod_ssl
libc
httpd
mod_perl
アプリケーションの動作が正常 =
各コンポーネントの動作が正常
∧ コンポーネント間の相互作用が正常
SQUIDSが作る正常動作データ

現在は共有ライブラリ境界をコンポーネント
境界として使用
SQUIDSが作る正常動作データ
libc
httpd
libc:fopen
0x3fc08070
…
stat
open
libc:fread
0x3fc08094
…
fread
mmap
…
libapr:xxx
0x600412dc
fopen
…
read
SQUIDSのセールスポイント

各コンポーネントの正常動作データを
再利用できる


正常動作データの作成・維持の手間を軽減
異常の場所をピンポイントに特定できる
2002/11/19
コンピュータシステム・シンポジウム
18
再利用
mod_ssl
libc
my_libc
httpd
mod_perl
再利用
mod_ssl
libc
my_libc
httpd
mod_perl
正常動作データcarryingライブラリ
再利用
httpd
mod_ssl
libc
my_libc
どこかの誰かが作った
データを再利用
mod_perl
以降も使用可
ピンポイント異常特定

既存のシステム(ex. 計算機免疫系)


「どこの部分がどう悪いのかわかりませんが、
とにかく異常が発生したみたいです」
SQUIDS



「libc.so:fopenの内部の動きが異常です」
「httpdでPCが0xef804から0x62eda0に
遷移してますが、それは異常です」
「httpdがlibgtkを呼ぶ異常が発生してます」
スタックとオートマトンの対応づけ
0x123c
fopen
fprintf
open
…
fopen
…
fopen
0x123c
…
open
httpd
実装の詳細(1)



環境: Linux/x86
我々が作ったloadable kernel module
によりシステムコールフックを実現
プロセスをfork


2002/11/19
親プロセス:監視
子プロセス:アプリケーションを実行
コンピュータシステム・シンポジウム
24
実装の詳細(2)

procfsの情報を使って、アプリケーションの
フレームと共有ライブラリのフレームを区別



mmap-edメモリ内のPC = 共有ライブラリ
nmコマンドの出力情報に基づいて、PCから
関数名を取得
brkシステムコールは無視
2002/11/19
コンピュータシステム・シンポジウム
25
実験

Redhat Linux 7.1 on i386



Kernel 2.4.7, glibc 2.2.4
スタンドアロンマシンでhttpd, ftpd, sshd
を実行
2つを比較


Sekarの方法: アプリケーションごとにオートマトン作成
我々の方法: コンポーネントごとにオートマトン作成
ライブラリのオートマトンの再利用
httpdの実行で作った
httpdバイナリの
正常動作データ
ftpdとsshdの実行で
作った、共有ライブラリの
正常動作データ
合体!
httpd全体の
正常動作データ
これを初期データとして
正常動作データを作成
結果
ftpdとsshdの実行で
作った正常動作データ
•libc: 671枝
•非libcライブラリ: 389枝
httpdの実行で追加
された正常動作データ
+
httpdの正常動作を表現するデータ:
libcに関して 98.1%
非libcライブラリに関して 93.7%
がftpd, sshdと共有されている
•libc: 13枝
•非libcライブラリ: 26枝
正常動作データの
再利用は現実的
異常の検知率

人工的に異常を発生させた効果を作りつつ
httpdを実行

システムコールを10回に1回別のものに変更
httpd
ftpd
sshd
Sekarの方法 943/949
(99.4%)
426/429
(99.3%)
3411/3480
(98.0%)
938/949
(98.8%)
424/429
(98.8%)
3369/3480
(96.8%)
我々の方法
偽警報(false alarm)の数

httpdを異常検知しながら実行



Mozillaで様々な要求を発行
httpdは全部で8000回システムコールを実行
結果


2002/11/19
Sekarの方法: 62回(0.8%)
我々の方法: 30回(0.4%)
コンピュータシステム・シンポジウム
30
異常検知の導入によるhttpdの
スループットの低下
httpdと同じホストでの
wget –r http://localhost:8080/
の完了にかかる時間を測定
50
40
実行時間(秒)

30
20
10
0
異常検知なし
異常検知あり
正常動作データの総サイズ
オートマトンの枝数
3000
libraries
sshd w/o ibs
ftpd w/o libs
httpd w/o libs
sshd
ftpd
httpd
2000
1000
0
monolithic
approach
our approach
関連研究(1)

[Sekar et al. ’01]



アプリケーション1つにオートマトン1つ
どの部分がどう異常なのかの把握が困難
システムコールだけを見る異常検知


[Wagner et al. ’01], [Hofmeyr et al. ’98],
[Liao et al ’02]
スタックが壊れても、システムコール列が正常なら
正常と判断
→ 我々の方式に比べmimicry attackを受けやすい
関連研究(2)

資源へのアクセス制御ポリシーの動的切り替え



SubDomain [Cowan et al. ’00]
細粒度保護ドメイン [品川ら ’01]
[阿部ら ’02]
我々のシステムでは、アクセス制御ポリシーでなく、
プログラムの制御の遷移のポリシーを切り替える
まとめ

正常動作データのモジュール化法を提案

その方法の有効性を実験で評価



2002/11/19
異常検知率の低下は小さい
現在、体感できる位のオーバヘッドあり
共有ライブラリの正常動作データを複数の
アプリケーションで使い回すことは現実的
コンピュータシステム・シンポジウム
35
今後の課題

より現実的な環境で実験


例: 日常業務に実際に使用しているサーバ
共有ライブラリ以外の境界をコンポーネント
境界として使えるよう拡張


2002/11/19
静的リンクの境界
コードの作者、出所の境界
コンピュータシステム・シンポジウム
36
(大上段に構えた)本研究の主張
独立コンポーネントの集合体の実行は
独立ポリシーの集合体で縛るべき
質疑応答スライド
議論(1)

システムコールを呼び出さないライブラリ
関数のチェックは?


→ しません
正常動作データをモジュール化すると、
検知率が落ちる?

→ はい。ほんの少しだけ。
議論(2)

そもそも何を異常と定義しているのか?

→ 正常動作データにない動作すべて
Semanticsに
違反する動作
正常動作データに
ない動作
レアパスの実行など