供應鏈
什麼是 SLSA?
SLSA(發音同「salsa」)是 Supply-chain Levels for Software Artifacts 的縮寫。它是一套資安框架,用來證明一套軟體確實依照製作者所說的方式、從其宣稱的原始碼建置而成,且過程中未遭竄改。其等級為製作者提供可依循的路徑,也讓使用者有依據可以提出要求。
更新日期
SLSA 要解決什麼問題?
即使您審查過每一行原始碼,交付出去的仍可能是另一回事,因為使用者執行的是建置的產出。 如果建置遭到入侵,就像 SolarWinds 事件那樣,乾淨的原始碼也會產出被下毒的版本。SLSA 聚焦的正是這個缺口: 任何人能否驗證這個建置產物確實來自這份原始碼、經過這個流程?
SLSA 等級
SLSA 將其要求分成數個軌道(track)。 目前的 1.2 版包含 Build 軌道與 Source 軌道。 Build 軌道分為四個等級。
| 等級 | 名稱 | 要求 | 帶來的保障 |
|---|---|---|---|
| Build L0 | 無任何保證 | 無 | L0 即未採用 SLSA |
| Build L1 | 具備來源證明 | 一致的建置流程,以及由建置平台產生並提供給使用者的來源證明 | 有助於防止失誤,但很容易被繞過或偽造 |
| Build L2 | 託管建置平台 | 建置在託管平台上執行,由平台產生並簽署來源證明,並由使用者加以驗證 | 偽造來源證明必須發動明確的攻擊 |
| Build L3 | 強化的建置 | 各次執行彼此隔離,且使用者定義的建置步驟無法觸及簽署用的機密 | 偽造來源證明必須利用漏洞,超出大多數攻擊者的能力 |
等級並不是必須追求最高分的評等。每個等級各自防範特定威脅,請選擇符合您風險的等級。 使用託管 CI 服務的開源維護者,往往不需太多工夫就能達到 L2。
什麼是來源證明?
來源證明(provenance)是記錄建置產物如何產生的紀錄。在 SLSA 中,它說明了是哪個平台、從哪份原始碼、 經過哪個流程、以哪些頂層輸入建置而成。L2 以上的來源證明會經過簽署,讓使用者可以確認它來自建置平台且未遭竄改。
您可以把 SBOM 想成食材清單,而來源證明則是這道菜在哪裡、如何烹調。 兩者回答不同的問題,搭配使用效果更好:SBOM 列出裡面有什麼,來源證明則說明建置產物從何而來。
如何導入 SLSA
- 在 CI 中建置,且每次都用相同方式。不要再從筆電發布版本。這就是達到 L1 的大部分工作。
- 產生來源證明。在 GitHub 上,artifact attestations 可產生經簽署的來源證明。請參閱 attestations 如何在 GitHub Actions 中搭配 SBOM 運作。
- 在關鍵環節進行驗證。沒有人檢查的簽署來源證明,保護不了任何人。請在部署步驟或准入控制器(admission controller)中加入驗證。
- 強化建置。隔離各次執行,並讓簽署金鑰遠離建置步驟。請參閱 執行器安全性比較。
- 要求您的相依套件。優先選用會發布來源證明的套件,npm 等登錄庫現已支援。
SLSA 未涵蓋的範圍
- 漏洞。建置得再完美的建置產物,也可能含有缺陷。SLSA 並不說明程式碼是否安全。
- 惡意原始碼。如果攻擊者把程式碼 commit 進儲存庫,來源證明也會忠實記錄該程式碼的建置。 Source 軌道處理了其中一部分。
- 建置拉進了什麼。來源證明只列出頂層輸入。Build 軌道並未要求完整的相依套件清單,而這正是 SBOM 的用途。
- 受信任的內部人員。xz 後門是透過一位受信任的維護者植入的,單靠 SLSA 無法阻止。
SLSA 與其他框架
SLSA 深入探討建置完整性。NIST SSDF 的範圍則廣得多:它涵蓋整體的安全開發, 其中包括一項保護並封存版本的實務,而 SLSA 來源證明正好能支援這項實務。SLSA 是 OpenSSF 的專案,許多團隊會同時採用兩者。 若想了解全貌,請參閱 什麼是軟體供應鏈安全。
CRACI 的定位
CRACI 不會產生經簽署的來源證明,也不宣稱符合任何 SLSA 等級;若您需要,請使用 GitHub artifact attestations 或類似服務。 CRACI 補上的是 SLSA 未涵蓋的部分:完整記錄每個 GitHub Actions 作業拉進了什麼。每個作業都在各自隔離的虛擬機器中執行, 它擷取的每個套件都會寫入 SBOM,對外連線政策則會封鎖建置不需要的連線。請參閱 建置時 SBOM 產生。
SLSA 常見問題
SLSA 代表什麼?
Supply-chain Levels for Software Artifacts,發音同「salsa」。
SLSA 有哪些等級?
Build 軌道共有四個等級:L0,無任何保證;L1,具備來源證明;L2,由會簽署來源證明的託管建置平台執行;L3,強化的建置,各次執行彼此隔離且簽署機密受到保護。1.2 版另外新增了 Source 軌道。
什麼是 SLSA 來源證明?
記錄建置產物如何建置的紀錄:哪個平台、從哪份原始碼、經過哪個流程、以哪些頂層輸入。在 Build L2 以上會經過簽署,讓使用者可以驗證。
SLSA 與 SBOM 有什麼不同?
SBOM 列出一套軟體裡面有什麼,SLSA 來源證明則描述它是如何、在哪裡建置的。一般而言兩者都需要。
SLSA 是強制性的嗎?
不是。它是 OpenSSF 社群推出的自願性框架。部分客戶與組織可能會要求達到某個等級,但它並不是法律。
我應該以哪個 SLSA 等級為目標?
先在 CI 中建置並產生來源證明,達到 Build L1;接著在託管平台上邁向 L2,許多團隊都能很快達到。L3 適合許多人仰賴或風險較高的版本。