Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マルウェア解析におけるセマンティックギャップ
Search
Yuma Kurogome
August 13, 2014
Programming
5
3k
マルウェア解析におけるセマンティックギャップ
セキュリティ・キャンプ全国大会2014 発表資料 #seccamp #spcamp
Yuma Kurogome
August 13, 2014
Tweet
Share
More Decks by Yuma Kurogome
See All by Yuma Kurogome
The Art of De-obfuscation
ntddk
16
27k
死にゆくアンチウイルスへの祈り
ntddk
55
39k
Windows Subsystem for Linux Internals
ntddk
10
3.1k
なぜマルウェア解析は自動化できないのか
ntddk
6
4.3k
Linear Obfuscation to Drive angr Angry
ntddk
4
860
CAPTCHAとボットの共進化
ntddk
2
1.2k
マルウェアを機械学習する前に
ntddk
3
1.6k
Peeling Onions
ntddk
7
3.7k
仮想化技術を用いたマルウェア解析
ntddk
8
27k
Other Decks in Programming
See All in Programming
Design Foundational Data Engineering Observability
sucitw
3
200
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
請來的 AI Agent 同事們在寫程式時,怎麼用 pytest 去除各種幻想與盲點
keitheis
0
130
そのAPI、誰のため? Androidライブラリ設計における利用者目線の実践テクニック
mkeeda
2
1.8k
ファインディ株式会社におけるMCP活用とサービス開発
starfish719
0
2k
パッケージ設計の黒魔術/Kyoto.go#63
lufia
3
440
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
280
Kiroで始めるAI-DLC
kaonash
2
620
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
250
Rancher と Terraform
fufuhu
2
550
Testing Trophyは叫ばない
toms74209200
0
890
Namespace and Its Future
tagomoris
6
710
Featured
See All Featured
It's Worth the Effort
3n
187
28k
How to Ace a Technical Interview
jacobian
279
23k
A Modern Web Designer's Workflow
chriscoyier
696
190k
GitHub's CSS Performance
jonrohan
1032
460k
We Have a Design System, Now What?
morganepeng
53
7.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
4 Signs Your Business is Dying
shpigford
184
22k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Side Projects
sachag
455
43k
Automating Front-end Workflow
addyosmani
1370
200k
Transcript
チュータープレゼン: マルウェア解析における セマンティックギャップ 2014/08/13 セキュリティ・キャンプ全国大会2014 @ntddk
whoami • @ntddk – #include <ntddk.h> • 慶應義塾大学 SFC 村井研/武田研
B2 – マルウェアの研究 • ゲヒルンという会社で働き始めました – スマートフォンアプリの脆弱性診断とか
whoami • #spcamp '11 ソフトウェアセキュリティクラス 参加 • #seccamp '13 セキュアなシステムをつくろうクラス
システムソフトウェアゼミ チューター • #seccamp '14 ソフトウェアセキュリティクラス チューター
whoami • EpsilonDelta – メンバーを募集しているっぽいです – 明後日のCTFでみなさんの力を見せてください
話すこと • セマンティックギャップについて紹介します – アセンブリ言語とプログラミング言語とのギャップ – 仮想マシンモニタとゲストOSとのギャップ – コンピュータと人間の認知とのギャップ
セマンティックギャップとは • Semantic Gap(語義の隔たり) • ソースコードとアセンブラと機械語 • この違いがあるため、逆コンパイルは難しい
アセンブリ言語とプログラミング言語とのギャッ プ
難読化されたマルウェア • マルウェア開発者は解析に時間をかけさせたい – コンパイラによる最適化と反対のことをする 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
LLVM • 最適化を頑張ってくれるコンパイラ基盤 • ソースコードを読み込んで独自の中間コードに 変換(フロントエンド) • 最適化した上で(ミドルエンド) • コンパイルやJIT、任意の言語のソースコード
に変換(バックエンド)
LLVM • 最適化を頑張ってくれるコンパイラ基盤 • 逆アセンブルコードを読み込んで独自の中間 コードに変換 • 最適化することで難読化を除去できないか? • アセンブリ言語とLLVMの中間コードとの
ギャップが問題となってくる
LLVM • 逆アセンブルコードを中間コードに変換し、さ らにC++などのソースコードに変換することに よって、逆コンパイルを実現できないか? – C++をC++11に変換するC++11 MigratorやC++を JavaScriptに変換するEmscriptenなど参考例がある –
ただし標準関数のみサポート • プログラミング言語とLLVMの中間コードとの ギャップが問題となってくる
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; }
• みたいな試みがあります • ぶっちゃけHex-Rays Decompilerのほうがよっ ぽどマシ
仮想マシンモニタとゲストOSとのギャップ
VMI • VM Introspectionという分野 – 仮想マシンモニタからゲストOSのメモリやデバイ スを監視する手法 – マルウェアを自動で解析するのにも使えそう –
最近はクラウドコンピューティングサービスにおい てマルウェアを検出するという方向性ばかり • VMIにもセマンティックギャップの問題がある
VMIのセマンティックギャップ • VMの内側と外側で取得できる情報が異なる – 解析したいプロセスを特定できない – カーネル内のシンボル情報を読み取れない • これを解決する研究がなされてきた
マルウェアの高度化 • ルートキット – カーネルのデータ構造を改竄し、悪意のシステム コールへ実行をリダイレクトしたり、ファイルやメ モリを隠蔽したりする • コードインジェクション –
他プロセスのメモリに自身をロードして実行状態を 移す
既存研究 TTAnalyze: A Tool for Analyzing Malware[EICAR06] – ゲストOSに挿入したmoduleから解析対象を識別す ることでセマンティックギャップを解決
ゲストOSの ユーザーモード ゲストOSの カーネルモード 仮想マシンモニタ ホストOS VM Introspectionが ゲストに影響を与える 仮想マシンモニタが 検出されてしまう
既存研究 Ether: Malware Analysis via Hardware Virtualization Extensions[ACM08] – 事前にOSを解析することでセマンティックギャッ
プを解決したが、ルートキットなどに対処できない ゲストOSの ユーザーモード ゲストOSの カーネルモード 仮想マシンモニタ ホストOS VM Introspectionが ゲストに影響を与えない 仮想マシンモニタが 検出されない
解析対象の識別方法 • VMの外部からはプロセスの情報をそのまま取 得できないので、 – コンテキストスイッチによって変化するCR3レジス タの値を監視 – 予めOSを解析してPIDやTIDが保存されている箇所 を特定
– 予めOSが用いるデータ構造体のシグネチャを作成 – etc...
既存手法の問題点 • そもそもPaaSでのマルウェア検出のみを目的 としたVMIが多い • ゲストOSを書き換えてしまうと、仮想マシン モニタがマルウェアに検出されてしまう • セマンティックギャップを解消した上、さらに セマンティックス情報を追跡しなければ、コー
ドインジェクションやルートキットに対処でき ない
提案手法 • オフレコ
• みたいな研究をしています
コンピュータと人間の認知とのギャップ
マルウェアを理解するには • いくら自動でマルウェアを解析したところで、 その動作を理解できなければ意味がない • どうすればマルウェアを直感的に理解すること ができるか? • 人間が理解できる内容とコンピュータが理解で きる内容のギャップ
None
マルウェアの可視化 • 直感的にマルウェアの構造を把握する手段 • 命令ポインタのログをgraphvizに投げてみた – さっきのはWindowsのメモ帳
None
マルウェアの可視化 • 何をもとに可視化するか – 命令ポインタ – API – ファイル –
ネットワークアクセス
マルウェアの可視化 • IDA ProのGraph Viewだって可視化 – コードブロックと条件分岐
マルウェアの可視化 • VERA http://1.bp.blogspot.com/-OHhtZ567BBs/Tzt9paOnhkI/AAAAAAAAK6Y/wA5CBLGUUnQ/s1600/NotePADUnpacked.png
マルウェアの可視化 • どのようなコードがどのように可視化されるか 覚えなければならない – 新しいセマンティックギャップが生まれてしまう • 結局のところ解析者の負担は変わらない? • 可視化によって得られるメリットは何か?
マルウェアの可視化 • どのようなコードがどのように可視化されるか 覚えなければならない – 新しいセマンティックギャップが生まれてしまう • 結局のところ解析者の負担は変わらない? – 人間が理解しやすい可視化の方式とは
• 可視化によって得られるメリットは何か? – マルウェア亜種の分類など
情報セキュリティにおける可視化 • マルウェアに限った話ではない • ネットワークの可視化 – NICTER – DAEDALUS –
NIRVANA改 http://www.nict.go.jp/info/topics/2014/02/img/seccon2013-1.png
• みたいな試みがあります
おわりに • セマンティックギャップという視点から、マル ウェア解析における3つのトピックについて紹 介しました • マルウェア解析を主に扱っているのはソフト ウェアセキュリティクラスだが、クラスに縛ら れることはない