資安 · 繁體中文
當 CTF 遇上 Malware Analysis:我的第一次 Windows 惡意程式分析
從一次 Windows 7 VM 中觀察 malware.exe 的經驗出發,反思 CTF、Malware Analysis、Windows Forensics、DFIR 與 Blue Team 思維的差異。
我原本以為,所謂的「網路攻防」會是一場 CTF。
直到真正坐在 Windows 7 VM 前面,看著兩支 malware.exe 跑起來,我才發現自己想得太窄了。
這不是一篇活動心得。
比較像是我第一次發現,自己過去理解的資安,有很大一部分其實都站在「攻擊者」的視角。
看到「網路攻防」這幾個字的時候,我腦中很自然浮現的是靶機、Flag、Reverse、Web、Linux、CTF 平台。也許會有一台機器可以掃,也許會有漏洞可以打,也許最後會從某個路徑裡翻出一串 Flag。
但這次不是。
這次我面對的是 Windows 7 VM,還有兩支被拿來模擬分析的 malware.exe。題目要看的不是我能不能打進去,而是我能不能看懂它們在系統裡做了什麼。
真正讓我印象最深的,不是題目有多難,而是我第一次很明確地感覺到:
CTF 和真正的 Malware Analysis,是兩件不同的事情。
我原本以為會是 CTF
活動前看到「網路攻防」時,我其實有一點期待。
我想像中的畫面很典型:進到一個平台,打開題目,連到靶機,開始找漏洞。可能是 Web 題,要看 source code、測 payload、繞驗證。也可能是 Reverse 題,要丟進工具裡拆。或是 Linux 靶機,要掃 port、找服務、提權,最後把 Flag 拿出來。
這是我比較熟悉的資安學習方式。
CTF 的世界通常有一個很清楚的終點。你知道 Flag 一定存在,只是不知道它藏在哪裡。很多時候,只要找到關鍵點,整題就會突然打開。
所以我原本也用這種心態去看這次的「攻防」。
直到我發現桌面上不是 CTF 平台,也不是等著被打的靶機,而是一台 Windows 7 VM,以及兩支 malware.exe。
那一刻我才意識到,這次的重點不是「攻進去」,而是「看懂發生了什麼」。
不是找 Flag,而是觀察行為
這次真正要做的事情,是在 Windows 環境裡觀察惡意程式行為。
惡意程式執行後,可能會建立 process,可能會修改 Registry,可能會寫入檔案,也可能會產生 network connection。題目不是要我用 exploit 拿 shell,而是要我從這些痕跡裡判斷它做了什麼。
大概可以把分析方向拆成幾個面向:
| 面向 | 我需要觀察的問題 |
|---|---|
| Process | 它啟動了什麼?有沒有可疑的 parent-child 關係? |
| Registry | 它有沒有寫入啟動項或修改系統設定? |
| File | 它建立、修改或刪除了哪些檔案? |
| Network | 它連到哪裡?流量裡有沒有可疑內容? |
這跟我平常做 CTF 的感覺差很多。
CTF 比較像是「往前打」。我會一直問自己,入口在哪裡?漏洞在哪裡?Flag 在哪裡?
Malware Analysis 比較像是「往回還原」。我得問自己,這支程式剛剛做了什麼?它為什麼要這樣做?這個行為在 Windows 裡代表什麼?如果這是真的事件,會不會是感染、持久化、C2 連線,或資料外洩的前兆?
這種思考方式對我來說很新。
它沒有那種拿到 Flag 的瞬間回饋,但它更像是在接近真實世界的資安問題。
真正卡住我的,是工具熟悉度
這次我最大的收穫,其實不是發現自己完全不懂資安。
我反而覺得,我不是輸在概念,而是輸在工具熟悉度。
我知道 Wireshark 可以看封包,也知道 Procmon 可以看 process、file、registry、network。Autoruns、Process Explorer、TCPView 這些名字我也都聽過,甚至大概知道它們各自能做什麼。
但知道工具用途,跟在時間壓力下用工具找出答案,是兩回事。
Wireshark
Wireshark 我以前不是沒用過。
但這次要在流量裡快速找出可疑連線、domain、IP、HTTP request,或是判斷 malware 是否有對外連線時,我就明顯感覺自己不夠熟。
我知道可以下 filter,但我還沒有熟到看到一包 pcap 就能很快決定要從哪裡切入。
Procmon
Procmon 給我的衝擊更明顯。
它能看到的東西很多,多到如果 filter 下不好,就會被事件淹沒。Process 建立、檔案操作、Registry 存取全部混在一起,真正困難的不是「有沒有資料」,而是「我能不能從資料裡抓出有意義的行為」。
這也是我第一次感受到,工具不是打開就會自動給答案。
其他 Windows 工具
這次也碰到幾個我應該更熟的工具:
- Autoruns:看持久化與自動啟動位置。
- Process Explorer:看程序關係、DLL、handle 與更多 process 細節。
- TCPView:即時看 process 對外建立了哪些連線。
這些工具單看都不複雜,但真正分析 Windows Malware 時,它們不是分開存在的。
你會需要把 Process Explorer 看到的 process,對到 TCPView 裡的連線,再回去 Procmon 找它碰過哪些 Registry key 或檔案,最後再用 Wireshark 看封包內容。
我以前比較少這樣把工具串起來用。
所以這次真正慢下來的地方,不是我完全看不懂概念,而是我還不熟悉怎麼把工具變成分析流程。
我第一次站到防禦者的位置
以前做 CTF,我很自然會站在攻擊者角度。
找漏洞、利用漏洞、拿 Flag。
這沒有不好。CTF 訓練我拆問題、找線索、理解漏洞,也讓我建立了很多基礎。
但這次我第一次比較明確地站到防禦者的位置。
如果今天真的有一支 malware 在 Windows 裡跑起來,我要怎麼知道它做了什麼?
如果它開了連線,我要怎麼知道那是不是 C2?
如果它寫了 Registry,我要怎麼判斷那是不是 persistence?
如果使用者的電腦真的被感染,我要怎麼整理出一條合理的時間線?
這些問題跟 CTF 不太一樣。
CTF 的目標通常是「解出來」。但 Malware Analysis、Windows Forensics、DFIR 更像是在回答:「發生了什麼?」以及「證據在哪裡?」
這讓我開始對藍隊有新的想像。
藍隊不是比較簡單,也不是只是看 log。真正的防禦需要知道攻擊者可能怎麼做,也要知道系統在被碰過之後會留下什麼痕跡。
攻擊者只需要成功一次。
分析者要做的,是把那一次成功留下的痕跡找回來。
這句話是我這次之後才比較有感覺的。
CTF 還是重要,但它不是全部
我沒有因為這次經驗就覺得 CTF 不重要。
相反地,我更覺得 CTF 是很好的入口。它讓人願意開始碰資安,也會讓很多抽象概念變得具體。
只是我也開始發現,如果我的能力只停在 CTF,那會有一塊很大的空白。
我可能知道怎麼利用一個漏洞,但不知道惡意程式真的進到 Windows 之後會留下什麼。
我可能知道怎麼拿 Flag,但不知道怎麼看一台 endpoint 被感染後的痕跡。
我可能知道攻擊怎麼發生,卻不一定知道該怎麼把事件還原出來。
這就是我這次最大的轉變。
我不是從 CTF 離開,而是開始看到 CTF 之外還有另一條路。
那條路叫 Malware Analysis,也包含 Windows Endpoint Forensics、DFIR、Blue Team 和流量分析。
接下來想建立自己的 Malware Lab
這次之後,我很確定自己需要一個可以慢慢練的環境。
我想建立自己的 Malware Lab,不是為了炫技,也不是要一開始就分析很高階的樣本,而是想把基本功補起來。
我希望自己可以熟悉一個比較完整的流程:
- 在安全隔離的 Windows VM 裡執行樣本。
- 執行前先記錄 baseline。
- 用 Process Explorer 和 Procmon 觀察 process、file、registry 行為。
- 用 Autoruns 檢查 persistence。
- 用 TCPView 和 Wireshark 觀察 network connection 與封包。
- 把看到的行為整理成簡單的分析紀錄。
我現在還不敢說自己會 Malware Analysis。
但至少這次讓我知道,我想往那個方向走。
以前我看到「網路攻防」,第一個想到的是怎麼打進去。現在我會多想一步:如果真的被打進來了,我要怎麼知道發生了什麼?
這個問題,應該會是我接下來一段時間學習資安時,很重要的一條線。
CTF 讓我開始接觸資安。
而這次 Windows Malware Analysis,讓我第一次認真想理解防禦者眼中的世界。