技術

一個被下毒的 VS Code 擴充功能偷走了 GitHub 自家 3,800 個內部儲存庫

Susan Hill

GitHub 正在調查其內部儲存庫被未授權存取的事件,並證實攻擊者已從約 3,800 個儲存庫成功外洩資料。入侵的入口,是一名員工安裝的一個被下毒的 Visual Studio Code 擴充功能,攻擊者由此在那台機器上取得立足點,再從這台機器伸向本應留在公司自家圍牆之內的內部程式碼。

GitHub 此刻所指的那條邊界,也就是內部儲存庫與面向客戶的平台之間那條線,是這起事件停在受控事故、還是滑向全球供應鏈緊急狀態之間唯一的隔板。GitHub 上有約一億名開發者,現代網際網路所倚賴的開放原始碼也有相當一部分長在這裡。公司講「內部」時,指的是自家平台的程式碼、自家工具、營運組態,也就是 GitHub 用來自我建構與運行的那批材料。客戶的組織、企業以及這些客戶放在 GitHub 上的公開與私有儲存庫,根據公司自己的說法,並不在這次入侵的影響半徑之內。

這條區分線在公司於官方 X 帳號上發出的那份聲明裡承擔了不少分量。「儘管目前我們沒有任何證據顯示存放在 GitHub 內部儲存庫以外的客戶資訊受到影響」,聲明寫道,「我們仍在密切監控基礎設施,留意是否有後續動作」。措辭很精準,而入侵通報中的精準措辭,通常意味著調查還在動。「沒有受影響的證據」並不等於「沒有受影響」。大型平台上的事件常會隨著鑑識追上攻擊者的活動而越查越大;內部系統與面向客戶的系統之間那條線,也很少是一道乾淨俐落的實體牆。它是一組存取控制、憑證與服務帳號的集合,得一個一個地推敲。

這則報導裡最該讓每一位開發者警惕的部分,是攻擊的機制。Visual Studio Code 是地球上市占率最高的程式碼編輯器,幾乎進入了每一家大型工程組織。它的擴充功能商店建立在社群信任之上:任何人都能上架,大多數工程師裝外掛的隨意程度,跟在瀏覽器加一個書籤差不多。一個經由這條通道散布、在開發者機器上跑起來的被下毒擴充功能,會把這位開發者連線所能觸及的一切都交給攻擊者:儲存庫、權杖、套件登錄中心、內部服務。此次具體使用的是哪一款擴充,公司還沒公開,但這套模式並不新。開發者工具圈中人氣不錯的擴充功能 Nx Console,也碰過類似的入侵。

自稱 TeamPCP 的團體承認這次入侵,並把資料集掛上地下論壇,底價設定在五萬美元起。他們所使用的「這不是贖金」這個說法,本身就是一個訊號。他們並沒有想直接勒索 GitHub。他們是把偷來的內部原始碼,當成其他犯罪者處理信用卡側錄那樣的商品,賣到有買家的市場。最後拿到這份 3,800 個儲存庫歸檔的人,會在裡面梳出嵌進程式碼的憑證、寫死的祕鑰、可用來攻擊 GitHub 自家基礎設施的細節,以及任何能進一步攻陷下游目標的線索。同一團體還被連到打中 PyPI 上 durabletask 套件的 Mini Shai-Hulud 蠕蟲,這正好把這則故事真正的底色描出來:針對軟體開發供應鏈的攻擊,已經從理論情境變成實作中的手藝。

按 GitHub 自己的描述,圍堵的動作很快。被入侵的裝置被隔離。惡意擴充被移除。公司表示已輪換關鍵密鑰,並把影響最大的憑證放在最前面;若調查範圍擴大,就會經由既有的事件應變管道通知受影響的客戶。這家微軟子公司既沒有公開被入侵設備的 GitHub 員工身分,也沒有點出擴充的名字,更沒有給出攻擊者在被發現之前維持存取的精確時間區段。這些細節通常會出現在數週之後才登場的較長的事後報告裡。

對其餘的業界來說,實作面的結論比威脅情報的包裝聽起來簡單得多。任何工程組織,距離同一起事件都只差一次不夠謹慎的擴充安裝。任何人只要曾經因為某條論壇推薦就裝上某個 VS Code 擴充功能,所承擔的風險,就和落在這位 GitHub 員工身上的那個風險一樣。真正能用的防禦並不神祕,只是大家落實得不平均: 把擴充安裝限制在審核過的允許清單內、把開發者工作站與正式環境的憑證隔開、以較短的週期輪換祕鑰。這次事件會在不少先前一拖再拖的公司裡,把這幾項往優先順序的上端推。

GitHub 沒有為完整的公開檢討報告給出時程。這種規模的平台上發生的這種等級的調查,通常需要好幾週才能把全貌端出來,後續更新會經由公司的官方管道分批釋出。接下來值得盯的兩件事是: 3,800 個儲存庫的這份歸檔究竟會不會真的出現在掛牌列表上;以及地下市場拿到目錄、看上幾天之後,底價會往哪邊移動。

討論

共有 0 則留言。