メモリフォレンジック - infocon.org

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