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.7k
マルウェア解析におけるセマンティックギャップ
セキュリティ・キャンプ全国大会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
38k
Windows Subsystem for Linux Internals
ntddk
10
2.9k
なぜマルウェア解析は自動化できないのか
ntddk
6
4.1k
Linear Obfuscation to Drive angr Angry
ntddk
4
810
CAPTCHAとボットの共進化
ntddk
2
1.1k
マルウェアを機械学習する前に
ntddk
3
1.6k
Peeling Onions
ntddk
7
3.5k
仮想化技術を用いたマルウェア解析
ntddk
8
27k
Other Decks in Programming
See All in Programming
Java ジェネリクス入門 2024
nagise
0
600
Nuxtベースの「WXT」でChrome拡張を作成する | Vue Fes 2024 ランチセッション
moshi1121
1
510
Universal Linksの実装方法と陥りがちな罠
kaitokudou
1
220
Android 15 でアクションバー表示時にステータスバーが白くなってしまう問題
tonionagauzzi
0
140
Progressive Web Apps für Desktop und Mobile mit Angular (Hands-on)
christianliebel
PRO
0
110
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
230
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
250
カラム追加で増えるActiveRecordのメモリサイズ イメージできますか?
asayamakk
4
1.5k
カスタムしながら理解するGraphQL Connection
yanagii
1
1.2k
VR HMDとしてのVision Pro+ゲーム開発について
yasei_no_otoko
0
100
Outline View in SwiftUI
1024jp
1
120
go.mod、DockerfileやCI設定に分散しがちなGoのバージョンをまとめて管理する / Go Connect #3
arthur1
10
2.4k
Featured
See All Featured
Become a Pro
speakerdeck
PRO
24
5k
Side Projects
sachag
452
42k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Git: the NoSQL Database
bkeepers
PRO
425
64k
KATA
mclloyd
29
13k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
Building an army of robots
kneath
302
42k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
The Language of Interfaces
destraynor
154
24k
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つのトピックについて紹 介しました • マルウェア解析を主に扱っているのはソフト ウェアセキュリティクラスだが、クラスに縛ら れることはない