ML CI/CD 安全
ML 持續整合與部署管線的安全概觀:ML CI/CD 與傳統 CI/CD 的差異、訓練工作流程中的獨特攻擊面,以及自動化模型建構與部署的安全意涵。
ML CI/CD 安全
ML CI/CD 管線將「程式碼提交 → 訓練模型 → 生產部署」之流程自動化。它們繼承所有傳統 CI/CD 的安全挑戰——機密管理、建置隔離、產物完整性——再加上 ML 特有關切:訓練資料驗證、模型行為測試,以及管理極昂貴之運算資源。被入侵的 ML 管線不僅部署錯的程式碼;它部署了行為無法完整預測或稽核的模型。
ML CI/CD 管線架構
典型 ML CI/CD 管線以 ML 特有階段擴展傳統軟體管線:
傳統 CI/CD 階段(繼承)
| 階段 | ML 脈絡 | 安全關切 |
|---|---|---|
| 原始碼控制 | 訓練程式碼、組態、管線定義 | 程式碼注入、未授權修改 |
| 依賴安裝 | ML 框架、自訂套件 | 供應鏈攻擊、依賴混淆 |
| 建置 | 具 ML 框架之容器映像建立 | 映像投毒、layer 快取攻擊 |
| 測試 | 資料處理程式碼之單元測試 | ML 特有程式碼路徑覆蓋不足 |
| 部署 | 模型服務基礎設施佈建 | 基礎設施錯誤組態 |
ML 特有階段(新增)
| 階段 | 目的 | 安全關切 |
|---|---|---|
| 資料驗證 | 驗證訓練資料完整性與品質 | 資料投毒繞過、綱要利用 |
| 訓練 | 於 GPU 基礎設施執行模型訓練 | 運算劫持、checkpoint 操弄 |
| 評估 | 執行基準與行為測試 | 評估鑽營、安全測試不足 |
| 模型註冊 | 將訓練完成之模型存入登錄 | 產物替換、未簽署註冊 |
| 安全閘 | 自動化安全與偏誤檢查 | 閘繞過、門檻操弄 |
| 金絲雀部署 | 逐步將流量轉移至新模型 | 金絲雀指標操弄 |
ML CI/CD 與傳統 CI/CD 的差異
執行時間與成本
傳統 CI/CD 管線以分鐘計。ML 訓練管線執行數小時至數週,每次執行消耗數千美元的 GPU 時間。這帶來直接的安全意涵:
- 運算劫持有利可圖。 於訓練作業期間於 GPU 基礎設施上進行加密貨幣挖礦,是真實且日益成長之威脅。
- 重跑昂貴。 若管線被入侵,為產出乾淨模型而重跑訓練將付出顯著之時間與金錢成本。
- 長執行視窗。 數日之訓練執行為攻擊者修改訓練資料、注入程式碼或外洩產物提供延長視窗。
資料作為一等輸入
傳統 CI/CD 處理程式碼與組態。ML CI/CD 亦處理資料,這引入:
- 資料來源追蹤要求
- 訓練資料驗證作為管線階段
- 跨管線之資料存取權限
- 軟體 CI/CD 中不存在之資料層攻擊(投毒)可能
非確定性輸出
軟體建置是確定性的:同樣的原始碼產生同樣的二進位檔。ML 訓練是隨機的:同樣的資料與程式碼產生不同的模型。這表示:
- 產物驗證無法仰賴可重現之建置
- 模型比較需行為測試,非二進位比較
- 回退需保留舊模型產物,不僅舊原始碼
產物大小與傳輸
模型產物範圍自數 MB 到數百 GB。於 CI/CD 管線中移動這些產物引入:
- 長傳輸時間,形成 MITM 攻擊之視窗
- 產物版本化所需之大型儲存需求
- 網路頻寬作為管線速度之限制因素
- 大型檔案 hash 的完整性驗證負擔
管線平台及其安全模型
常見 ML 管線平台
| 平台 | 隔離模型 | 驗證 | 稽核日誌 |
|---|---|---|---|
| GitHub Actions | 以容器為本;自架 runner 常共享 | OIDC、PAT | GitHub 稽核日誌 |
| GitLab CI | Docker executor、Kubernetes runner | Job token、OIDC | GitLab 稽核事件 |
| Kubeflow Pipelines | 每步驟 Kubernetes pod | Kubernetes RBAC | Kubernetes 稽核日誌 |
| AWS SageMaker Pipelines | 每步驟容器、IAM 角色 | IAM、VPC | CloudTrail |
| Vertex AI Pipelines | 每步驟容器、服務帳號 | IAM | Cloud Audit Logs |
| Azure ML Pipelines | 運算實例、受管理端點 | AAD、managed identity | 活動日誌 |
| Airflow/Dagster | 不一(本地、Docker、Kubernetes) | 依外掛 | 依 operator |
自架 runner 風險
ML 管線常使用自架 runner 以取得 GPU 存取。自架 runner 引入顯著風險:
- 作業之間之共享狀態。 GPU 記憶體、本地檔案系統與快取依賴於作業之間持續存在,除非明確清除。
- 提升權限。 GPU 存取需要裝置掛載或特權容器。
- 網路曝險。 內部網路之 runner 可存取訓練資料儲存、模型登錄與雲服務。
- 長生命週期憑證。 Runner 快取雲端憑證以存取資料。
ML 管線中的機密管理
ML 管線需存取多種憑證:
| 機密 | 用於 | 常見管理失當 |
|---|---|---|
| 雲端憑證(AWS、GCP、Azure) | 資料存取、運算佈建 | 過寬之 IAM 角色、長生命週期金鑰 |
| 模型登錄 token | 推送/拉取模型產物 | 共用 token、不輪替 |
| 實驗追蹤 API 金鑰 | 記錄指標與產物 | 金鑰存於原始碼或環境 |
| 資料倉儲憑證 | 訓練資料存取 | 管線組態中的靜態憑證 |
| Hugging Face token | 下載基礎模型 | token 具非必要之寫入權 |
| 容器登錄憑證 | 拉取訓練容器 | 管線 token 具全登錄存取 |
機密曝露途徑
- 管線日誌。 訓練框架印出之組態可能包含憑證,除非明確抑制。
- 實驗追蹤。 自動記錄擷取含機密之環境變數。
- 快取 layer。 Docker 映像 layer 可能包含建置引數中之機密。
- 共用檔案系統。 某管線步驟寫入共享儲存之憑證,所有步驟皆可讀取。
- 錯誤訊息。 失敗的 API 呼叫可能記錄含驗證 header 之請求。
運算資源安全
GPU 基礎設施威脅
| 威脅 | 影響 | 緩解 |
|---|---|---|
| 加密貨幣挖礦 | 財務損失、訓練延遲 | 資源監控、出口流量過濾 |
| GPU 記憶體拾遺 | 自先前租戶之資料洩漏 | 作業間清除記憶體 |
| 模型外洩 | 經由運算存取之 IP 竊取 | 出口限制、DLP |
| 訓練操弄 | 被後門化模型 | 作業隔離、完整性檢查 |
資源配置攻擊
具管線存取之攻擊者可:
- 為加密貨幣挖礦啟動昂貴訓練作業
- 預留 GPU 資源以拒絕合法訓練
- 修改資源限制,使關鍵訓練階段發生記憶體不足失敗
- 排程耗盡運算配額之作業,阻擋生產模型重新訓練
管線層防禦
隔離控制
- 每個管線步驟於無持久狀態之短暫容器中執行
- 訓練作業之間清除 GPU 記憶體
- 對每個管線階段使用獨立服務帳號,並採最小必要權限
- 於管線階段之間實施網路分段
完整性控制
- 為所有管線定義簽章並防止未授權修改
- 於每步驟驗證依賴(hash 驗證、版本釘選)
- 開始訓練前驗證訓練資料之完整性
- 訓練完成後立即對模型產物簽章
存取控制
- 限制誰可修改管線定義
- 對影響生產之管線變動要求核准
- 使用短生命週期憑證(OIDC token)而非長生命週期機密
- 為緊急管線修改實施 break-glass 程序
監控控制
- 對不尋常之運算使用模式告警
- 監控管線執行時間之異常
- 追蹤訓練作業期間之資料存取模式
- 記錄所有產物操作(上傳、下載、修改)
相關主題
為何運算劫持於 ML CI/CD 管線中,較傳統軟體 CI/CD 是更嚴重之威脅?