PhantomBot:從憑證竊取到殭屍網絡

PhantomBot:一個從竊取憑證轉向提供交鑰匙殭屍網路工具包的網域搶注活動

TL博士

單一 npm 發布者, deadcode09284814,曾針對合法網域發起拼字錯誤搶注活動。 axios 以及 chalk-template 自 2026 年 5 月中旬以來的包裹。

該攻擊活動最初表現為傳統的憑證和錢包竊取,將資料洩露到… Serveo HTTPS 隧道.

On 2026-05-17axois-utils:1.0.9操作員完全替換了有效載荷:相同的三重安裝鉤子腳手架、相同的發布者、相同的軟體包名稱。

但現在安裝腳本已成為跨平台 DDoS 殭屍網路的一員。

有效載荷指向一個 localhost.run 隧道並接受洪水攻擊命令,將受感染的環境變成能夠進行 DDoS 攻擊的殭屍網路的一部分。

營運商甚至還出貨了 C2 伺服器二進位文件 tarball 內部顯示,從憑證竊取到活躍的殭屍網路基礎設施,攻擊手段明顯升級。

兩個軟體包,註冊表中仍有四個活躍版本,現在有一個操作員正在並行運行這兩個模組。

嚴重程度:高。

國際奧委會頭條新聞 任何來自發布者 deadcode09284814 的 axois-utils 或 chalk-tempalte 版本

攻擊原理

這項活動建立在一個刻意平庸的推廣框架之上:兩個拼字錯誤的軟體包名稱,僅與每週下載量達數億次的軟體包名稱相差一個字母(軸距, 粉筆模板),並進行三重安裝 hooks 這保證了執行。有趣的是,這個框架是什麼。 攜帶 ——而且操作員在未改變其他任何內容的情況下更換了貨物。

共享鷹架

這兩個軟體包的每個已發布版本都聲明了相同的三個生命週期。 hooks in 的package.json:

在所有三個類別下列出有效載荷 hooks 反應過度了—— 安裝後 單獨運行會在預設模式下運作。 npm安裝選擇至關重要: npm install --ignore-scripts 跳過腳本,但幾個常見的流程(CI 快取復原會重新執行生命週期) hooks 選擇性地,或只進行審計的開發人員 安裝後對攻擊者而言,三重冗餘聲明是最安全的選擇。

粉筆模板 增加了第二種機制:它聲明 axois-utils:^1.0.7 作為運行時環境 依賴安裝 typosquatted 粉筆模板 因此,它也會拉取同級的 typosquat 包,兩個包都會運行。這兩個包是協同工作的,而不是獨立的。

A階段-憑證/錢包竊取器(2026年05月15日至今)

A階段是原始酬載。裝載機是一個短的 postinstall.js 這指向一個Serveo HTTPS反向隧道:

Serveo 子網域對目標 IP 進行編碼(80.200.28.28直接在主機名稱中-這是該服務的一個可識別的約定。業者會在不同版本之間輪換隨機子網域前綴,以規避簡單的網域黑名單,但底層 IP 位址始終保持不變。粉筆模板:1.0.148a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 使用 f04a273bd84c0622-….)

postinstall.js 放手 phantom.js一個包含 7,667 行程式碼的捆綁式「收集器」模組。 phantom.js 陪同主人散步:

