本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

機密 Kubernetes:使用機密虛擬機器和飛地來提高你的叢集安全性

在本篇博文中,我們將介紹機密計算(Confidential Computing,CC)的概念,以提高任何計算環境的安全性和隱私性。此外,我們還將展示雲原生生態系統,特別是 Kubernetes,如何從這種新的計算正規化中受益。

機密計算是之前在雲原生世界中引入的一個概念。機密計算聯盟(Confidential Computing Consortium,CCC)是 Linux 基金會下的一個專案社群,已經致力於定義和實現機密計算。在其白皮書中,他們為使用機密計算提供了很好的動機:

資料存在三種狀態:傳輸中、靜止時和使用中。……保護敏感資料的所有狀態比以往任何時候都更加關鍵。密碼學現已普遍部署,以提供資料機密性(防止未經授權的檢視)和資料完整性(防止或檢測未經授權的更改)。雖然保護傳輸中和靜止時資料的技術現已普遍部署,但第三種狀態——保護使用中的資料——是新的前沿領域。

機密計算主要旨在透過引入硬體強制的可信執行環境(Trusted Execution Environment,TEE)來解決**保護使用中資料**的問題。

可信執行環境

十多年來,可信執行環境(TEE)已在商業計算硬體中以硬體安全模組(HSM)和可信平臺模組(TPM)的形式存在。這些技術為受保護的計算提供了可信環境。它們可以儲存高度敏感的加密金鑰,並執行關鍵的加密操作,如簽名或加密資料。

TPM 針對低成本進行了最佳化,使其能夠整合到主機板中,並作為系統的物理信任根。為了保持低成本,TPM 的範圍有限,即它們僅為少數金鑰提供儲存,並且僅能進行一小部分加密操作。

相比之下,HSM 針對高效能進行了最佳化,為更多的金鑰提供安全儲存,並提供先進的物理攻擊檢測機制。此外,高階 HSM 可以程式設計,以便編譯和執行任意程式碼。缺點是它們非常昂貴。AWS 的託管 CloudHSM 成本約為每小時 1.50 美元或每年約 13,500 美元。

近年來,一種新型的 TEE 越來越受歡迎。像 AMD SEVIntel SGXIntel TDX 這樣的技術提供了與使用者空間緊密整合的 TEE。這些 TEE 不是支援特定用例的低功耗或高效能裝置,而是保護正常的程序或虛擬機器,並且開銷相對較低。這些技術各有不同的設計目標、優點和侷限性,並且在不同的環境(包括消費級筆記型電腦、伺服器和移動裝置)中可用。

此外,我們還應提及 ARM TrustZone,它針對智慧手機、平板電腦和智慧電視等嵌入式裝置進行了最佳化,以及 AWS Nitro Enclaves,它僅在 Amazon Web Services 上可用,並且與 Intel 和 AMD 的基於 CPU 的解決方案相比,具有不同的威脅模型。

IBM Secure Execution for Linux 允許您在 IBM Z 系列硬體上的可信執行環境中將 Kubernetes 叢集的節點作為 KVM 客戶機執行。您可以使用這種硬體增強的虛擬機器隔離,在叢集中的租戶之間提供強大的隔離,並提供關於(虛擬)節點完整性的硬體證明。

安全屬性和功能集

在接下來的部分中,我們將回顧這些新技術帶來的安全屬性和附加功能。並非所有解決方案都提供所有屬性;我們將在各自的部分中進一步詳細討論每種技術。

**機密性**屬性確保資訊在使用中時在 TEE 內無法被檢視。這為我們提供了高度期望的功能,即保護**使用中的資料**。根據所使用的具體 TEE,程式碼和資料都可以受到保護,免受外部觀察者的窺視。在為敏感工作負載設計端到端安全性時,TEE 架構的差異以及它們在雲原生環境中的使用,是設計最小化**可信計算基**(Trusted Computing Base, TCB)的重要考慮因素。CCC 最近致力於制定通用詞彙和支援材料,以幫助解釋不同 TEE 架構下的機密性邊界如何劃分,以及這對 TCB 大小的影響。

