アスペクト指向プログラミングを用いたIDSオフロード

Slides:



Advertisements
Similar presentations
ファイルキャッシュを考慮したディスク監視のオフロード
Advertisements

セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
クラウド上の仮想マシンの安全なリモート監視機構
クラウドにおける ネストした仮想化を用いた 安全な帯域外リモート管理
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
全体ミーティング (4/25) 村田雅之.
中村孝介(九州工業大学) 光来健一(九州工業大学/JST CREST)
KVMにおけるIDSオフロードのための仮想マシン監視機構
通信処理のカーネル内競合を 検出するアスペクト指向 カーネルレベルロガー
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
メモリ暗号化による Android端末の盗難対策
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
XenによるゲストOSの解析に 基づくパケットフィルタリング
ファイルシステムキャッシュを 考慮したIDSオフロード
ネストした仮想化を用いた VMの安全な帯域外リモート管理
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
帯域外リモート管理の継続を 実現可能なVMマイグレーション手法
VMマイグレーションを可能にするIDSオフロード機構
クラウドの内部攻撃者に対する安全なリモートVM監視機構
アスペクト指向プログラミングと Dependency Injection の融合
サスペンドした仮想マシンの オフラインアップデート
Flyingware : バイトコード変換による 安全なエージェントの実行
型付きアセンブリ言語を用いた安全なカーネル拡張
踏み台攻撃だけを抑制できる VMMレベル・パケットフィルタ
仮想マシンを用いて既存IDSを オフロードするための実行環境
KVMにおける仮想マシンの 内部監視機構の実装と性能評価
仮想マシン間にまたがる プロセススケジューリング
Xenによる ゲストOSの監視に基づく パケットフィルタリング
暗黙的に型付けされる構造体の Java言語への導入
セキュリティ機構のオフロードを考慮した 仮想マシンのスケジューリング
分散IDSの実行環境の分離 による安全性の向上
仮想マシンモニタによる きめ細かい パケットフィルタリング
VMのメモリ暗号化によるクラウド管理者への情報漏洩の防止
VMのメモリ暗号化による クラウド管理者への情報漏洩の防止
VM専用仮想メモリとの連携による VMマイグレーションの高速化
リモートホストの異常を検知するための GPUとの直接通信機構
実行時情報に基づく OSカーネルのコンフィグ最小化
仮想メモリを用いた VMマイグレーションの高速化
複数ホストに分割されたメモリを用いる仮想マシンの監視機構
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
IaaS環境におけるVMのメモリ暗号化による情報漏洩の防止
クラウドにおけるVMリダイレクト攻撃を防ぐためのリモート管理機構
クラウドにおけるVM内コンテナを用いた 自動障害復旧システムの開発
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
仮想マシンを用いた 既存IDSのオフロード
Intel SGXを用いた仮想マシンの 安全な監視機構
軽量な仮想マシンを用いたIoT機器の安全な監視
複数ホストにまたがって動作する仮想マシンの障害対策
セキュリティ機構のオフロード時の 性能分離
VMMのソフトウェア若化を考慮した クラスタ性能の比較
信頼できないクラウドにおける仮想化システムの監視機構
仮想環境を用いた 侵入検知システムの安全な構成法
Cell/B.E.のSPE Isolationモードを用いた監視システム
仮想マシンの監視を継続可能なマイグレーション機構
仮想マシンと物理マシンを一元管理するための仮想AMT
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
Cell/B.E. のSPE上で動作する 安全なOS監視システム
VMリダイレクト攻撃を防ぐための 安全なリモート管理機構
強制パススルー機構を用いた VMの安全な帯域外リモート管理
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
複数ホストにまたがるVMの メモリ使用状況に着目した高速化
Virtual Machine Introspectionを可能にするVMCryptの拡張 田所秀和 光来健一 (九州工業大学)
強制パススルー機構を用いた VMの安全な帯域外リモート管理
管理VMへの キーボード入力情報漏洩の防止
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

アスペクト指向プログラミングを用いたIDSオフロード 九州工業大学 情報工学部 機械情報工学科 光来研究室 B4 西村謙一郎

侵入検知システム(IDS) IDSは攻撃者の侵入を検知するために用いられる IDSが攻撃されると 正しく検知できなくなる 例:不正なプログラムが実行されていないかチェック 侵入を検知したら管理者に通知して対処 IDSが攻撃されると                        正しく検知できなくなる 例:IDSを停止 例:不正なプログラムを検知                        しないようにIDSを改ざん 攻撃者 IDS 検知 IDSは攻撃者の~ 例 しかし近年まずIDSを攻撃して~ 侵入

IDSのオフロード IDSと監視対象システムを別々の仮想マシン(VM)で 動かす手法が提案されている 攻撃者は監視対象VMに侵入してもIDSを攻撃できない IDS-VMは最小限のサービスのみ提供 侵入されにくくする 攻撃者 IDS そこでIDSをオフロードして 検知 IDS-VM 監視対象VM

メモリアクセスの判別の負担 オフロードして動くIDSを開発するのは負担が大きい どちらへのアクセスかを一つ一つ判別する必要がある IDSは監視対象VMとIDS-VMの両方のメモリにアクセスする 監視したいプロセス情報は監視対象VMのメモリにある 時刻情報はIDS-VMのメモリに保存される どちらへのアクセスかを一つ一つ判別する必要がある 大規模なIDSではメモリにアクセスする箇所は膨大 IDS task->pid; しかし~ time->tv_sec アクセス メモリ メモリ 時刻情報 プロセス情報 IDS-VM 監視対象VM

