OSS Spring 16 Tokyo
DECAF meets The Sleuth Kit (TSK)OSC2016 Tokyo/Spring@RKX1209
View Slide
whoami●るくす と申します●twitter: @RKX1209●神戸大学 工学部 B3●sandbox開発,マルウェア解析など●セキュリティキャンプ'15 チューター
はじめに●今回やったこと●DECAFというsandboxに、フォレンジックツールTSKを載せました●パッチ +436 -14●本家マージ済み(?)
Agenda●DECAFの紹介- DECAFとは- QEMUのしくみ●The Sleuth Kitの紹介- The Sleuth Kit(TSK)とは- マルウェアフォレンジック●TSK on DECAF
DECAFとは●QEMUをベースにしたsandbox●sandboxはマルウェアを仮想環境などに閉じ込め隔離するプログラム●主にマルウェア解析,感染防止などに使用
DECAFとは●ゲストOS上で実行されるファイル(.exeなど)をホスト側から解析可能●ホスト側で拡張プラグインを開発し、ゲストOS上のAPI呼び出しなどをフックできる●Out-of-VM方式を採用したsandbox
DECAFとは●In-VM: ゲストOS内にエージェントを配置- マルウェアに検出される(アンチ解析)●Out-of-VM: ホスト側(ハイパーバイザ)にエージェントを追加
DECAFとは●DECAFを用いたマルウェア解析- マルウェアをゲストOS内に閉じ込める- マルウェアが用いそうなAPIにフックをセット- APIを呼ぶとDECAF側に通知&プラグイン内の関数を呼び出す●もう少し進んだ解析(今回は説明しません)- DECAFのデータ伝搬機構によるテイント解析- マルウェアによる仮想マシン検出対策など
DECAFとは●セマンティックギャップ問題- OSはメモリ上のどこにどのような情報を配置しているか把握している(ex. WinAPI)- メモリのデータに意味(セマンティクス)を持っている
DECAFとは●セマンティックギャップ問題
DECAFとは●DECAFによるギャップ解消(VMI)●QEMUからメモリデータ,レジスタ値を読む●読んだデータからゲストOSのセマンティクスを復元する- どうやって?- ゲストOSがLinuxの場合を例に見てみる
DECAFとは●ゲストOSセマンティクス復元●QEMUからESPレジスタの値を取得●$ESP & 0xfffff000(下位12bitをmask)●これでLinuxのthread_info構造体のアドレスが得られる●thread_infoからtask_struct構造体のアドレスを得る●task_structのアドレス ↔ バージョンの対応DBを検索し、バージョンを特定する
DECAFとは●仮想マシンを通しレジスタ,メモリの値を読みだしているQ. QEMUが持っている情報(ゲストのレジスタ値,メモリ)をDECAFはどうやって横取りしている?Q. どのタイミングで横取りしている?A. QEMUの動的バイナリ変換機能を利用してフックコードを途中で挿入している
QEMUのしくみ●動的バイナリ変換(DynamicBinaryTranslation)●ゲストはホストと異なるアーキテクチャの物を動かせる
QEMUのしくみ●DECAFはフックコードを中間表現TCGに挿入●解析コードをターゲットに挿入する手法をDBI(Dynamic Binary Instrumentation)という●中間表現レベルで挿入しているためアーキテクチャ非依存●APIがcallされるTCG命令の前後に、DECAFの関数呼び出し命令を挿入する- APIフックの実現
QEMUのしくみ
The Sleuth Kit(TSK)とは●ファイルシステムフォレンジックツール●ファイルシステムの詳細な構造にアクセス可能●TSKはコマンドラインツールだがAPIも持っている-(C,pythonなど様々なバインドがある)●ディスクイメージの解析などに用いる
The Sleuth Kit(TSK)とは●フォレンジック?●正確にはディジタルフォレンジックを指す●コンピュータやネットワークのログやディスクから証拠を探す●警察が犯罪者のディジタルデータ(PC,スマホなど)から、証拠立件を行う際にもフォレンジックが行われる- 某遠隔操作事件でもスラックスペースが話題に●フォレンジックはマルウェア解析者も行う
マルウェアフォレンジック●マルウェアをディスクイメージから探し出す●多くのマルウェアは自身を隠蔽する手法を持っている●有名な手法はNTFSのADS(Alternate DataStream)を用いた物- 最近流行りのPoison Ivyの亜種などもこの手法を利用している●echo 'I am malware' > test.txt:stream●cmd.exeやファイルエクスプローラーでは見つけられない
マルウェアフォレンジック●マルウェアによる検索妨害●ADSを検出できるツールは多くある- しかし多くのツールはFindNextFileなどのWinAPIを利用している●マルウェアはAPI呼び出しをフックし改竄できるため、この手法では限界がある●TSKはAPIではなくディスクイメージを直接パースするためこの手の妨害は受けない
TSK on DECAF●TSK APIをDECAFから使えるようにする●実はTSK自体は既にDECAFに載っている- ただしqcowのサポートが少し不完全- まれにDECAFプラグインからうまく扱えない事が●DECAFはTSKに独自のqcowサポートコードを追加しているtsk_img_open_sing(snapshot,QEMU_IMG,0);
TSK on DECAF●TSKに新しくqcowサポートコードを加えた●以前のQEMU_IMGに加え、TSK_IMG_TYPE_QCOW_QCOWという定数を追加●TSK内のqcow(open/read/write)コードをlibqcowライブラリを利用した物に変更→ うまく動いた!tsk_img_open_sing(snapshot,TSK_IMG_TYPE_QCOW_QCOW,0);
TSK on DECAFTSKを用いてゲストOSのファイル走査している図
おわりに●DECAFという既存のOSS sandboxから、TSKを使えるようにしました●マルウェア解析者もこれからはsandboxを実装していく時代●DECAF以外にも様々なフレームワークがある- ex. Panda, PEMU, PinOS, Unicorn...●解析専門でも実装力は必要●セキュリティ技術者もどんどんOSSへ貢献していきましょう