SSH 私鑰(~/.ssh/*)
.npmrc 內容和任何 npm_* 環境令牌
AWS、GCP 和 Azure 憑證文件
GitHub 個人存取權杖正規表示式(ghp_*, gho_*, ghu_*, ghs_*)
適用於比特幣、Exodus、Electrum、門羅幣、萊特幣、狗狗幣、Zcash、達世幣的加密錢包文件
遞迴 .env* 走過 ~/projects, ~/dev, ~/code, ~/workspace以及安裝 cwd
殼牌公司的歷史及全部內容 process.env

該資料包透過 POST 方式傳送到 Serveo 隧道。 / 蒐集沒有混淆,沒有反虛擬機器邏輯,沒有分階段部署-營運商押注的是容量和速度。

B階段-PhantomBot DDoS攻擊招募(2026年05月17日,限axois-utils:1.0.9版本)

B階段將phantom.js和postinstall.js替換為一個名為distribube.js的單一檔案(拼字錯誤是操作員的筆誤)。 package.json中的三重鉤子結構保持不變;包的名稱、作用域和版本號遞增模式也保持不變。從表面上看,axois-utils:1.0.9似乎是1.0.6的一個小版本更新。但實際上,它屬於不同的惡意軟體家族。

distribube.js 首先是一個配置區塊,用來指定營運商本身的品牌名稱:

// axois-utils-1.0.9/distrube.js:11-15
// Use your localhost.run HTTPS URL (the tunnel handles HTTP internally)
const C2_HOST = 'b94b6bcfa27554.lhr.life'; // Your localhost.run tunnel
const C2_PORT = 443; // HTTPS port - tunnel handles SSL
const BOT_ID = `${os.hostname()}_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`;

這些註解是針對未來執行該工具包的操作人員的(「使用您的 localhost.run HTTPS URL」)。這一點,再加上機器人客戶端附帶的內容,足以表明這不僅僅是一個受害者有效載荷——它就是整個工具包。

流程:

  1. 堅持 首先運行。該腳本針對不同的作業系統,以三種不同的方式安裝自身(登錄)。 運行 + 啟動資料夾 + 任務 在 Windows 系統上;crontab + phantom-bot.service systemd 單元 + 的.bashrc/.zshrc 追加 + 在/etc/rc.local 在 Linux 系統上; LaunchAgent com.phantom.bot.plist 在 macOS 上)。持久化服務名稱和 LaunchAgent 標籤都是 幻影機器人 / com.phantom.bot這也是這次競選名稱的由來。
  2. 系統資訊外洩 僅運行一次-向 b94b6bcfa27554.lhr.life:443/collect 發送一次性指紋 POST 請求,請求中包含主機名、平台、架構、使用者名稱、CPU/記憶體、網路介面、process.env 檔案、目前工作目錄、使用者主目錄、節點版本和公網 IP 節點。這比 A 階段的攻擊性要低得多:不使用 SSH,不使用錢包,也不進行 .env 檔案遞歸修改。該機器人的任務是註冊,而不是竊取資料。
  3. 心跳循環 每 30 秒向 b94b6bcfa27554.lhr.life:443/ 發起一個 HTTPS POST 請求。 User-Agent 為 PhantomBot/1.0。 TLS 驗證已明確停用(rejectUnauthorized: false)。 C2 回應被解析為 JSON 格式的 {type, target, port, duration, threads, method} 並進行分發。
  4. 洪水兵工廠 它與六條指令相連:
命令類型 模塊 筆記
即時回覆 機器人進行自我識別
HTTP HTTP 洪水攻擊 7 層請求泛洪
HTTPS HTTPS 淹水攻擊 與 http 相同,TLS 封裝
TCP TCP 洪水攻擊 65 KB 隨機有效載荷垃圾郵件
UDP UDP 洪水攻擊 65,507 位元組的 UDP 封包
迅速 HTTP/2 快速重置拒絕服務攻擊 2023 年 CVE-2023-44487 技術

所有五個洪水模組都採用 目標, 端口, 為期以及 線程 論點-該機器人是一個通用的僱用攻擊機器人,並非針對任何特定受害者。運營者的受害者清單儲存在C2伺服器上,而不是軟體包中。

新增內容-已發布的 C2 二進位文件

A階段是常見的模式:憑證竊取、安裝鉤子、廠商隧道C2伺服器。 B階段是 這是一個熟悉的形態——DDoS殭屍網路多年來一直是惡意npm套件的常見組成部分。不同尋常的是,攻擊者竟然發布了… 伺服器端 npm tarball 中的工具包:

  • c2 — 一個 4 兆位元組的已編譯 Go ELF 二進位文件
  • c2.go — 該二進位檔案的 426 行 Go 原始碼

這兩個檔案都沒有被任何安裝鉤子呼叫。它們不屬於受害者的有效載荷。它們像文件檔案一樣位於軟體包目錄中。最合理的解釋是,攻擊者在未整理文件清單的情況下將其開發工作樹推送到了 npm——這是一個嚴重的運維疏忽——結果推送的卻是完整的雙向工具包:受害者運行的客戶端和攻擊者運行的伺服器。

故事的這一部分恰恰證明了「交鑰匙殭屍網路工具包」的說法是合理的。任何下載過該工具包的人都可能遇到這種情況。 axois-utils:1.0.9 在下架伺服器之前,他們不僅掌握了受害者樣本,還掌握了正在運行的 C2 伺服器。

樞紐,用一句話概括。

同樣的發行商,同樣的軟體包名稱,同樣的三鉤式框架,同樣的「幽靈」品牌——但 有效載荷一夜之間改變了獲利模式。從「收集可轉售的秘密」到「租用可租賃的洪水攻擊能力」。防禦者應該關注的安裝時戰術、技術和程序 (TTP) 在兩個階段幾乎相同;基於簽章的防禦措施,分別針對 A 階段的錢包路徑字串或 phantom.js的 7,667 線集線器將完全錯過 B 相。

日期(UTC) 創建
2026-05-15 首次發表: axois-utils:1.0.4 (區域網路測試版本,開發環境) 192.168.129.19)
2026-05-15 axois-utils:1.0.6 已發布-A階段C2已切換至 80.200.28.28 通過 Serveo 隧道;來源評論 // Change to '80.200.28.28' for public 確認開發環境到生產環境的切換
2026-05-16 chalk-tempalte:1.0.14 以及 1.0.16 已發布 — 鍊式裝載機聲明 axois-utils:^1.0.7 作為運行時依賴項;Serveo 子域名已輪換
2026-05-16 在例行 npm 掃描中發現 A 階段攻擊活動;已確認惡意行為。
2026-05-17 axois-utils:1.0.9 已發布 — 有效載荷轉移:透過 localhost.run 隧道招募 PhantomBot DDoS 攻擊者;營運商端 c2 二進制和 c2.go 原始碼包含在壓縮包中
2026-05-17 chalk-tempalte:1.0.19 以及 1.0.20 已發布-仍處於A階段(竊取器);運營商目前兩個模組並行運行。
2026-05-17 在常規掃描中發現B期病變;判決適用於所有情況 2026-05-17 版本
(進行中) 下架報告待處理;截至發稿時,所有四個已發布的軟體包仍可在註冊表中找到。

妥協指標

配套

生態系統 小包裝 版本
NPM axois-utils (axios 的拼字錯誤) 1.0.4, 1.0.6, 1.0.9
NPM chalk-tempalte (粉筆模板的拼字錯誤) 1.0.14, 1.0.16, 1.0.19, 1.0.20

作者身份

價值
npm 發布者 deadcode09284814
出版商電子郵件 phantomdeadcode@tutamail.com
SCM 驗證 沒有

命令與控制

段落 端點 交通
A f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect Serveo HTTPS 隧道
A 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect Serveo HTTPS隧道(早期版本)
A 80.200.28.28:443/collect 底層VPS端點
B b94b6bcfa27554.lhr.life:443/ localhost.run HTTPS 反向隧道

文件摘要(SHA-256)

文件 SHA-256 筆記
c2 (GO ELF,4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 運營商端 C2 伺服器,內建於… axois-utils:1.0.9
c2.go (426行) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 C2 二進位檔案的 Go 原始碼
distrube.js 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 B階段機器人客戶端
phantom.js (chalk-tempalte:1.0.19) 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 A階段憑證/錢包收集器
phantom.js (chalk-tempalte:1.0.20) d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 A階段收集器(1.0.20版本)
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 A階段載入器,兩個版本位元組完全相同

歸因與動機

我們會追蹤此次活動。 幻影機器人採用了營運商本身的品牌標識 用戶代理:PhantomBot/1.0 心跳標題, phantom-bot.service systemd 單元, com.phantom.bot LaunchAgent 標籤,以及 phantomdeadcode@ 郵箱地址。該操作員在至少四個工件中都使用了相同的名稱。

信號目錄

  • 出版者 死碼09284814 在 npm 上。單帳號,Tutamail 一次性信箱,無 SCM 已核實。除本次活動外,無其他出版紀錄。
  • 品牌重複使用 — 「phantom」出現在出版商電子郵件中,也出現在A階段收集器檔案名稱中(phantom.js),在 B 階段持久性服務名稱(phantom-bot.service),在 LaunchAgent 標籤中(com.phantom.bot),以及在機器人 User-Agent 中(PhantomBot/1.0).
  • 基礎建設 — 單一 VPS 80.200.28.28 A階段透過Serveo子域輪換進行;B階段轉移到 localhost.run 反向隧道(b94b6bcfa27554.lhr.life)。這兩個供應商的服務都是免費的,並且只需要運營商端的出站 SSH,符合低預算、低營運安全設定的要求。
  • 程式碼風格 — 全程使用純 JavaScript;無混淆、無字串編碼、無反虛擬機器檢查。變數名具有描述性(竊取系統資訊, 執行命令, httpFlood)。評論中 distribube.js 直接向未來的操作員發出指令(「使用您的 localhost.run HTTPS URL」),這表示該檔案旨在作為工具包重新分發,而不是供單一攻擊者使用。
  • OpSec 滑倒 — B階段壓縮包同時包含機器人客戶端和運營商端的C2伺服器(c2 ELF + c2.go (來源)。這與操作員在未審核文件清單的情況下將工作目錄推送到 npm 的情況一致。要嘛是操作員經驗不足,要嘛是工具包有問題。 意思 將公開分發,C2 二進位檔案是產品的一部分。
  • 自我確認 axois-utils:1.0.4 包含來源評論 // 改為 '80.200.28.28' 以公開訪問 第 12 行確認了開發/測試/生產階段的進展,而營運商通常會否認這一點。

動機

A階段的酬載是直接的金融竊盜:憑證、雲端金鑰、GitHub代幣和加密錢包都有流動性強的轉售市場。 B階段也涉及金融,但方式不同:DDoS攻擊服務以分鐘為單位出租流量容量,而像這裡提供的這種殭屍程式正是這些服務運作的資源。 30秒的心跳,通用的 目標/端口/為期 命令模式,以及五種協定的泛洪攻擊武器庫是… standard 啟動器操作員的產品。

兩個模組並行運行—— 粉筆模板:1.0.19 以及 1.0.20 繼續運送竊賊 axois-utils:1.0.9 機器人上線-這顯示營運商是在對沖收入來源,而不是放棄A階段。這一轉變是… 增加,而不是替代品。

我們沒有聲稱

我們尚未能確認背後的真實身分。 死碼09284814 我們並未將此攻擊活動歸咎於任何已知的威脅行為者、組織或國家。 「幽靈」品牌在不同攻擊物上的一致性足以表明其出自同一攻擊者之手,但C2二進位檔案以工具包的形式分發,也使得未來來自其他攻擊平台的軟體包有可能重複使用相同的程式碼。

影響、趨勢及防守者應採取的措施

影響性

合法的深蹲目標 軸距 以及 粉筆模板 在 JavaScript 生態系中被廣泛依賴; 軸距 僅此一項就躋身下載量排名前三十的 npm 包之列。這些拼字錯誤的包名與真正的包名只差一個按鍵而已(軸距, 範本模板),而且兩者都是語言學上合理的拼字錯誤。

我們無法在下架前獲得惡意版本的可靠下載統計資料——npm 在軟體包取消發布後不會保留每個版本的下載次數,而且 npms.io在這種規模下,-style代理會產生大量雜訊。任何鎖定檔案解析到名為“ 軸子工具 or 粉筆模板 來自出版商 死碼09284814 應視為已洩漏:輪換所有存在的憑證 進程.env 在受影響的主機上,審核每個作業系統的持久性向量(請參閱下文「防御者應該做什麼」),並移除依賴項。

新興模式

這次事件反映了我們在最近幾起 npm 事件中看到的轉變: 安裝鉤腳手架是耐用資產。酬載可互換同一個出版商,同一個軟體包,同一個 預先安裝 / 安裝 / 安裝後 三重奏,甚至連版本更新的節奏都一樣——這是兩者之間唯一的變化。 axois-utils:1.0.6 以及 axois-utils:1.0.9 文件是 hooks 運行。基於簽章的偵測,以 A 階段有效載荷(錢包路徑字串)為金鑰, phantom.jsServeo C2 主機的 7,667 行收集器會標記出前三個版本,並完全錯過 B 階段。

在我們追蹤的其他 2026 年攻擊活動中也發現了同樣的模式:一個擁有穩定攻擊框架的單一攻擊者,不斷變換攻擊手段,包括竊取憑證、使用作弊客戶端、利用 Telegram 機器人竊取數據,以及現在的 DDoS 攻擊招募。依賴有效載荷簽章的防御者將在每次攻擊活動的第二輪中持續敗北。

由此可得出推論: 安裝時 TTP 是更好的訊號三重安裝鉤子聲明,導入的安裝腳本 HTTPS or 子行程安裝寫入使用者啟動資料夾的腳本,以及安裝解析免費反向隧道服務(Serveo)上主機名稱的腳本。 localhost.run(例如 ngrok、cloudflared)在合法軟體包中很少見,但在惡意軟體包中很常見。

防守隊員該怎麼做

  • 鎖定文件審計. 搜尋所有 包-lock.json / 紗線鎖 / pnpm-lock.yaml 在您的組織中查找確切的字串 軸子工具 以及 粉筆模板把任何比賽都視為一種妥協。
  • 輪替秘密 在受影響的主機上。 A階段大量收集SSH、雲端平台、GitHub、npm和錢包憑證。假設所有憑證都已存在。 進程.env, ~ / .ssh, ~/.aws, ~/.npmrc, 〜/ .config,或任何 .env* 受影響主機上的檔案已暴露。
  • 移除持久性(階段 B)。 在 Windows 系統中,刪除 HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemUpdate, 去掉 %APPDATA%\Microsoft\Windows\開始功能表\程式\啟動\系統更新.bat以及 schtasks /delete /tn SystemUpdate /f在Linux系統上, crontab -e命令 並刪除 @重啟節點…, systemctl --user disable --now phantom-bot.service 然後刪除 ~/.config/systemd/user/phantom-bot.service擦洗 的.bashrc / .zshrc / 在/etc/rc.local在 macOS 上, launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist 然後刪除plist檔案。
  • 屏蔽C2主機。 將 IOC 表中的四個 C2 端點新增至您的出口封鎖清單中。 *.serveousercontent.com 以及 *.lhr.life 如果您的環境對反向隧道服務沒有正當用途,則可以完全阻止其運作。
  • 透過安裝時 TTP 進行搜索不是有效載荷。 庫存鎖定文件條目 的package.json 聲明 預先安裝, 安裝以及 安裝後 所有連結都指向同一個腳本。請交叉檢查軟體包的發佈時間和發布者驗證狀態。這種模式在合法軟體包中很少見,也是 PhantomBot 重複使用最可靠的訊號。
  • 對 C2 二進位進行審計。 任何下載者 axois-utils:1.0.9 擁有營運商的 C2 伺服器(c2 ELF,sha256 165fa92d…)位於磁碟上。掃描快取和 CI 工件儲存。該二進位檔案本身處於休眠狀態,但它在工作站上的存在明確證明軟體包已安裝。

結尾語

同一個攻擊者、同一個軟體包、同一個安裝鉤子,在 48 小時內就能傳播完全不同的威脅。關注的是攻擊的底層架構,而不是最終的攻擊負荷。

sca-tools-software-composition-analysis-tools
優先處理、補救並保護您的軟體風險
註冊免費帳號。
不需要信用卡。

確保您的軟體開發和交付安全

使用 Xygeni 產品套件