對 PyTorch 基礎設施的攻擊,損害儲存庫和版本

PyTorch 機器學習框架開發中使用的基礎設施遭到攻擊的詳細信息被披露,這使得提取足以將任意數據放入 GitHub 和 AWS 上的項目發布的存儲庫中的訪問密鑰以及替換代碼成為可能在存儲庫的主分支中並透過相依性新增後門。 PyTorch 發布欺騙可用於攻擊在其專案中使用 PyTorch 的大公司,例如 Google、Meta、波音和洛克希德馬丁。作為 Bug Bounty 計劃的一部分,Meta 向研究人員支付了 16250 美元以獲取有關該問題的資訊。

攻擊的本質是能夠在持續整合伺服器上運行程式碼,這些伺服器執行重建並運行作業以測試發送到儲存庫的新變更。該問題會影響使用自己的外部「自架執行器」處理程序和 GitHub Actions 的專案。與傳統的 GitHub Actions 不同,自架處理程序不在 GitHub 基礎架構上運行,而是在自己的伺服器或開發人員維護的虛擬機器上運行。

在伺服器上執行組裝任務可讓您組織程式碼的啟動,這些程式碼可以掃描企業的內部網絡,搜尋本機檔案系統以取得加密金鑰和存取令牌,並使用存取外部儲存或雲端服務的參數分析環境變數。在沒有適當隔離組裝環境的情況下,發現機密資料可以從外部發送給攻擊者,例如透過存取外部 API。若要確定專案對自架執行器的使用情況,可以使用 Gato 工具包來分析可公開存取的工作流程檔案和 CI 任務啟動日誌。

在 PyTorch 和許多其他使用自託管執行器的專案中,只有其變更先前經過同儕審查並包含在專案程式碼庫中的開發人員才允許執行建置作業。使用儲存庫中的預設設定時擁有「貢獻者」狀態,可以在發送拉取請求時啟動GitHub Actions 處理程序,並相應地在與儲存庫或監督專案的組織關聯的任何GitHub Actions Runner 環境中執行程式碼。

事實證明,指向「貢獻者」狀態的連結很容易繞過 - 首先提交一個小的更改並等待它被接受到程式碼庫中就足夠了,之後開發人員會自動收到活躍參與者的狀態,其拉取請求可以在CI 基礎架構中進行測試,無需單獨驗證。為了獲得活躍的開發人員身份,該實驗包括一些細微的外觀變更以修正文件中的拼字錯誤。為了存取 PyTorch 版本的儲存庫和存儲,在「自託管運行器」中執行程式碼時的攻擊攔截了用於從建置流程存取儲存庫的 GitHub 令牌,以及用於保存建置結果的 AWS 金鑰。

這個問題並非 PyTorch 特有的,它會影響許多其他使用 GitHub Actions 中「自架執行器」預設設定的大型專案。例如,提到實施類似的攻擊,在一些大型加密貨幣錢包和價值數十億美元的區塊鏈項目中安裝後門,更改Microsoft Deepspeed和TensorFlow的版本,破壞其中一個CloudFlare應用程序,並執行Microsoft 網路上的計算機上的代碼。這些事件的細節尚未披露。根據現有的漏洞賞金計劃,研究人員已提交 20 多份申請,以獲得價值數十萬美元的獎勵。

來源: opennet.ru

添加評論