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

第 23 集:由美國加州山景城的 Akash Mukherjee 提供 (2021 年 7 月)
上一集

我們建構 Chrome 時,許多環節都會影響環境,而會影響構件的輸出內容。從作業系統、已安裝的支援程式庫、第三方依附元件、安裝的工具和執行階段環境本身,這些元件都是以各種安全性衛生等級建構。

Google 以往採用「二進位授權」這項內部執行階段強制執行檢查,藉此確保在 Google 部署的實際工作環境軟體和設定都經過確實審查,並具有可追蹤的來源,藉此將內部風險降到最低。

透過確保沒有人能察覺建構作業和建構在 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 個領域:

  • 「Source control」(來源控制)保護傳入建構的資料。
  • 版本:保護將來源轉換為二進位檔的程序。
  • 來源:包含可驗證建構資訊清單的認證。
  • 「政策」:判斷特定構件是否符合指定情境的條件。

在 Chrome 和基礎架構的 CI、CD 程序中,實施政策強制執行檢查,讓我們能夠驗證程式碼和設定是否符合特定的最低安全性標準。這是重要控管措施,可防止潛在內部攻擊者或入侵內部帳戶的使用者修改我們發布給使用者的軟體。