供應鏈
CI/CD 安全
CI/CD 安全是保護建置、測試與交付軟體之管線的實務。管線會執行來自許多來源的程式碼、持有正式環境的機密,並產出客戶安裝的成品,因此它是企業內最有價值的攻擊目標之一,卻也常是最少人留意的地方。
更新日期
為什麼管線會成為攻擊目標
- 管線握有金鑰。雲端憑證、登錄檔權杖與簽章金鑰都會經過 CI。
- 管線會執行他人的程式碼。每個相依套件、安裝腳本與第三方 action 都在執行器上執行。
- 管線直通正式環境。管線產出的任何東西都會被信任、簽章並交付。攻擊者一旦進入建置,就能同時觸及所有客戶。
- 很少人監看管線。工作流程檔案很少變更,受到的審查也比應用程式碼少。
tj-actions 入侵事件與 Shai-Hulud npm 蠕蟲都鎖定 CI 中的機密。這類攻擊如何展開,請參閱什麼是供應鏈攻擊。
主要的 CI/CD 安全風險
OWASP Top 10 CI/CD Security Risks 是業界標準參考。依出錯的地方分組如下:
| 面向 | OWASP 風險 | 實際樣貌 |
|---|---|---|
| 誰能變更什麼 | 流程控管不足、身分與存取管理不足 | 程式碼未經審查就進入正式環境,或舊帳號仍保有存取權 |
| 管線中執行什麼 | 相依鏈濫用、管線執行遭汙染(poisoned pipeline execution) | 惡意套件或遭竄改的工作流程以作業的權限執行 |
| 作業能觸及什麼 | 管線層級存取控制不足、憑證管理不當 | 單一作業就能讀取所有機密,權杖一用就是好幾年 |
| 如何設定 | 系統設定不安全、第三方服務使用缺乏治理 | 執行器未更新修補程式,整合服務的權限超過所需 |
| 您能證明什麼 | 建置產物完整性驗證不當、日誌與可視性不足 | 沒有人說得出版本中包含什麼,或作業連線到哪裡 |
各項風險與執行器控制措施的對應,請參閱執行器安全比較。
CI/CD 安全最佳實務
- 將管線定義視為正式環境程式碼。工作流程檔案必須經過審查,並讓不受信任的 pull request 無法接觸機密。
- 限制每個作業能做的事。只給權杖所需的最低權限,並優先使用短期憑證,而非儲存的機密。
- 將第三方 action 固定到 commit 雜湊值。標籤可以被移到其他程式碼上。
- 隔離作業。每個作業都在全新環境中執行,不會有任何東西延續到下一個作業。
- 控制對外流量。建置需要的是已知的來源與已知的目的地。封鎖其他一切,就能阻止遭竊的機密外流。請參閱 GitHub Actions 對外連線政策。
- 記錄發生的一切。為每次建置保留一份 SBOM 與網路活動日誌,以便事後回答問題。
逐步執行的版本,請參閱 CI/CD 管線安全檢查清單。
CI/CD 安全工具的類型
| 類型 | 功能 | 範例 |
|---|---|---|
| 執行器安全 | 隔離作業,並在執行期間控制作業能觸及的範圍 | CRACI, StepSecurity |
| 態勢管理 | 找出有風險的管線與儲存庫設定 | Legit Security, Cycode, Apiiro, OX Security |
| 程式碼與相依套件掃描 | 在每次變更時檢查程式碼、相依套件與機密 | GitHub Advanced Security, Snyk, Semgrep |
| SBOM 與佐證資料 | 記錄每個版本包含的內容 | CRACI, Syft, Anchore |
這些工具在不同階段運作,因此多數團隊會搭配使用。掃描工具在建置前檢查檔案,態勢管理工具檢查設定,執行器安全則在作業執行時運作,而這正是惡意套件發動的時機。請參閱 軟體供應鏈安全工具比較與 DevSecOps 工具比較。
CRACI 的定位
CRACI 在建置執行時保護建置。它以更快速、成本更低的執行器取代您的 GitHub 託管執行器:每個作業都在自己的隔離虛擬機器中執行,對外連線政策會封鎖建置不需要的連線,作業擷取的每個套件都會納入 SBOM。由於政策只允許建置所需的連線,即使面對從未見過的攻擊,也能保護您。
CRACI 不會檢查您的工作流程設定、不會掃描原始碼或機密,也不會簽署來源證明,因此這些部分請保留或加入其他工具。目前支援的 CI 系統是 GitHub Actions,其他 CI 系統已列入產品藍圖。
CI/CD 安全:常見問題
什麼是 CI/CD 安全?
這是保護建置、測試與交付軟體之管線的實務,範圍包括管線的憑證、它執行的程式碼,以及它產出的建置產物。
最大的 CI/CD 安全風險有哪些?
惡意相依套件與第三方 action、遭汙染的管線、權限過大的權杖與長期有效的機密,以及無法看清建置做了什麼。OWASP Top 10 CI/CD Security Risks 是業界標準清單。
什麼是管線執行遭汙染(poisoned pipeline execution)?
攻擊者透過 pull request 編輯工作流程檔案或其呼叫的腳本等方式,改變管線執行的內容,讓自己的程式碼以管線的權限執行。
如何保護 CI/CD 管線?
審查管線變更、只給每個作業所需的最低權限、以 commit 雜湊值固定第三方 action、隔離作業、限制對外流量,並記錄每次建置做了什麼。
CI/CD 安全與 DevSecOps 有什麼不同?
DevSecOps 是將資安融入軟體開發方式的更廣泛實務。CI/CD 安全則聚焦於管線本身,而 DevSecOps 工具同樣仰賴管線運作。
GitHub Actions 需要額外的安全措施嗎?
GitHub 提供權杖權限與機密掃描等控制措施,但需要您自行設定,而且託管執行器預設不限制對外流量。多數團隊會再加上固定版本、審查規則與執行器控制。