Slide 1

Slide 1 text

チュータープレゼン: マルウェア解析における セマンティックギャップ 2014/08/13 セキュリティ・キャンプ全国大会2014 @ntddk

Slide 2

Slide 2 text

whoami ● @ntddk – #include ● 慶應義塾大学 SFC 村井研/武田研 B2 – マルウェアの研究 ● ゲヒルンという会社で働き始めました – スマートフォンアプリの脆弱性診断とか

Slide 3

Slide 3 text

whoami ● #spcamp '11 ソフトウェアセキュリティクラス 参加 ● #seccamp '13 セキュアなシステムをつくろうクラス システムソフトウェアゼミ チューター ● #seccamp '14 ソフトウェアセキュリティクラス チューター

Slide 4

Slide 4 text

whoami ● EpsilonDelta – メンバーを募集しているっぽいです – 明後日のCTFでみなさんの力を見せてください

Slide 5

Slide 5 text

話すこと ● セマンティックギャップについて紹介します – アセンブリ言語とプログラミング言語とのギャップ – 仮想マシンモニタとゲストOSとのギャップ – コンピュータと人間の認知とのギャップ

Slide 6

Slide 6 text

セマンティックギャップとは ● Semantic Gap(語義の隔たり) ● ソースコードとアセンブラと機械語 ● この違いがあるため、逆コンパイルは難しい

Slide 7

Slide 7 text

アセンブリ言語とプログラミング言語とのギャッ プ

Slide 8

Slide 8 text

難読化されたマルウェア ● マルウェア開発者は解析に時間をかけさせたい – コンパイラによる最適化と反対のことをする 00874389 /EB 05 JMP SHORT sample.00874390 0087438B |43 INC EBX 0087438C |41 INC ECX 0087438D |42 INC EDX 0087438E |EB 07 JMP SHORT sample.00874397 00874390 \B8 07000000 MOV EAX,7 00874395 ^ EB F4 JMP SHORT sample.0087438B 00874397 C3 RET 003B0000 B8 07000000 MOV EAX,7 003B0005 43 INC EBX 003B0006 41 INC ECX 003B0007 42 INC EDX 003B0008 C3 RET

Slide 9

Slide 9 text

LLVM ● 最適化を頑張ってくれるコンパイラ基盤 ● ソースコードを読み込んで独自の中間コードに 変換(フロントエンド) ● 最適化した上で(ミドルエンド) ● コンパイルやJIT、任意の言語のソースコード に変換(バックエンド)

Slide 10

Slide 10 text

LLVM ● 最適化を頑張ってくれるコンパイラ基盤 ● 逆アセンブルコードを読み込んで独自の中間 コードに変換 ● 最適化することで難読化を除去できないか? ● アセンブリ言語とLLVMの中間コードとの ギャップが問題となってくる

Slide 11

Slide 11 text

LLVM ● 逆アセンブルコードを中間コードに変換し、さ らにC++などのソースコードに変換することに よって、逆コンパイルを実現できないか? – C++をC++11に変換するC++11 MigratorやC++を JavaScriptに変換するEmscriptenなど参考例がある – ただし標準関数のみサポート ● プログラミング言語とLLVMの中間コードとの ギャップが問題となってくる

Slide 12

Slide 12 text

LLVMの中間コード ● 変換してもこんなんばっか ● SSA形式なので無限にレジスタが増える llvm_cbe_bb12_2e_i: llvm_cbe_tmp__64 = ((unsigned int )(((unsigned int )llvm_cbe_j_2e_018_2e_i) + ((unsigned int )1u))); if ((llvm_cbe_tmp__64 == 64u)) { goto llvm_cbe_test_all_2e_exit; } else { llvm_cbe_j_2e_018_2e_i__PHI_TEMPORARY = llvm_cbe_tmp__64; /* for PHI node */ goto llvm_cbe_bb7_2e_i; }

Slide 13

Slide 13 text

● みたいな試みがあります ● ぶっちゃけHex-Rays Decompilerのほうがよっ ぽどマシ

Slide 14

Slide 14 text

仮想マシンモニタとゲストOSとのギャップ

Slide 15

Slide 15 text

VMI ● VM Introspectionという分野 – 仮想マシンモニタからゲストOSのメモリやデバイ スを監視する手法 – マルウェアを自動で解析するのにも使えそう – 最近はクラウドコンピューティングサービスにおい てマルウェアを検出するという方向性ばかり ● VMIにもセマンティックギャップの問題がある

Slide 16

Slide 16 text