機密性是一個很好的特性,但攻擊者仍然可以操縱或注入任意程式碼和資料供 TEE 執行,從而輕易洩露關鍵資訊。**完整性**向 TEE 所有者保證,在執行關鍵計算時,程式碼和資料都不能被篡改。

**可用性**是資訊安全領域經常討論的一個基本屬性。然而,該屬性超出了大多數 TEE 的範圍。通常,它們可以被一些更高級別的抽象(如 CPU 本身、虛擬機器監控程式或核心)控制(關閉、重啟等)。這是為了維護整個系統的可用性,而不是 TEE 本身的可用性。在雲中執行時,可用性通常由雲提供商以服務水平協議(SLA)的形式保證,並且不能透過加密方式強制執行。

機密性和完整性本身在某些情況下作用有限。例如,考慮一個在遠端雲中執行的 TEE。你如何知道這個 TEE 是真實的,並且正在執行你預期的軟體?它可能是一個冒名頂替者,一旦你傳送資料過去,它就會竊取你的資料。這個問題由**可證明性**來解決。證明允許我們基於硬體本身頒發的加密證書來驗證 TEE 的身份、機密性和完整性。這個功能也可以透過遠端證明的形式提供給機密計算硬體之外的客戶端。

TEE 可以儲存和處理在可信環境之前或之後存在的資訊。這可能意味著跨越重啟、不同版本或平臺遷移。因此,**可恢復性**是一個重要特性。在寫入持久儲存之前,TEE 的資料和狀態需要被封裝(sealed),以保持機密性和完整性保證。對這些封裝資料的訪問需要有明確的定義。在大多數情況下,解封(unsealing)與 TEE 的身份繫結。因此,確保恢復只能在相同的機密上下文中發生。

這不必限制整個系統的靈活性。AMD SEV-SNP 的遷移代理(MA)允許使用者將機密虛擬機器遷移到不同的主機系統,同時保持 TEE 的安全屬性完整。

功能比較

本文的這些部分將更深入地探討具體實現,比較支援的功能並分析其安全屬性。

AMD SEV

AMD 的安全加密虛擬化(SEV)技術是一系列旨在增強 AMD 伺服器 CPU 上虛擬機器安全性的功能。SEV 使用唯一的金鑰透明地加密每個虛擬機器的記憶體。SEV 還可以計算記憶體內容的簽名,該簽名可以傳送給虛擬機器的所有者,作為初始客戶機記憶體未被篡改的證明。

第二代 SEV,稱為加密狀態(Encrypted State)或 SEV-ES,透過在發生上下文切換時加密所有 CPU 暫存器內容,提供了額外的保護,以防範虛擬機器監控程式。

第三代 SEV,安全巢狀分頁(Secure Nested Paging)或 SEV-SNP,旨在防止基於軟體的完整性攻擊,並降低與記憶體完整性受損相關的風險。SEV-SNP 完整性的基本原則是,如果虛擬機器可以讀取一個私有(加密)記憶體頁,它必須總是讀取它最後寫入的值。

此外,透過允許客戶機動態獲取遠端證明宣告,SNP 增強了 SEV 的遠端證明能力。

AMD SEV 是逐步實現的。每個新 CPU 代都增加了新功能和改進。Linux 社群將這些功能作為 KVM 虛擬機器監控程式的一部分以及為主機和客戶機核心提供。最初的 SEV 功能於 2016 年被討論和實現——參見 2016 年 Usenix 安全研討會的《AMD x86 記憶體加密技術》。最新的重大補充是 Linux 5.19 中的 SEV-SNP 客戶機支援

自 2022 年 7 月起,基於 AMD SEV-SNP 的機密虛擬機器已在 Microsoft Azure 中提供。同樣,Google Cloud Platform (GCP) 也提供基於 AMD SEV-ES 的機密虛擬機器

Intel SGX

Intel 的軟體防護擴充套件(Software Guard Extensions)自 2015 年起推出,並隨 Skylake 架構一同引入。

SGX 是一套指令集,使使用者能夠建立一個受保護和隔離的程序,稱為*機密計算環境*(enclave)。它提供了一個反向沙盒,保護機密計算環境免受作業系統、韌體和任何其他特權執行上下文的影響。

