摘要
「StegaBin」攻擊行動代表了供應鏈攻擊的一次複雜演進,透過多階段的感染鏈鎖定 npm 生態系統。此 Threat actor 利用隱寫術(Steganographic techniques),將惡意指令隱藏在 Pastebin 等公共平台上看似正常的文字中,成功地避開了傳統靜態分析對命令與控制(Command-and-control, C2)基礎設施的偵測。本報告深入技術層面,剖析感染機制、隱寫解碼過程,以及由九個專門的資訊竊取模組組成的後滲透套件(Post-exploitation suite)。分析結果突顯了 Dead-drop resolver 日益增加的複雜性,以及攻擊手法正轉向高度針對性的開發者環境資料竊取。
1. 簡介
供應鏈安全已成為網路安全領域的關鍵前線,其中 npm 這類套件管理器是引發大規模危害的主要媒介。StegaBin 攻擊行動於 2026 年初被發現,涉及發布 26 個惡意的 npm 套件,目的是從開發者環境中竊取認證(Credentials)和Secrets。與將 C2 位址寫死在程式碼中的簡單惡意軟體不同,StegaBin 採用「Dead-drop resolver」策略,讓惡意軟體從合法的第三方服務取得下一階段的指令。此技術不僅能繞過初始的安全審查,也讓攻擊者能夠靈活輪換基礎設施,而無需更新惡意套件本身 [1] 。
2. 仿冒套件名稱攻擊與初始存取
此攻擊行動的切入點依賴於仿冒套件名稱攻擊(Typosquatting),這是一種將惡意套件命名為與熱門函式庫相似名稱的技巧。已識別的 26 個套件鎖定了廣泛使用的框架和工具,包含
express
、
lodash
和
jsonwebtoken
。觀察到的一個常見模式是添加
-lint
後綴,透過模仿常見的開發者工具來營造一種合法感。為了進一步逃避偵測,這些套件通常會將其冒充的合法函式庫作為依賴項包含在內,確保受害者的應用程式在背景執行 Malicious payload 的同時,仍能正常運作
[1]
。
3. 多階段感染鏈分析
感染過程結構化地分為幾個不同的階段,每個階段都用於增加偵測和分析的難度。以下各節將詳細說明這些階段的技術執行細節。
3.1 第一階段:npm Install Hook
攻擊在安裝時即透過
package.json
檔案中的
scripts
欄位立即啟動。惡意軟體利用
preinstall
或
install
Hook 來執行本機端程式。在 StegaBin 攻擊行動中,
package.json
通常指向位於
./scripts/test/install.js
的檔案。
- // Simplified representation of the install hook in package.json
- {
- "name": "fastify-lint",
- "version": "5.8.0",
- "scripts": {
- "install": "node ./scripts/test/install.js"
- }
- }
install.js
檔案扮演著輕量級載入器的角色。它包含一些誘餌函式,例如
checkNodeVersion()
,以顯得無害,但其主要目的是引入並執行隱藏在一個供應商目錄(具體為
vendor/scrypt-js/version.js
)中的核心惡意邏輯。
3.2 第二階段:混淆的載入器(version.js)
version.js
檔案是初始感染的核心。它使用 RC4 字串加密、陣列旋轉(Array rotation)和控制流扁平化(Control-flow flattening)等技術進行了高度混淆。這些措施目的在對抗靜態分析工具,並增加手動逆向工程的難度。一旦去除混淆,該程式會揭示一個包含三個 Pastebin URL 的備用鏈(Fallback chain)。這些 URL 託管著看似無害的計算機科學主題文章,但實際上包含了編碼後的 C2 基礎設施
[1]
。
3.3 第三階段:隱寫解碼機制
StegaBin 使用的隱寫術是字元級別的替換。解碼器讀取 Pastebin 的內容,識別出一個 5 位數的長度標記,然後以特定、均勻的間隔提取字元。這些字元連接起來,就形成了攻擊下一階段的 URL。這種方法特別有效,因為最終的文字對人類而言仍然可讀,且隱藏的資料不會顯著改變文字的統計特性。
解碼邏輯可以用以下 pseudocode 總結,說明了惡意軟體如何從正常文字中提取隱藏的 C2 位址:
- // Pseudocode for Steganographic Decoder
- function decodeStega(text) {
- // Remove zero-width characters and metadata
- let cleanText = text.replace(/[\u200B-\u200D\uFEFF]/g, '');
- let lengthMarker = parseInt(cleanText.substring(0, 5));
- let step = Math.floor(cleanText.length / lengthMarker);
- let hiddenData = "";
- for (let i = 0; i < lengthMarker; i++) {
- hiddenData += cleanText[i * step];
- }
- // Split by separator to get C2 domains
- return hiddenData.split('|||');
- }
4. C2 基礎設施與 Dead-drop resolver
使用 Dead-drop resolver 是先進持續性威脅(Advanced persistent threats, APTs)的一個標誌。透過利用 Pastebin 這類平台,攻擊者確保來自受感染主機的初始網路請求是導向一個受信任的網域,從而降低觸發警報的可能性。此技術與其他一些攻擊行動相似,例如濫用 Google Calendar 作為 C2 解析器 ,利用事件描述來儲存編碼後的 payload [2] 。在這兩種情況中,目標都是將惡意軟體與其基礎設施分離,以實現動態更新並提高抵禦下架的能力。
在 StegaBin 攻擊行動中,解碼後的 URL 指向 31 個不同的 Vercel 部署。Vercel 是一個用於靜態網站和無伺服器功能的熱門雲端平台,它為惡意的後端提供了一個看似合法的外觀。惡意軟體會嘗試連線到這些端點,以取得特定平台的 shell payload(例如,Linux/macOS 的
.sh
程式,或 Windows 的
.ps1
程式)。
5. 後滲透:9 模組資訊竊取套件
一旦 shell payload 被執行,它會安裝一個遠端存取木馬(Remote Access Trojan, RAT)並部署一個由九個資訊竊取模組組成的全面套件。這些模組高度專門化,鎖定開發者環境中特定的資產:
- VSCode 設定: 竊取設定和擴充功能,可能包含儲存的 token。
-
SSH 金鑰收集器:
從
~/.ssh搜尋並外洩私鑰。 - Git 儲存庫外洩器: 識別本機 git 儲存庫並上傳其設定和歷史記錄。
- 瀏覽器認證竊取器: 針對 Chrome、Firefox 和 Edge,提取儲存的密碼和 cookies。
- 剪貼簿監控器: 持續監控系統剪貼簿,尋找密碼或加密貨幣位址等敏感資料。
- TruffleHog 整合: 使用 TruffleHog 引擎掃描本機檔案系統,尋找寫死在程式碼中的 secrets 和 API keys。
- 系統 Metadata 收集器: 收集詳細的硬體和軟體資訊。
- 環境變數 Dumper: 提取所有環境變數,這些變數在開發環境中通常包含敏感的認證。
- 鑰匙圈/認證管理員存取: 嘗試存取系統層級的認證儲存庫。
像 TruffleHog 這類工具直接被整合到惡意軟體套件中,顯示出其高度的技術成熟度。惡意軟體並非簡單地外洩原始資料,而是在設備上進行分析,以識別最有價值的 secrets,從而減少需要發送到 C2 的資料量,並提高攻擊效率 [1] 。
6. 歸因與 TTPs
在 StegaBin 攻擊行動中觀察到的策略、技術和程序(Tactics, Techniques, and Procedures, TTPs)與一個名為 FAMOUS CHOLLIMA 的知名國家級攻擊者行為一致。該組織長期以來一直以開發者和軟體供應鏈為目標。使用隱寫術、Dead-drop resolver,以及特別關注 SSH 金鑰和 VSCode 設定等開發者中心資產,是他們行動的標誌性特徵。該攻擊行動的基礎設施也與先前的「Contagious Interview」活動重疊,在那次活動中,開發者被誘騙以技術測驗為由安裝惡意套件 [1] 。
7. 結論
StegaBin 攻擊行動凸顯了在開發者工作流程中實施強健安全措施的必要性。傳統的邊界防禦和靜態分析,對於利用隱寫術和合法雲端服務的多階段攻擊而言,已越來越不足以應對。組織必須採用多層次的防禦策略,包括使用能夠偵測異常 Install Hook 和隱藏 Unicode 字元的 先進第三方套件掃描工具 [2] 。此外,應教育開發者了解仿冒套件名稱攻擊的風險,以及在安裝前驗證套件完整性的重要性。隨著 Threat actor 不斷改進其技術,開源生態系統的安全性將持續是全球科技產業的首要關注點。