異常検知システムにおける 正常動作データのモジュール化 大山恵弘 (科学技術振興事業団) 王維 (筑波大学) 加藤和彦 (筑波大学・科学技術振興事業団) 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に 違反する動作 正常動作データに ない動作 レアパスの実行など
© Copyright 2024 ExpyDoc