資安廠商Socket研究人員揭露一起針對Go生態系的供應鏈攻擊,攻擊者透過套件名稱冒充攻擊(Typosquatting)手法,冒充廣受採用的BoltDB資料庫套件,並利用Go模組代理(Module Proxy)的快取機制,使惡意套件長期存在且未被偵測。此事件凸顯Go模組快取機制存在風險,即便原始儲存庫內容已被修改或移除,但惡意版本仍可由快取繼續發布。

這起攻擊涉及的惡意套件名為github.com/boltdb-go/bolt,其命名方式與合法的BoltDB套件github.com/boltdb/bolt極為相似,容易讓開發者因輸入錯誤或疏忽而誤用。惡意版本內建遠端控制後門,攻擊者可透過命令與控制伺服器執行遠端指令,取得受感染系統的存取權限。

由於Go模組代理會自動快取其首次擷取的模組版本,並依設計禁止修改已發布的版本,因此即使攻擊者在GitHub上重新標記相同版本的標籤,使原始程式碼看似無害,代理仍會繼續提供首次快取的版本。當快取版本包含惡意程式碼,則在未來的下載請求中仍可能被開發者取得,導致潛在的安全風險。

該套件最早於2021年11月上傳至GitHub,並經由Go模組代理快取。研究人員發現,攻擊者在惡意版本被快取後,修改Git標籤指向乾淨版本,使得手動審查GitHub原始碼時無法發現異常。但透過Go CLI下載模組時,依然會取得快取的惡意版本,導致惡意程式長期潛伏,直到最近才被發現。由於BoltDB本身已停止維護,許多開發者選擇改用不同的Fork版本,這使得冒充套件更容易混入開發環境。

該惡意套件的後門機制透過隱藏的IP地址與遠端伺服器建立連線,一旦安裝並執行,攻擊者便可透過TCP連線發送指令,在受害系統上執行任意殼層命令,並回傳執行結果。此外,該程式內建持續運作機制,即使連線中斷或過程發生錯誤,仍會自動重新啟動,確保後門長時間維持運作。研究人員進一步分析其原始碼,發現攻擊者透過變數運算與字串取代等技術混淆命令與控制伺服器地址,使得靜態分析工具較難辨識其異常行為。

Go模組代理的快取機制原本是為了提升軟體開發效率,確保開發者獲取一致且可重現的模組版本,避免因上游變更導致相依性破壞。而這個事件突顯了快取機制存在安全風險,由於Go模組機制不允許移除或修改已發布的版本,因此這類供應鏈攻擊也難以透過現有機制修復,開發者需要藉額外的安全工具來檢測出惡意套件。

熱門新聞

Advertisement