Key Takeaways
- 根據報導,駭客發動了一波針對性網路釣魚攻擊來入侵 Node Package Manager (NPM) 維護人員的帳號,並且將惡意程式碼注入一些目前使用廣泛的 JavaScript 套件當中。
- 有些惡意套件會挾持網站 API 並操縱網路流量來暗中移轉虛擬加密貨幣資產。
- 攻擊中用到的其中一個惡意檔案是 Shai-hulud 蠕蟲,它會經由已遭駭入的套件來散布,能竊取雲端服務的金鑰、部署用來掃描機密的工具,並且擴散至其他帳號。
- 根據 TrendAI™ Research 的監測資料顯示,北美和歐洲是其中一個惡意程式 Cryptohijacker 肆虐最嚴重的地區。但截至目前為止,尚無Shai-Hulud 蠕蟲的偵測案例。
- Trend Vision One™ 已經可以偵測並攔截本文所列的入侵指標 (IoC),並為客戶提供量身訂做的威脅追蹤查詢、威脅洞見,以及威脅情報。
9 月 15 日,Node Package Manager (NPM) 儲存庫遭遇一起持續性供應鏈攻擊,駭客發動了一波極具針對性的網路釣魚攻擊來入侵 NPM 套件維護人員的帳號。在取得特殊存取權限之後,駭客便將惡意程式碼注入一些目前使用廣泛的 JavaScript 套件當中,進而威脅到整個軟體生態系。值得注意的是,這起攻擊已入侵了多個重要的 NPM 套件,包括一些應用程式開發及加密所必要的套件。
根據 StepSecurity 指出,這起事件背後的駭客在上個月的 Nx 供應鏈攻擊當中也使用了類似的技巧。截至 9 月 16 日為止,Socket 的研究人員已發現將近 500 個 NPM 套件受到影響。
Trend™ Research 在本文中詳細說明了近期 NPM 生態系遭到駭客入侵的大致情況,以及 SOC 團隊需要知道的一些資訊與防範這項威脅的資安建議。
哪些類型的套件有危險
一些關鍵的 JavaScript 函式庫遭到了惡意修改,包括支援開發框架與加密功能的函式庫。此次受到影響的套件都是一些全球下載率極高的套件 (每週超過 26 億),可說是整個龐大的網站應用程式與相依專案生態系都受到影響。
駭客會竊取虛擬加密貨幣資產
駭客會挾持網站 API 並操縱網路流量,藉此經由正常管道將資金暗中移轉到他們掌控的錢包,凡是與受駭套件互動的企業和一般使用者都受到影響。
Shai-hulud 攻擊過程分析
攻擊中用到的一個惡意檔案是在 NPM 登錄中偵測到的一個會自我複製的蠕蟲,叫做「Shai-Hulud」(與電影《沙丘》(Dune) 中的沙蟲同名)。 TrendAI™ Research 在此提供 Shai-Hulud 的分析、它的運作機制,以及它對使用 NPM 的企業有何影響。
Shai-Hulud 特別突出之處在於它的自我複製能力,它不只會造成感染,還會像蠕蟲一樣繁殖,不斷尋找並入侵其他套件和環境。
攻擊鏈
Shai-Hulud 的攻擊過程一開始會發送一封假冒成 NPM 資安警報的網路釣魚電子郵件來誘騙開發人員提供自己的登入憑證 (圖 1)。駭客入侵了開發人員的 NPM 帳號之後,會上傳了一個惡意套件。這個套件安裝之後,就會執行 JavaScript 和內嵌的 Unix 指令列腳本來建立常駐機制,並開始竊取資訊。
惡意程式會使用偷來的 GitHub 存取金鑰來通過 GitHub API 認證、檢查使用者權限,然後列出受害者可存取的所有儲存庫,包括私人儲存庫在內。它會將私人儲存庫複製到駭客的帳號,為每一個儲存庫建立一個新的分支,並部署一個惡意工作流程來將資料竊取動作自動化。
接著,惡意程式會下載並安裝 TruffleHog 來掃描檔案並蒐集更多機密。它會將所有偷來的儲存庫都設成公開,並且完整鏡射其歷史資料。接著,敏感資料會經由自動化網站請求外傳給駭客。
從這樣的過程可以看出,只要有一個帳號遭到駭入,就可能導致惡意程式碼擴散、登入憑證遭竊取,還有整個企業開發環境大量的資料遭到外洩。

