重點一句話
說真的,其實你不用買超貴的資安設備,光是用 Azure 內建的 Microsoft Sentinel,就能自己動手,像個偵探一樣,把那些試圖偷偷闖進你家主機的駭客給揪出來。
我還真的抓到了…從巴西來的攻擊?
這件事說來有趣。我本來只是想做個實驗,看看威脅獵捕 (Threat Hunting) 到底是什麼感覺。所以我就在 Azure 上開了一台 VM,你知道的,就是虛擬機,然後故意把它的防火牆之類的都設定得超鬆散,基本上就是大門敞開,歡迎光臨的狀態。
然後,我就故意用錯的帳號密碼去登入它,想看看日誌(log)會不會乖乖記錄下來。一開始都還在預期之內,Event Viewer 裡面確實有看到我亂打的帳號,像「ThisIsFAKE」之類的,證明 log 有在運作。
但…事情從我把這些 log 全部接到 Microsoft Sentinel 之後開始變得不一樣。我只是放著讓那台 VM 跑了一天,隔天回來一看,我的老天,警示(Alerts)跳個沒完。一開始我還以為是我自己測試時搞的,結果仔細一看,完全不是。
一堆陌生的 IP 位址,前仆後繼地嘗試用「Administrator」、「admin」這種萬年預設帳號來登入我的 VM。這就是典型的暴力破解攻擊啊。我隨手挑了一個看起來最執著、試了超多次的 IP,拿去查了一下…結果,你猜怎麼著?它居然是從巴西來的!
我人在台灣,主機在 Azure 的東亞機房,結果一個來自巴西的 IP 拼了命想登進來。這感覺超現實的,但也證明了,只要你的主機連上網路,不論在哪,你就是全球駭客的潛在目標。也讓我瞬間明白,學會看懂這些 log、自己做威脅獵捕,到底有多重要。
怎麼做?重現我的「駭客釣魚」實驗場
好,故事說完了,來講講到底要怎麼搭出這個環境。我自己是覺得,親手做過一遍,遠比看十篇文章還有用。過程有點瑣碎,但跟著做,你也能蓋出自己的靶機,親眼看看網路世界有多「熱鬧」。
基本上,整個流程就是:蓋一台超脆弱的 VM → 把它的 Log 接到 Sentinel → 用 KQL 語法開始抓鬼。
步驟一:蓋一間「沒鎖門」的房子 (Azure VM)
你需要一個 Azure 帳號,用免費試用版給的點數就綽綽有餘了。進到 Azure Portal 之後,直接搜尋「Virtual Machine」。
- 建立 VM:就…一直按下一步。不過在「Networking」那邊要停一下。我們要建立一個新的網路安全性群組 (NSG),然後把規則改成「Any source, Any destination」。對,你沒看錯,就是讓任何人、從任何地方都可以連進來。這在真實世界是自殺行為,但在我們的實驗裡,這叫「誘餌」。
- 關閉 VM 內部防火牆:用遠端桌面 (RDP) 連進你剛剛建立好的 VM。進去之後,找到「Windows Defender Firewall with Advanced Security」,然後把 Domain、Private、Public 這三個設定檔的防火牆狀態全部設成「Off」。把它扒光就對了。
做到這一步,你的 VM 基本上就是在網路上裸奔了。這超危險,所以千萬記得,這台 VM 裡面不要放任何重要資料。
步驟二:裝上監視器 (Log Analytics & Sentinel)
光有房子沒用,你得有監視器才知道誰進來了。在 Azure 裡,我們的監視器組合就是 Log Analytics Workspace 跟 Microsoft Sentinel。
- 建立 Log Analytics Workspace:這東西你可以把它想像成一個超大的硬碟,專門用來存放所有 log。在 Azure Portal 搜尋「Log Analytics Workspace」,然後建立一個新的。地點選哪沒差,但最好跟你 VM 同一個區域,速度會快一點。
- 建立 Microsoft Sentinel 實例:Sentinel 就是我們的大腦,負責分析這些 log。搜尋「Microsoft Sentinel」,建立一個新的實例,然後把它「附加」到你剛剛建立的那個 Log Analytics Workspace 上面。這樣它才知道要去哪裡讀資料。
步驟三:把監視器線路接起來
房子蓋好了,監視器也裝了,現在要把兩邊連起來。
這一步最繞,但很重要。你要進到 Sentinel 的「Content hub」,搜尋並安裝「Windows Security Events」。安裝完之後,到「Data connectors」頁面,找到「Windows Security Events via AMA」,點進去設定。
它會請你建立一個「Data Collection Rule」(資料收集規則)。你就照著步驟,選擇你要收集「All Security Events」(所有安全性事件),然後把規則套用到你那台裸奔的 VM 上。按下建立後,等個幾分鐘,你的 VM 產生的所有安全性 log 就會開始源源不絕地流進 Sentinel 了。
開始抓鬼:我的 KQL 常用查詢語法
好了,前置作業完成。現在才是最好玩的地方。進到你的 Log Analytics Workspace,點開「Logs」,你會看到一個像命令列的視窗。這就是我們跟 log 對話的地方,用的語言叫做 Kusto Query Language,簡稱 KQL。
它看起來很嚇人,但說穿了,就是一套過濾跟篩選資料的語法。我自己是覺得,你不用背,但至少要理解幾個關鍵的查詢邏輯。
第一個必查:登入失敗 (Event ID 4625)
這是威脅獵捕的起手式。Event ID 4625 就是 Windows 記錄「有人登入失敗」的代號。任何暴力破解、猜密碼的行為,都會留下這個足跡。
SecurityEvent
| where EventID == 4625
| where AccountType == "User"
| project TimeGenerated, Account, IpAddress, TargetAccount
| order by TimeGenerated desc
簡單翻譯一下這段咒語:
- `SecurityEvent`:告訴 KQL 我們要在「安全性事件」這張大表裡面找。
- `where EventID == 4625`:篩選出所有登入失敗的事件。
- `where AccountType == "User"`:過濾掉一些系統帳號的雜訊,我們只關心「真人」帳號的登入。
- `project ...`:只顯示我們感興趣的欄位:什麼時候發生的 (TimeGenerated)、誰試的 (Account)、從哪個 IP (IpAddress)、他想登入哪個帳號 (TargetAccount)。
- `order by ... desc`:把最新的結果排在最上面。
光是這一個查詢,你就能看到所有試圖闖進你家的不速之客了。當你看到一堆來自你根本不認識的國家的 IP,試圖用 "admin" 登入,那種感覺真的很…嗯,很刺激。
不同事件 ID 告訴你的不同故事
當然,只看 4625 是不夠的。一個完整的偵探故事需要更多線索。下面這張表是我自己整理的,在做威脅獵捕時,我會交互比對這幾個事件 ID,拼湊出完整的攻擊鏈。
| 事件 ID (Event ID) | 它在說什麼故事? (口語解釋) | 我會怎麼用它? |
|---|---|---|
| 4625 | 有人在敲門,但拿錯鑰匙了。這就是抓賊的關鍵證據! | 第一步先看這個。如果短時間內有一大堆,八成就是被自動化工具掃描了。 |
| 4624 | 門開了,有人成功進來了。這是「好人」或「已經得手的壞人」的紀錄。 | 拿來跟 4625 比對。如果一個可疑 IP 在失敗 N 次後,突然成功了,那事情就大條了。 |
| 4634 | 有人離開,把門帶上了。這是正常登出的紀錄。 | 如果只有登入(4624)卻沒有對應的登出紀錄,或登入時間超長,這也很可疑。 |
| 4648 | 有人用「管理員權限」在做事。這就像拿到了萬能鑰匙。 | 一旦有可疑帳號成功登入,我就會立刻查他有沒有觸發這個事件,看他是不是想搞破壞。 |
風險與應變:光抓到還不夠
OK,透過 KQL 你抓到一堆可疑 IP 了,然後呢?然後才是真正考驗的開始。
我自己是覺得,威脅獵捕的重點不在於抓到「多少」,而在於抓到之後「怎麼辦」。你可以設定一個自訂警示規則 (Custom Alert Rule),例如「同一個 IP 在 10 分鐘內登入失敗超過 20 次,就立刻發通知給我」。這樣就不用一直手動查。
再來,對於那些已經確認是惡意的 IP,最直接的做法就是在你的防火牆(NSG)上,直接把它的 IP 或整個國家的 IP 段給封鎖掉。雖然攻擊者可以換 IP,但至少能擋掉一大部分懶惰的自動化攻擊。
說到這個,我就想到美國的 CISA (網路安全與基礎設施安全局) 就常常發布一些關於 RDP 弱點的通報,他們會提供很多技術細節跟建議的防禦策略。不過呢,這點跟我們在台灣看到的情況很不一樣,比如說,台灣電腦網路危機處理暨協調中心 (TWCERT/CC) 的公告,除了技術建議,通常會更強調「通報流程」跟「協調應變」。
這也提醒我,技術上封鎖 IP 是一回事,但如果你是企業,遵循在地的通報規範,讓主管機關掌握威脅情資,可能同等重要。這不是技術問題,而是治理跟合規的問題了。
反例與誤解釐清
最後,我想講幾個我剛開始玩的時候常搞混的點。
- 誤解一:警報越多越好?
錯。警報疲乏是真的。一開始我設定「只要有登入失敗就通知我」,結果手機響個沒完。後來才學到,重點是設定「有意義的」閾值,比如前面說的「10 分鐘內失敗 20 次」,才能篩掉雜訊,專注在真正的威脅上。 - 誤解二:封鎖 IP 就天下太平了?
很遺憾,不是。專業的攻擊者會用代理伺服器、殭屍網路,IP 一直換。封鎖 IP 只是基本功。更進階的獵捕,是要去分析攻擊者的「行為模式」,例如他們喜歡用什麼工具、在什麼時間活動、嘗試什麼帳號名稱。從 IP 追蹤進階到行為追蹤,才是更深一層的功夫。 - 誤解三:只有 Windows 需要擔心?
這次實驗我們是用 Windows VM,所以都看 Windows Security Event。但真實世界裡,你的 Linux 主機、你的防火牆、你的網站伺服器…全都在產生 log。一個好的 SIEM 平台,就是要能把這些「異質」的 log 全部收進來做關聯分析。今天的故事,只是個開端而已。
我自己是覺得,Threat Hunting 有點像釣魚,也像解謎。你需要耐心,需要對工具的熟悉,還需要一點點直覺。從茫茫 log 大海中,找到那條不對勁的魚,那種成就感,說真的,還蠻酷的。
現在你已經知道基本的方法了,換你試試看了。你覺得在你的環境中,第一個最該監控的「可疑行為」會是什麼?是登入失敗,還是檔案的異常讀取?在下面分享一下你的想法吧!