無論當前的特權級別和 CPU 模式如何,機密計算環境的記憶體都不能從外部讀取或寫入。呼叫機密計算環境函式的唯一方法是透過一條新指令,該指令會執行多項保護檢查。其記憶體是加密的。竊聽記憶體或將 DRAM 模組連線到另一個系統只會得到加密的資料。記憶體加密金鑰在每次上電週期都會隨機更改。該金鑰儲存在 CPU 內部,無法訪問。

由於機密計算環境是程序隔離的,作業系統的庫不能直接使用;因此,需要 SGX enclave SDK 來為 SGX 編譯程式。這也意味著應用程式需要經過設計和實現,以考慮可信/不可信的隔離邊界。另一方面,應用程式的構建具有非常小的 TCB。

一種新興的方法是利用庫作業系統(library OSes),以便輕鬆過渡到基於程序的機密計算,並避免構建自定義應用程式的需要。這些作業系統有助於在 SGX 機密計算環境中執行原生的、未經修改的 Linux 應用程式。庫作業系統會攔截應用程式對主機作業系統的所有請求,並安全地處理它們,而應用程式並不知道自己正在一個 TEE 中執行。

第三代至強 CPU(即 Ice Lake Server - "ICX")及後續幾代產品改用一種名為全記憶體加密-多金鑰(Total Memory Encryption - Multi-Key)(TME-MK)的技術,該技術使用 AES-XTS,從而摒棄了消費級和至強 E 系列 CPU 所使用的記憶體加密引擎。這增加了可能的機密計算環境頁快取(EPC)大小(最高可達 512GB/CPU)並提升了效能。有關多插槽平臺上 SGX 的更多資訊,請參閱白皮書

Intel 提供了一份支援的平臺列表

SGX 在 Azure阿里雲IBM 等多家雲服務商中均有提供。

Intel TDX

Intel SGX 旨在保護單個程序的上下文,而 Intel 的可信域擴充套件(Trusted Domain Extensions)則保護整個虛擬機器,因此與 AMD SEV 最為相似。

與 SEV-SNP 一樣,TDX 的客戶機支援已在 Linux 核心 5.19 中合併。然而,硬體支援將在 2023 年隨 Sapphire Rapids 一同推出:阿里雲提供了邀請制的預覽例項,而 Azure 也已宣佈其 TDX 預覽機會。

開銷分析

機密計算技術透過強大的隔離和增強的安全性為客戶資料和工作負載帶來的好處並非沒有代價。量化這種影響具有挑戰性,並且取決於許多因素:TEE 技術、基準測試、指標以及工作負載型別都對預期的效能開銷有巨大影響。

不同論文所示,基於 Intel SGX 的 TEE 難以進行基準測試。所選的 SDK/庫作業系統、應用程式本身以及資源需求(尤其是大記憶體需求)對效能有巨大影響。如果一個應用程式非常適合在機密計算環境中執行,可以預期其開銷在個位數百分比。

基於 AMD SEV-SNP 的機密虛擬機器不需要對執行的程式和作業系統進行任何更改,因此更容易進行基準測試。一項來自 Azure 和 AMD 的基準測試顯示,SEV-SNP 虛擬機器的開銷小於 10%,有時低至 2%。

儘管存在效能開銷,但它應該足夠低,以使真實世界的工作負載能夠在這些受保護的環境中執行,並提高我們資料的安全性和隱私性。

機密計算與 FHE、ZKP 和 MPC 的比較

全同態加密(FHE)、零知識證明/協議(ZKP)和多方計算(MPC)都是一種加密或密碼學協議,它們提供與機密計算類似的安全保證,但不需要硬體支援。

全同態加密(也包括部分和某種程度上的同態加密)允許對加密資料執行計算,如加法或乘法。這提供了使用中加密的特性,但不像機密計算那樣提供完整性保護或證明。因此,這兩種技術可以相互補充

零知識證明或協議是一種隱私保護技術(PPT),它允許一方證明其資料的事實,而無需透露有關該資料的任何其他資訊。ZKP 可以替代或補充機密計算,以保護相關方及其資料的隱私。同樣,多方計算使多方能夠共同進行計算,即每一方都將其資料提供給結果,而不會洩露給任何其他方。

