iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
Security

那些留在電腦裡的證據:從零開始認識數位鑑識系列 第 11 篇

[DAY 11] 不用 Profile 了!用 Volatility 3 分析 Memory

  • 分享至 

  • xImage
  •  

今天實作 Volatility 3。

上一篇使用 Volatility 2.6 時,需要先透過 imageinfo 找出 Suggested Profile,指定對應的 Windows Profile。

Volatility 3 最大的差別之一,就是不需要自己指定 Profile,而是透過 Symbol Tables 解析 Memory Image,所以操作上會比 Volatility 2.6 簡單。

Volatility 3 安裝

  1. 下載 Volatility 3 以及 Python(3.8.0 以上)
  2. 將欲分析的 .mem 檔放到 Volatility 3 資料夾中

https://ithelp.ithome.com.tw/upload/images/20260925/20146591DVlzZMA2Se.png

Memory Image 其實不一定要放在同一個資料夾,只要後面的 -f 能指定正確路徑即可。

Symbol Tables

Volatility 3 不再使用 Volatility 2.6 的 Profile,而是透過 Symbol Tables 了解不同作業系統 Kernel 中的資料結構。

所以要到 Github 下載對應的 Symbol Pack,並解壓縮後放到 volatility3-develop\volatility3\symbols 資料夾中。

Volatility 3 分析記憶體

先在 cmd 中 ls Volatility 3 資料夾

獲取記憶體的摘要資訊

使用 windows.info 查看 Memory Image 的基本資訊,可以看到 Kernel Base、DTB、使用的 Symbol、系統時間、Windows 版本、系統架構等。

python .\vol.py -f [映像檔] windows.info

image

例如這份 Memory 可以看到:

SystemTime      2020-06-11 03:21:21+00:00
NtMajorVersion  6
NtMinorVersion  3
Is64Bit         True

這個功能有點像 Volatility 2.6 的 imageinfo。

不過 Volatility 3 不會列出Suggested Profile。

列出正在執行中的程序

使用 windows.pslist 可以列出 Memory 中的 Process,其中 --dump 參數可以導出記憶體中正在執行的進程映像。

python .\vol.py -f [映像檔] windows.pslist

image

輸出中可以看到 Process Name、PID、PPID、建立時間、結束時間、Thread 數量等資訊。

其中 PID 是每個 Process 的識別編號,而 PPID 則代表啟動它的 Parent Process PID,因此除了確認有哪些程式正在執行,也可以開始觀察 Process 之間的關係。

如果發現可疑 Process,也可以記下它的 PID,再利用其他 Plugin 繼續查看它的 Command Line、Network Connection、Handle 或其他相關資訊。

另外 windows.pslist 也支援 --dump,可以嘗試將指定 Process 對應的執行檔內容從 Memory 中匯出,方便後續進一步分析。

使用不同方法交叉檢查 Process

python .\vol.py -f [映像檔] windows.psxview

image

psxview 會利用不同的 Process Enumeration 方法交叉檢查 Memory 中的 Process,例如 pslist、psscan、thrdscan、csrss 等。

結果中會看到 True 和 False,True 代表該方法有找到這個 Process,False 則代表該方法沒有找到。

如果同一個 Process 在不同方法之間出現差異,就可以列為後續調查的對象。

不過 False 並不代表一定是 Malware 或 Rootkit,因為 Process 可能已經結束、Memory 中只剩下部分結構,或不同方法本來就會因為搜尋方式不同而出現差異。

所以還是要搭配 Process Name、PID、PPID、Process Tree、Command Line 和 Network Connection 一起判斷。

查看 Process Tree

如果想知道某個程式到底是被誰啟動的,可以使用 windows.pstree。

python .\vol.py -f [映像檔] windows.pstree

pstree 會把 Process 按照 Parent / Child Relationship 排成樹狀結構。

例如:

explorer.exe
└─ cmd.exe
   └─ powershell.exe

單看 cmd.exe 或 powershell.exe 其實都很正常,但如果它的 Parent Process 或 Child Process 出現不合理的組合,就值得進一步追查。

因此 pstree 很適合用來了解這個 Process 是誰啟動的?它後面又啟動了什麼?

搭配 PID 和 PPID,就可以逐步還原 Process 的執行關係。

檢查網路狀態

使用 windows.netscan 可以從 Memory 中找 Network Connection。

python .\vol.py -f [映像檔] windows.netscan

輸出中通常可以看到 Local Address、Local Port、Foreign Address、Foreign Port、Connection State,以及對應的 PID 和 Process Owner。

也就是除了知道這台電腦連到哪個 IP、使用哪個 Port 以外,還可以繼續確認這條 Connection 是哪一個 Process 建立的。

例如看到某個不熟悉的 Foreign IP,就可以先記下它所對應的 PID,再回頭利用 pslist、pstree 或 cmdline 確認是哪個程式建立這條連線。

分析 Network Connection 時,可以特別注意是否有不熟悉的外部 IP、異常 Port、ESTABLISHED Connection,以及該 PID 對應的 Process 是否合理。

不過 IP 或 Port 本身只能算是線索,不能單獨拿來判斷是否為惡意行為。

顯示 Process 啟動時的 Command Line

找到可疑 Process 後,可以利用 windows.cmdline 查看它啟動時所使用的 Command Line。

python .\vol.py -f [映像檔] windows.cmdline

image

這個 Plugin 除了顯示 Process Name,還可以看到程式的完整執行路徑以及啟動時帶入的參數。

找出系統 Registry Hive

python .\vol.py -f [映像檔] windows.registry.hivelist

image

可以從 Memory 中找到 Registry Hive,例如:

\REGISTRY\MACHINE\SYSTEM

\SystemRoot\System32\Config\SOFTWARE

\SystemRoot\System32\Config\DEFAULT

\SystemRoot\System32\Config\SECURITY

\SystemRoot\System32\Config\SAM

NTUSER.DAT

不同 Hive 中會留下不同資訊。

例如:

SYSTEM
→ 系統設定、裝置等資訊

SAM
→ Local Account 相關資訊

SOFTWARE
→ 安裝軟體及 Windows 設定

NTUSER.DAT
→ 特定使用者的操作紀錄

Registry 也是 Windows Forensics 中非常重要的一類 Artifact。

查看指定的 Registry Key

找到 Registry Hive 後,可以再使用 windows.registry.printkey 查看指定的 Registry Key。

例如想知道使用者曾經在 Win + R 的 Run Dialog 中輸入過什麼,可以查看 RunMRU。

python .\vol.py -f [映像檔] windows.registry.printkey --key "Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"

RunMRU 會保存近期透過 Run Dialog 輸入過的內容,因此可能看到:

cmd
regedit
powershell
notepad

在鑑識時,可以利用它了解使用者曾經透過 Run Dialog 啟動過哪些程式或輸入過哪些 Command。

不過 RunMRU 只代表這些內容曾經出現在 Run Dialog 的歷史紀錄中,不能單靠它判斷某個 Command 就是在事件發生當下執行,也不能直接判定為惡意行為。

還是需要再搭配 Process、Command Line、Timestamp 或其他 Artifact 交叉確認。


上一篇
[DAY 10] Volatility 2.6 分析案例
下一篇
[DAY 12] 5 KB 的檔案,為什麼會佔掉 8 KB?從 Sector、Cluster 到 File Slack
系列文
那些留在電腦裡的證據:從零開始認識數位鑑識 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言