iT邦幫忙

2026 iThome 鐵人賽

DAY 26
0
Security

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

[DAY 26] 不用大型工具也能查?用 Windows 指令做 Live Triage

  • 分享至 

  • xImage
  •  

前面幾天花了不少時間分析 Disk Image、Memory 和 Windows Artifacts,但真的遇到一台疑似有問題、而且還正在運作的電腦時,我們不一定一開始就會直接製作完整 Disk Image,再丟進鑑識工具慢慢分析。

一顆硬碟可能有幾百 GB,完整鑑識需要不少時間。如果現在只是想先知道「這台電腦到底有沒有問題?」「有哪些地方值得繼續追?」就可以先進行 Triage(鑑識快篩)。

Triage 原本就是「檢傷分類」的概念,放到數位鑑識裡,可以把它理解成:先快速檢查系統、縮小範圍,再決定哪些主機、程序或資料值得進一步鑑識。

假設今天發現一台電腦正在連線到可疑 IP,我們不一定要馬上把整台電腦分析完,而是可以先從幾個最基本的問題開始:這台電腦現在連到哪裡?是哪個 Process 建立連線?這個 Process 是什麼?還有沒有其他異常連線?

從 Network Connection 開始找

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 之後,就可以繼續往下追到底是哪個程式建立了這條連線。

從 PID 找到 Process

接著可以利用 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 和執行位置,最後確認這台主機還和哪些系統建立連線。

整個過程的目的不是立刻證明「這就是惡意程式」,而是先把原本很大的範圍縮小。

Live Triage 也會改變系統

前面我們一直強調數位鑑識要盡量避免改變原始證據,但現在直接在 Target Host 上執行 netstat、tasklist 和其他指令,本身其實也會改變系統狀態。

例如執行指令會產生新的 Process、使用 RAM,也可能留下部分操作紀錄。

所以 Live Triage 並不是完全不影響系統,而是要在需要即時取得資訊的情況下,用盡量少的操作取得最重要的資訊,並完整記錄自己做過什麼。

如果要將指令結果輸出成檔案,應避免隨意寫回 Target Host 的系統碟,以免造成不必要的變化。現場鑑識原則也強調,鑑識過程中的操作、主機狀態和現場環境都應留下紀錄。

Triage 不是用來直接定罪的

最後還有一點很重要。

看到 powershell.exe 不代表它就是 Malware;看到 Port 443,也不代表它就是 C2;看到一個不熟悉的 Process,也不能馬上認定它是攻擊程式。

Live Triage 的目的比較像是在找哪些地方值得繼續調查?

真正要判斷一個行為是不是惡意,通常還是要搭配 Network、Process、Memory、Log、File 和其他 Windows Artifacts 一起看。

當不同來源的證據開始指向同一件事情,判斷才會比較有依據。


上一篇
[DAY 25] 檔案有沒有被動過?Hash 怎麼幫我們驗證數位證據
下一篇
[DAY 27] 登入失敗 20 次,下一次卻成功?從 Windows Event Log 找異常
系列文
那些留在電腦裡的證據:從零開始認識數位鑑識 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言