Chromium Chronicle #23:Chrome 基礎架構中經過驗證的版本

第 23 集:Akash Mukherjee 在加州山景城 (2021 年 7 月)
上一集

Chrome 建構時,有許多因素會影響環境的輸出內容,進而影響構件的輸出結果。 從 OS、已安裝的支援程式庫、第三方依附元件 已安裝工具和執行階段環境本身 每個環節都有不同的安全衛生等級。

過去,Google 會採用二進位授權 進行內部執行階段強制執行檢查,將內部風險降至最低 確保部署在 Google Cloud 的 經確實審查,並具有可追蹤的來源。

確保沒有人可以入侵建構 以及在 LUCI 上建構的構件供應鏈 Google 可以降低推送軟體給使用者的風險。

從去年開始,系統會為每個版本產生可驗證的版本 資訊清單:已簽署的 JWT 完整說明建構作業的來源 產生的二進位檔和構件的加密編譯雜湊值,以及完整的建構參數。 這個建構資訊清單可讓我們追蹤構件追溯到來源。 讓建構程序及其輸出內容可驗證。

此外,資訊清單還能讓我們確認建構的構件未經過修改 以免簽章失效 總共 因此,我們也能獲得在受信任的系統之間掃遍的文物監管鏈。

二進位授權是以兩個步驟系統實作。 系統會產生provenance 提供建構時間資訊 政策在簽署或安裝軟體之前強制執行。

def CreateProvenance(self, build_manifest: Mapping[str, Any]):
  """Builder generates and signs provenance given build manifest. Signed JWT is placed
  alongside built artifact."""

以 Chrome 來說,在使用 Google 的簽署基礎架構 簽署產生的軟體構件前 系統會強制執行這項政策,以滿足版本的特定最低安全性需求。

def VerifyProvenance(self, artifact_hash: str, provenance: str):
  """Provenance is verified using a policy engine service before signing an artifact."""

規定大約分為 4 部分:

  • 原始碼控管:保護進入建構作業的資料。
  • 建構:保護將來源轉換為二進位檔的程序。
  • 來源:包含可驗證建構資訊清單的認證。
  • 政策:判斷特定成果是否符合特定結構定義之規則。

在 Chrome 和基礎架構的 CI 和 CD 程序中實施政策強制執行檢查 可讓我們 和設定符合特定的最低安全標準。 這是用來限制 疑似惡意的內部人員或遭入侵的內部帳戶 修改向使用者發布的軟體。