前面幾天花了不少時間分析 Disk Image、Memory 和 Windows Artifacts,但真的遇到一台疑似有問題、而且還正在運作的電腦時,我們不一定一開始就會直接製作完整 Disk Image,再丟進鑑識工具慢慢分析。
一顆硬碟可能有幾百 GB,完整鑑識需要不少時間。如果現在只是想先知道「這台電腦到底有沒有問題?」「有哪些地方值得繼續追?」就可以先進行 Triage(鑑識快篩)。
Triage 原本就是「檢傷分類」的概念,放到數位鑑識裡,可以把它理解成:先快速檢查系統、縮小範圍,再決定哪些主機、程序或資料值得進一步鑑識。
假設今天發現一台電腦正在連線到可疑 IP,我們不一定要馬上把整台電腦分析完,而是可以先從幾個最基本的問題開始:這台電腦現在連到哪裡?是哪個 Process 建立連線?這個 Process 是什麼?還有沒有其他異常連線?
Windows 內建的 netstat 就可以先查看目前的網路狀態。
netstat -ano
其中 -a 會顯示目前的連線與 Listening Port,-n 直接顯示 IP 與 Port,-o 則會顯示對應的 PID。
假設看到:
TCP 192.168.1.10:49721 203.0.113.10:443 ESTABLISHED 4520
這筆資料可以告訴我們,這台電腦目前有一條連線連往 203.0.113.10:443,而建立這條連線的 Process ID 是 4520。
這時最重要的線索其實不是 IP 本身,而是最後面的 PID,因為知道 PID 之後,就可以繼續往下追到底是哪個程式建立了這條連線。
接著可以利用 tasklist 查詢 PID 4520。
tasklist /FI "PID eq 4520"
假設結果顯示:
Image Name PID
========================= ========
powershell.exe 4520
現在原本單獨的一條網路連線,就開始有了更多背景:
203.0.113.10:443
↓
PID 4520
↓
powershell.exe
這是 Live Triage 很重要的一個概念,不是看到一個異常就直接下結論,而是順著線索繼續往下追。
看到 powershell.exe 本身不能直接認定為惡意程式,因為 PowerShell 本來就是正常的 Windows 工具。真正值得注意的是,它為什麼會建立這條連線、從哪裡被啟動,以及前後還發生了什麼事情。
除了指定 PID,也可以直接執行:
tasklist
查看目前所有正在運作的 Process。
分析 Process 時,只看檔名通常還不夠。
例如一個叫做 svchost.exe 的程式,看起來像正常 Windows 系統檔案,但如果它出現在很不合理的位置,就值得繼續確認。
這時可以進一步查看 Process 的詳細資訊:
wmic process list full
除了程式名稱之外,也可以取得更多 Process 相關資訊與執行位置。
我們真正要看的是程式在哪裡執行?是誰啟動的?又和哪些連線有關?
當 Network、PID、Process 和 Path 開始被串起來之後,調查範圍就會比一開始小很多。
除了對外的 TCP/UDP Connection,也可以檢查 Windows 本身的網路連線。
net use
可以查看目前與其他網路資源建立的連線。
net session
則可以協助查看有哪些電腦與這台主機建立 Session。
如果事件涉及遠端存取、檔案分享或橫向移動,這些資訊就可能變得很重要。
另外也可以使用:
nbtstat -S
查看 NetBIOS 相關連線。
netsh advfirewall show allprofiles
則是可以用來檢查 Windows Firewall 設定。
因為異常遠端連線、非預期的 Port 或不合理的防火牆設定,都可能成為下一步調查的方向。
其實不需要把每一條 Windows 指令全部背起來,比較重要的是知道自己現在想回答什麼問題。
| 想知道的事情 | 可以先看的指令 |
|---|---|
| 現在有哪些網路連線 | netstat -ano |
| 哪個 Process 建立連線 | tasklist |
| Process 的詳細資訊與路徑 | wmic process list full |
| 是否連到其他網路資源 | net use |
| 有誰連進這台主機 | net session |
| NetBIOS 有哪些連線 | nbtstat -S |
| 防火牆目前狀態 | netsh advfirewall show allprofiles |
所以一次簡單的 Live Triage,可能是從一條可疑連線開始,找到 PID,再找到 Process 和執行位置,最後確認這台主機還和哪些系統建立連線。
整個過程的目的不是立刻證明「這就是惡意程式」,而是先把原本很大的範圍縮小。
前面我們一直強調數位鑑識要盡量避免改變原始證據,但現在直接在 Target Host 上執行 netstat、tasklist 和其他指令,本身其實也會改變系統狀態。
例如執行指令會產生新的 Process、使用 RAM,也可能留下部分操作紀錄。
所以 Live Triage 並不是完全不影響系統,而是要在需要即時取得資訊的情況下,用盡量少的操作取得最重要的資訊,並完整記錄自己做過什麼。
如果要將指令結果輸出成檔案,應避免隨意寫回 Target Host 的系統碟,以免造成不必要的變化。現場鑑識原則也強調,鑑識過程中的操作、主機狀態和現場環境都應留下紀錄。
最後還有一點很重要。
看到 powershell.exe 不代表它就是 Malware;看到 Port 443,也不代表它就是 C2;看到一個不熟悉的 Process,也不能馬上認定它是攻擊程式。
Live Triage 的目的比較像是在找哪些地方值得繼續調查?
真正要判斷一個行為是不是惡意,通常還是要搭配 Network、Process、Memory、Log、File 和其他 Windows Artifacts 一起看。
當不同來源的證據開始指向同一件事情,判斷才會比較有依據。