Volatility 3 是一個開源的 Memory Forensics Framework,主要用來從 RAM 的 Memory Image 中提取與分析數位鑑識資訊。
Memory Image
↓
Volatility 3
↓
┌─────┼─────┬─────┐
↓ ↓ ↓ ↓
Process Network DLL Registry
它提供很多不同的 Plugin,讓我們可以從不同角度分析 Memory。
官方 README 目前要求:
Python 3.8+
可以先確認自己的 Python 版本:
python3 --version
如果看到:
Python 3.x.x
而且版本是 3.8 以上,就可以繼續。
如果只是想開始使用 Volatility 3,最簡單的方法就是:
pip install volatility3
安裝完成後,可以輸入:
vol -h
這種方式比較適合:
只是想使用 Volatility 3,不需要自己修改原始程式碼。
如果想使用 GitHub Repository 中的版本,可以 Clone Repository。
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3/
接著建立 Virtual Environment,避免 Volatility 的套件和系統上的其他 Python 套件互相影響。:
python3 -m venv venv
啟動 Virtual Environment:
. venv/bin/activate
最後安裝:
pip install -e ".[dev]"
這種方式比較適合:
想直接使用 GitHub 上的程式碼,或之後想研究、修改 Volatility 3。
如果是從 GitHub Clone 下來,有一個小地方要注意。
Branch:
stable
↓
最新穩定版本
develop
↓
預設開發分支
GitHub Repository 預設使用的是 develop branch。
如果想使用穩定版本,可以切換到:
git checkout stable
vol -h
這個指令可以查看 Volatility 3 的使用方式以及目前可以使用的功能。
如果想查看某個 Plugin 怎麼使用,可以:
vol [plugin name] -h
不同 Plugin 會有自己的參數與使用方式。
如果你是從 GitHub Repository Clone,也可以使用:
python3 vol.py -h
看到類似:
Volatility 3 Framework
usage: vol.py [-h] ...
就代表可以開始使用了。
| Plugin | 用途 |
|---|---|
windows.info |
查看 Memory Image 的 Windows 資訊 |
windows.pslist |
列出 Process |
windows.pstree |
以父子關係查看 Process |
windows.cmdline |
查看 Process 的 Command Line |
windows.netscan |
查看 Network Connections |
windows.dlllist |
查看 Process 載入的 DLL |
windows.malfind |
協助尋找可疑的 Memory 區域 |
windows.filescan |
掃描 Memory 中的 File Object |
windows.handles |
查看 Process 使用的 Handles |
windows.registry.hivelist |
列出找到的 Registry Hives |
拿到一個 Memory Image 時,可以先執行:
vol -f memory.raw windows.info
windows.info 可以協助查看 Memory Image 中的 Windows 資訊,也可以用來確認 Volatility 是否能處理這份 Memory Sample。
因此在拿到一份陌生的 Memory Image 時,可以先從這個 Plugin 開始。
如果想知道 Memory Image 裡有哪些 Process:
vol -f memory.raw windows.pslist
可能會看到:
PID PPID ImageFileName
4 0 System
624 4 smss.exe
812 624 csrss.exe
1024 900 explorer.exe
2456 1024 suspicious.exe
如果想看 Process 的父子關係:
vol -f memory.raw windows.pstree
這就是前面第 15 篇介紹過的 Network Connections。
現在我們可以用 Volatility 3 從 Memory Image 裡把它找出來:
vol -f memory.raw windows.netscan
例如:
PID LocalAddr ForeignAddr State
2456 192.168.1.10 203.0.113.50:443 ESTABLISHED
如果想知道 Process 啟動時使用了什麼 Command Line:
vol -f memory.raw windows.cmdline
例如:
PID Process CommandLine
2456 powershell.exe powershell.exe -enc XXXXX
可以進一步調查:
這個 Process 是怎麼被啟動的?
如果懷疑某個 Process 可能存在 Code Injection 等情況,可以使用:
vol -f memory.raw windows.malfind
它可以協助找出具有可疑特徵的 Memory 區域。
但 malfind 找到結果 ≠ 一定是 Malware。
仍然需要搭配 Process、DLL、Network 等其他資訊一起判斷。
Symbol 可以讓 Volatility 知道 Memory 裡面的資料結構要怎麼解讀。
不同版本的 Windows,Memory 裡面的結構可能不一樣。
TryHackMe 有 Volatility、Volatility Essentials 以及 Memory Forensics 等相關練習。
可以從基本 Plugin 開始,逐漸練習 Process、Network、Memory 等分析。
CyberDefenders 有不少 Blue Team / DFIR Lab。
例如 Volatility Traces 就是以 Endpoint Forensics 為主題,使用 Volatility 3 分析 Memory Dump,包含 Process、Persistence、Defense Evasion 等內容。
如果遇到問題不知道怎麼用,可以去看看官方文件。
Memory Image
↓
Volatility 3
↓
Plugins
↓
┌─────┼─────┬─────┬─────┐
↓ ↓ ↓ ↓ ↓
Process Network Command DLL Malware
| Plugin | 用途 |
|---|---|
windows.info |
Memory / Windows 資訊 |
windows.pslist |
Process |
windows.pstree |
Process 關係 |
windows.cmdline |
Command Line |
windows.netscan |
Network Connections |
windows.dlllist |
DLL |
windows.malfind |
可疑 Memory / Injection 線索 |