全体ミーティング 6月6日 島本 大輔(M2) 2006年6月6日(火).

Slides:



Advertisements
Similar presentations
シーケンス図の生成のための実行履歴圧縮手法
Advertisements

ファイルキャッシュを考慮したディスク監視のオフロード
コンピュータプラクティス I 再現性 水野嘉明
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
クラウドにおける ネストした仮想化を用いた 安全な帯域外リモート管理
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
通信処理のカーネル内競合を 検出するアスペクト指向 カーネルレベルロガー
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
多数の遊休PC上での 分散ゲーム木探索 導入 ゲーム木探索 ⇒遊休PCを利用して高速化 例)コンピュータ将棋における次手の計算
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
XenによるゲストOSの解析に 基づくパケットフィルタリング
CC/7700,CC32を用いた データ収集システム 筑波大学 木村 博美 小松原 哲郎 (c)2007 木村博美 筑波大学.
Windowsの内部を知る
ネストした仮想化を用いた VMの安全な帯域外リモート管理
Windowsの内部を知る
アスペクト指向プログラミングを用いたIDSオフロード
進捗 Javaバイトコード変換による 細粒度CPU資源管理
型付きアセンブリ言語を用いた安全なカーネル拡張
SpectreとMeltdown ITソリューション塾・第28期 2018年5月30日 株式会社アプライド・マーケティング 大越 章司
卒業論文に向けて(5) 学部4年生 島本 大輔 2004年12月14日.
RT-Linuxを用いた 多入力パルス波高分析システムの開発
Xenによる ゲストOSの監視に基づく パケットフィルタリング
仮想計算機を用いて OSを介さずに行う安全な ファイルアクセス制御
セキュリティ(6) 05A2013 大川内 斉.
セキュリティ(3) 05A2013 大川内 斉.
分散IDSの実行環境の分離 による安全性の向上
リモートホストの異常を検知するための GPUとの直接通信機構
セキュリティ 05A2013 大川内 斉.
実行時情報に基づく OSカーネルのコンフィグ最小化
オペレーティングシステム イントロダクション
限られた保存領域を使用する Javaプログラムの実行トレース記録手法の 提案と評価
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コンパイラ資料 実行時環境.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
アスペクト指向言語のための 独立性の高いパッケージシステム
Intel SGXを用いた仮想マシンの 安全な監視機構
軽量な仮想マシンを用いたIoT機器の安全な監視
オペレーティングシステムJ/K 2004年11月15日2時限目
信頼できないクラウドにおける仮想化システムの監視機構
ソフトウェア保守のための コードクローン情報検索ツール
仮想環境を用いた 侵入検知システムの安全な構成法
Linux の世界に 触れてみよう! 情報実験 第 3 回 (2005/10/21)
Cell/B.E.のSPE Isolationモードを用いた監視システム
コーディングパターンの あいまい検索の提案と実装
IDSとFirewallの連携によるネットワーク構築
実装について 前田俊行.
同期処理のモジュール化を 可能にする アスペクト指向言語
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
Cell/B.E. のSPE上で動作する 安全なOS監視システム
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
VMリダイレクト攻撃を防ぐための 安全なリモート管理機構
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
コンピュータアーキテクチャ 第 4 回.
ネットワーク・プログラミング デバイスドライバと環境変数.
蓄積されたオブジェクトの動作履歴を用いた 実行履歴削減手法の提案
全体発表 10/18 島本 大輔 2005年10月18日(火).
卒業論文に向けて(3) 学部4年生 島本 大輔 2004年11月11日.
強制パススルー機構を用いた VMの安全な帯域外リモート管理
SMP/マルチコアに対応した 型付きアセンブリ言語
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
L4-Linux のメモリ管理における問題点とその解決策
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
強制パススルー機構を用いた VMの安全な帯域外リモート管理
Presentation transcript:

全体ミーティング 6月6日 島本 大輔(M2) 2006年6月6日(火)

本日の発表内容 自分の研究内容と進捗 System Service 監視による Windows 用 異常検知システム

