2012SC

CS

仮想環境に依存しない動的解析システム”egg”の設計と実装
Fourteenforty Research Institute, Inc.
http //
http://www.fourteenforty.jp
fo rteenfort jp

株式会社フォティーンフォティ技術研究所

Fourteenforty Research Institute, Inc.

アジェンダ

2012

• 背景と問題• “egg”とは– デモ：基本的な機能– デモ：汚染追跡
デ 汚染追跡SC• “egg”の制約と今後
• まとめ

CS

• 実装 (Ring-0における汚染追跡)

2 / 33

Fourteenforty Research Institute, Inc.

背景：増え続ける新種のマルウェア

2003 yrCS

2007年時点で80％のマルウェアがパックされている

2005 yr

SC

100
90
80
70
60
50
4030
20
100
2001 yr2012

パックされたマルウェアの割合

2007 yr• それぞれのマルウェアを手動で解析することは不可能• 自動解析が重要度が増している.
Source:2001 200 : McAfee
2001-2005
M Af Sage
Svol.1l 1 issuei1
2007 : Panda Research (http://research.pandasecurity.com/malwareformation-statistics/)

3 / 33

Fourteenforty Research Institute, Inc.

問題：従来の動的解析システムの欠点

SCCS

2012

• より詳細な解析に進める際に有用な情報が少ない• カーネルモードコードを解析できない• プロセスを超えて拡散するマルウェアの解析が困難

4 / 33

Fourteenforty Research Institute, Inc.

問題：先進的なシステム(仮想マシンを用いるもの)• 先進的なシステムでは先ほどの問題は解決されている

SC

CS

20
12– Anubis– EtherEh• これらはカーネルモードコードを命令単位で解析できる– BitBlaze and Renovo• これらは加えてプロセスを超えて拡散するマルウェアを「汚染追跡(Taint tracing)」と呼ばれる技法を使って解析できる• しかしながらこれらのシステムは、仮想マシン検知技術によってマルウェアから検知されてしまう

5 / 33

Fourteenforty Research Institute, Inc.

問題のまとめ従来シ
従来システム
ム

20
12

動的解析シ
動的解析システムの種類
ム 種類

有用な情報の取得

拡散するマルウェアの解析

不十分

良い不十分

良い不十分

良い

良い（影響を受けない）

不十分（影響を受ける）

CS

カーネルモードコードの解析

SC

仮想マシン検知技術への耐性（影響のなさ）

先進的システム
先進的シ
ム(仮想マシンを用いるもの)• これらの問題を解決するために”egg”を開発

6 / 33

Fourteenforty Research Institute, Inc.

“egg”とは？

20
12• “egg”はWindowsデバイスドライバーとして実装された動的解析
システム.

SC

CS

• “egg”は以下の特長を持つ：
1. より詳細な情報を得ることが可能.
2. カーネルモードコードの解析が可能.
3. 拡散するマルウェアを自動的に解析可能• もちろん、仮想マシン検知技術の影響を受けない• さらに多くのアンチデバッグ技術によって検知されない
7 / 33

Fourteenforty Research Institute, Inc.

”egg” はどのような情報を収集するか

20
12

1. API 引数（IN, OUT, INOUT）および戻り値

SC

CS

BOOL WINAPI ReadFile(__in
HANDLE hFile,__out
LPVOID lpBuffer,__in
DWORD nNumberOfBytesToRead,__out_opt
out opt
LPDWORD lpNumberOfBytesRead,
lpNumberOfBytesRead__inout_opt LPOVERLAPPED lpOverlapped);

8 / 33

Fourteenforty Research Institute, Inc.

”egg” はどのような情報を収集するか

20
12

1. API 引数（IN, OUT, INOUT）および戻り値

SCCS

BOOL WINAPI ReadFile(__in
HANDLE hFile,__out
LPVOID lpBuffer,__in
DWORD nNumberOfBytesToRead,__out_opt
out opt
LPDWORD lpNumberOfBytesRead,
lpNumberOfBytesRead__inout_opt LPOVERLAPPED lpOverlapped);call to kernel32.dll!ReadFile(Arg 1 : 00000064 = File : ¥Device¥HarddiskVolume1¥WINDOWS¥(...) ,Arg 3 : 00000800(2048))

9 / 33

Fourteenforty Research Institute, Inc.

”egg” はどのような情報を収集するか

20
12

1. API 引数（IN, OUT, INOUT）および戻り値

SC

CS

BOOL WINAPI ReadFile(__in
HANDLE hFile,__out
LPVOID lpBuffer,__in
DWORD nNumberOfBytesToRead,__out_opt
out opt
LPDWORD lpNumberOfBytesRead,lpNumberOfBytesRead__inout_opt LPOVERLAPPED lpOverlapped);call to kernel32.dll!ReadFile(Arg 1 : 00000064 = File : ¥Device¥HarddiskVolume1¥WINDOWS¥(...) ,Arg 3 : 00000800(2048))
returned from kernel32.dll!ReadFile(Arg 2 : 0012F184 - 0012F983 is dumped as ¥(...)¥(...)ReadFile_Arg02.bin¥(...)¥(...)ReadFile Arg02.bin) => 00000001(1)10 / 33

Fourteenforty Research Institute, Inc.

”egg” はどのような情報を収集するか

分岐情報(with IDA Pro)

SCCS

20122. コールグラフ
3. 分岐情報

コールグラフ(made with Graphviz)

11 / 33

Fourteenforty Research Institute, Inc.

”egg” はどのような情報を収集するか

分岐情報(with IDA Pro)

SCCS

20
122. コールグラフ
3. 分岐情報

コールグラフ(made with Graphviz)

12 / 33

Fourteenforty Research Institute, Inc.

”egg” はどのような情報を収集するか

分岐情報(with IDA Pro)

SC

CS

20
12

2. コールグラフ
3. 分岐情報

コールグラフ(made with Graphviz)

13 / 33

Fourteenforty Research Institute, Inc.

”egg” はどのような情報を収集するか

分岐情報(with IDA Pro)

SCCS

20
12

2. コールグラフ
3. 分岐情報

コールグラフ(made with Graphviz)

14 / 33

Fourteenforty Research Institute, Inc.

デモ：基本的な機能

20
12• sample.exeの解析

SCCS• Sample.exe はもともとのbeepドライバ(beep.sys)を上書きする• その後beepサービスを再起動することで上書き後のドライバを• カーネルに読み込ませる• “egg”は sample.exe と、上書きされたドライバの両方を解析する.

15 / 33

Fourteenforty Research Institute, Inc.

詳細なコード解析の実装

20
12• X86のページ保護とトラップフラグを利用• →“Stealth Breakpoints”と呼ばれる技法

SCCS• 1命令実行されるごとに解析処理を動作させることができる• カーネルモードとユーザーモードを解析可能• ユーザーモードから透過的に動作する

Stealth Breakpoints
http://www.acsac.org/2005/abstracts/72.html

16 / 33

Fourteenforty Research Institute, Inc.

汚染追跡（Taint tracing）とは何か

何か不審な入力ソース

CS

20
12

• 不審な要素を追跡する技法• 不審な要素を「汚染」としてマークする.
• 「汚染」された要素を使用した要素も「汚染」とみなすことで、「汚染」を自動的に追跡していくSC

TaintedNEW
TaintedNOT
Tainted17 / 33

Fourteenforty Research Institute, Inc.

“egg”における汚染追跡の全体像

Taint
FileThread

3. 実行

2. メモリにマップ

SC

1. 指定

CS20
12

• egg は汚染追跡をユニークな方法で実装する• egg の場合、“要素”は、ファイル、仮想メモリ、スレッド4 ファイルへの4.
書込
Taint
File

Taint
MemoryTaint
MemoryTaint
Ti tThread

4. メモリへの書込

18 / 33

Fourteenforty Research Institute, Inc.

“egg”における汚染追跡の全体像

Taint
FileThread

3. 実行

2. メモリにマップ

SC

1. 指定

CS20
12

• egg は汚染追跡をユニークな方法で実装する• egg の場合、“要素”は、ファイル、仮想メモリ、スレッド4 ファイルへの4.
書込
Taint
File

Taint
MemoryTaint
MemoryTaintTi t
Thread4. メモリへの書込

19 / 33

Fourteenforty Research Institute, Inc.

20
12

Ring-0における汚染追跡の実装

Taint
FileThread

3. 実行

2. メモリにマップ

SC

1. 指定

CS

PsSetLoadImageNotifyRoutineを使用

4 ファイルへの
4.
書込
Taint
File

Taint
MemoryTaint
MemoryTaint
Ti t
Thread4. メモリへの書込

20 / 33

Fourteenforty Research Institute, Inc.

Taint
FileThread

3. 実行

2. メモリにマップ

SC

1. 指定

CS

ページ保護を使用(eXecute Disable bit)20
12

Ring-0における汚染追跡の実装

4 ファイルへの
4.
書込
Taint
File

Taint
MemoryTaint
MemoryTaint
Ti t
Thread4. メモリへの書込

21 / 33

Fourteenforty Research Institute, Inc.

20
12

Ring-0における汚染追跡の実装

Taint
FileThread

3. 実行

2. メモリにマップ

SC

1. Specify

CS

ファイルシステム フィルタドライバーを使用

4 ファイルへの
4.
書込
Taint
File

Taint
MemoryTaint
MemoryTaint
Ti t
Thread4. メモリへの書込

22 / 33

Fourteenforty Research Institute, Inc.

Taint
FileThread

3. 実行

2. メモリにマップ

SC

1. Specify

CS

ページ保護を使用(Write/Read bit)20
12

Ring-0における汚染追跡の実装

4 ファイルへの
4.
書込
Taint
File

Taint
MemoryTaint
MemoryTaint
Ti t
Thread4. メモリへの書込

23 / 33

Fourteenforty Research Institute, Inc.

Ring-0における汚染追跡の実装

CS

プロセッサ上で実行中

実行待ち

実行待ち

Thread(tainted)Thread(not tainted)

SCThread(not tainted)

プロセスメモリ

2012• スレッド安全性を確保するため、eggはWindowsカーネルのスレッドスイッチ関数(SwapContext)をフックする.
• これによりeggはスレッドスイッチの発生を知ることができる.
れド発生を知る とが きる

プロセスメモリはまだ変更されていない.
プロセスメモリはまだ変更されていない

24 / 33

Fourteenforty Research Institute, Inc.

Ring-0における汚染追跡の実装

CS

プロセッサ上で実行中

実行待ち

実行待ち

Thread(not tainted)

Thread(not tainted)

SC

Thread(tainted)

プロセスメモリ

2012• 汚染スレッドがアクティブになったとき、eggはすべてのプロセスメモリを読み取り専用に変更する

現在 プロセスメモリは読み取り専用
現在、プロセスメモリは読み取り専用もし汚染スレッドがどこかに書き込もうとしたら、プロセッサは例外を発生させる。
egg はこの例外を汚染イベントとしてキャッチする。

25 / 33

Fourteenforty Research Institute, Inc.

Ring-0における汚染追跡の実装

CS

プロセッサ上で実行中実行待ち

実行待ち

Thread(not tainted)

Thread(not tainted)

SCThread(not tainted)

プロセスメモリ

2012• 汚染スレッドがアクティブではなくなったとき、eggはすべてのプロセスメモリの保護属性を元に戻す

プロセスメモリの保護属性を元に戻す.
プロセスメモリの保護属性を元に戻す

26 / 33

Fourteenforty Research Institute, Inc.

プロセス間メモリ操作の追跡

CS

プロセッサ上で実行中

20
12• プロセス間メモリ操作を追跡するために、eggはプロセスメモリ空間の切り替え関数(KiSwapProcess)をフックする• これによりeggはプロセス間のメモリ操作を知ることができる
れプ操作を知る とが きる
Thread(tainted)

プロセスメモリ

explorer.exeSCmalware.exe

プロセスメモリCR3

読み取り専用

保護属性はまだ変更されていない

27 / 33

Fourteenforty Research Institute, Inc.

プロセス間メモリ操作の追跡

CS

プロセッサ上で実行中

20
12• 汚染スレッドが別のプロセスメモリで実行されたとき、
eggはそのプロセスメモリを読み取り専用に変更する

Thread(tainted)

プロセスメモリ

explorer.exe

SCmalware.exe

CR3

保護属性を元に戻す

プロセスメモリ

eggは他のプロセスメモリに対する操作（例：WriteProcessMemory）でも追跡することができる。

読み取り専用に変更

28 / 33

Fourteenforty Research Institute, Inc.

デモ：汚染追跡20
12• サンプルマルウェアはスレッドインジェクションを行う

SCCS• サンプルマルウェアは“injector.exe”
プウ“”• VirtualAllocEx、WriteProcessMemory、 CreateRemoteThreadを用いてを用いてnotepad.exeにスレッドをインジェクトする
dにスレ ドをインジ クトする
• インジェクトされたスレッドはAllocConsoleとWriteConsoleをル プの中で呼び出す
ループの中で呼び出す• eggはこのインジェクトされたスレッドも解析する

29 / 33

Fourteenforty Research Institute, Inc.

同レベル特権の問題• egg はカーネルモードの解析について制限を持つ

20
12– カーネルモードマルウェアからeggは可視であり、破壊可能

SC

CS• この制限は仮想マシン検知技術の影響を回避するためのトレードオフ30 / 33

Fourteenforty Research Institute, Inc.

まとめEgg

従来シ
従来システムム

先進的シ
先進的システムム

有用な情報の取得

良い不十分

良い

カーネルモードコードの解析

可拡散するマルウェアの解析

良い

仮想マシン検知技術への耐性（影響のなさ）

良い（影響を受けない）

20
12

動的解析シ
動的解析システムの種類
ム 種類

良い不十分

良い

良い
（影響を受けない）

不十分（影響を受ける）

CS

不十分

SC

• eggを使用することで解析の所要時間を抑えることができる• 将来のバージョンでは、より高速かつ安定した動作を目指す.
将来、 り高安定動作を目指す

31 / 33

20
12SC

CS

ありがとうございました

Fourteenforty Research Institute, Inc.
株式会社
フォティーンフォティ技術研究所
株式会社
フォティーンフォティ技術研究所
http://www.fourteenforty.jp

発表者肩書き 発表者氏名発表者メールアドレス

32