Confidential Space 安全總覽

本文說明 Confidential Space 的安全控管措施,以及系統如何防範各種威脅。機密空間的設計宗旨是讓各方與工作負載分享機密資料 (例如受監管的資料或個人識別資訊 (PII)),同時保有資料的機密性和擁有權。機密空間可協助建立隔離區,確保資料只會向工作負載和原始資料擁有者顯示。

如果無法與工作負載運算子建立信任關係,或無法在建立機密資料的原始各方之間建立信任關係,您可以使用 Confidential Space。舉例來說,金融機構可使用 Confidential Space 相互合作,找出詐欺或分析洗錢活動。Confidential Space 可分析顧客資料集,同時保護顧客身分隱私。

Confidential Space 系統的元件

機密空間使用受信任的執行環境 (TEE),只會向授權工作負載發布密鑰。認證程序和強化的 OS 映像檔可協助保護工作負載,以及工作負載處理的資料,避免遭到不受信任的運算子存取。

機密空間系統有三個核心元件:

  • 工作負載:容器化映像檔,內含在雲端 TEE 中執行的強化 OS。您可以使用機密運算做為 TEE,提供硬體隔離和遠端認證功能。
  • Google Cloud 認證OpenID Connect (OIDC) 權杖提供者。您可以使用這項服務驗證 TEE 的認證引文,並發布驗證權杖。權杖包含工作負載的識別屬性。
  • 受保護的資源:代管的雲端資源,例如 Cloud Key Management Service 金鑰或 Cloud Storage 值區。資源受到允許政策保護,該政策會授予授權同盟身分權杖存取權。透過工作負載身分集區這個中繼步驟,OIDC 權杖會轉換為 IAM 可使用的聯合身分權杖。

系統會確保只有授權工作負載才能存取受保護的資源。此外,機密空間有助於在認證前後,保護工作負載免於檢查和竄改。

在機密空間系統中,有三方參與者:

  • 工作負載作者:建立容器化映像檔,其中包含可存取受保護資源的應用程式。作者無法存取資料或結果。此外,作者無法控管資料或結果的存取權。
  • 工作負載運算子:在 Google Cloud 專案中執行工作負載。作業人員通常擁有專案的完整管理員權限。運算子可以管理 Compute Engine 執行個體、磁碟和網路規則等資源,並與作用於這些資源的任何 Google Cloud API 互動。 Google Cloud 運算子無法存取資料或結果,也無法影響或修改程式碼或執行環境。此外,運算子無法控管資料或結果的存取權。
  • 資源擁有者 (或資料協作者):擁有受保護資源。資源擁有者可以存取自己的資料、設定資料權限,以及查看結果。他們無法存取其他資源擁有者的資料,也無法自行修改程式碼。

Confidential Space 支援信任模型,其中工作負載作者、工作負載運算子和資源擁有者是互不信任的獨立立約方。

下圖顯示系統元件和參與者。工作負載位於與受保護資源不同的專案中。

Confidential Space 系統和元件。

安全的資料處理作業範例

機密空間可協助您在分享資料時保護使用者隱私。下表說明三種範例用途。

用途 範例情境
功能性加密模型 在函數加密模型中,Alice 想要與 Bob 分享機密資料的結果,但不想揭露整個資料集。Alice 會加密資料集,並在專案的 Cloud KMS 中保護資料加密金鑰 (DEK)。Alice 編寫實作工作負載的程式,並與 Bob 分享二進位檔。Alice 設定 KMS,讓程式存取 DEK。工作負載會在 Bob 的機密空間中執行,解密及處理 Alice 的資料集,然後將結果寫入 Bob 的 Cloud Storage。
多方運算 在多方運算中,Alice 和 Bob 希望彼此分享結果,同時保留輸入資料集的機密性。與函式加密模型類似,Alice 和 Bob 會加密各自的資料集,並在專案的 Cloud KMS 執行個體中保護 DEK。他們共同撰寫可決定結果的程式,並在機密空間中執行。Alice 和 Bob 設定 KMS,授予程式 DEK 的存取權。程式會讀取及處理這兩個資料集,並將結果寫入共用的 Cloud Storage 值區。
重要分享 更複雜的機制會使用金鑰分享的概念。金鑰共用是 Alice、Bob 和其他擁有者共用的私密金鑰,因此即使知道個別共用金鑰,也無法存取加密資料集。在這個機制中,信任關係會分散到多位擁有者身上。私密金鑰只會在受限的 TEE 中,由授權工作負載組裝。