機密計算的用例

所介紹的機密計算平臺表明,隔離單個容器程序從而最小化可信計算基,以及隔離“完整虛擬機器”都是可能的。這已經催生了許多有趣且安全的專案。

機密容器

機密容器(Confidential Containers, CoCo)是一個 CNCF 沙箱專案,它將 Kubernetes Pod 隔離在機密虛擬機器內部。

CoCo 可以透過 Operator 安裝在 Kubernetes 叢集上。該 Operator 將建立一組執行時類,可用於在多個不同平臺(包括 AMD SEV、Intel TDX、IBM Z 的 Secure Execution 和 Intel SGX)的機密計算環境中部署 Pod。

CoCo 通常與簽名和/或加密的容器映象一起使用,這些映象在機密計算環境內部被拉取、驗證和解密。諸如映象解密金鑰之類的 Secret,由一個可信的金鑰代理服務(Key Broker Service)有條件地提供給機密計算環境,該服務在釋放任何敏感資訊之前會驗證 TEE 的硬體證據。

CoCo 有多種部署模型。由於 Kubernetes 控制平面在 TCB 之外,CoCo 適用於託管環境。藉助 API 介面卡,CoCo 可以在不支援巢狀的虛擬環境中執行,該介面卡會在雲中啟動 Pod 虛擬機器。CoCo 也可以在裸機上執行,即使在多租戶環境中也能提供強大的隔離。

託管的機密 Kubernetes

AzureGCP 都支援使用機密虛擬機器作為其託管 Kubernetes 產品的 Worker 節點。

這兩項服務都旨在透過為容器工作負載啟用記憶體加密來提供更好的工作負載保護和安全保證。然而,它們並不尋求將叢集或工作負載與服務提供商或基礎設施完全隔離。具體來說,它們不提供專用的機密控制平面,也不為機密叢集/節點提供證明能力。

Azure 還在其託管的 Kubernetes 產品中啟用了機密容器。它們支援基於 Intel SGX 機密計算環境基於 AMD SEV 的虛擬機器的建立。

Constellation

Constellation 是一個 Kubernetes 引擎,旨在提供最佳的資料安全性。Constellation 將你的整個 Kubernetes 叢集包裝在一個單一的機密上下文中,與底層的雲基礎設施隔離開來。內部的一切都始終被加密,包括執行時的記憶體。它保護了 Worker 節點和控制平面節點。此外,它已經與流行的 CNCF 軟體(如 Cilium)整合以實現安全網路,並提供了擴充套件的 CSI 驅動程式以安全地寫入資料。

Occlum 和 Gramine

OcclumGramine 是開源庫作業系統專案的例子,可用於在 SGX 機密計算環境中執行未經修改的應用程式。它們是 CCC 下的成員專案,但也有由公司維護的類似專案和產品。藉助這些庫作業系統專案,現有的容器化應用程式可以輕鬆轉換為支援機密計算的容器。許多精選的預構建容器也已可用。

我們今天處於什麼位置?供應商、侷限性和開源軟體現狀

正如我們希望您從前面部分所看到的,機密計算是提高安全性的一個強大的新概念,但我們仍處於(早期)採用階段。新的產品正在湧現,以利用其獨特的屬性。

Google 和 Microsoft 是首批提供機密產品的主要雲提供商,這些產品可以在受保護的邊界內執行未經修改的應用程式。儘管如此,這些產品僅限於計算,而針對機密資料庫、叢集網路和負載均衡器的端到端解決方案則需要自行管理。

這些技術為將最敏感的工作負載引入雲端提供了機會,並使它們能夠利用 CNCF 生態系統中的所有工具。

行動號召

如果您目前正在開發一個由於法律要求而難以在公共雲中執行的高安全性產品,或者正在尋求將您的雲原生專案的隱私和安全性提升到一個新的水平:請聯絡我們重點介紹的所有優秀專案!每個人都熱衷於提高我們生態系統的安全性,您可以在這一旅程中發揮至關重要的作用。