這項威脅的廣泛曝光,意味著有數百個套件在初次偵測之前就已經遭到入侵,破壞了企業對開放原始碼相依元件的信任。其自動化作業使得攻擊規模能夠擴大,不僅大大提高了企業的技術與業務風險,而且一旦部署完成之後,駭客就不需花費太多心力。
Shai-Hulud 有何獨特之處?
傳統的軟體供應鏈威脅通常採用單次使用的惡意檔案或竊取針對性的登入憑證。Shai-Hulud 的獨特之處在於它能在 NPM 生態系當中自我繁殖,藉由安裝後續腳本來建立二次和三次感染。已遭駭入的套件一旦安裝,蠕蟲就會自動試圖擴散至新的目標,成為一種不斷繁殖的威脅,而且在初次部署之後便不需人為介入。
主要特徵
- 自我繁殖 - Shai-Hulud 的行為跟蠕蟲一樣,它會利用開放原始碼社群現有的信任關係,自動感染其他 NPM 套件和專案。
- 自主性 - 惡意程式在執行時不需操作人員的持續操控,因此更不易清除、也更難加以遏制。
- 環境衝擊 - Shai-Hulud 會將自己深深融入開發及 CI/CD 環境當中,因此有機會取得更多登入憑證、金鑰以及敏感的組建機密。
技術方法
- 安裝後續攻擊 - 其主要的繁殖機制是以安裝後續的惡意腳本為核心,受感染的套件一旦部署完成,駭客就可以執行任意程式碼,進而下載更多惡意檔案,或將惡意腳本注入其他專案和相依元件當中。
- 網路活動 - 蠕蟲會與遠端伺服器通訊來將資料外傳或接收更新,因此在初次部署之後還會不斷演進。
- 重複性威脅管道 - Shai-Hulud 是專為常駐在系統內而設計,並非一次性的專案入侵,因此是一種可隨著相依元件的更新而持續潛伏的風險。
對 NPM 與開放原始碼社群的風險
NPM 的核心優勢與風險,在於其龐大的套件開發社群網路。Shai-Hulud '這個自我複製蠕蟲,正是專為利用社群的信任而設計,突顯出單一駭客集團如何能快速對不成比例的大批開發者和軟體專案造成衝擊。
Shai-Hulud 分析
惡意工作流程注入分析
Shai-Hulud 蠕蟲運用了一種進階技巧,將惡意的 GitHub Actions 工作流程注入到目標儲存庫,進而在企業的開發環境內自動繁殖並竊取機密。一旦開始執行,Shai-Hulud 會先進行以下準備工作:
- 指派分支的名稱 (如shai-hulud) 來維持一致性,並協助追蹤各個儲存庫的感染情況。
- 使用.github/workflows/shai-hulud-workflow.yml來植入惡意工作流程檔案。
- 產生或擷取含有自動化惡意檔案的 YAML 工作流程檔案。
如圖 2 所示,注入的工作流程主要用來有系統地蒐集並外傳儲存庫的機密:
- 工作流程會列出其 CI/CD 執行環境當中暴露的所有機密。
- 將這些機密打包成一種方便傳輸的檔案格式。
- 機密會透過 HTTP(S) 請求傳送至駭客掌控的 webhook 端點。

此外,Shai-Hulud 還會利用 GitHub 的 REST API 來自動執行橫向移動並建立常駐機制 (圖 3)。蠕蟲會檢查可用的 GitHub 驗證金鑰是否有效並擁有適當的權限,確認它能與 API 互動。

發出如下的 API 請求:
/user/repos?affiliation=owner,collaborator,organization_member&since=2025-01-01T00:00:00Z&per_page=100,
蠕蟲會尋找被駭帳號擁有適當權限的儲存庫,並依擁有者 (owner)、協作者 (collaborator) 或機構成員 (organization_member) 的角色來進行過濾,同時鎖定近期的活動 (圖 4)。

針對每個符合條件的儲存庫,Shai-Hulud 蠕蟲會執行以下動作:
- 建立分支。 它會在儲存庫中建立一個特殊名稱的分支 (如 shai-hulud) 來存放要注入的工作流程,並隔離其惡意變更 (圖 5)。

- 工作流程檔案上傳。蠕蟲會將惡意的 YAML 檔案上傳到新的分支,並設定當工作流程觸發時自動將機密外傳 (圖 6)。

GitHub 儲存庫複製分析
Shai-Hulud 的攻擊過程會建立自動化流程,將企業內的私人 GitHub 儲存庫複製、移轉至駭客的基礎架構並設定成公開。以下列出這項複製動作在程式中的各個階段。
主要函式負責協調整個複製過程,從初始化到儲存庫建立與揭露 (圖 7)。

蠕蟲會對目標企業內發現的所有私人儲存庫反覆執行上述複製程序,確保每一個儲存庫都被分析和處理 (圖 8)。

初步檢查會確認必要的輸入資料是否存在且有效,例如:企業名稱、目標使用者名稱,以及 GitHub 驗證金鑰,以符合 API 的要求並確保工作流程可靠性 (圖 9)。

與 API 的互動已抽離至一個標準的通訊包裝函式當中,負責管理認證 (透過 bearer token 或 OAuth 應用程式) 以及 HTTP GET、POST、PUT 和 PATCH 等方法,以便妥善處理錯誤狀況 (圖 10)。