在這些範例中,只有工作負載可以存取加密資料集並進行處理。Confidential Space 可確保無人能對不屬於自己的資料執行未經稽核的作業。資料擁有者可控管資料的使用方式,以及哪些工作負載有權對資料採取行動。

保護工作負載的完整性和機密性

為保護工作負載免受不受信任的工作負載運算子侵害, 機密空間會實作下列安全控管措施:

  • 認證程序會偵測工作負載映像檔或其 TEE 是否經過修改。這項控管機制有助於保護工作負載的完整性,確保在事前認證階段安全無虞。
  • 強化基礎映像檔有助於縮小攻擊面,並防止工作負載運算子在執行階段存取或入侵執行個體。這項控制項有助於在認證後保護工作負載的完整性和機密性。這些安全控管措施可共同保護工作負載、機密資訊和處理的資料。

認證程序

認證程序以受防護的 VM 測量啟動和擴充執行階段測量為依據。這個程序會在虛擬信任平台模組 (vTPM) 裝置中,擷取受保護的僅擴充暫存器中的啟動順序測量值。

測量範圍涵蓋早期啟動元件、載入的核心和容器映像檔。此外,這些屬性還包含環境屬性,例如指出執行個體是否為機密虛擬機器的旗標。vTPM 會使用 Google Cloud Attestation 信任的認證認證金鑰,簽署 (或引用) 這些測量結果。

下圖顯示 Confidential Space 系統的元件,以及每個元件在驗證程序中的參與方式。

認證程序中的系統元件和當事人。

認證程序取決於下列元件:

  • 客層韌體:不可變更的元件,是Google Cloud的信任部分。
  • 經過認證的 Confidential Space 映像檔:Container-Optimized OS 為基礎的強化映像檔,可從附加的開機磁碟讀取。
  • 早期啟動元件:與 vTPM 互動的開機載入程式和核心,可將啟動元件測量至平台設定暫存器 (PCR)。
  • 啟動器 這個元件會從映像檔存放區下載工作負載二進位檔,並將容器及其設定測量到 PCR 中。啟動器會從執行個體中繼資料伺服器讀取設定。

  • 認證處理程式碼:負責準備 PCR 引用,並傳回 vTPM 的引用、認證金鑰和完整事件記錄的程式碼。

  • Google Cloud 驗證這項服務會驗證引號、重播事件記錄、核發 OIDC 權杖,並傳回權杖和工作負載存取權政策的屬性。

強化版映像檔

機密空間映像檔是最小的單一用途 OS,這個映像檔會執行容器啟動器,而容器啟動器會啟動單一容器。機密空間映像檔以 Container-Optimized OS 的現有安全性強化功能為基礎,並提供下列優點:

  • 採用完整性保護機制的加密磁碟分割區:機密空間映像檔包含下列分割區:
    • 一個 root-fs 分區和一個包含啟動器二進位的 OEM 分區。這些分割區無法變更,且受到 dm-verity 保護。
    • 儲存下載工作負載二進位檔的可寫入暫時性分割區。dm-crypt 會加密這個分割區,並保護其完整性。
    • 對應至 RAM 的 tmp-fs 分區。在機密 VM TEE 中,VM 的記憶體會經過加密。此外,swap-fs 系統也會停用,避免設定錯誤的作業系統將資料儲存到磁碟。
  • 經過驗證的加密網路連線:啟動器會使用 TLS 驗證 Google Cloud 認證,並保護通訊連結。
  • 各種開機測量值:這些測量值包括核心指令列引數、root-fsdm-verity 設定,以及工作負載二進位檔。
  • 停用遠端存取和雲端專用工具:這些工具包括 sshdOS 登入

  • 減少狀態轉換:舉例來說,啟動器會執行單一容器,然後終止。

威脅模型和緩解措施

本節說明機密空間有助於減輕的威脅模型,以及機密空間導入的新風險。

下列攻擊不在本文的討論範圍內:

  • 軟體供應鏈攻擊,適用於客體統一可延伸韌體介面 (UEFI) 韌體、機密空間映像檔啟動載入程式和核心、容器執行階段,以及工作負載的第三方依附元件。資料協作者會假設資源擁有者已審查及稽核容器映像檔,然後才透過允許政策與他們共用資源。
  • 對 Google Cloud發動攻擊,例如 VM 逸出。

可能遭受的攻擊

