九州工業大学 情報工学部 機械情報工学科 光来研究室 B4 西村謙一郎 IDSは攻撃者の侵入を検知するために用いられる ◦ 例:不正なプログラムが実行されていないかチェック ◦ 侵入を検知したら管理者に通知して対処 攻撃者 IDSが攻撃されると 正しく検知できなくなる IDS ◦ 例:IDSを停止 ◦ 例:不正なプログラムを検知 しないようにIDSを改ざん 検知 侵入 IDSと監視対象システムを別々の仮想マシン(VM)で 動かす手法が提案されている ◦ IDSは安全に監視対象システムを監視できる 攻撃者は監視対象VMに侵入してもIDSを攻撃できない ◦ IDS-VMは最小限のサービスのみ提供 攻撃者 侵入されにくくする IDS 検知 IDS-VM 監視対象VM オフロードして動くIDSを開発するのは負担が大きい ◦ IDSは監視対象VMとIDS-VMの両方のメモリにアクセスする 監視したいプロセス情報は監視対象VMのメモリにある 時刻情報はIDS-VMのメモリに保存される ◦ どちらへのアクセスかを一つ一つ判別する必要がある 大規模なIDSではメモリにアクセスする箇所は膨大 IDS time->tv_sec メモリ 時刻情報 IDS-VM task->pid; アクセス メモリ プロセス情報 監視対象VM 監視対象VMのメモリにアクセスする箇所すべてにつ いて、プログラムを書き換える必要がある ◦ IDS-VMから監視対象VMにアクセスするには様々な処理を 行う必要がある それらの処理を行う関数の呼び出しを追加 適切なキャストを追加 ◦ 書き換えミスが発生しやすく、正確なプログラミングを行う労 力が大きい オフロード前 sec = time->tv_sec; : pid = task->pid; オフロード後 sec = time->tv_sec; : pid = *(pid_t *)g(&task->pid); アスペクト指向プログラミング(AOP)とは? ◦ プログラム全体にわたる煩雑な処理をアスペクトとして記述 ◦ プログラムとアスペクトを合成 アスペクトを用いることで以下を自動化 ◦ 監視対象 VM に対するメモリアクセスの判別 ◦ 監視対象VMのメモリにアクセスするようにプログラムを変換 IDS sec = time->tv_sec; : pid = task->pid; アスペクト 判別 変換 織り 込み アスペクト 処理系 生成されるオフロード用IDS sec = time->tv_sec; : pid = *(pid_t *) g(&task->pid); データの種類に基づいてメモリアクセスを判別 ◦ IDSがアクセスするデータの種類は監視対象VMとIDS-VMで 異なる OSカーネルが使う構造体(カーネル構造体) アプリケーションが使う構造体 ◦ アスペクトでカーネル構造体のメモリアクセスだけを抽出 構造体の名前を指定 IDS sec = time->tv_sec; : pid = task->pid; アスペクト pointcut kernel_data() = get(“%:task_struct”); カーネル構造体へのアクセスを監視対象VMへのメモ リにアクセスするプログラムに変換 ◦ アスペクトに変換先のプログラムを記述 アクセスするメモリのアドレスを取得 監視対象VMのメモリから対応するデータを読み出す IDS sec = time->tv_sec; : pid = task->pid; アスペクト advice kernel_data() :round(){ /*アドレスを取得 */ } /*取得したデータを返す*/ C言語向けアスペクト処理系のAspectC++を改良した ◦ メモリアクセスの抽出への対応 メモリアクセスの抽出を行うパッチ[Mugnusson’06]をあてた ◦ 配列への対応 構造体の中の配列へのアクセスを扱えるようにするために AspectC++を修正した ◦ マクロへの対応 コンパイル手順を工夫することでマクロを用いたIDSプログラムをコ ンパイルできるようにした AOPを用いたIDSの開発における開発者の負担と実 行性能を調べた プロセスリストを取得する簡単なIDSを開発 比較対象として pid = *(pid_t)g(&task->pid); ◦ 関数を用いた場合 ◦ マクロを用いた場合 キャストを省略 ◦ C++の演算子のオーバー ロードを用いた場合 ->演算子の役割を変更 CPU Intel Core i7 870 メモリ 4GB OS Linux 2.6.39.3 VMM Xen 4.1.1 IDSプログラムの変更箇所とプログラムサイズの増加 量を測定 ◦ AOPを用いた場合が変更箇所、プログラムサイズの増加量ともに最も少 なかった 関数 マクロ オーバー ロード AOP 変更箇所 9 8 6 1 サイズ増加量(バイト) 106 89 225 22 AOPを使用することで、実行時間がどのように変化す るか調査した ◦ 3~4ms程度増加していた ◦ 関数呼び出しが増加することに起因すると考えられる 25 20 実行時間 [ms] 21.0 17.4 17.6 17.7 15 10 5 0 関数 マクロ オーバーロード AOP AspectJ [Kiczales et al. '01] ◦ Java言語向けのアスペクト処理系 ◦ C言語で書かれたオフロードIDSには適用できない VM Shadow[飯田ら'11] ◦ 既存のIDSをそのままオフロードできる機構を提案 ◦ カーネル構造体にアクセスするIDSには対応できない VMST [Fu et al.'12] ◦ 実行時にメモリアクセスの追跡を行うことでメモリアクセスを判別 本研究ではコンパイル時に判別するので実行時のオーバヘッドが 小さい アスペクト指向プログラミング(AOP)を用いたIDSの オフロードIDSの開発支援を提案 ◦ アスペクトを用いて監視対象VMへのメモリアクセスを判別 し、プログラムを自動的に変換 ◦ オフロードのことを意識せずにIDSを開発することができる 今後の課題 ◦ より規模の大きいIDSの開発に適用する
© Copyright 2024 ExpyDoc