2026 年每日通報的 CVE 數量比前一年多 131%。

供應鏈

軟體供應鏈安全最佳實務

一份實用的檢查清單,從第一個 commit 到版本發布後該做的事。每個段落都從投入最少、保護最多的步驟開始,因此您隨時可以停下來,而且狀況都會比原本更好。

更新日期

原始碼

  • 要求強式驗證。每個程式碼託管帳號都要使用多重要素驗證。
  • 保護主要分支。合併前必須經過審查,並且不允許任何人直接推送到發布分支。
  • 不要把機密放進程式碼。每次推送都掃描機密,並輪替任何已外洩的機密。
  • 把工作流程檔案當成程式碼看待。對管線的變更可能觸及您的機密,因此要求由負責人審查。

相依套件

  • 提交鎖定檔(lockfile)並據以安裝。使用 npm ci 及其他生態系的對應指令,避免建置意外引入新版本。鎖定檔有其限制,但它是起點。
  • 為新版本設定等待期。惡意版本通常在出現後不久就會被發現,因此不在版本發布當天就採用,能給這件事發生的機會。
  • 限制安裝腳本。能停用就停用。安裝時執行的腳本正是 npm 蠕蟲的散播途徑。
  • 審查新的相依套件。檢查名稱是否為錯字搶註套件,並留意維護狀況與熱門程度。OpenSSF Scorecard 可將其中一部分自動化。
  • 保護內部套件名稱。使用 scope 與套件登錄庫設定,避免公開套件透過相依性混淆取代內部套件。
  • 移除不需要的套件。每個相依套件都是另一個需要監控的對象。

建置與 CI/CD

  • 將 GitHub Actions 釘選到完整的 commit 雜湊值。標籤可以被移動,tj-actions 遭入侵事件已證明這一點。
  • 限制每個作業的權限。只給工作流程權杖所需的最低權限,並使用短效憑證取代長期有效的機密。
  • 限制對外流量。建置只需要從已知來源取得套件,並發布到已知位置。封鎖其他一切連線,遭竊的機密就無處可去。請參閱 GitHub Actions 對外連線政策。
  • 在全新、隔離的環境中執行每個作業。任何東西都不應從一個作業延續到下一個作業,尤其是外部貢獻者的 pull request。
  • 把快取視為一種輸入。遭汙染的快取會在建置之間持續存在,而它還原的內容很容易被忽略。請參閱 GitHub Actions 快取。

完整清單請參閱 CI/CD 管線安全檢查清單,以及 執行器安全性比較。

版本發布

  • 每個版本都從建置產生 SBOM。將它與建置產物一起保存。請參閱 SBOM 最佳實務。
  • 簽署建置產物並發布來源證明(provenance)。使用者便能查證版本的來源。 SLSA 定義了各個等級。
  • 只在 CI 中建置正式版本。從筆電發布的版本背後沒有可靠的紀錄。
  • 從測試到正式環境使用同一個建置產物。推進您測試過的產物,而不是重新建置,讓紀錄保持真實。

版本發布後

  • 監控您已出貨的內容。持續以新漏洞比對仍受支援版本的 SBOM。
  • 排定優先順序時不只看 CVSS。請結合 CISA KEV、EPSS 與實際情境。請參閱如何排定漏洞優先順序。
  • 掌握您曝險了多久。建置歷史會顯示哪些版本包含某個套件,以及從何時開始。
  • 在需要之前就備妥計畫。決定由誰研判、由誰修正、由誰與客戶溝通。請參閱 漏洞管理生命週期。
  • 以真實情境演練。問問自己:找出所有包含某個套件的版本需要多久?如果答案是好幾天,就從這裡開始。

該先做什麼

時程 要做的事
本週 多重要素驗證、在 CI 中使用鎖定檔、釘選 GitHub Actions、最低權限的工作流程權杖
本月 每個發布建置都產生 SBOM、有負責人的相依套件警示、機密掃描
本季 建置的對外流量規則、已出貨版本的監控、經過演練的應變計畫
下一步 經簽署的來源證明、正式檢視 SLSA 或 NIST SSDF 的涵蓋程度、供應商 SBOM

CRACI 涵蓋其中哪些項目

CRACI 涵蓋建置及其後的一切。作為您的 GitHub Actions 執行器,它在各自隔離的虛擬機器中執行每個作業,將作業下載的每個套件記錄到 SBOM 中,標示從 CI 快取還原的套件,並執行對外連線政策,封鎖建置不需要的連線。之後它會持續檢查已出貨的內容,顯示哪些建置包含有漏洞的套件,並可透過政策關卡阻擋建置。

其餘部分仍由您的其他工具負責:CRACI 不掃描原始碼或機密,不會依行為偵測新的惡意套件,也不簽署 SBOM 或來源證明。請參閱 軟體供應鏈安全工具比較,了解各項缺口由哪些工具填補。

軟體供應鏈安全最佳實務:常見問題

如何保護軟體供應鏈?

透過每個發布建置產生的 SBOM 掌握您出貨的內容,以鎖定檔與審查控管引入的套件,藉由限制機密與對外流量保護建置,並持續監控已發布的版本。

小型團隊應該先做什麼?

啟用多重要素驗證、在 CI 中從鎖定檔安裝、將 GitHub Actions 釘選到 commit 雜湊值,並只給工作流程權杖所需的最低權限。這些步驟只需幾天,就能封住常見的攻擊途徑。

如何防範惡意套件?

沒有任何單一步驟能做到。延後採用新版本、限制安裝腳本並審查新的相依套件。限制建置的對外流量,可在惡意套件闖關成功時降低損害。

為什麼要將 GitHub Actions 釘選到 commit 雜湊值?

因為版本標籤可以被移到不同的程式碼上。完整的 commit 雜湊值永遠指向同一份程式碼,因此遭劫持的標籤不會進入您的管線。

應該多久檢視一次供應鏈?

監控應該持續進行。相依套件政策、工作流程權限與應變計畫至少每年檢視一次,且在您的技術堆疊發生任何資安事件後也要檢視。

涵蓋建置及其後的一切

將 GitHub Actions 工作流程移到 CRACI,即可取得 SBOM、對外連線管控,以及對出貨內容的監控。

預約示範