プログラムを書き換える負担 監視対象VMのメモリにアクセスする箇所すべてにつ いて、プログラムを書き換える必要がある IDS-VMから監視対象VMにアクセスするには様々な処理を 行う必要がある それらの処理を行う関数の呼び出しを追加 適切なキャストを追加 書き換えミスが発生しやすく、正確なプログラミングを行う労 力が大きい オフロード前 sec = time->tv_sec; : pid = task->pid; オフロード後 sec = time->tv_sec; : pid = *(pid_t *)g(&task->pid);    

AOPを用いたIDSの開発支援 アスペクト指向プログラミング(AOP)とは? アスペクトを用いることで以下を自動化 プログラム全体にわたる煩雑な処理をアスペクトとして記述 プログラムとアスペクトを合成 アスペクトを用いることで以下を自動化 監視対象 VM に対するメモリアクセスの判別 監視対象VMのメモリにアクセスするようにプログラムを変換 sec = time->tv_sec; : pid = task->pid; IDS 織り 込み sec = time->tv_sec; : pid = *(pid_t *) g(&task->pid);     生成されるオフロード用IDS アスペクト 処理系 アスペクト 判別 変換

メモリアクセスの判別 データの種類に基づいてメモリアクセスを判別 IDSがアクセスするデータの種類は監視対象VMとIDS-VMで 異なる OSカーネルが使う構造体(カーネル構造体) アプリケーションが使う構造体 アスペクトでカーネル構造体のメモリアクセスだけを抽出 構造体の名前を指定 getポイントカットについてどのような作業を行うかきちんと話せるように sec = time->tv_sec; : pid = task->pid; IDS pointcut kernel_data() = get(“%:task_struct”); アスペクト

メモリアクセスの自動変換 カーネル構造体へのアクセスを監視対象VMへのメモ リにアクセスするプログラムに変換 アスペクトに変換先のプログラムを記述 アクセスするメモリのアドレスを取得 監視対象VMのメモリから対応するデータを読み出す sec = time->tv_sec; : pid = task->pid; IDS advice kernel_data() :round(){ /*アドレスを取得 */ /*取得したデータを返す*/ } アスペクト tjp->source() はアクセスしようとしたメンバのアドレスを返す。次に、対象の構造体メンバの値を読み込み、そのメモリをアンマップする。読み込んだ値はtjp->result() によって返される返り値のためのメモリ領域に格納する

アスペクト処理系の開発 C言語向けアスペクト処理系のAspectC++を改良した メモリアクセスの抽出への対応 配列への対応 マクロへの対応 メモリアクセスの抽出を行うパッチ[Mugnusson’06]をあてた 配列への対応 構造体の中の配列へのアクセスを扱えるようにするために AspectC++を修正した マクロへの対応 コンパイル手順を工夫することでマクロを用いたIDSプログラムをコ ンパイルできるようにした AspectC++はデフォルトではgetポイントカットをサポートしていなかったのでパッチを当ててgetポイントカットを使用可能とした

実験 AOPを用いたIDSの開発における開発者の負担と実 行性能を調べた 比較対象として プロセスリストを取得する簡単なIDSを開発 関数 pid = (pid_t *)(task->pid); マクロ(キャストの必要なし) pid = G(task->pid); オーバーロード(構造体の変更が必要) pid = (*task)->pid; 実験 AOPを用いたIDSの開発における開発者の負担と実 行性能を調べた プロセスリストを取得する簡単なIDSを開発 比較対象として 関数を用いた場合 マクロを用いた場合 キャストを省略 C++の演算子のオーバー ロードを用いた場合 ->演算子の役割を変更 pid = *(pid_t)g(&task->pid); マクロは対象VMにアクセスする処理にGをつける 小文字のgでアドレス変換、メモリマップを行う オーバーロードはtask_structにアクセスした際 gでアドレス変換とメモリマップ どちらも開発者が~ CPU Intel Core i7 870 メモリ 4GB OS Linux 2.6.39.3 VMM Xen 4.1.1

実験1:プログラムサイズの比較 IDSプログラムの変更箇所とプログラムサイズの増加 量を測定 AOPを用いた場合が変更箇所、プログラムサイズの増加量ともに最も少 なかった 関数 マクロ オーバーロード AOP 変更箇所 9 8 6 1 サイズ増加量(バイト) 106 89 225 22

実験2:実行時間の測定 AOPを使用することで、実行時間がどのように変化す るか調査した 3~4ms程度増加していた 関数呼び出しが増加することに起因すると考えられる 21.0 17.4 17.7 17.6

関連研究 AspectJ [Kiczales et al. '01] VM Shadow[飯田ら'11] Java言語向けのアスペクト処理系 C言語で書かれたオフロードIDSには適用できない VM Shadow[飯田ら'11] 既存のIDSをそのままオフロードできる機構を提案 カーネル構造体にアクセスするIDSには対応できない VMST [Fu et al.'12] 実行時にメモリアクセスの追跡を行うことでメモリアクセスを判別 本研究ではコンパイル時に判別するので実行時のオーバヘッドが 小さい

まとめ アスペクト指向プログラミング(AOP)を用いたIDSの オフロードIDSの開発支援を提案 今後の課題 アスペクトを用いて監視対象VMへのメモリアクセスを判別し、 プログラムを自動的に変換 オフロードのことを意識せずにIDSを開発することができる 今後の課題 より規模の大きいIDSの開発に適用する