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
2.9k
マルウェア解析におけるセマンティックギャップ
セキュリティ・キャンプ全国大会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
3k
なぜマルウェア解析は自動化できないのか
ntddk
6
4.3k
Linear Obfuscation to Drive angr Angry
ntddk
4
850
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
AI OCR API on Lambdaを Datadogで可視化してみた
nealle
0
180
SOCI Index Manifest v2が出たので調べてみた / Introduction to SOCI Index Manifest v2
tkikuc
1
110
「リーダーは意思決定する人」って本当?~ 学びを現場で活かす、リーダー4ヶ月目の試行錯誤 ~
marina1017
0
240
Introduction to Git & GitHub
latte72
0
120
新世界の理解
koriym
0
140
Jakarta EE Core Profile and Helidon - Speed, Simplicity, and AI Integration
ivargrimstad
0
190
あなたとJIT, 今すぐアセンブ ル
sisshiki1969
1
720
KessokuでDIでもgoroutineを活用する / Go Connect #6
mazrean
0
110
パスタの技術
yusukebe
1
400
Microsoft Orleans, Daprのアクターモデルを使い効率的に開発、デプロイを行うためのSekibanの試行錯誤 / Sekiban: Exploring Efficient Development and Deployment with Microsoft Orleans and Dapr Actor Models
tomohisa
0
210
STUNMESH-go: Wireguard NAT穿隧工具的源起與介紹
tjjh89017
0
380
ゲームの物理
fadis
5
1.5k
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
302
21k
Code Review Best Practice
trishagee
70
19k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
We Have a Design System, Now What?
morganepeng
53
7.7k
Rails Girls Zürich Keynote
gr2m
95
14k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Speed Design
sergeychernyshev
32
1.1k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
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つのトピックについて紹 介しました • マルウェア解析を主に扱っているのはソフト ウェアセキュリティクラスだが、クラスに縛ら れることはない