機密空間旨在防範三種可能的攻擊:

  • 惡意工作負載運算子:惡意工作負載運算子可以修改磁碟內容、攔截網路連線,並在執行階段嘗試入侵 TEE。惡意運算子可能會擴大攻擊面或限制執行階段環境。舉例來說,惡意操作人員可以新增序列埠,藉此導入新的攻擊向量。舉例來說,惡意操作人員可能會限制資源,例如限制訪客的記憶體大小、變更磁碟空間或變更防火牆規則。這些限制可能會觸發 I/O 錯誤,導致錯誤案例測試不佳。
  • 惡意認證用戶端:這類攻擊者會連線至 Google Cloud Attestation,並傳送格式錯誤但已簽署的事件記錄訊息。
  • 惡意資源擁有者:惡意資源擁有者可完全控管工作負載使用的加密資料集。這類攻擊者可能會提供格式錯誤的輸入內容或有偏差的資料,並嘗試觸發工作負載中的剖析安全漏洞,或規避隱私權控管措施。

攻擊面

下表說明攻擊者可用的攻擊面。

攻擊者 目標 攻擊面 風險
工作負載運算子 TEE、工作負載 磁碟讀取

從磁碟讀取的任何內容都受到攻擊者控制。

多重寫入器永久磁碟和動態磁碟附件等服務,表示攻擊者可以隨意動態修改磁碟內容。

工作負載運算子 TEE、工作負載 磁碟寫入 攻擊者可以查看寫入磁碟的任何內容。請參閱磁碟快照匯入功能。
工作負載運算子 TEE、工作負載 中繼資料伺服器 從中繼資料伺服器讀取的執行個體屬性 (包括開機指令碼和環境變數) 都在攻擊者的掌控之中。
工作負載運算子 TEE、工作負載 網路 外部網路連線可能會遭到攔截,導致無法存取映像檔存放區或 Google Cloud 認證。這項攻擊是透過私人虛擬私有雲和面向公眾的 Cloud Router 執行個體完成。
認證用戶端 Google Cloud Attestation 事件記錄和認證訊息 Google Cloud 驗證具有複雜的加密邏輯,難以撰寫防禦程式碼。
資源擁有者 工作負載 加密資料集

攻擊者可能會汙染工作負載的輸入資料集,因此加密資料不一定是可信的資料。

Google Cloud 基礎架構

Google Cloud 包括 Compute Engine Hypervisor、機密 VM 的 vTPM、訪客 UEFI 韌體,以及代管的 Google Cloud 驗證執行個體。系統會安全保護 vTPM 和 OIDC 簽署金鑰等機密金鑰內容。

Google 基礎架構的設計宗旨,是將每位客戶的資料和其他客戶及使用者的資料以邏輯方式隔離,就算將資料存放在同一個實體伺服器中,也不會混雜在一起。支援人員和工程師的管理員存取權受到限制,且會經過稽核,並對客戶公開。此外,機密 VM 的內嵌記憶體加密功能可保護執行個體記憶體的機密性。內嵌記憶體加密功能會導致直接檢查或意外記錄記憶體 (核心當機記錄) 的作業失效。如要進一步瞭解我們如何保護平台,請參閱 Google 安全性總覽

威脅與管控

加密檔案系統搭配完整性防護功能,可降低磁碟攻擊帶來的風險。此外,從磁碟讀取程式碼後,系統會進行測量,且不會再從磁碟重新讀取該資料。密碼絕不會以純文字形式揭露給磁碟或任何外部裝置 (例如序列控制台)。

透過經過驗證的端對端加密管道,可降低網路攻擊的風險。映像檔會停用外部網路存取權,例如 SSH。認證通訊協定有助於保護啟動程序,以及從中繼資料伺服器讀取的任何設定。最後,機密空間工作負載應使用差異化隱私權控制項,以減輕資料集偏誤造成的風險。

下表說明威脅和緩解措施:

攻擊測量啟動程序

下表說明與測量啟動程序相關的潛在威脅和緩解策略。

威脅 減緩 緩解措施

攻擊者使用不支援測量啟動的舊版韌體啟動受防護的 VM。

如果成功,攻擊者可能會回放任意測量結果,並破解遠端認證。

控制層可減輕這項威脅。 Google Cloud

機密空間會新增 vTPM 裝置和最新版 UEFI 韌體。此外,機密空間會啟用測量啟動,且無法停用。

基礎架構內 Google Cloud

攻擊者會覆寫客體實體記憶體中的 UEFI 韌體、重新啟動客體 (這會重設 vTPM 暫存器),並執行修改過的韌體。

如果成功,攻擊者可能會回放任意測量結果,並破解遠端認證。

