Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

NTT Secure Platform Laboratories

NTT セキュアプラットフォーム研究所

テイント伝搬に基づく
解析対象コードの追跡方法

NTTセキュアプラットフォーム研究所◎川古谷裕平、塩治榮太朗、岩村誠、針生剛男© 2012 NTT Secure Platform Laboratories

目次Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

•背景
•問題定義
•提案手法
•実装
•実験
•関連研究
•考察
•まとめ

2

＠2012 NTT Secure Platform Laboratories

背景

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

• マルウェアの動的解析が様々なところで利用されている• 解析対象コードとそれ以外を区別する必要がある–OSの中には多数のコードが動作している• プロセスID（PID）、スレッドID（TID）による方法が一般的–TTAnalyze(Anubis), TEMU, Ether etc…

3

＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

解析妨害機能•マルウェアの解析妨害機能•実行環境検知（デバッガ、仮想マシン、etc…）•解析対象回避（ファイル感染、コード注入）• ファイル感染

プロセス
ディスク上のファイル改ざんされたファイル

悪意のある
コード

マルウェア
ファイル感染

実行

悪意のある
コード
iexplorer

iexplorer

iexplorer• コード注入実行中のプロセス

マルウェア

4

コード注入

悪意のある
コード

スレッド

iexplorer＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

問題定義• PID、TIDによる解析対象コード識別の問題点–監視の粒度が粗い–未知のコード注入を追跡できない
実行中のプロセス
悪意のあるコード

iexplorer

実行中のプロセス

マルウェア??

悪意のあるコード

スレッド

iexplorer

悪意のあるコードと通常のコードが同一のPID、TID上で動作してしまう

コード注入方法が分からないと、どのプロセスにコードを注入したかを追跡できない

ファイル感染の場合

コード注入の場合

5

＠2012 NTT Secure Platform Laboratories

提案手法

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

•テイントタグに基づく解析対象識別、追跡方法–テイントタグを解析対象コードの設定する• テイントタグが付いている命令は解析対象コードとして実行• 付いていない命令は通常コードとして実行–解析対象コードの場所が変わった場合は、テイントタグを伝搬させて追跡する

6

＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

テイント解析の例• テイントタグ（テイント解析）とは？

–あるデータのフローを解析する技術（データフロー解析）–データに対して属性情報（テイントタグ）を設定する• テイントタグはシャドウ領域（メモリ、レジスタ）に保存する–CPUで実行される命令のソースオペランドのテイントタグをデストオペランドへ伝搬させる(伝搬ルール)
mem2=mem1+α

ゲストOS
mem2

仮想ディスク

ゲストOSからは見えない
触れない

仮想物理メモリ

シャドウ領域(メモリ)
VM
シャドウ領域(レジスタ)

VMM（エミュレータ） 仮想CPU7

mem1

mov eax, mem1
add ecx, eax
mov mem2, ecx
＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

テイント解析機構の拡張• 強制的なテイントタグ伝搬–問題：マルウェアが動的にコードを生成する場合、テイントの伝搬が途切れることがある• データ間に直接の代入関係がない場合–アプローチ：解析対象コードが行った全ての書き込みに対してテイントタグを伝搬させる
array[0] = 0:
array[1] = 1;…
array[255] = 255;
out = array[in]inとoutに代入関係がない例• ファイルへのテイント伝搬–問題：ファイルに書き出されるとテイントタグが消えてしまう–アプローチ：ディスク上のファイルへもテイントタグを伝搬させる• ディスク、メモリ間のデータ転送に連動して、テイントタグを転送させる
8＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

動作例（マルウェアの実行）
ゲストOS

実行

アプリ

マルウェア

マルウェア
実行ファイル

仮想ディスク

仮想物理メモリロード

テイント 伝搬タグ

VMM

9シャドウディスク

シャドウ
メモリ

シャドウ領域

テイントタグ

命令タグ

命令タグ

仮想CPU

＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

動作例（コード注入）
ゲストOS
マルウェア

アプリ

コード注入

マルウェア
実行ファイル

仮想物理メモリ

仮想ディスクテイントタグ

VMM

10

シャドウ
ディスク伝搬

テイントタグ

シャドウ
メモリ

命令

タシャドウ領域
グ

タグ

命令

タグ

仮想CPU

＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

動作例（ファイル書き込み）
ゲストOS
書き込み

アプリ

マルウェア

ファイル
作成

仮想物理メモリ

仮想ディスクタグ

シャドウ領域

テイントタグ
伝搬VMM

11

シャドウ
ディスク

シャドウ
メモリ

命令

タグ

命令

タグ

仮想CPU

＠2012 NTT Secure Platform Laboratories

実装

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

• Argos-0.5.0を基にして実装を行った–ゼロデイ攻撃検知用ハニーポット–QEMU-0.9.1ベース–シャドウメモリと仮想CPUのテイント伝搬機構をそのまま利用• 追加要素–強制的なテイント伝搬–シャドウディスク• シャドウディスクへのテイント操作• メモリ、ディスク間のテイント伝搬機構• ディスク上のファイル位置の特定–The Sleuth Kit (TSK) 3.2.3

