解剖一次失敗的國家級攻擊:PinpinRAT 分析

解剖一次失敗的國家級攻擊:PinpinRAT 分析

一場針對開發者的精密網路釣魚活動已被揭露,該活動利用多階段投放器(dropper)來安裝名為 PinpinRAT 的遠端存取木馬(RAT)。此攻擊利用虛假面試詐騙,攻擊者偽裝成風險投資家,誘使開發者複製惡意儲存庫並執行建置指令,進而觸發一系列經過混淆處理的有效載荷(payloads),藉此規避標準防毒軟體的偵測。

攻擊向量:社交工程

攻擊始於高度針對性的社交工程活動。攻擊者使用偽造的人設——偽裝成已倒閉或虛假的風險投資公司(例如「Lua Ventures」)的代表——並透過電子郵件和 LinkedIn 聯繫開發者。

為了建立信任,攻擊者會:

  • 使用看起來很真實的 LinkedIn 個人檔案,並附帶令人印象深刻但模糊的資歷。
  • 提及早期階段的公司名稱,以證明顧問工作的必要性。
  • 與目標進行實際的語音通話,通常會以「正在旅行」為藉口,來解釋口音或攝影機使用上的不一致。
  • 根據開發者的公開貢獻(例如發佈在 crates.io 的套件)來鎖定目標。

PinpinRAT 投放器的技術細節

惡意有效載荷是透過一個以渡輪訂票應用程式「Ticket Harbor」為主題的 TypeScript 儲存庫進行傳遞。感染鏈的設計旨在保持靜默與隱蔽,利用了多層混淆技術:

1. 初始執行

當開發者執行 typecheck 或 build 指令時,陷阱就會觸發。流程如下:

  • Postinstall Hooks: 四個獨立的 postinstall hooks 會執行 patch-package。其中一個 hook 會對補丁檔案執行 git update-index --skip-worktree,這會防止修改過的檔案出現在 git status 中。
  • Payload Injection: 一個名為 typescript+5.9.2.patch 的檔案會將一個自我執行的、經 XOR 解密的 base64 blob 注入到 typescript.js_tsc.js 中。此 stub 避免使用 eval() 以規避惡意軟體偵測。

2. 第二階段載入

初始 stub 會讀取附加在圖片檔案(operators/3.png)中的隱藏數據塊。這些數據包含一個嵌入在自定義 wAsm 塊中的小型 WebAssembly (WASM) stub。接著,WASM stub 會產生一個分離且靜默的 Node.js 程序,該程序攜帶一個 1.68 MB 的混淆第二階段有效載荷。

3. 持續性與清理

該惡意軟體使用三層清理機制來避免偵測:

  • 使用 git skip-worktree 技巧來隱藏補丁。
  • 投放器會重寫補丁檔案,在第一次執行後刪除其注入的行。
  • 第二階段的暫存目錄會在執行時自我刪除。

PinpinRAT 功能

PinpinRAT 是一個功能齊全的遠端存取木馬。它使用 RSA-2048 進行金鑰交換,並使用 AES-256-CBC 進行工作階段加密,確保所有流量都帶有 HMAC-SHA256 完整性標籤。

啟動時,RAT 會收集以下主機指紋資訊:

  • 主要及所有網路介面 IP 地址。
  • 使用者名稱、主機名稱以及作業系統詳細資訊(版本、平台、架構)。
  • 程序 PID 與完整的 process.argv
  • Node.js 版本。

攻擊者可以對受害主機發送以下指令:

  • env: 匯出所有環境變數。
  • upload: 讀取並匯出任意檔案。
  • download: 將攻擊者提供的位元組寫入任何路徑。
  • spawn: 執行帶有 shell expansion 的任意程序。
  • ls, cd, pwd, cp, mv: 完整的檔案系統操作。
  • dns: 將主機作為任意名稱的解析器(可能用於 DNS 隧道技術)。
  • dismantle: 自我移除惡意軟體。

入侵指標 (IoCs)

如果懷疑系統遭到感染,應檢查以下指標:

  • C2 Server: 89.124.107.161:80
  • Windows Scheduled Task: PinpinWrappedJs
  • macOS Process Masquerade: com.apple.WebKit.Networking
  • Environment Variables: NODT_PAYLOAD_PATH, NODT_PAYLOAD_ARGS
  • PNG Chunk Guard: WASMPACK (wAsm)
  • Anchor Strings: 12ff4b51, ticket-harbor-tsc-shim-anchor (發現於 typescript.js 中)
  • Artifact Directories:
    • macOS: ~/Library/Caches/runtime-cache/.cache-<randomhex>/
    • Linux: /tmp/.cache-<randomhex>/
    • Windows: %TEMP%\.cache-<randomhex>\

專家分析與緩解措施

社群討論指出,此攻擊模式與 Lazarus Group 非常相似,後者以透過 LinkedIn 和工作面試詐騙來鎖定開發者而聞名。

為了降低這些風險,開發者應採取以下安全實踐:

  • 使用臨時環境: 絕不要在個人或公司電腦上執行來自工作面試或外部來源的不可信代碼。請使用拋棄式虛擬機 (VM) 或沙盒容器。
  • 使用受限執行環境: 利用 Deno 的網路封鎖/白名單功能,或使用 Bun 的 --ignore-scripts 旗標來防止惡意的 postinstall hooks 執行。
  • 使用供應鏈工具: 使用如 pnpm 等在供應鏈安全方面有所進展的套件管理員。
  • 對 LLM 生成的內容保持警惕: 請注意,攻擊者現在正使用 LLM 來製作極具說服力且聽起來很專業的網路釣魚郵件和 LinkedIn 個人檔案。

Sources