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

機密 Kubernetes:使用機密虛擬機器和 Enclave 來提升叢集安全性

在這篇部落格文章中,我們將介紹機密運算 (Confidential Computing, CC) 的概念,以改善任何運算環境的安全性與隱私屬性。此外,我們將展示雲端原生生態系統,尤其是 Kubernetes,如何從新的運算範例中受益。

機密運算是一個先前已在雲端原生世界中引入的概念。機密運算聯盟 (Confidential Computing Consortium, CCC) 是 Linux 基金會中的一個專案社群,已著手進行定義和啟用機密運算。在白皮書中,他們為機密運算的使用提供了絕佳的動機

資料存在三種狀態:傳輸中、靜態和使用中。…保護所有狀態的敏感資料比以往任何時候都更加重要。密碼學現在通常用於提供資料機密性(阻止未經授權的查看)和資料完整性(預防或偵測未經授權的變更)。雖然保護傳輸中和靜態資料的技術現在已普遍部署,但第三種狀態 - 保護使用中資料 - 是新的前沿。

機密運算旨在主要解決保護使用中資料的問題,方法是引入硬體強制執行的信任執行環境 (Trusted Execution Environment, TEE)。

信任執行環境

十多年來,信任執行環境 (TEE) 以硬體安全模組 (Hardware Security Modules, HSM) 和信任平台模組 (Trusted Platform Modules, 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 系列硬體上的信任執行環境中,以 KVM 客戶端的形式執行 Kubernetes 叢集的節點。您可以使用這種硬體增強的虛擬機器隔離,在叢集中的租戶之間提供強大的隔離,並具有關於(虛擬)節點完整性的硬體驗證。

安全性屬性和功能集

在以下章節中,我們將檢閱這些新技術帶來的安全性屬性和其他功能。只有某些解決方案會提供所有屬性;我們將在各自的章節中更詳細地討論每項技術。

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

機密性是一項很棒的功能,但攻擊者仍然可以操縱或注入任意程式碼和資料,供 TEE 執行,因此很容易洩漏關鍵資訊。完整性向 TEE 所有者保證,程式碼和資料在執行關鍵運算時都不會被竄改。

可用性是一個基本屬性,通常在資訊安全的背景下討論。但是,此屬性超出大多數 TEE 的範圍。通常,它們可以被一些更高等級的抽象概念(關閉、重新啟動…)控制。這可能是 CPU 本身、Hypervisor 或核心。這是為了維護整體系統的可用性,而不是 TEE 本身。在雲端中執行時,可用性通常由雲端供應商以服務等級協定 (Service Level Agreements, SLAs) 的形式保證,並且無法透過密碼學強制執行。

單獨的機密性和完整性僅在某些情況下有用。例如,考慮在遠端雲端中執行的 TEE。您如何知道 TEE 是真品並且正在執行您預期的軟體?它可能是冒名頂替者,在您將資料發送過去後立即竊取您的資料。這個基本問題由可驗證性解決。驗證允許我們根據硬體本身發出的加密憑證來驗證 TEE 的身分、機密性和完整性。此功能也可以以遠端驗證的形式提供給機密運算硬體外部的客戶端。

TEE 可以保存和處理早於或長於信任環境的資訊。這可能意味著跨重新啟動、不同版本或平台遷移。因此,可復原性是一項重要功能。資料和 TEE 的狀態需要在寫入永久儲存裝置之前進行密封,以維護機密性和完整性保證。需要明確定義對此類密封資料的存取權。在大多數情況下,解封與 TEE 的身分相關聯。因此,請確保復原只能在相同的機密環境中發生。

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

功能比較

本文的這些章節將更深入地探討特定的實作方式,比較支援的功能,並分析其安全性屬性。

AMD SEV

AMD 的 安全加密虛擬化 (Secure Encrypted Virtualization, SEV) 技術是一組增強 AMD 伺服器 CPU 上虛擬機器安全性的功能。SEV 使用唯一的金鑰透明地加密每個 VM 的記憶體。SEV 也可以計算記憶體內容的簽名,該簽名可以作為證明初始客戶端記憶體未被操縱的證明發送給 VM 的所有者。

第二代 SEV,稱為 加密狀態 或 SEV-ES,透過在發生上下文切換時加密所有 CPU 暫存器內容,提供額外的 Hypervisor 保護。

第三代 SEV,安全巢狀分頁 或 SEV-SNP,旨在防止基於軟體的完整性攻擊,並降低與受損記憶體完整性相關的風險。SEV-SNP 完整性的基本原則是,如果 VM 可以讀取私有(加密)記憶體頁面,則它必須始終讀取它上次寫入的值。

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

AMD SEV 已逐步實作。每個新的 CPU 世代都新增了新功能和改進。Linux 社群將這些功能作為 KVM Hypervisor 以及主機和客戶端核心的一部分提供。第一個 SEV 功能在 2016 年進行了討論和實作 - 請參閱 2016 年 Usenix 安全研討會的 AMD x86 記憶體加密技術。最新的重大新增功能是 Linux 5.19 中的 SEV-SNP 客戶端支援

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

Intel SGX

Intel 的 軟體保護擴充 自 2015 年起可用,並隨 Skylake 架構一起推出。

SGX 是一組指令集,可讓使用者建立稱為enclave的受保護且隔離的程序。它提供了一個反向沙箱,可保護 enclave 免於作業系統、韌體和任何其他特權執行環境的影響。

無論目前的特權等級和 CPU 模式如何,都無法從 enclave 外部讀取或寫入 enclave 記憶體。呼叫 enclave 函數的唯一方法是透過執行多項保護檢查的新指令。它的記憶體已加密。輕觸記憶體或將 DRAM 模組連接到另一個系統只會產生加密資料。記憶體加密金鑰在每次電源週期時隨機變更。金鑰儲存在 CPU 內,無法存取。

由於 enclave 是程序隔離的,因此作業系統的程式庫無法按原樣使用;因此,需要 SGX enclave SDK 來編譯 SGX 的程式。這也表示應用程式需要經過設計和實作,才能考量信任/不信任隔離邊界。另一方面,應用程式的建置具有非常小的 TCB。

一種輕鬆過渡到基於程序的機密運算並避免建置自訂應用程式需求的新興方法是利用程式庫作業系統。這些作業系統有助於在 SGX enclave 內部執行原生的、未修改的 Linux 應用程式。程式庫作業系統會攔截所有應用程式對主機作業系統的請求,並安全地處理它們,而應用程式不知道它正在執行 TEE。

第三代 Xeon CPU(又名 Ice Lake Server - "ICX")和更高世代的 CPU 切換到使用一種稱為 Total Memory Encryption - Multi-Key (TME-MK) 的技術,該技術使用 AES-XTS,從消費者和 Xeon E CPU 使用的 記憶體加密引擎 轉移。這增加了可能的 enclave 頁面快取 (enclave page cache, EPC) 大小(高達 512GB/CPU)並提高了效能。有關多插槽平台上的 SGX 的更多資訊,請參閱白皮書

支援平台清單可從 Intel 取得。

SGX 在 AzureAlibaba CloudIBM 和許多其他平台都可用。

Intel TDX

Intel SGX 旨在保護單個程序的上下文,而 Intel 的信任網域擴充 保護完整的虛擬機器,因此最接近於 AMD SEV。

與 SEV-SNP 一樣,TDX 的客戶端支援已合併到 Linux 核心 5.19 中。但是,硬體支援將在 2023 年透過 Sapphire Rapids 推出:Alibaba Cloud 提供邀請預覽實例,而 Azure 已宣布其 TDX 預覽機會。

開銷分析

機密運算技術透過強大的隔離和增強的安全性為客戶資料和工作負載提供的優勢並非免費的。量化這種影響具有挑戰性,並且取決於許多因素:TEE 技術、基準、指標和工作負載類型都會對預期的效能開銷產生巨大影響。

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

基於 AMD SEV-SNP 的機密虛擬機器不需要變更執行的程式和作業系統,並且更容易進行基準測試。來自 Azure 和 AMD 的基準測試顯示,SEV-SNP VM 開銷 <10%,有時低至 2%。

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

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

全同態加密 (Fully Homomorphic Encryption, FHE)、零知識證明/協定 (Zero Knowledge Proof/Protocol, ZKP) 和多方運算 (Multi-Party Computations, MPC) 都是加密或密碼協定的形式,它們提供與機密運算類似的安全性保證,但不需要硬體支援。

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

零知識證明或協定是一種隱私保護技術 (Privacy-Preserving Technique, PPT),它允許一方證明關於其資料的事實,而不會洩漏關於資料的任何其他資訊。ZKP 可以取代或補充機密運算,以保護相關方及其資料的隱私。同樣,多方運算使多方能夠協同處理運算,即,每個參與方都將其資料提供給結果,而不會將其洩漏給任何其他參與方。

機密運算的使用案例

所提出的機密運算平台表明,隔離單個容器程序,從而最小化信任運算基礎,以及隔離「完整虛擬機器」都是可能的。這已經促使許多有趣且安全的專案湧現

機密容器

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

CoCo 可以使用 Operator 安裝在 Kubernetes 叢集上。Operator 將建立一組執行階段類別,可用於在多個不同平台上(包括 AMD SEV、Intel TDX、IBM Z 的安全執行和 Intel SGX)的 enclave 內部部署 Pod。

CoCo 通常與已簽署和/或加密的容器映像一起使用,這些映像在 enclave 內部提取、驗證和解密。諸如映像解密金鑰之類的密碼會由受信任的金鑰代理服務有條件地提供給 enclave,該服務在發布任何敏感資訊之前會驗證 TEE 的硬體證據。

CoCo 有多種部署模型。由於 Kubernetes 控制平面位於 TCB 之外,因此 CoCo 適用於受管理環境。CoCo 可以借助 API 轉接器在不支援巢狀虛擬化的虛擬環境中執行,該轉接器在雲端中啟動 Pod VM。CoCo 也可以在裸機上執行,即使在多租戶環境中也能提供強大的隔離。

受管理的機密 Kubernetes

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

這兩項服務都旨在透過為容器工作負載啟用記憶體加密來實現更好的工作負載保護和安全性保證。但是,它們並未尋求完全隔離叢集或工作負載以防範服務供應商或基礎架構。具體而言,它們不提供專用的機密控制平面,也不公開機密叢集/節點的驗證功能。

Azure 還在其受管理的 Kubernetes 產品中啟用機密容器。它們支援基於 Intel SGX enclave基於 AMD SEV 的 VM 的建立。

Constellation

Constellation 是一個 Kubernetes 引擎,旨在提供最佳的資料安全性。Constellation 將您的整個 Kubernetes 叢集包裝到一個單一的機密環境中,該環境與底層雲端基礎架構隔離。內部的所有內容始終加密,包括在執行階段的記憶體中。它保護工作節點和控制平面節點。此外,它已經與流行的 CNCF 軟體(例如 Cilium,用於安全網路)整合,並提供擴充的 CSI 驅動程式以安全地寫入資料。

Occlum 和 Gramine

OcclumGramine 是開放原始碼程式庫作業系統專案的範例,可用於在 SGX enclave 中執行未修改的應用程式。它們是 CCC 下的成員專案,但公司維護的類似專案和產品也存在。借助這些 libOS 專案,現有的容器化應用程式可以輕鬆轉換為啟用機密運算的容器。許多精選的預先建置容器也可用。

我們今天在哪裡?供應商、限制和 FOSS 景象

正如我們希望您從前面的章節中看到的那樣,機密運算是一個強大的新概念,可以提高安全性,但我們仍處於(早期)採用階段。新的產品開始湧現,以利用其獨特的屬性。

Google 和 Microsoft 是第一批擁有機密產品的主要雲端供應商,這些產品可以在受保護的邊界內執行未修改的應用程式。但是,這些產品仍僅限於運算,而機密資料庫、叢集網路和負載平衡器的端對端解決方案必須自行管理。

這些技術提供了機會,將最敏感的工作負載也帶入雲端,並使它們能夠利用 CNCF 領域中的所有工具。

行動呼籲

如果您目前正在開發由於法律要求而難以在公有雲中運作的高安全性產品,或者正在尋求將您的雲端原生專案的隱私和安全性提升到新的水平:請與我們重點介紹的所有出色專案聯繫!每個人都熱衷於改善我們生態系統的安全性,您可以在這趟旅程中扮演至關重要的角色。