今天要打的是 DumpMe Lab,難度為 medium,分類是 Endpoint Forensics。
一位 SOC 分析師從一台感染了 meterpreter 惡意軟體的機器上獲取了記憶體轉儲。身為數位鑑識專家,你的工作是分析轉儲數據,提取可用的攻擊指標 (IOC),並回答相關問題。
Volatility2
sha1sum Triage-Memory.mem
Ans:c95e8cc8c946f95a109ea8e47a6800de10a27abd
python vol.py -f Triage-Memory.mem imageinfo
它的 suggest profile 是按名次排的,所以最適合的就是第一個 Win7SP1x64
Ans:Win7SP1x64
用pstree
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 pstree
Ans:3032
從 pstree 的輸出中,可以看到 UWkpjFjDzM.exe 是 wscript.exe 的子進程。
這個很奇怪的檔案名稱不是一般合法進程的名稱,基本可以確定是惡意軟體
Ans:UWkpjFjDzM.exe
Win7SP1x64 這個 profile 沒有 netstat 這個插件,但是有 netscan
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 netscan
Local Address 下有 3 個 IP,127.0.0.1、0.0.0.0、10.0.0.101。
127.0.0.1 是本機回環位址(localhost),用於本機內部通訊
0.0.0.0 表示監聽所有網路介面的服務,不是實際的機器 IP
10.0.0.101 則是實際的 IP 位址
Ans:10.0.0.101
netscan 的輸出中可以看到 UWkpjFjDzM.exe 建立了一個對 10.0.0.106:4444 的連線
Ans:10.0.0.106
dlllist 會列印每個進程已載入的 DLL 列表
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 dlllist | grep VCRUNTIME140.dll
用 grep 把 VCRUNTIME140.dll 篩選出來
可以看到五個結果
Ans:5
剛剛已經辨識出 UWkpjFjDzM.exe 是受感染的進程了,用 procdump 插件把進程 dump 出來再用 md5sum 計算 MD5 hash
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 procdump -p 3496 -D dump/
md5sum dump/executable.3496.exe
我們可以把他丟到 VirusTotal 上看看
Ans:690ea20bc3bdfb328e23005d9a80c290
hashdump 插件會從記憶體中 dump 出密碼雜湊值(LM/NTLM)
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 hashdump
這是 Windows 儲存密碼雜湊的標準格式,每個欄位用冒號分隔,第一個是使用者名稱,第二個是使用者 ID,第三個是 LM hash,第四個是 NTLM hash,後面是額外欄位用於儲存其他資訊。值得注意的是,LM 雜湊現在已被視為不安全,因此 Windows Vista 之後的版本預設停用,當 LM 雜湊停用時,系統會在該欄位顯示固定值 aad3b435b51404eeaad3b435b51404ee。
Ans:aad3b435b51404eeaad3b435b51404ee
VAD 主要負責管理和追蹤進程虛擬位址空間內的記憶體分配,而 vadinfo 這個插件會輸出 VAD 的資訊。
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 vadinfo | grep 0xfffffa800577ba10 -A 10
grep 的參數 -A 10 代表顯示匹配的那行及後續 10 行的內容
Ans:PAGE_READONLY
用跟剛剛同樣的方法
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 vadinfo | grep 0x00000000033c0000 -A 10
Ans:PAGE_NOACCESS
用 cmdline 插件查看進程執行時帶的完整命令列參數
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 cmdline
wscript.exe 是 Windows 用來執行 VBScript 或 JScript 腳本的工具,//B 這個參數告訴 wscript.exe 在執行腳本時不顯示任何錯誤、腳本輸出或訊息框。//NOLOGO 這個參數會隱藏 wscript.exe 的啟動橫幅訊息,%TEMP%\vhjReUDEuumrX.vbs 腳本的路徑和名稱。
Ans:vhjReUDEuumrX
在前面 imageinfo 的輸出可以看到擷取時間是 3/22,所以用 pslist、cmdline 等等都找不到,因為他在擷取的時候並沒有在執行。這時候就要用到 shimcache 插件。。
Shimcache(Application Compatibility Shim Cache)是 Windows 用於程式相容性的機制。當程式執行時,系統會將檔案路徑、修改時間、檔案大小等資訊記錄在 SYSTEM Hive 中。而 shimcache 插件用於分析它。
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 shimcache | grep '2019-03-07 23:06:58 UTC'
grep 搜尋目標時間
Ans:Skype.exe
這個跟我們之前分析 Vim 的方法一樣,都是看它在暫存在記憶體裡的資料
用 memdump 提出它的記憶體區塊
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 memdump -p 3032 -D dump/
把它存成txt用文字編輯器打開比較好瀏覽
strings -e l dump/3032.dmp > notepad.txt
notepad.exe 在 Windows 中文字預設以 UTF-16LE 編碼儲存的,strings -e l用來指定 UTF-16LE 編碼
Ans:flag<REDBULL_IS_LIFE>
這裡 file record 指的是 NTFS 中的 MFT (Master File Table),它是 Windows 用來管理檔案和資料夾的中央資料庫。
mftparser 插件會掃描並解析 MFT
python ~/volatility/vol.py -f Triage-Memory.mem --profile=Win7SP1x64 mftparser
我這裡把它存成 txt 瀏覽
Ans:EMPLOY~1.XLS
我們剛剛把 UWkpjFjDzM.exe 丟到 VirusTotal 上看過了,有幾家辨識出他是 Meterpreter。
UWkpjFjDzM.exe 的 pid 是 3496。
Ans:3496
今天的 lab 我們學到了更進階的記憶體分析技巧,像是使用 volatility2 的插件 hashdump 提出密碼雜湊、vadinfo 分析 VAD、shimcache 還原執行紀錄、MFT 條目識別檔案等等,並且成功辨識出此惡意軟體為 Meterpreter。
我們明天將繼續深入 Windows Disk Forensics。