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
Process Hollowing
Search
ry0kvn
December 19, 2019
Programming
0
2.5k
Process Hollowing
ry0kvn
December 19, 2019
Tweet
Share
More Decks by ry0kvn
See All by ry0kvn
Loading DLL from memory
ry0kvn
0
110
Code Injection詰め合わせ
ry0kvn
0
26
Other Decks in Programming
See All in Programming
AIエージェント時代における TypeScriptスキーマ駆動開発の新たな役割
bicstone
3
420
Ruby×iOSアプリ開発 ~共に歩んだエコシステムの物語~
temoki
0
740
AIと私たちの学習の変化を考える - Claude Codeの学習モードを例に
azukiazusa1
12
4.7k
半自動E2Eで手っ取り早くリグレッションテストを効率化しよう
beryu
6
750
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
200
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
260
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
a_okui
0
170
メモリ不足との戦い〜大量データを扱うアプリでの実践例〜
kwzr
1
250
請來的 AI Agent 同事們在寫程式時,怎麼用 pytest 去除各種幻想與盲點
keitheis
0
140
気づいて!アプリからのSOS 〜App Store Connect APIで始めるパフォーマンス健康診断〜
waka12
0
110
大規模アプリにおけるXcode Previews実用化までの道のり
ikesyo
0
370
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
640
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Code Reviewing Like a Champion
maltzj
525
40k
A Tale of Four Properties
chriscoyier
160
23k
Context Engineering - Making Every Token Count
addyosmani
3
81
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
BBQ
matthewcrist
89
9.8k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Transcript
Process Hollowing @ry0kvn
About Me Twitter@ry0kvn りょーくん セキュリティキャンプ2019受講生 CODE BLUE2019 学生スタッフ
今日話すこと - Process Hollowing の紹介 - プロセスやPEまわりの解説 - ベース再配置の解説 -
PoCコードの簡単な解説 - デモ - 事例
ProcessHollowingとは 悪意あるプロセスがターゲットプロセスの 実行コード領域をくり抜いた後、代替コード を注入し実行させる検知回避手法の1つ。 Malicious process target process Malicious code
target process create and unmap inject
MITRE のATT&CK Matrixではこの辺り
実装に必要な前提知識解説
Windowsにおけるプロセス操作 プロセスA プロセスB VirtualAllocEX() でメモリ領域確保 WriteProcessMemory() でデータ書き込み
ソースファイル オブジェクトファ イル 実行可能ファイ ル ロードされた イメージファイル 仮想メモリ コンパイラ リンカ
ローダー EXEファイルの生成とロード
いろいろなアドレス - ImageBase イメージファイルがロードされたアドレス - RVA(Relative Virtual Address) ImageBaseからのオフセット -
VA 仮想メモリ内オフセット Virtual Memory ImageBase RVA VA
ベース再配置 リンカが想定した 理想の配置 ローダが選択した現 実の配置 0x00400000 ロードされたイメージ ファイル マップ済み 0x00400000
0x00600000 ロードされたイメージ ファイル
ベース再配置情報の格納場所 OPTIONAL_HEADERの DataDirectory の 5番目のエントリである IMAGE_DIRECTORY_ENTRY_BASERELOCに 再配置が必要なアドレスのリストが格納される。
ベース再配置情報の格納場所
PEviewで見るとこ んな感じ
ベース再配置の求め方 Delta = (ローダによる実際のImageBase) ー (リンカによる理想のImageBase) リンカによるメモリ配置 ローダによるメモリ配置 Delta
Win32APIを使った Process Hollowing の実装
ポイントとなる関数 CraeteProcessA ReadRemotePEB ReadRemoteImage NtUnmapViewOfSeciton VirtualAllocEX マニュアルでベース再配置を計算 WriteProcessMemory ResumeThread
ポイントとなる関数 CraeteProcessA ターゲットとなるプロセスをCREATE_SUSPENDで新規作成 ReadRemotePEB ターゲットプロセスのPEB情報を取得 ReadRemoteImage ImageBaseへのアドレスを取得 NtUnmapViewOfSeciton ターゲットプロセスのImageBaseからImageViewをアンマップ VirtualAllocEX ターゲットプロセスにメモリ領域の確保 マニュアルでベース再配置を計算 WriteProcessMemory ターゲットプロセスにデータの書き込み ResumeThread ターゲットプロセスの停止解除
%demo
None
事例 EMOTETでは、System32内の正規ファイルを名前変更して手元にコピーし、パスワー ド抽出を行うNirSoftというフリーツールを実行コードとしてProcessHollowingしてい た。 「流行マルウェア「EMOTET」の内部構造を紐解く」を参考 https://www.mbsd.jp/blog/20181225_2.html
end%