Outspect: 仮想計算機のための 統合メモリフォレンジックツール AVTokyo, 31-10/2009 グエン アン クイン, 須崎有康, 安藤類央 1 Who am I? グエンアン クイン 独立行政法人 産業技術総合研究所 セキュリティ センター 特別研究員 (AIST, RCIS) Vnsecurity.netのメンバー 興味: OS, 仮想化, 高信頼コンピューティング, IDS, マルウェア, デジタルフォレンジック, ... 2 アジェンダ ライブメモリフォレンジックスの問題点 仮想計算のライブメモリフォレンジック (VM) → Outspect Outspect アーキテクチャ/デザイン/実装 フォーカスはWindows (ゲストVMとして) Outspectを使ったマルウェア検出のデモ おわりに 3 ライブメモリフォレンジックの問題点 4 デジタルフォレンジックとインシデントレスポンス 多くのディフェンスレイヤがあるのにいまだに多く のシステムがハックされている! この事実を受け入れて問題があった時にインシデント レスポンスを取得する準備が必要 デジタルフォレンジック: 侵入検知できるようにする 可能なら障害が起きたシステムを修復/リカバーする 5 メモリフォレンジック 最新のマルウェアはメモリにのみ感染。ディス クに書き込むことはない。 マルウェアスキャナーから逃れる効率的な方法 オフラインフォレンジック オンラインフォレンジック 6 ライブメモリフォレンジックツール 動いているシステムを検査するツール 動いているメモリのキャプチャー(オフライン検査) 動いているメモリの解析 システムオブジェクトを取り出し、何が起きているか を理解する 侵入の証拠を見つける 7 メモリフォレンジックの問題点 メモリ内の証拠を消してしまう メモリの一貫性に関する問題 キャプチャーしたデータが既存のマルウェアに 改ざんされてしまう カーネルマルウェア 8 ドリーム ア ドリーム ... 完全なフォレンジック/インシデントレスポンスツール? メモリの証拠を消さないこと メモリの一貫性に関する問題を起こさないこと マルウェアによって破壊されないこと(あるいは破壊されに くいこと) OSレベルでマルウェアが走っているならば。 9 Outspect: 仮想計算機のための ライブメモリツールセット 10 仮想計算機コンセプト 複数の仮想システムが物理マシンで同時 に実行すること。 複数のOSがサポートされること Windows, Linux, BSD, MacOSX, ... 11 アプローチ 保護されているVMの外側からフォレンジックお よびインシデントレスポンストールが付加できる こと 外部から処理を実行するためにVMメモリにアク セスできること 情報を検索するためのメモリスキャン マルウェアの無効化&システムリカバリのた めにメモリを操作(つまり書込み)できること 12 仮想システムの保護 保護VM内でフォレンジック/インシデントレスポンスツー ルを実行させる VMインターフェースのお陰で保護VMにアクセスできる 今回はWindows ゲスト VM にフォーカスする 13 A dream comes true! すべての要求以上のことを満たしている 証拠を消さないこと メモリの一貫性に関する問題を起こさないこと 改ざんされないこと、またはマルウェアを無効にすること 検査前にVMを停止可能 メモリスナップショットとして使えるが本当のVMメモリではない デザインによって保証される OSレベルでマルウェアが実行しても正しい情報が入手 できる マルウェアには不可視 効率的に害府からマルウェアを無効化 14 チャレンジ 保護システムの内部コンテキストを理解するた めに実メモリの解析 (1) 仮想メモリを理解すること Xenでは物理メモリのみのアクセスしかできない (2) OSセマンテックオブジェクトを検索すること ターゲットOS内部の十分な理解が要求される 15 多重レイヤフレームワーク アーキテクチャ 仮想メモリを理解すること AnyDoor フレームワーク OSセマンテックオブジェクトを検索すること EaglEye フレームワーク 16 Outspect 完全アーキテクチャ 17 AnyDoor アーキテクチャ 18 AnyDoor フレームワーク 保護システムの物理メモリにアクセスできる OS 非依存 ターゲット非依存 Xen, KVM, QEMU sをサポート VMWare のサポートはVMSafe API に利用可能に依存 仮想メモリにアクセスできることを提供する メモリ管理ユニットの動作を再現 (MMU) ソフトウエアベース MMU すべてのメモリモードを理解する必要あり (legacy/2MB pages/PAE,...) 保護システムのレジスタアクセス可能 19 AnyDoor APIサンプル /* <anydoor/anydoor.h> */ /* Read data from memory of a process running inside a target. */ int anydoor_read_user(anydoor_t h, unsigned long pgd, unsigned long vaddr, void *buf, unsigned int size); /* Write data into memory of a process running inside a target. */ int anydoor_write_user(anydoor_t h, unsigned long pgd, unsigned long addr, void *buf, unsigned int size); /* Read data from a target's physical memory. */ int anydoor_read_pa(anydoor_t h, unsigned long paddr, void *buf, unsigned int size); /* Write data into a target's physical memory. */ int anydoor_write_pa(anydoor_t h, unsigned long paddr, void *buf, unsigned int size); 20 EaglEye アーキテクチャ 21 EaglEye フレームワーク 保護システムの仮想/物理メモリにアクセスするために AnyDoorで提供されるサービスを利用する。 OSオブジェクトの検索 重要なオブジェクトにフォーカスを当てる。特にマルウェ アに悪用されるものや存在を隠すために使われるもの ネットワークポート, コネクション プロセス カーネルモジュール .... 22 Eagleye OSオブジェクトの特定 カーネルモジュール プロセス/スレッド システムハンドラ オープンファイル レジストリ DLL ネットワークコネクション/ポート ドライバ, シンボリックリンク, ... 23 EaglEye: オブジェクト検索 各種類のオブジェクトの API を分離 ゲストVMで誤用されたものや改ざんされたもの は困難 オブジェクトリストの最初のオブジェクトを取得する 通常オブジェクトリストの先頭にある あるいは、プールメモリをスキャン パターンマッチテクニックを使う 次のオブジェクトを取得 終了するまで一つづつ。 24 EaglEye APIサンプル (1) /* <eagleye/eagleye.h> */ /* @task: output value, pointed the the kernel memory keep task info */ int ee_get_task_first(ee_t h, unsigned long *task); /* @task: output value, pointed the the kernel memory keep task info */ int ee_get_task_next(ee_t h, unsigned long *task); /* get the pointer to the process struct, given the process's pid. int ee_get_task_pid(ee_t h, unsigned long pid, unsigned long *task); /* get the first open dll file of a task with a given process id. * on return, dll points to the userspace memory that keeps dll info */ int ee_get_task_dll_first(ee_t h, unsigned long pid, unsigned long *dll); /* get the next open dll file of a task with a given process id. int ee_get_task_dll_next(ee_t h, unsigned long *dll); 25 Outspect アーキテクチャ 26 Outspect ツールセット 情報収集および取得のための様々なコマンドラインツール 自動的な情報収集をするスクリプト用に用意されている それらをすべて使えるシェル: oshell 同一シンタクッスク, 同一動作 シェルと個々のコマンドで利用可能な同一コードを利用する 利用しやすさ システムシェル, システムコマンド 他のコマンドに出力をリダイレクトする。あるいはシステ ムコマンドにpipeで送る スピードのために最適化 よく利用されるデータをキャッシュ 27 Outspectツールセット (2) マルウェアの存在を証明する情報を収集 pe: PE ファイル解析 view: 16進/文字列フォーマットでメモリを見る dump: メモリダンプ(物理 or プロセス or カーネル) write: メモリへの書込み search: 検索 (パターンマッチ, regex, ...) ps/pstree: プロセス dlls: DLL, registry: レジストリ, files: オープンファイル, vad: VAD kmod: カーネルモジュール address: メモリアドレスの属性 connection: オープンネットワークコネクション, socket: オープンソケット disasm: メモリ領域の逆アッセンブル register: すべてのレジスタの表示 28 29 Metasploit 30 Metasploit ペイロード 3 種類のペイロード 新しいプロセスの挿入 ダイナミックリンクライブラリ (DLL)の挿入 DLL 2 (Reflective Meterpreter)の挿入 31 仮想アドレスディスクリプタ (VAD) Windows VAD内にプロセスメモリを構築する メモリチャンクのセット 木構造に類似 通常はアップデート チャンク属性 Start - End address Read / Write / Execute .... 32 類似研究 Volatility 素晴らしいオープンソースメモリフォレンジックツール/フ レームワーク Pythonで記述 forensic 志向 メモリダンプファイルのみサポート Windows kernel internalsで提供されているもの 数々の解析によるWindows OS kernelsに対する素晴ら しい洞察に感謝 33 謝辞 経済産業省 新世代情報セキュリティ研究開発 事業に感謝します 34 おわりに フォレンジックとインシデントレスポンスを保護 されたVMに加えることで多くの利点がある 適用がゼロコスト メモリ内の海老でンスを消すことがない メモリ一貫性の問題を起こさない VM内のマルウェアが改ざんされることがない マルウェアには不可視 35 Outspect: 仮想計算機のための 統合メモリフォレンジックツール Q&A グエンアン クイン aquynh @ gmail.com 36
© Copyright 2024 ExpyDoc