本文上次更新於 2024 年 5 月,內容反映截至撰文時的情況。我們會持續改善保護客戶的方式,因此 Google 的安全性政策和系統未來可能會改變。
本文說明 Google 用於強制執行基礎架構控管措施,確保配備 Titan 的實際工作環境機器啟動程序完整性。這些控制項以測量啟動程序為基礎,可確保 Google 能從啟動堆疊中的安全漏洞復原資料中心機器,並將機器從任意啟動狀態還原為已知的良好設定。
簡介
資料中心機器的安全狀態高度取決於開機時的機器設定。機器的啟動程序會設定機器硬體並初始化作業系統,同時確保機器安全無虞,可在 Google 的實際工作環境中執行。
在開機程序的每個步驟中,Google 都會導入業界領先的控制措施,協助強制執行預期的開機狀態,並確保客戶資料安全無虞。這些控管措施可確保機器啟動時使用預期軟體,讓我們移除可能危害機器初始安全狀態的漏洞。
本文說明啟動程序,並示範控制項在啟動流程中的運作方式。我們控管的主要目標如下:
背景
本節定義並說明「機器憑證」、「硬體信任根」、「密封憑證」和「加密密封」等詞彙。
電腦憑證
Google 的機器管理系統中,其中一個核心元件是憑證基礎架構,由內部憑證授權單位 (CA) 和其他控制層元素組成,負責協調憑證輪替流程。
Google 實際工作環境中的機器建立安全管道時,會執行相互驗證。如要執行雙向驗證,每部機器都必須擁有 Google 的 CA 公開金鑰。每部機器也都有自己的公開/私密金鑰組,以及該金鑰組的憑證。
每部電腦的公開/私密金鑰組,連同 CA 簽署的憑證,稱為電腦憑證,電腦會使用這項憑證向機群中的其他電腦驗證自身。在正式版網路中,機器會先檢查其他機器的公開金鑰是否已通過 Google CA 認證,再交換流量。
硬體信任根和加密密封
隨著運算裝置日益精進,每部裝置的攻擊面也隨之擴大。為解決這個問題,裝置越來越常採用硬體信任根 (RoT),這類小型受信任的執行環境可保護機器的敏感資料。RoT 也會出現在筆電或手機等行動裝置,以及桌機等傳統裝置上。
Google 資料中心的機器採用 Google 設計的自訂硬體信任根,整合到每部機器的最深層,也就是 Titan。我們使用 Titan 和稱為「加密密封」的機制,確保每部機器都執行我們預期的設定和軟體版本。
密碼編譯密封是 Titan 提供的服務,用於保護機密。Titan 的密封功能與可信任平台模組 (TPM) 規格中的功能類似,這項規格是由可信任運算集團發布。Titan 的加密密封功能還有另一項優勢,那就是 Titan 能更準確地測量及驗證低層級韌體。
密碼編譯密封包含下列兩項控制項:
- 加密機密資料
- 必須符合這項政策,才能解密資料
密封憑證
Google 的憑證基礎架構會使用加密密封技術,以機器硬體信任根控管的金鑰,加密靜態機器憑證。經過加密的憑證私密金鑰和對應憑證稱為「密封憑證」。除了機器憑證,Google 也會使用這項密封機制保護其他私密資料。
只有在機器能滿足解密政策 (指定機器必須啟動的軟體) 時,才能解密及存取機器憑證。舉例來說,將機器的憑證密封至指定作業系統核心預定版本的政策,有助於確保機器必須啟動預定核心版本,才能加入機器叢集。
解密政策會透過「測量啟動」程序強制執行。開機堆疊中的每個層都會測量下一個層,而機器會在開機結束時驗證這條測量鏈。這項評估通常是密碼編譯雜湊。
憑證密封程序
本節說明 Google 電腦使用的憑證密封和測量啟動程序。下圖說明了這個流程。
如要將機器的憑證密封至特定啟動政策,請執行下列步驟:
- Google 的機器自動化基礎架構會在機器上啟動軟體更新。並將預期軟體版本傳遞至憑證基礎架構。
- Google 的憑證基礎架構會向 Titan 要求密封金鑰,並受政策約束,因此 Titan 只會在機器啟動至預期軟體時使用該金鑰。
- 憑證基礎架構會將傳回的金鑰政策,與機器自動化基礎架構傳達的意圖進行比較。如果憑證基礎架構確認政策符合意圖,就會核發認證的機器憑證給機器。
- 憑證基礎架構會使用步驟 2 中取得的密封金鑰,加密這項憑證。
- 加密憑證會儲存在磁碟上,供 Titan 在後續啟動時解密。
測量啟動程序
Google 機器的啟動堆疊包含四個層,如下圖所示。
圖層如下:
- 使用者空間:應用程式,例如精靈或工作負載。
- 系統軟體:管理程序或核心。最低層級的軟體,可為使用者空間提供硬體功能 (如網路、檔案系統或虛擬記憶體) 的抽象化。
- 啟動韌體:初始化核心的韌體,例如 BIOS 和系統啟動載入程式。
- 硬體信任根:在 Google 機器中,Titan 晶片會以密碼編譯方式測量韌體和其他低階 CPU 服務。
在啟動過程中,每個層級都會先測量下一個層級,再將控制權傳遞給該層級。只有在啟動期間擷取的所有測量結果都符合密封憑證的解密政策 (由 Google 的憑證基礎架構指定) 時,密封憑證才會提供給作業系統。因此,如果機器能使用密封憑證執行作業,就表示機器符合測量啟動政策。這項程序屬於隱含認證。
如果機器啟動的軟體偏離預期狀態,機器就無法解密,也無法使用在機群中運作所需的憑證執行作業。在機器管理基礎架構觸發自動修復動作前,這類機器無法參與工作負載排程。
從核心中的安全漏洞復原
假設某部電腦執行的是核心版本 A,但安全研究人員發現這個核心版本有安全漏洞。在這些情況下,Google 會修補安全漏洞,並向機群推出更新後的 Kernel 版本 B。
除了修補安全漏洞,Google 也會為機群中的每部機器發放新的機器憑證。如「憑證密封程序」一文所述,新的機器憑證會繫結至解密政策,只有在機器上啟動核心版本 B 時,才能滿足該政策。如果機器未執行預期核心,就無法解密新的機器憑證,因為開機韌體測量結果不符合機器的開機政策。這個程序也會撤銷舊的機器憑證。
因此,這些機器無法加入機器叢集,直到核心更新完畢,符合控制層的意圖為止。這些控制項可確保執行易受攻擊的 Kernel 版本 A 的機器無法接收工作或使用者資料,直到升級至 Kernel 版本 B 為止。
從啟動韌體中的安全漏洞復原
假設系統啟動韌體存在安全漏洞,而非作業系統核心。如從核心中的安全漏洞復原一文所述,Google 可透過相同控制項從這類安全漏洞復原。
Google 的 Titan 晶片會在機器執行前測量啟動韌體,以便判斷啟動韌體是否符合機器憑證的啟動政策。如果機器未執行預期的啟動韌體,就無法取得新的機器憑證,且啟動韌體符合控制層的意圖之前,該機器也無法加入機器叢集。
從信任根韌體中的安全漏洞復原
RoT 並非不會受到安全漏洞影響,但 Google 的啟動控制項可讓您從錯誤中復原,即使是在啟動堆疊的這一層,也就是 RoT 自身的可變動程式碼中,也能復原。
Titan 的啟動堆疊會自行實作安全與測量啟動流程。Titan 晶片啟動時,硬體會以密碼編譯方式測量 Titan 的開機載入程式,而開機載入程式會測量 Titan 的韌體。與機器的核心和啟動韌體類似,Titan 韌體會以版本號碼進行加密簽署。Titan 的系統啟動載入程式會驗證簽章,並擷取 Titan 韌體的版本號碼,然後將版本號碼提供給 Titan 的硬體式金鑰衍生子系統。
Titan 的硬體子系統會實作版本化金鑰衍生配置,因此版本為 X 的 Titan 韌體可以取得與所有小於或等於 X 的版本綁定的晶片專屬金鑰。韌體版本 X 可以透過 Titan 硬體存取繫結至版本 X 以下 (含 X) 的金鑰,但無法存取繫結至版本 X 以上的金鑰。所有密封至 Titan 的密鑰 (包括機器憑證) 都會使用版本化金鑰加密。
認證和密封金鑰是每個 Titan 安全性晶片的專屬金鑰。有了專屬金鑰,Google 就能只信任預期在 Google 資料中心執行的 Titan 晶片。
下圖顯示 Titan 和版本金鑰。韌體版本 X 無法存取版本 X+1 金鑰,但可存取所有舊版金鑰。
如果 Titan 韌體出現嚴重安全漏洞,Google 會推出版本號碼較大的修補程式,然後發行與較高 Titan 韌體版本綁定的新機器憑證。舊版有安全漏洞的 Titan 韌體無法解密這些新憑證。因此,如果機器在實際工作環境中以新憑證執行作業,Google 就能有把握地判斷機器的 Titan 晶片已啟動最新版 Titan 韌體。
確保信任根的真實性
本文所述的控制項都以硬體 RoT 本身的功能為基礎。Google 的憑證基礎架構會依據這些 RoT 發出的簽章,判斷機器是否正在執行預期軟體。
因此,憑證基礎架構必須能夠判斷硬體 RoT 是否為正版,以及 RoT 是否執行最新韌體。
每個 Titan 晶片在製造時,都會以獨特的熵進行程式設計。Titan 的低階開機常式會將該熵轉換為裝置專屬金鑰。Titan 製造線上的安全元素會認可這個晶片專屬金鑰,讓 Google 辨識為合法的 Titan 晶片。
下圖說明瞭這項背書程序。
在正式版中,Titan 會使用裝置專屬金鑰來認可發出的任何簽章。Titan 晶片使用的流程與裝置 ID 組合引擎 (DICE) 類似。認證包括 Titan 韌體版本資訊。這項認證有助於防止攻擊者冒用 Titan 晶片發出的簽章,以及回溯至舊版 Titan 韌體並冒用新版 Titan 韌體。這些控制項可協助 Google 驗證從 Titan 收到的簽章,是否由執行正版 Titan 韌體的正版 Titan 硬體發出。
以啟動完整性為基礎
這份論文說明如何確保機器的應用程式處理器啟動預期程式碼。這些機制會搭配硬體信任根晶片,以測量的啟動流程為基礎。
Google 的威脅模型包含攻擊者,他們可能會在 CPU 和 RoT 之間的匯流排上實際插入,目的是不當取得機器的解密憑證。為盡量降低這項風險,Google 正在推動開發以標準為基礎的方法,以擊敗主動插入器,並整合 Trusted Computing Group 的 TPM 和 DPE API,以及 Caliptra 整合式信任根。
後續步驟
- 如要瞭解 Google 如何確保複雜的非聚合式機器開機堆疊完整性,請參閱非聚合式機器的遠端認證。
- 如要概略瞭解 Google 的安全基礎架構,請參閱 Google 基礎架構安全設計總覽。
- 如要進一步瞭解 Google 如何為業界標準貢獻 Titan 安全解決方案,請觀看 Trusted Computing Group YouTube 頻道上的「TPM Attested Boot in Big, Distributed Environments」演講。