今天的文章是 Day 16,昨天才是 Day 17,我不小心搞錯順序,建議看完這篇後再往前看 Day 17,謝謝。
今天要打的是 BlackEnergy Lab,難度為 medium,分類是 Endpoint Forensics。
一家跨國公司遭受網路攻擊,導致敏感資料被盜。這次攻擊使用了先前未曾見過的 BlackEnergy v2 惡意軟體變種。該公司的安全團隊已從受感染的電腦獲取記憶體轉儲,並希望您作為 SOC 分析師能夠對轉儲進行專業分析,以了解此攻擊的範圍和影響。
volatility2 適用於 Python2,安裝 Python2 可以參考這篇文章:https://github.com/ctch3ng/Installing-Python-2.7-and-pip-on-Ubuntu-24.04-Noble-LTS
但要注意的是 Volatility2 支援 Linux kernels 2.6.11 到 5.5,Ubuntu 24.04 的 kernel 版本太高。我個人用的是 Ubuntu 18.04
由於不同作業系統、版本和架構的內部結構和記憶體編排方式都不一樣,Profile 告訴 Volatility 這台機器的作業系統等資訊,讓 Volatility 用對的方式解讀記憶體中的原始資料。
先用 Volatility3 的 windows.info 插件,發現無法識別,這很有可能是舊系統,像是 Win7 之類的,而 Volatility3 著重於 Win10/11,所以我們要用到 Volatility2。
imageinfo 是 Volatility2 的插件,用於辨別記憶體轉儲的來源作業系統,並建議要使用哪個 profile。
python2 vol.py -f CYBERDEF-567078-20230213-171333.raw imageinfo
可以看到最適合的是 WinXPSP2x86
Ans:WinXPSP2x86
python2 vol.py -f CYBERDEF-567078-20230213-171333.raw –profile=WinXPSP2x86 pslist
用 pslist 可以看到不重複的有 19 個 (--profile 指定 profile)
Ans:19
pslist 輸出中可以看到為 1960
Ans:1960
很明顯是rootkit.exe。Rootkit 是一種惡意軟體,主要目的是在受害系統上隱藏自身和其他惡意程式的蹤跡,讓攻擊者在系統中長期保持隱蔽的控制權。
Ans:rootkit.exe
用 malfind
python2 vol.py -f CYBERDEF-567078-20230213-171333.raw –profile=WinXPSP2x86 malfind
在 svchost.exe 中發現 MZ 簽章,這是 PE 檔案的 header,正常情況下只會出現在檔案開始位置,但這裡的 MZ 出現在記憶體中間位置,明確顯示為程式碼注入。
Ans:svchost.exe
這裡最近的進程是指被注入的 svchost.exe。
要看進程的 file reference 可以用 handles 插件來看,handles 插件會列出進程所開啟的句柄
python2 vol.py -f CYBERDEF-567078-20230213-171333.raw –profile=WinXPSP2x86 handles -p 880
-p 指定 pid
可疑的是這個檔案 \Device\HarddiskVolume1\WINDOWS\system32\drivers\str.sys 這個檔案位於 system32\drivers 目錄中,合法系統驅動程式常存在這裡,他的檔案名稱很可疑,不像一般的驅動。
Ans:C:\WINDOWS\system32\drivers\str.sys
使用 ldrmodules 插件,ldrmodules 是專門用於分析進程模組的插件。它會從記憶體中提取關於 DLL 的資訊。
python2 vol.py -f CYBERDEF-567078-20230213-171333.raw –profile=WinXPSP2x86 ldrmodules -p 880
InLoad:DLL 是否在 Windows 載入器(Loader)的載入列表中。這是最常見的 DLL 列表,包含了程式正常載入的所有 DLL。
InInit:DLL是否在載入器已完成初始化的初始化列表中,表示 DLL 是否已完成載入程序。
InMem:DLL是否在進程的記憶體映射列表中,表示是否實際存在於記憶體空間。
輸出中我們可以看到 msxml3r 皆為 False,這很明顯是被注入或竄改。
Ans:msxml3r.dll
雖然 ldrmodules 的輸出顯示 msxml3r.dll 的基址是 0x009a0000,但其所有載入狀態都為 False,而在 malfind 中我們看到的 MZ 簽章位於 0x98000 ,這才是實際注入的基址。
Ans:0x980000
我們今天學會了用 volatility2 來分析記憶體,首先透過 malfind 辨識出 PE magic number:MZ,接著用 handles 分析檔案參考,最後透過 ldrmodules 找出非法 DLL,成功還原出從明顯的惡意命名到隱蔽的注入行為。
明天我們要繼續深入記憶體鑑識。