研究人員表示,他們發現了一種供應鏈攻擊,該攻擊透過大量含有肉眼看不見代碼的惡意套件,淹沒了多個代碼倉庫,這種技術讓傳統用於偵測威脅的防禦措施陷入困境。
來自Aikido Security的研究人員於週五表示,他們在3月3日至3月9日期間發現了151個惡意套件被上傳至GitHub。供應鏈攻擊已盛行近十年,通常透過上傳名稱及代碼與廣泛使用的程式庫極為相似的惡意套件,誘使開發者誤用這些套件,部分惡意套件甚至被下載數千次。
本月Aikido發現的這些套件採用了較新的技術:選擇性使用在幾乎所有編輯器、終端機及代碼審查介面中都不可見的代碼。大部分代碼以正常可讀形式呈現,但惡意功能與載荷則以肉眼無法辨識的Unicode字元編寫。Aikido表示這種手法他們去年首次發現,使得人工代碼審查及傳統防禦幾乎失效。受攻擊的其他倉庫還包括NPM和Open VSX。
這些惡意套件更難被察覺,因為其可見部分品質極高。
「惡意注入並非出現在明顯可疑的提交中,」Aikido研究人員寫道。「周邊變更看起來合理:文件調整、版本提升、小幅重構及風格一致的錯誤修正。」
研究人員懷疑名為Glassworm的攻擊團體利用大型語言模型(LLM)生成這些看似合法的套件。「以我們目前看到的規模,手工打造151個以上跨不同代碼庫的專屬代碼變更幾乎不可能,」他們解釋。另一家追蹤同一團體的安全公司Koi也懷疑該團體使用AI技術。
這些隱形代碼是利用Unicode中的私人使用區(Private Use Areas)編寫,這些區域原本保留給定義表情符號、旗幟及其他符號的私用字元。這些代碼點在電腦中代表美國字母,但對人類完全不可見。審查代碼或使用靜態分析工具時,只會看到空白或空行,但JavaScript解譯器會將這些代碼點轉譯成可執行代碼。
這些不可見的Unicode字元是數十年前設計,後來幾乎被遺忘。直到2024年,駭客開始利用這些字元隱藏惡意提示,餵給AI引擎。雖然文字對人類及文字掃描器不可見,但大型語言模型能輕易讀取並執行其中的惡意指令。AI引擎後續設計了限制這些字元使用的防護措施,但這些防護偶爾會被突破。
此後,Unicode技術被用於更傳統的惡意軟體攻擊。在Aikido分析的套件中,攻擊者利用不可見字元編碼惡意載荷。代碼檢視時毫無異狀,但在JavaScript執行時,一個小型解碼器會提取真實位元組並傳給eval()函數執行。
「傳給函數s()的反引號字串在任何檢視器中看似空白,但實際包含大量不可見字元,解碼後會產生完整的惡意載荷,」Aikido解釋。「過去事件中,該載荷會下載並執行第二階段腳本,利用Solana作為傳輸管道,能竊取代幣、憑證及機密資訊。」
自從在GitHub發現這波新套件後,研究人員也在npm及VS Code市場找到類似套件。Aikido表示,檢測到的151個套件可能只是整個攻擊活動中一小部分,因為許多套件在上傳後已被刪除。
防範供應鏈攻擊的最佳方法是仔細檢查套件及其依賴項,尤其要留意套件名稱及拼寫錯誤。如果LLM的使用猜測正確,未來惡意套件可能越來越像合法套件,特別是當惡意載荷以不可見Unicode字元編碼時。