虛擬機器監控程式可減輕這項威脅。在客機重新啟動時,管理程序會將 UEFI 韌體的乾淨副本載入客機記憶體。系統會捨棄客體記憶體中的先前修改內容。此外,只有重新啟動客層會重設 vTPM。 在 Google Cloud 中,由您啟用機密運算
攻擊者修改未測量的設定檔,對程式執行作業造成負面影響。

認證程序可減輕這項威脅。所有可執行二進位檔和相關設定檔都會在執行前完整測量。

具體來說,系統會測量安全啟動變數、grub 設定和核心指令列引數。

安全審查結果顯示,認證程序中沒有遺漏任何評估。

在 Confidential Space 映像檔中
攻擊者會觸發早期啟動元件中的記憶體損毀漏洞,並取得程式碼執行權。

早期啟動元件是以 C 語言編寫而成。這些元件會處理不受信任的使用者資料,因此可能容易發生記憶體損毀問題。如需近期範例,請參閱 BootHole

認證程序可降低這項風險:早期啟動元件必須先評估任何使用者控制的資料,才能處理這些資料。BootHole 攻擊會使用修改過的 grub.cfg 取得程式碼執行權,並破解安全啟動功能。

不過,在 Confidential Space 系統中,該攻擊無法通過認證,因為 grub.cfg 測量結果與預期設定不符。

複雜的檔案系統邏輯也會帶來相關風險。過去的 Sequoia 等安全漏洞顯示,檔案系統驅動程式會處理複雜的資料結構,因此可能容易發生記憶體損毀問題。

這項風險可透過區塊層級的 dm-veritydm-crypt 完整性保護機制,以及停用自動掛接功能來降低。

在 Confidential Space 映像檔中
攻擊者會在讀取及測量磁碟上的早期啟動二進位檔後,以及讀取及執行這些檔案前,修改這些檔案 (磁碟 TOCTOU)。

早期開機元件是為裸機建構,可能無法預期雲端的動態環境。開機元件可能會假設磁碟內容在執行期間不會變更,但這項假設在雲端環境中並不正確。

使用防禦性程式設計可降低這項風險:使用讀取、測量、執行模式後,磁碟內容會變成唯讀。

機密空間映像檔的安全性審查並未在早期啟動元件 (例如 UEFI、ShimGNU GRUB) 中發現 TOCTOU 問題。

在 Confidential Space 映像檔中
核心載入後,攻擊者會修改磁碟上的裝置驅動程式和使用者模式服務。

完整性保護機制可防範這項威脅。

機密空間圖片中的 Root-fs 會受到 dm-verity 的完整性保護。設定 (root-hash) 會在核心指令引數中傳遞,然後由 Google Cloud 驗證服務測量及驗證。

在 Confidential Space 映像檔中

攻擊容器啟動器

下表說明與啟動器相關的潛在威脅和緩解策略。

威脅 減緩 緩解措施
攻擊者攔截啟動器或映像檔存放區的網路連線。

與圖片存放區的連線受到經過驗證的加密 TLS 連線保護。

攻擊者可以變更圖片網址,並控制工作負載二進位檔。不過,這些動作會反映在認證記錄中。

圖片存放區並非透過存取清單控管,因此系統會假設所有人都能查看圖片。請務必確保工作負載容器映像檔不含任何密碼。

在 Confidential Space 映像檔中
攻擊者在磁碟上修改工作負載映像檔,而該映像檔已下載並經過測量。

可寫入的加密磁碟分割區可保護完整性,因此能減輕這項威脅。

工作負載映像檔及其暫時資料會受到 dm-crypt 保護,方法是使用每次啟動時的暫時金鑰。

dm-crypt 磁碟加密程序允許回溯攻擊,攻擊者會將磁碟內容替換為先前出現的密文和標記。在 Confidential Space 設定中,這類攻擊屬於高度複雜的攻擊。

在 Confidential Space 映像檔中
攻擊者會修改中繼資料伺服器中的啟動器設定,並控管映像檔存放區網址。 認證程序會偵測載入非正版映像檔的不安全設定。 Google Cloud Attestation 內

Google Cloud Attestation 攻擊

下表說明 Google Cloud 驗證的潛在威脅和緩解策略。

威脅 減緩 緩解措施
攻擊者攔截啟動器或 Google Cloud 驗證的網路連線,並從線路讀取私密權杖。

只要透過經過驗證的加密 TLS 連線,就能減輕這項威脅。這項連線有助於保護權杖,避免遭到被動竊聽。

攻擊者缺少 TLS 金鑰,因此無法冒用服務身分。即使攻擊者成功,也無法建立有效的 OIDC 權杖。