12＠2012 NTT Secure Platform Laboratories

実験Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

• 実験１ テストコードによる実験 合計５テストコード– 4種類のコード注入、1種類のファイル感染を行うコード• CreateRemoteThread• SetWindowHookEx• AppInit_DLLsレジストリ• Browser Helper Object• ファイル感染• 実験２ CCC Dataset 2012による実験 ３２検体
– CCC Dataset 2012からアンチウィルス名でユニークな検体 １８検体
– D3M １４検体
– 何かしらの解析対象回避（最初の実行ファイル以外の処理が動作したのもの）をしたもの １０検体

• どちらの実験も解析対象コードに関しては、実行トレースログを取得し、手動にて誤検知、検知漏れがないかを確認した• インターネットへの接続がない環境で、各検体を5分間実行した
13

＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

実験１の結果注入、感染方法

注入、感染先 誤検知 検知漏れ
CreateRemoteThread calc.exe
なし
なし
SetWindowHookEx
calc.exeなし
なし
user32.dllをAppInit_DLLs
なし
なし
ロードするプロセス
BHO

Internet Explorer

ファイル感染calc.exe

なし
なし

なし
なし

• 誤検知（誤トレース取得） 注入、感染先のトレースを取得していないか？

• 検知漏れ（トレース取得漏れ） 注入したコード、書き出したコードのトレースを取得できているか？

誤検知、検知漏れなく正確に実行トレースを取得できた
14

＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

実験２の結果
ハッシュ値

解析妨害

誤検知検知漏れ4cfab…

svchost.exeを改ざんして実行

なし

なし

84114…

CreateRemoteThreadでコード注入なし

なし

493e3…

cmd.exeでバッチファイルを実行なし

あり

7aaed…

cmd.exeでバッチファイルを実行なし

あり

9e366…

子プロセスをサービスとして実行

なし

なし

e95f7…

子プロセスをサービスとして実行

なし

なし

28d7c…

子プロセスをサービスとして実行

なし

なし

4ead4…

子プロセスをサービスとして実行

なし

なし

52a6d…

CreateRemoteThreadでコード注入なし

なし

5452e…

WmdmPmSNを改ざんして実行なし

なし

493e3、7aaed以外は誤検知、検知漏れなく実行トレースを取得できた※CreateProcessで子プロセスを作るだけのものは除外
15

＠2012 NTT Secure Platform Laboratories

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

実験２の検知漏れの原因• マルウェアがバッチファイルを作成し、それをcmd.exeで実行している– CreateProcessW(…, "C:¥WINDOWS¥system32¥cmd.exe" /c"C:¥DOCUME~1¥ADMINI~1¥LOCALS~1¥Temp¥POS1.tmp.B
AT“, …)• POS1.tmp.BAT…tainted• cmd.exe …non-tainted
コマンド文字列

cmd.exe
参照

コマンドを処理する
実行コード

仮想CPU

仮想CPU上で実行されるのが、コマンド文字列(tainted)自体でなく、そのコマンドを処理するcmd.exe(non-tainted)のコード
16

＠2012 NTT Secure Platform Laboratories

考察

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

• 制限（Limitation）–テイント伝搬の正確性• テイントの伝搬漏れ–特定のAPI（暗号系、文字コード変換系）–スクリプト• テイントの誤伝搬–意図的な誤検知（強制伝搬の副作用）• 今後の課題–スクリプト（インタープリタ、cmd.exe）• taintedなデータがコードフローに影響する場合の対処法• 静的解析との組み合わせ–テイント伝搬の正確性の向上–DTA++、Pointer Tainting
17＠2012 NTT Secure Platform Laboratories

関連研究

Copyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

• TTAnalyze– ゲストOS内にモジュールをインストールし、ゲストOSのPIDを取得する• Panorama– TTAnalyze同様、ゲストOS内にモジュールをインストールし、PID/TIDを取得する• Ether– PEBの位置を特定し、PID、TIDを取得する• VMwatcher– Windowsの各種データ構造を予め解析し、その情報に基づいてPIDを取得する• Virtuoso– メモリフォレンジックツール自動生成システム。一旦ゲストOS上で動作させたスクリプトの挙動を記録し、それをゲストの外から模倣させる。
上記の動的解析システムはPID/TIDを基に解析対象コードの識別を行っている
本提案手法を利用することでこれらのシステムの精度を向上させることが可能
18

＠2012 NTT Secure Platform Laboratories

まとめCopyright(c)2009-2012 NTT CORPORATION. All Rights Reserved.

• テイントタグに基づく解析対象コードを識別、追跡する手法を提案• Argosにシャドウディスク、強制的なテイント伝搬機能を実装• ５種類のテストコード、３２検体で実験し、正確性を検証– 検知漏れが発生したケースに関して調査、考察を行った

本提案手法を利用することで、既存の様々な動的解析システムの精度を向上させることができる

19

＠2012 NTT Secure Platform Laboratories