重點摘要
- Void Dokkaebi (亦稱為「Famous Chollima」) 已從針對單一目標的社交工程技巧演變成一種自我傳播的供應鏈威脅。遭駭客入侵的開發人員儲存庫將成為下一波受害者的感染管道,創造出一種經由開發人員生態系的「類蠕蟲」傳播鏈。
- 這起攻擊行動會經由受信任的開發流程散布,利用惡意的 VS Code 工作和注入的程式碼,在正常的開發活動當中執行。當遭到駭客入侵的程式碼到達企業或熱門開放原始碼儲存庫時,其貢獻者、分支,以及下游專案也有可能遭殃。
- 2026 年 3 月所做的分析發現了超過 750 個受感染的儲存庫、500 多個惡意的 VS Code 工作組態設定檔,以及 101 個提交篡改工具。此外,像 DataStax 和 Neutralinojs 這類機構所擁有的儲存庫也被發現含有感染痕跡。
- 這項攻擊行動使用區塊鏈基礎架構 (包括 Tron、Aptos 和 Binance Smart Chain) 來分階段取得惡意檔案,這讓其部分派送基礎架構能躲避傳統的執法行動。
簡介
Void Dokkaebi 又名「Famous Chollima」,是一個親北韓的駭客集團,擅長有系統地攻擊持有虛擬加密貨幣錢包登入憑證、簽署金鑰,以及可存取持續整合/持續交付 (CI/CD) 流程和營運基礎架構的軟體開發人員。正如 TrendAI™ Research 先前的記載,該集團會假扮成虛擬加密貨幣和 AI 公司的招募人員,引誘開發人員複製並執行程式碼儲存庫,作為假工作面試的一環。這是一個從 2024 年開始在業界被陸續觀察到的攻擊模式,但卻不太有人關注其突破防線之後發生了什麼。
根據我們的分析顯示,Void Dokkaebi 的攻擊不會只感染單一開發人員就停止。被駭入的電腦會變成一個跳板,駭客會將受害者的儲存庫變成攻擊武器,將其貢獻的程式碼變成感染下游開發人員的管道。結果就是一個自行運作的傳播鏈,就像蠕蟲的行為一樣,而非傳統的針對性攻擊。這份報告詳細說明這套傳播方式、其散播的惡意程式、我們觀察到的感染規模,以及企業該如何因應。
感染路徑以及蠕蟲如何擴散
其傳播方式需結合兩個不同的機制一起運作,第一個機制是經由被動方式擴散到 Visual Studio Code (VS Code) 工作空間組態設定,跟著被提交的程式碼一起移動。第二個機制是駭客在取得開發人員電腦的遠端存取權限時,將加密編碼的 JavaScript 注入到受害者的儲存庫中,然後重寫 git 歷史記錄來隱藏篡改痕跡。
感染一開始是一個虛構的工作面試機會,受害者被要求複製一個程式碼儲存庫,然後對它進行審查或加以執行,作為技術能力評估的一環。這些儲存庫位於 GitHub、GitLab 或 Bitbucket 上,而且看起來都是一些正常的程式設計專案。其派送機制濫用了 VS Code 工作空間的工作系統,Microsoft、OpenSourceMalware 和 AbstractSecurity 都曾經分別記載過這項技巧。
攻擊的運作方式如下:
- 儲存庫內含一個 .vscode/tasks.json 檔案,裡面有一個工作被設定成在工作空間開啟時自動執行 (runOn: folderOpen)。
- 當受害者在 VS Code 中開啟專案並在工作空間的信任提示選擇接受時,工作就會自動執行,無須進一步互動。
- 在某些情況下,這個工作會直接從一個遠端網址下載後門程式。在其他情況下,它會啟動儲存庫內的一個字型或影像檔案,裡面含有惡意檔案,執行的結果相同,只是變種不同。
此時,開發人員的環境已經遭到入侵,但類蠕蟲的行為會在受害者將程式碼提交到 GitHub 時才開始。不論是推送專案本身,或是在其他工作上重複使用其元件,惡意的 .vscode/tasks.json 都會跟隨著一起被提交。.vscode 資料夾在檔案總管中是預設隱藏,而且通常不會列在 .gitignore 檔案中,使得它實際上變成一個木馬程式。任何隨後複製該儲存庫並在 VS Code 中將它開啟的開發人員都會收到相同的信任提示。如果接受,就會再次重複同樣的感染過程。
這等於建立了一個自行傳播鏈,每個被駭客入侵的開發人員,都會經由這個管道感染新的儲存庫,每個新的受害者都會成為潛在的傳播者。有別於傳統社交工程攻擊在感染第一個目標之後就停止,這種方式的感染範圍會隨著每一次的提交動作而擴大。
路徑 2:主動注入與提交篡改
我們還另外發現了第二種傳播機制,已遭 Void Dokkaebi 入侵的使用者,其儲存庫中的原始程式碼檔案當中會被附加一些多重加密編碼的 JavaScript 程式碼。
駭客會針對各種組態設定檔案與常見的入侵點,選擇開發人員比較不會仔細檢查的檔案。加密編碼的 JavaScript 會扮演多重階段載入器的角色 (如下一節所述) 並附加在檔案末端。
駭客通常會加入一些空白字元來讓這些額外的程式碼被擠到畫面右側邊緣之外,好讓開發人員在快速查看程式碼或比較程式碼差異時不會看見。由於這些組態設定檔案會被 Node.js 工具 (如組建工具、程式碼檢查工具、包裝工具) 當成 JavaScript,因此任何附加到這些檔案末端的程式碼都會在對應的工具執行時自動執行。
程式碼注入和隱藏的動作都是經由駭客突破防線時 (路徑1) 安裝的惡意程式從遠端執行。為了掩蓋篡改的痕跡,駭客會利用一個 Windows 批次腳本 (temp_auto_push.bat) 從最近一次的 Git 提交記錄擷取其 metadata,包括:日期、時間、作者、電子郵件以及提交訊息。
接著,將系統時鐘暫時修改成原本的提交時間戳記,在提交內容加上要注入的程式碼,但仍保留所有原始作者的 metadata。駭客使用「--no-verify」旗標來避開提交前 (pre-commit) 掛鉤與 CI/CD 安全檢查。修改完成後,接著復原系統時鐘,並且將重新改寫的提交內容強迫推送至遠端分支。在 git 歷史記錄中,這筆被注入的提交記錄看起來就跟原始提交記錄分不出來。
在某些已遭入侵的儲存庫中,我們發現這兩項技巧 (也就是惡意的 .vscode/tasks.json 以及被注入的加密編碼 JavaScript) 都同時存在。我們認為,有些案例應該是開發人員同時遇到兩種傳播手法,但也有些案例應該是駭客對同一名受害者同時施展了兩種感染技巧。
這種「雙重感染」機制為駭客提供了備援性,使用 task.json 的手法是針對使用 VS Code 的開發人員 (在資料夾開啟時觸發),而 JavaScript 注入手法則是針對任何負責組建或執行專案的使用者,不論其 IDE 為何。兩者結合,有助於保證惡意程式能夠執行。
機構放大作用
這種「類蠕蟲」傳播手法,一旦感染了擁有企業或熱門開放原始碼儲存庫提交權限的開發人員,將帶來更高的風險。我們已發現有下列機構的儲存庫遭到入侵:
- DataStax:在 2026 年 1 月 31 日至 2 月 3 日期間,至少有 5 個儲存庫被發現遭到入侵,目前這些儲存庫都已清除乾淨。
- Neutralinojs:他們擁有 8,400 顆星星與 495 個分支,所有四個儲存庫全都在 2026 年 3 月 2 日一波自動化感染中被強迫推送了惡意提交內容。這些提交記錄的日期回溯了 5 至 35 天,並且與正常的歷史記錄混在一起,而且這起攻擊持續了 3 天之後才被 OpenSourceMalware 團隊發現並矯正。
這些企業被發現擁有與上述技巧相符的惡意程式碼片段,雖然我們無法確認這些機構經歷的確切事件順序,但從入侵指標看來,應該是先有一名擁有提交權限的貢獻者遇到了社交工程誘餌 (路徑 1) 而被突破防線,接著導致企業的儲存庫遭遇後續感染 (路徑 2)。像這樣規模的儲存庫一旦遭到入侵,每一名貢獻者、每一個分支,以及每一個仰賴它的下游專案都可能成為受害者。這讓攻擊的範圍從單一開發人員擴大至整個生態系。
這種傳播模式跟傳統的供應鏈攻擊 (如 SolarWinds 事件) 基本上完全不同,傳統攻擊需要入侵應用程式的組建基礎架構,但這裡並無任何系統遭到入侵,這起攻擊利用的是一些更簡單的東西:
- 開發人員的工作流程習慣。
- 通常不會將 .vscode 資料夾加入 .gitignore 當中。
- 不會逐行檢視組態檔案。
- 信任自己儲存庫中的內容。
除此之外,它也不像傳統的網路蠕蟲會攻擊軟體漏洞來散播。這起行動的傳播方式靠的是開發人員對於開發工具、同事提交內容,以及開放原始碼專案的信任。
了解傳播方式之後,現在我們來看看這些感染途徑散布的惡意程式。
惡意程式:DEV#POPPER RAT 變種
透過 task.json 的感染途徑 (路徑 1) 基本上是一個簡單的下載器,負責從遠端網址或套件檔案擷取並執行惡意檔案。然而被注入原始程式碼檔案的加密編碼 JavaScript (路徑 2),則屬於一種較複雜的手法。它扮演的是一個多重階段載入器,其設計是從區塊鏈基礎架構擷取並執行惡意檔案。它會經過四個階段,每個階段都運用了重重的字串洗牌、十六進位編碼,以及字元交換演算法來阻礙分析。
載入器會查詢 Tron 區塊鏈 API,從一個寫死的錢包位址擷取一筆交易。從這筆交易擷取出來的資料會被當成參考金鑰,用來從一筆 Binance Smart Chain (BSC) 交易的輸入資料欄位擷取加密後的惡意檔案。假使 Tron 查詢失敗,載入器就會改用 Aptos 區塊鏈作為替代資料來源。
擷取到的惡意檔案會使用一個寫死的金鑰與 XOR 運算來解密,然後經由 eval() 或產生一個持續的隱藏背景處理程序來將它執行。在各個階段,載入器會輪流切換不同的錢包位址和交易雜湊碼,讓每個階段都能獨立更新其指標,只需在對應的區塊鏈上發布新的交易,而不需修改惡意程式的程式碼。
這個基於區塊鏈的分階段機制之所以特別重要,是因為它可當成一種通用的派送平台來使用。由於惡意檔案是動態擷取自不可改變的區塊鏈交易,駭客只需更新區塊鏈參照,就能派送任何惡意程式作為工具,包括與北韓相關的一些其他惡意程式,例如:InvisibleFerret、OtterCookie、OmniStealer、Dev#POPPER 和 BeaverTail,這些全都曾經出現在 Void Dokkaebi 的行動中。只要有一個儲存庫受到感染,它就會變成駭客在不同時機、派送不同惡意程式的管道,視駭客的行動目標而定。
DEV#POPPER RAT
經由這套基礎架構散布的惡意檔案之一,是一個 DEV#POPPER RAT 變種 (版本標記 260311),這是 eSentire 先前曾記載的一個跨平台 Node.js 遠端存取木馬程式 (RAT)。
我們分析到的變種,導入了一套多重操作人員工作階段管理系統,讓多名操作人員透過獨立的指令佇列同時在同一台受害電腦上工作。這意味著一種以團隊為單位 (而非單一駭客) 的行動方式。
後門程式會透過 WebSocket (使用 socket.io-client) 與其幕後操縱 (CC) 伺服器通訊。它使用 HTTP 來上傳檔案、將目錄外傳、寫入記錄檔,更精確一點,它是透過「/verify-human/[VERSION]」端點來發送心跳訊號和通知,並透過「/u/f」來將資料外傳。
這些獨特的網路溝通模式為研究人員和分析師提供了可靠的特徵來發掘被感染的裝置。經由 WebSocket 與非預期的端點連線,再加上開發人員工作站出現連上這類網址的 HTTP 流量,就是強而有力的入侵指標。
這個變種有兩項特點與其傳播模式直接相關:
- 其 RAT 會特別偵測並避開 CI/CD 環境 (如:GitLab CI、C BuildBot) 以及雲端沙盒模擬分析,它只會在真正的開發人員工作站上執行。這意味著自動化流程掃描完全偵測不到它。
- 為了常駐,它會注入某些版本的程式碼 (版本標記:C250617A 至 C250620A) 到開發人員應用程式當中 (如 Antigravity、VS Code、Cursor、Dicord、GitHub Desktop),然後建立一個隱藏的「.node_modules」資料夾來挾持 Node.js 的模組搜尋順序。像這樣常駐在開發人員工具當中,能為前面提到的類蠕蟲傳播方式創造更多機會。
感染規模
為了量化這起行動的觸及範圍,我們在 2026 年 3 月底掃描了各種公開程式碼代管平台。以下統計提供當時所有公開儲存庫的感染情況。
我們的掃描發現了超過 750 個非重複的儲存庫含有加密編碼 JavaScript 載入器 (藉由 global['!'] 初始化標記加以識別)。不過,在許多情況下都有多個儲存庫遭到感染,導致更多原始程式碼檔案遭到入侵。
另有 60 個原始程式碼檔案使用的是一個含有不同標記 (global['_V']) 的載入器變種。這可能意味著該工具正在演變,或者有另一組獨立 Void Dokkaebi 集群採用的是修改過的工具,我們在前面章節討論的 RAT 變種也有看到這樣自主行動的模式。
我們在 VS Code 感染路徑上發現了 392 個 .vscode/tasks.json 檔案被設定為下載器,另有 131 個 task.json 檔案會啟動假的字型或影像檔。它們是不同的變種,但底層的感染機制依然相同。任何複製其所在儲存庫並在 VS Code 中將它開啟的開發人員,都會被詢問是否要信任該工作空間。如果接受,惡意工作會自動執行。
我們在至少 101 個儲存庫當中發現這個提交記錄篡改工具 (temp_auto_push.bat)。這就是駭客已經能夠從遠端存取開發人員電腦、並且刻意將其儲存庫變成攻擊武器的直接證據,不論我們掃描時被植入的 JavaScript 是否還在。
受感染的儲存庫 (數量超過 750 個) 包括駭客操控的儲存庫,以及遭到合法入侵的使用者儲存庫,而且兩者可能混在一起。我們無法判斷每一個案例中的注入動作是經由提交內容竄改工具或是直接竄改檔案來達成。
這些數字代表的是我們在分析時,從公開程式碼儲存庫上看到的情況,實際的感染規模可能更大。圖 4 並未包含以下儲存庫:我們掃描前已被發現並清除的儲存庫、未被公開搜尋引擎建立索引的私人儲存庫,以及讓感染擴散至我們可觀察的環境之外的分支或複製。
此外,這些數字同時也象徵著一層又一層的傳播方式對下游所造成的衝擊,而非個別遭到入侵的開發人員數量。一個遭到入侵的開發人員可感染多個儲存庫的多個檔案。每一個遭到入侵的開發人員儲存庫,都是下一波受害者的感染來源。若與前面討論的組織案例一同檢視,就能看出這是一起能自行運作的攻擊行動,一開始只需投入相對較小的社交工程攻擊,就能製造大規模的感染。
行動指引
以下是一些直接解決 Void Dokkaebi 傳播與常駐機制的建議,其優先次序根據衝擊的大小排序如下:
- 採用隔離環境來執行工作面試指派的程式設計任務。切勿在營運或個人電腦上執行工作面試用的程式碼。使用可拋棄式虛擬化環境,面試完之後就丟棄。這是防止駭客突破防線唯一最有效的辦法。
- 將 .vscode/ 加入 .gitignore 當中,將這項作法強制套用到整個企業的儲存庫。如此就能徹底破壞蠕蟲的被動傳播管道。
- 強制落實分支保護與提交簽署。禁止強制推送、要求使用拉取請求,並且要求 GPG 或 SSH 提交簽署。提交篡改工具需使用 git push --force 而且無法偽造加密簽章。以上控管措施可直接破解其作法。
- 檢查儲存庫中是否有已知的感染標記。搜尋 global['!'] 和 global['_V'],並且檢查是否有 temp_auto_push.bat 檔案。如果發現,請假設開發人員的工作站已遭入侵,將該電腦隔離、撤銷登入憑證,並且通知協作者和下游開發人員。
- 仔細檢查組態設定檔案的變更。像 postcss.config.mjs、tailwind.config.js、eslint.config.mjs 和 next.config.mjs 這類檔案都是駭客針對的對象,因為這些檔案很少被嚴格審查。檢查被附加到螢幕可見區域之外的內容,套用與應用程式原始程式碼相同的嚴格審查流程。
- 監控區塊鏈 API 與幕後操縱 (CC) 流量。從開發人員工作站連上 api.trongrid.io、fullnode.mainnet.aptoslabs.com 以及 Binance Smart Chain RPC 端點的對外連線,就是可信度很高的入侵指標。此外,還要監控連上 MongoDB 連接埠 27017 與 HTTP 請求中含有「/u/f」和「/verify-human/[VERSION]」的連線。
- 切勿只仰賴 CI/CD 流程的掃描功能,因為 RAT 會偵測並避開 CI/CD 環境。針對開發人員工作站的端點偵測非常重要。
- 將 VS Code 工作空間信任提示視為一項資安判斷。在信任之前,請先檢查 .vscode/tasks.json 當中是否含有 runOn: folderOpen 工作。
- 針對已知的駭客基礎架構,套用網路層級的攔截。本文末端的「入侵指標 (IoC)」一節列出了經由 Vercel 提供的下載器、縮短網址重新導向器,以及這起攻擊相關的 CC 位址。這些 IoC 可用來協助偵測及追蹤整個環境內的威脅相關活動。
- 在資安意識教育訓練當中加入有關工作面試的社交工程技巧。將「複製並執行這個儲存庫來當成面試的一環」這種駭客攻擊手法加入開發人員資安訓練計畫當中。
結論
Void Dokkaebi 近期的活動,代表著供應鏈攻擊的運作方式可能將如何轉變,駭客不必入侵系統或套件登錄,而是利用開發人員的信任,也就是對於自己的工具、同事提交內容,還有依賴的開放原始碼專案的信任。只要有一名開發人員受害,該名人員就會變成感染源頭,讓感染擴散到個人儲存庫、企業程式碼庫,以及熱門的開放原始碼專案,不需任何進一步的社交工程攻擊。
此外,其感染規模也證明了這是一起活躍且不斷擴大的攻擊行動。企業若能將開發人員工作站和儲存庫工作流程視為其攻擊面的一環,將更有能力在這項威脅擴散之前預先偵測並遏止。
TrendAI™ Research 將持續追蹤 Void Dokkaebi 以及相關的攻擊行動,提供可化為行動的情資,讓您企業隨時搶先最新威脅一步。我們的威脅情資,再加上進階的偵測功能,就能協助您企業防範針對虛擬加密貨幣資產和企業敏感資料的精密攻擊。
TrendAI Vision One™ 客戶可防範下表所列的 IoC。
TrendAI Vision One™ Threat Intelligence Hub
TrendAI Vision One™ Threat Intelligence Hub 威脅情資中心提供了有關新興威脅與駭客集團的最新洞見、TrendAI™ Research 的獨家戰略性報告,以及 TrendAI Vision One™ 平台的 TrendAI Vision One™ Threat Intelligence Feed 威脅情資來源。
新興威脅:Void Dokkaebi 利用假的面試機會作誘餌,經由 Git 儲存庫散播惡意程式
駭客集團:Void Dokkaebi
TrendAI Vision One™ Intelligence Reports (IoC 掃描)
Void Dokkaebi 利用假的面試機會作誘餌,經由 Git 儲存庫散播惡意程式
追蹤查詢
TrendAI Vision One™ Search 應用程式
TrendAI Vision One™ 客戶可以使用 Search 應用程式來尋找或追蹤本文提到的惡意指標,看看是否也出現在自己的環境中。
可能已建立的程式碼提交檔案
eventSubId: 101 AND objectFilePath: temp_auto_push.bat
可能連線至 Dokkaebi CC 的對外連線
eventSubId: (204 OR 301) AND dst: (136.0.9.8 OR 198.105.127.210 OR 23.27.202.27 OR 154.91.0.196 OR 23.27.20.143 OR 85.239.62.36 OR 83.168.68.219 OR 166.88.4.2 OR 23.27.120.142)
除此之外,TrendAI Vision One™ 還可啟用 Threat Intelligence Hub 權利來取得更多追蹤查詢。
入侵指標 (IoC)
如需本文提到的入侵指標完整清單,請至此處。