攻擊者無法冒用有效用戶端的身分,因為認證通訊協定可確保用戶端身分。

在工作負載與認證服務之間的網路中。
攻擊者會利用剖析差異,導致認證程序中未偵測到變更。

這是因為測量事件記錄會序列化並傳送至 Google Cloud Attestation,然後經過剖析和處理。

如果服務和執行階段 OS 對記錄的語意有不同看法,就會發生剖析差異。

舉例來說,如果 cmdline 欄位含有以半形逗號分隔的引數清單,則核心和服務可能會以不同方式剖析 a=1, b=2 c='3,d=e' 這類字串 (請注意值子字串中的 ,d)。

如果剖析引擎能正確反映 OS 行為,即可降低這項風險。特別是 cmdline 會以整個字串的形式處理,不會分成鍵值配對。

在 Confidential Space 映像檔中
攻擊者會使用所有服務資源,導致服務在阻斷服務 (DoS) 攻擊中停止運作。其他 Confidential Space 使用者的服務會中斷。

為降低這項可靠性風險,我們採用分散式彈性服務,可視需要輕鬆複製及擴充。

程式碼可防止惡意用戶端耗盡資源。

工作負載內

攻擊工作負載

下表說明與工作負載相關的潛在威脅和緩解策略。

威脅 減緩 緩解措施
攻擊者會從可寫入的分割區讀取執行階段密鑰。

加密檔案系統可減輕這項威脅。可寫入的檔案系統會使用 dm-crypt 掛接。停用交換區,且記憶體內容不會分頁至磁碟。

做為深度防禦技術,OIDC 權杖的範圍有限,且效期短暫。

在 Confidential Space 映像檔中
攻擊者從序列主控台讀取執行階段密鑰。 由於憑證和權杖絕不會列印至序列主控台,因此機密空間映像檔可減輕這項威脅。此外,雲端記錄功能已停用。 在 Confidential Space 映像檔中
攻擊者使用 OSLogin 套件更新授權的 SSH 金鑰,然後連線至執行中的執行個體。 由於預設 systemd 服務 (包括 sshd) 會遭到遮蓋,因此機密空間映像檔可減輕這項威脅。 在 Confidential Space 映像檔中
攻擊者會更新中繼資料伺服器中的開機指令碼,而客體代理程式會自動載入這些指令碼。 由於訪客代理程式套件已停用,因此機密空間映像檔可減輕這項威脅。 在 Confidential Space 映像檔中
攻擊者使用 OS 設定代理程式,將錯誤套件推送至 VM。 由於 OS 設定代理程式已停用,因此機密空間映像檔可減輕這項威脅。 在 Confidential Space 映像檔中
攻擊者將格式錯誤的加密資料集傳遞至工作負載。 在工作負載中加入防禦性剖析程式碼,即可減輕這項威脅。 工作負載內
攻擊者會將有偏差或遭竄改的資料集傳遞至工作負載,並嘗試從其他各方瞭解資料集資訊。 在工作負載中實作差異化隱私權控制項,即可減輕這項威脅。 工作負載內

安全測試

Confidential Space 在 Google 經過了全面的安全審查程序。這項安全審查程序包含下列測試和稽核:

  • 負向流程端對端整合測試

    這些測試會驗證在不良的測量結果 (例如程式碼在非預期的 TEE 環境中執行,或啟動修改過的工作負載容器) 中,認證是否會失敗。

  • 手動稽核測量開機程序

    本次審查的重點是找出缺少的評估資料和重複讀取錯誤。測試結果顯示,程式碼是根據安全性最佳做法編寫,且發生失敗時,程式碼會關閉 (停止運作)。

  • 手動稽核機密空間映像檔和啟動器邏輯的建構程序:

    本次審查的重點是移除套件和減少攻擊面。

  • 手動稽核 Google Cloud Attestation

    本次審查的重點是正確的認證通訊協定實作方式,以及避免剖析問題。

  • 由網路安全專家進行密碼學審查

    本次審查的重點是認證通訊協定、檔案系統加密和完整性解決方案。

  • 隱私權專家審查

    本次審查的重點是 Google 撰寫的工作負載中,差異隱私權控制項的相關內容。

  • 持續模糊測試

    這些測試涵蓋安全關鍵元件,例如 vTPM 和 Google Cloud 驗證。

NCC Group 是外部滲透測試機構,負責對系統執行滲透測試。NCC 審查 Confidential Space,確認其為安全運算平台。

後續步驟