該流程瞄準的是私人或內部儲存庫,藉此實現最大的隱匿性與衝擊。此外還採用了 API 分頁來有效列出大型企業內部的所有儲存庫 (圖 11)。

針對每一個找到的儲存庫,蠕蟲會在駭客的帳號中建立一個對應的目的地儲存庫,並且在儲存庫的說明當中嵌入一個識別碼,例如「Shai-Hulud Migration」以便追蹤 (圖 12)。

建立好之後,企業內原本私人的儲存庫,就會變成駭客掌控下的公開儲存庫,以方便將大量資料曝光並建立指紋 (圖 13)。

為了讓竊取的資料發揮最大價值,蠕蟲會執行完整鏡像複製,不僅會擷取程式碼內容,還會擷取完整的提交 (commit) 和分支 (branch) 歷史記錄,以供後續攻擊或二次攻擊使用 (圖 14)。

透過這些自動化機制,Shai-Hulud 就能快速從私人儲存庫將高敏感度的智慧財產與原始程式碼外傳,以方便讓資料曝光,並用於勒索或對下游發動供應鏈攻擊。
利用 TruffleHog 搜刮登入憑證
在入侵後續活動當中,Shai-Hulud 會進一步利用 TruffleHog 在受害環境內自動搜刮登入憑證與機密。其工作流程一開始會先取得最新版本的 TruffleHog 二進位檔案,透過程式下載當前的最新版本 (圖 15)。

蠕蟲一旦找到適當的 TruffleHog 檔案,就會下載其二進位檔案,並根據受害電腦上的作業系統自動偵測並解壓縮正確的版本 (圖 16)。

解壓縮之後,TruffleHog 就會被安裝或植入到環境當中,以便隨時供惡意工作流程使用 (圖 17 和 18)。


接下來,惡意程式會啟動一個子處理程序,呼叫 TruffleHog 來掃描本機檔案系統或目標儲存庫的內容,尋找高熵字串 (high-entropy string)、金鑰以及其他敏感的機密。這個程序會在記憶體內或執行時期環境內執行,以躲避偵測。掃描完成之後,TruffleHog 二進位檔案就會被刪除來消除其痕跡,盡量減少可供鑑識分析的檔案。
藉由將 TruffleHog 整合到自動化當中,Shai-Hulud 可大幅提高其對外傳送的機密數量和品質,同時還能在整個攻擊過程當中維持行動的隱密性。
目前為止有哪些機構受害
根據 TrendAI™ '的監測資料顯示,許多國家都已出現 Cryptohijacker惡意程式攻擊的通報案例,不過主要還是集中在北美和歐洲。受害最嚴重的是大量仰賴 JavaScript 函式庫的企業機構和開發人員。然而到目前為止並未發現Shai-Hulud 蠕蟲的偵測案例。
資安建議
為了保護開發流程與敏感資產,防範持續中的 NPM 供應鏈攻擊所帶來的風險,企業應透過以下最佳實務原則來強化其主動式資安:
- 稽核相依元件,專注於最近更新的套件。 檢查所有相依元件,尤其是最近修改過的相依元件,並且移除或復原任何看似已遭入侵的相依元件。
- 撤銷並更換登入憑證,尤其是 NPM 帳號。 立即撤銷並更換任何可能已外流的登入憑證或 API 金鑰,優先處理敏感帳號。
- 監控是否有 Trufflehog 或類似掃描工具的使用跡象。 檢查記錄檔是否有任何異常的儲存庫掃描活動,並主動掃描您自己的程式碼庫來尋找已曝光的機密。
- 隨時掌握 NPM 官方登錄與可信賴來源的最新公告。 定期查看官方公告,並立即套用最新的修正與建議動作。
- 強化存取與資安政策。 例如,對所有儲存庫和自動化相關的帳戶套用最低授權原則,並且對所有開發人員和 CI/CD 存取點實施多重認證 (MFA)。
TrendAI Vision One™ Threat Intelligence
為了隨時掌握不斷演變的威脅, TrendAI™ 客戶可透過 TrendAI Vision One™ Threat Insights 來取得 TrendAI™ Research 有關新興威脅及駭客集團的最新洞見。
TrendAI Vision One™ Threat Insights
TrendAI Vision One™ Intelligence Reports (IoC 掃描)
大規模 NPM 供應鏈攻擊:網路釣魚挾持導致惡意 JavaScript 注入
追蹤查詢
TrendAI Vision One™ Search 應用程式
TrendAI Vision One™ 客戶可以使用 Search 應用程式來尋找或追蹤本文提到的惡意指標,看看是否也出現在自己的環境中。
惡意程式檔案偵測
malName: (*CRYPTOHIJACK* OR *SHULUD*) AND eventName: MALWARE_DETECTION
除此之外,TrendAI Vision One™ 客戶還可啟用 Threat Insights 權利來取得更多追蹤查詢。
入侵指標 (IoC)
如需本文提到的入侵指標完整清單,請至此處。