VMIのセマンティックギャップ ● VMの内側と外側で取得できる情報が異なる – 解析したいプロセスを特定できない – カーネル内のシンボル情報を読み取れない ● これを解決する研究がなされてきた

Slide 17

Slide 17 text

マルウェアの高度化 ● ルートキット – カーネルのデータ構造を改竄し、悪意のシステム コールへ実行をリダイレクトしたり、ファイルやメ モリを隠蔽したりする ● コードインジェクション – 他プロセスのメモリに自身をロードして実行状態を 移す

Slide 18

Slide 18 text

既存研究 TTAnalyze: A Tool for Analyzing Malware[EICAR06] – ゲストOSに挿入したmoduleから解析対象を識別す ることでセマンティックギャップを解決 ゲストOSの ユーザーモード ゲストOSの カーネルモード 仮想マシンモニタ ホストOS VM Introspectionが ゲストに影響を与える 仮想マシンモニタが 検出されてしまう

Slide 19

Slide 19 text

既存研究 Ether: Malware Analysis via Hardware Virtualization Extensions[ACM08] – 事前にOSを解析することでセマンティックギャッ プを解決したが、ルートキットなどに対処できない ゲストOSの ユーザーモード ゲストOSの カーネルモード 仮想マシンモニタ ホストOS VM Introspectionが ゲストに影響を与えない 仮想マシンモニタが 検出されない

Slide 20

Slide 20 text

解析対象の識別方法 ● VMの外部からはプロセスの情報をそのまま取 得できないので、 – コンテキストスイッチによって変化するCR3レジス タの値を監視 – 予めOSを解析してPIDやTIDが保存されている箇所 を特定  – 予めOSが用いるデータ構造体のシグネチャを作成 – etc...

Slide 21

Slide 21 text

既存手法の問題点 ● そもそもPaaSでのマルウェア検出のみを目的 としたVMIが多い ● ゲストOSを書き換えてしまうと、仮想マシン モニタがマルウェアに検出されてしまう ● セマンティックギャップを解消した上、さらに セマンティックス情報を追跡しなければ、コー ドインジェクションやルートキットに対処でき ない

Slide 22

Slide 22 text

提案手法 ● オフレコ

Slide 23

Slide 23 text

● みたいな研究をしています

Slide 24

Slide 24 text

コンピュータと人間の認知とのギャップ

Slide 25

Slide 25 text

マルウェアを理解するには ● いくら自動でマルウェアを解析したところで、 その動作を理解できなければ意味がない ● どうすればマルウェアを直感的に理解すること ができるか? ● 人間が理解できる内容とコンピュータが理解で きる内容のギャップ

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

マルウェアの可視化 ● 直感的にマルウェアの構造を把握する手段 ● 命令ポインタのログをgraphvizに投げてみた – さっきのはWindowsのメモ帳

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

マルウェアの可視化 ● 何をもとに可視化するか – 命令ポインタ – API – ファイル – ネットワークアクセス

Slide 30

Slide 30 text

マルウェアの可視化 ● IDA ProのGraph Viewだって可視化 – コードブロックと条件分岐

Slide 31

Slide 31 text

マルウェアの可視化 ● VERA http://1.bp.blogspot.com/-OHhtZ567BBs/Tzt9paOnhkI/AAAAAAAAK6Y/wA5CBLGUUnQ/s1600/NotePADUnpacked.png

Slide 32

Slide 32 text

マルウェアの可視化 ● どのようなコードがどのように可視化されるか 覚えなければならない – 新しいセマンティックギャップが生まれてしまう ● 結局のところ解析者の負担は変わらない? ● 可視化によって得られるメリットは何か?

Slide 33

Slide 33 text

マルウェアの可視化 ● どのようなコードがどのように可視化されるか 覚えなければならない – 新しいセマンティックギャップが生まれてしまう ● 結局のところ解析者の負担は変わらない? – 人間が理解しやすい可視化の方式とは ● 可視化によって得られるメリットは何か? – マルウェア亜種の分類など

Slide 34

Slide 34 text

情報セキュリティにおける可視化 ● マルウェアに限った話ではない ● ネットワークの可視化 – NICTER – DAEDALUS – NIRVANA改 http://www.nict.go.jp/info/topics/2014/02/img/seccon2013-1.png

Slide 35

Slide 35 text

● みたいな試みがあります

Slide 36

Slide 36 text

おわりに ● セマンティックギャップという視点から、マル ウェア解析における3つのトピックについて紹 介しました ● マルウェア解析を主に扱っているのはソフト ウェアセキュリティクラスだが、クラスに縛ら れることはない