現在のセキュリティ対策 ウィルス対策、スパイウェア対策 ファイアウォール 侵入検知システム パターン定義ファイルとファイルをパターン マッチ ポートやパケットの種類などを予め設定する 侵入検知システム ルールを予め設定する (TODO:最近のセキュリティ対策ソフトについて調査 既に存在している攻撃への対策 新種の攻撃には弱い

別のアプローチ プログラムの振る舞い(ビヘイビア)を 監視する手法 主に UNIX 系 OS で研究が発展 システムコールを対象として監視した Forrest らの異常検知システムが有名

Forrest らのシステムの動作図 異常検知システム プログラムの システムコールフロー : close 学習データ open read write 学習データ 学習データにあるか チェック 部分列を取り出す close open read write True 異常ではないので、 そのまま制御を戻す

Windows での研究 ビヘイビアを監視する研究は少数 ptrace のような機構が存在しない 内部に関するドキュメントが少ない 内部の改変が難しい UNIX 系 OS における研究を Windows にも適用できないか

ビヘイビアを利用した Windows 版異常検知システムを 開発する 目標 ビヘイビアを利用した Windows 版異常検知システムを 開発する

研究内容 異常検知システムを Windows 上で開発 プログラムのビヘイビアを詳しく調査 UNIX 系 OS との比較 Forrest らと同様にシステムコールの N-gram を利用 プログラムのビヘイビアを詳しく調査 実用的なプログラムを対象に調査 UNIX 系 OS との比較

System Service Windowsの根本的な機能を提供 数が非常に多い Windows 版システムコール ファイル、レジストリ、プロセス、スレッド タイマー、mutex、GDI 数が非常に多い 286個(Windows 2000) 991個( 〃 XP SP1) ※Linux のシステムコールは 300 ぐらい

NtReadFile の例 Win32 プログラム POSIX プログラム OS/2 プログラム Win32 サブシステム POSIX ユーザ モード NtReadFile カーネル モード Windows Kernel

System Service の動作図 ユーザモード プログラム System Service の 処理 SSDT ユーザ モード カーネル モード SSDT NtReadFile XXXXXX : アドレスを引く System Service の 処理

システムの特徴 デバイスドライバと GUI の2つからなる すべての ユーザモード Windows プログラムを監視可能 デバイスドライバ System Service の監視 GUI  デバイスドライバの制御とログの保存 すべての ユーザモード Windows プログラムを監視可能 カーネルモードのプログラムは対象外

システムの動作図 我々のシステム GUI ユーザ プログラム GUI デバイス ドライバ 監視 コード ユーザ モード GUI ユーザ プログラム GUI 制御や ログのやりとり カーネル モード デバイス ドライバ 監視 コード System Service の 処理

System Service の監視方法 2通りの手法が存在 SSDT Patching Interrupt Hooking

SSDT Patching System Service のアドレステーブル (System Service Descriptor Table)を書き換え System call table の書き換えと同様 監視する System Service を個別に 指定可能 レジストリの監視や rootkit などにも 使われている System call tableの利用方法を調査

X SSDT Patching の動作図 ユーザモード プログラム System Service の 処理 ユーザ モード ユーザモード プログラム SSDT Patching アドレスを書換 監視コード SSDT NtReadFile XXXXXX : アドレスを引く System Service の 処理 X カーネル モード

Interrupt Interception Kernel mode へ遷移する瞬間 (Interrupt)に intercept Windows 2000以前ではソフトウェア 割り込み(int 2e) Windows XP以降は sysenter 命令 Kernel 2.6で合ってる?

System Service の動作図 ユーザモード プログラム System Service の 処理 ユーザ モード ユーザモード プログラム Interrupt Interception jump 先を変更 監視コード SSDT NtReadFile XXXXXX : アドレスを引く アドレスを引く System Service の 処理 カーネル モード

System Service の監視 Interrupt Interception を採用 Win XP なので、sysenter の jump 先を 変更 メリット コード量、メモリ使用量を抑えられる 実装が容易 1箇所で監視可能

System Service Interception アドレスを引く NtOpenFile XXXXXX NtDeleteFile : SSDT Patching アドレスを書換 Kernel Mode Interrupt Interception 遷移した後のjump先を変更 User Mode User Mode アプリケーション

実装内容 デバイスドライバ部分 GUI プログラム Interception コードの挿入・取り外しを担当 Kernel mode で動作 デバイスドライバの操作を担当 User mode で動作

デバイスドライバ部分 基本的に C 言語で記述 監視コードもデバイスドライバの中に存在 sysenter の jump 先の変更は インラインアセンブリ 監視コードもデバイスドライバの中に存在 Kernel内なので、コードのアドレスはどこでも 同じ

sysenter の jump 先を 変更するコード void Intercept() { __asm { push eax push ecx push edx mov ecx, 176h rdmsr mov old_eip_h, edx mov old_eip_l, eax cli xor edx, edx mov eax, TakeCallLog wrmsr pop edx pop ecx pop eax sti } return;

GUI プログラム デバイスドライバの操作 デバイスドライバとの通信 挿入、削除 ログをデバイスドライバから読み出し、出力 Intercept する System Service の変更を デバイスドライバに伝達

実験 オーバヘッド 異常検知手法の有効性 N-gram と Branching Factor False Positive Linux との比較 実験環境 CPU:Intel PentiumM 1.3 GHz メモリ:512MB OS:Windows XP SP1

実験1:オーバヘッド マイクロベンチマーク 実用的な例 NtTestAlert() を1億回呼び出し、その時間を計測 Explorer.exe にて、ファイルの検索に必要な 時間を計測

実験1:結果 マイクロベンチマーク Explorer.exe による検索実験 要した時間 本システムなし 60.9秒 本システム動作時 69.4秒 Explorer.exe による検索実験 1回目 2回目 3回目 4回目 本システムなし 1分27秒 13秒 本システム動作時 1分39秒 19秒 14秒

実験1の考察 オーバヘッドが約13%となっており、より複雑な検知手法を適用する余裕がある スタックやメモリの状態、System Service の引数を利用する 有限オートマトンを利用する、など

実験2:N-gram と Branching Factor 実用的なプログラムで実験 Firefox 1.5 OpenOffice.org Impress 上記プログラムを1時間ほど実行し、ログ を収集、オフラインで解析 プログラムの生成する N-gram の要素数を カウント 上と同じデータより平均 branching Factor を求めた

N-gram ある連続した値の、長さ N の 部分列集合 例:システムコール列 {open, read, read, write, close} の長さ(N=)3 の 3-gram は {open, read, read} {read, read, write} {read, write, close} の3種類になる。

Branching Factor = 分岐数 ある列の一定の長さの部分列に対して、 次に発生する可能性のある値の種類数 例: A, B, C, A, B, D, A, B, C の 部分列 A, B の branching factor は 2(C と D)。 これが、N=3 のときの branching factor。 一般的には、列の集合からすべての部分列に 関して、この値を求め、その平均を利用する

実験2:N-gram と Branching Factor Linux において同様の実験を実施 Strace を使用して、システムコールの記録を取得 Windows と同様に N-gram の要素数と 平均 branching factor を求めた 実験環境 CPU: AMD Athlon 1.2 GHz メモリ:256 MB OS:Debian Linux 3.1(カーネル 2.4.27)

実験2の結果 Firefox(Windows 版)の例

実験2 N-gram の結果 Firefox Impress Windows Linux

実験2 Branching Factor の結果 Windows N 2 3 4 5 6 7 Firefox 10.25 3.10 2.13 1.79 1.59 1.45 Impress 10.86 2.93 1.92 1.57 1.43 1.34 Linux N 2 3 4 5 6 7 Firefox 7.81 2.92 2.13 1.84 1.65 1.51 Impress 8.40 3.07 2.00 1.66 1.41

実験2 の考察 N-gram の要素数は時間とともに増え続ける 従来の研究では収束する結果が出ていた 単純に N-gram の要素数を利用するのは GUI の ような複雑なプログラムでは不十分 Branching factor は、どちらの OS も N=3 において、3 前後の値 少ないメモリ使用量で異常検知ができる可能性 OS に依存しない性質の可能性

実験3:False Positive 実験方法 実験2 で得たデータを学習データとする 新たに、それぞれのプログラムを実行し、再度収集 新しいデータを学習データと比較 学習データに含まれないものが false positive となる

False Positive 誤って異常と判定された正常な動作やデータ 少ないほど検知の精度が高いことになる

実験データ内の False Positive の割合 実験3 結果 実験データ内の False Positive の割合 N 1 2 3 4 5 6 7 Firefox 0.40% 4.99% 11.20% 17.45% 23.36% 28.68% 33.31% Impress 18.57% 33.89% 37.59% 40.26% 41.97% 43.06% 44.06% Nが小さい場合で既に false positive の割合が大きい 学習できていない N-gram の要素が多数存在

研究のまとめ Windows 向け異常検知システムを開発した 性能や有効性を測る実験を行った 異なる OS 間における比較した プログラムの振る舞い(System Service)を 利用した異常検知手法を実装 性能や有効性を測る実験を行った より複雑な手法を適用できる可能性 異なる OS 間における比較した OS に依存しない検出手法の可能性

今後の予定 他のプログラムで実験(特にサーバなど) 他のアルゴリズムの実装 PostgreSQL、Apache、VNC など System Service の引数を利用する 有限オートマトンやデータマイニングを用いる