Inclavare Containers:云原生机密计算的未来
簡介:本文為你詳細的梳理一次 Inclavare Containers 項目的發展脈絡,解讀它的核心思想和創新技術。
作為業界首個面向機密計算場景的開源容器運行時,Inclavare Containers 項目于 2020 年 5 月開源,短短一年多時間內發展勢頭非常迅猛,吸引了眾多領域專家和工程師的關注與貢獻。2021 年 9 月 15 日,云原生計算基金會(CNCF)宣布通過全球 TOC 投票接納 Inclavare Containers 成為 CNCF 官方沙箱項目,成為機密計算技術在云原生領域第一個進入 CNCF 的項目。
不過,如果你對機密計算領域不太關注,可能對 Inclavare Containers 還沒有做過太深入的了解。別著急,本文為你詳細的梳理一次 Inclavare Containers 項目的發展脈絡,解讀它的核心思想和創新技術。
首先,什么是 Inclavare Containers?
一言以蔽之,Inclavare Containers 是業界首個面向機密計算場景的開源容器運行時。可是,什么是機密計算呢?Inclavare Containers 跟機密計算又是什么關系?它能幫助我們解決什么問題?
數據安全與機密計算
數據在整個生命周期有三種狀態:At-Rest(靜態)、In-Transit(傳輸中)和 In-Use(使用中)。
- At-Rest 狀態下,一般會把數據存放在硬盤、閃存或其他的存儲設備中。保護 At-Rest 狀態的數據有很多方法,比如對文件加密后再存放或者對存儲設備加密。
- In-Transit 是指通過公網或私網把數據從一個地方傳輸到其他地方,用戶可以在傳輸之前對文件加密或者采用安全的傳輸協議保證數據在傳輸中的安全,比如HTTPS、SSL、TLS、FTPS 等。
- In-Use 是指正在使用的數據。即便數據在傳輸過程中是被加密的,但只有把數據解密后才能進行計算和使用。也就意味著,如果數據在使用時沒有被保護的話,仍然有數據泄露和被篡改的風險。
在這個世界上,我們不斷地存儲、使用和共享各種敏感數據:從信用卡數據到病歷,從防火墻配置到地理位置數據。保護處于所有狀態中的敏感數據比以往任何時候都更為重要。如今被廣泛使用的加密技術可以用來提供數據機密性(防止未經授權的訪問)和數據完整性(防止或檢測未經授權的修改),但目前這些技術主要被用于保護傳輸中和靜止狀態的數據,目前對數據的第三個狀態“使用中”提供安全防護的技術仍舊屬于新的前沿領域。
機密計算指使用基于硬件的可信執行環境(Trusted Execution Environment,TEE)對使用中的數據提供保護。 通過使用機密計算,我們現在能夠針對“使用中”的數據提供保護。
機密計算的核心功能有:
- 保護 In-Use 數據的機密性。未經授權的實體(主機上的應用程序、主機操作系統和Hypervisor、系統管理員或對硬件具有物理訪問權限的任何其他人。)無法查看在TEE中使用的數據,內存中的數據是被加密的,即便被攻擊者竊取到內存數據也不會泄露數據。
- 保護 In-Use 數據的完整性。防止未經授權的實體篡改正在處理中的數據,度量值保證了數據和代碼的完整性,使用中有任何數據或代碼的改動都會引起度量值的變化。
- 可證明性。通常 TEE 可以提供其起源和當前狀態的證據或度量值,以便讓另一方進行驗證,并決定是否信任 TEE 中運行的代碼。最重要的是,此類證據是由硬件簽名,并且制造商能夠提供證明,因此驗證證據的一方就可以在一定程度上保證證據是可靠的,而不是由惡意軟件或其他未經授權的實體生成的。
機密計算的現狀與困境
業界內的諸多廠商就已經開始關注并投入到機密計算中。各大芯片廠家和云服務提供商(Cloud Service Provider,簡稱 CSP)都在機密計算領域投入研發資源,并組建了“機密計算聯盟”。該聯盟專門針對云服務及硬件生態,致力于保護計算時的數據安全。
目前支持TEE的硬件平臺主要有 3 個:Intel? SGX、ARM TrustZone 和 AMD SEV,他們有不同的應用場景和實現方式。
1、ARM TrustZone 把硬件資源分為安全世界和非安全世界兩部分,所有需要保密的操作在安全世界執行,其余操作在非安全世界執行,安全世界和非安全世界通過一個名為 Monitor Mode 的模式進行轉換。典型的應用場景有移動支付、數字錢包等。
2、AMD 利用 SEV(AMD Secure Encrypted Virtualizationn),SME(AMD Secure Memory Encryption)和SEV-ES(Secure Encrypted Virtualization-Encrypted State)等技術實現虛擬機的 Guest 內存加密和安全隔離。
3、Intel? SGX 是 Intel 提供的一組指令,用于提高應用的代碼和數據的安全性。Intel? SGX 程序由不可信代碼和可信 Enclave 組成,敏感的代碼和數據放入到 Enclave 中。Intel? SGX 指令在一個特定的加密內存區域(EPC)中創建和執行 Enclave,該區域由開發者定義受限的入口和出口函數,有效防止數據泄露。
目前機密計算目前正處于百花齊發和百家爭鳴的階段,市場和商業化潛力非常巨大。但機密計算在云原生場景中還有一些不足:
1、目前提供的技術的使用和開發門檻高。以開發 Intel? SGX 應用用例,用戶需要學習 Intel? SGX 開發技能并對業務進行改造。相比傳統開發方式,其使用和開發門檻很高,令很多開發者望而生畏。2、機密計算容器化和對接 Kubernetes 的成本和復雜度高。越來越多的用戶開始擁抱云原生,即便用戶掌握了機密計算的開發技能,讓機密計算應用跑在容器里或者跑在 Kubernetes 里還要克服很多問題。比如如何在容器內加載 SGX 驅動,如何為容器合理分配 EPC 內存等。
3、服務提供商提供的技術方案相對單一。現在很多服務提供商都提供了機密計算的技術方案,但方案總體來說比較單一,并不能完全滿足用戶上云的需求。 比如 Google 的 Asylo 和 Azure 的 OpenEnclave,他們是在 Intel? SGX SDK 的基礎上做了封裝,以降低用戶使用機密計算技術的成本。但這仍然需要用戶掌握 Intel? SGX 的開發技能,對用戶而言仍然是有學習門檻的。 再比如 Occlum、GraphaneSGX 等 LibOS 技術,他們的目的是讓用戶在不改動代碼或做改動很少的代碼就能讓應用運行在 Enclave中。對用戶而言不必再去學習復雜的機密計算的開發技術,但這只是解決了用戶開發的問題,但仍然沒有解決在容器中運行機密計算應用的問題。
總之,目前已有的機密計算技術方案存在以上困境,不能夠完全滿足用戶不同場景的安全需求。
為了解決以上問題,Inclavare Containers 提供了首個面向機密計算場景的開源容器運行時,把機密計算技術和容器技術完美地結合在一起,其價值可概括為三點:
- 抹平機密計算的高使用門檻,為用戶提供與普通容器一致的使用體感。
- 基于處理器提供的多種硬件安全技術,提供對多種 Enclave 形態的支持,為用戶在安全和成本之間提供更多的選擇和靈活性。
- 加速基于零信任模型的機密計算云基礎設施的構建。
Inclavare Containers:云原生機密計算的未來
Inclavare Containers 支持機密應用基于硬件的 TEE 被透明地容器化。帶來了以下的好處:
- 輕松將機密應用帶入云原生。
- 在基于硬件的 TEE 中運行修改/未修改的應用程序(取決于 Enclave Runtime)。
- 為應用的數據和代碼提供機密性、完整性和可證明性。
如下圖所示,Inclavare Containers 中包含多個組件,這些組件可以利用基于硬件支持的 Enclave 技術使可信應用運行在容器中。包含的組件有 rune、shim-rune、Enclave Runtime等。
- rune:rune 是一個命令行工具,用于根據 OCI 規范在容器中生成和運行 Enclave。rune 是在 runc 代碼基礎上開發的,既可以運行普通 runc 容器也可以運行 Enclave 容器;rune已經寫入 OCI 運行時實現列表:
https://github.com/opencontainers/runtimespec/blob/master/implementations.md。
- shim-rune:為容器運行時 rune 提供的 shim,主要負責管理容器的生命周期、把普通鏡像轉換成 TEE 鏡像;管理容器的生命周期,與 rune 配合完成容器的創建、啟動、停止、刪除等操作。
- Enclave Runtime:負責在 Enclave 內加載和運行受信任和受保護的應用程序。rune 和 Enclave Runtime 之間的接口是 Enclave Runtime PAL API,它允許通過定義良好的函數接口來調用 Enclave Runtime。機密計算應用通過這個接口與云原生生態系統進行交互。
一類典型的 Enclave Runtime 實現基于庫操作系統。目前,推薦的與 rune 交互的 Enclave Runtime 是 Occlum,這是一種內存安全、多進程 Libos。另一類典型的 Enclave Runtime是帶有 Intel? SGX WebAssembly Micro Runtime (WAMR),這是一個占用空間很小的獨立 WebAssembly (WASM) 運行時,包括一個 VM 核心、一個應用程序框架和一個 WASM 應用程序的動態管理。
此外,您可以使用您喜歡的任何編程語言和 SDK(例如英特爾 SGX SDK)編寫自己的Enclave Runtime,只要它實現了 Enclave Runtime PAL API。
Inclavare Contianers主要有以下特點:
1、將 Intel? SGX 技術與成熟的容器生態結合,將用戶的敏感應用以 Enclave 容器的形式部署和運行;Inclavare Contianers 的目標是希望能夠無縫運行用戶制作的普通容器鏡像,這將允許用戶在制作鏡像的過程中,無需了解機密技術所帶來的復雜性,并保持與普通容器相同的使用體感。
2、Intel? SGX 技術提供的保護粒度是應用而不是系統,在提供很高的安全防護手段的同時,也帶來了一些編程約束,比如在 SGX enclave 中無法執行 syscall 指令;因此我們引入了 LibOS 技術,用于改善上述的軟件兼容性問題,避免開發者在向 Intel? SGX Enclave 移植軟件的過程中,去做復雜的軟件適配工作。然后,雖然各個 LibOS 都在努力提升對系統調用的支持數量,但這終究難以企及原生 Linux 系統的兼容性,并且即使真的達成了這個目標,攻擊面過大的缺點又會暴露出來。因此,Inclavare Containers 通過支持 Java 等語言Runtime 的方式,來補全和提升 Enclave 容器的泛用性,而不是將 Enclave 容器的泛用性綁定在“提升對系統調用的支持數量” 這一單一的兼容性維度上;此外,提供對語言 Runtime 的支持,也能將像 Java 這樣繁榮的語言生態引入到機密計算的場景中,以豐富機密計算應用的種類和數量。
3、通過定義通用的 Enclave Runtime PAL API 來接入更多類型的 Enclave Runtime,比如 LibOS 就是一種 Enclave Runtime 形態;設計這層 API 的目標是為了繁榮 Enclave Runtime 生態,允許更多的 Enclave Runtime 通過對接 Inclavare Containers 上到云原生場景中,同時給用戶提供更多的技術選擇。
靈活的機密容器部署方式
Docker 集群
對于普通用戶來說,如何運行一個機密容器是一個非常困難的事情,您需要掌握機密計算領域的專業知識,并按照 SGX 應用開發規范開發和構建鏡像。而Inclavare Containers 設計并實現了符合 OCI 運行時規范的新型 OCI 運行時 rune,以便與現有的云原生生態系統保持一致,實現了機密容器形態。不僅可以幫您省去這些復雜過程,還可以使您像普通容器一樣使用機密容器。
Inclavare Containers 可以與 dockerd 集成。 具體來說,您需要在構建容器鏡像時安裝首選的 Enclave Runtime,并在您的機器的docker 配置文件中添加 rune 的相關配置,例如,/etc/docker/daemon.json。
{"runtimes": {"rune": {"path": "/usr/local/bin/rune","runtimeArgs": []}} }然后重啟 docker 服務即可。
由于 rune 是在 runc 代碼基礎上開發的,所以 rune 既可以創建 runc 容器,也可以創建 Enclave 容器。在 Docker 集群中,創建 runc 容器和創建 Enclave 容器的流程是完全一樣的。他們的區別在于鏡像。普通 runc 容器鏡像是不能創建 Enclave 的,需要用戶按照 Enclave Runtime 的要求生成特殊的鏡像。如上圖所示,使用 docker 啟動一個 Occlum 機密容器的的流程如下:
1、用戶開發機密應用。用戶不需要掌握機密計算的知識,Occlum 提供了工具可以把普通應用轉換為機密應用。需要注意的是:Occlum 有一些使用限制,詳情請查閱文檔:https://github.com/occlum/occlum。
2、基于 Occlum 生成的文件構建鏡像,構建成功后推入鏡像倉庫。3、通過標準 docker 拉起容器鏡像,最終使用 rune 運行時啟動 Enclave 容器并運行 Occlum 和 Enclave 應用。
Kubernetes 集群
雖然 Docker 集群中能運行 Enclave 容器,但還有一些不足:
- 無法動態管理和調度 EPC。
- 容器編排能力弱,沒有 Kubernetes 面向終態設計的容器管理方式。
為此,Inclavare Containers 提供了 shim-rune 用于在云上 Kubernetes 機密計算集群中創建 Enclave 容器。在這種場景下,shim-rune 和 rune 可以組成一個 enclave 容器化棧,所以在構建容器鏡像時不需要安裝 Enclave Runtime,提供和普通容器一樣的體驗。
Inclavare Containers 已經添加到 containerd 的采用者列表中:https://github.com/containerd/containerd/blob/master/ADOPTERS.md。 此外,shim-rune也支持containerd shim v2 API:https://github.com/containerd/containerd/blob/master/runtime/v2/task/shim.proto。 因此,您可以在系統上的 containerd 配置文件(例如 /etc/containerd/config.toml)中添加 shim-rune 的相關配置。
[plugins.cri.containerd]...[plugins.cri.containerd.runtimes.rune]runtime_type = "io.containerd.rune.v2"然后重啟 containerd 即可。
如上圖所示,在云上 Kubernetes 機密計算集群中創建 Occlum 機密容器的工作流程如下:
1、kubelet 向containerd 發起 CRI(Container Runtime Interface)請求,比如請求創建一個 Pod。
2、Containerd 中有一個 cri-containerd 的插件實現了 CRI 接口,Containerd 接收到請求后,把請求轉給 shim-rune。
3、shim-rune 既可以創建 runc 容器也可以創建 rune 容器。在創建 runc 和 rune 容器的處理流程也有差異:
4、為每個容器分別創建一個 rune 進程,該進程負責來創建容器,創建 runc 容器和 Enclave 容器的流程是不同的:
5、rune 進程退出,并把 Enclave 容器內 1 號進程的父進程設置為 shim-rune。6、shim-rune 請求 rune 啟動 Enclave。至此一個可信應用就運行起來了。
K8s 集群級遠程證明架構
為了進一步滿足“用戶敏感數據的安全性在傳輸鏈路上也能夠完全不再依賴云廠商”這一安全需求,Inclavare Containers 設計了一套通用的和跨平臺的遠程證明架構 Enclave Attestation Architecture(簡稱 EAA)。EAA 以“關聯了帶有硬件可執行環境的遠程證明證據的 TLS 證書”為信任根,確保通信各方的通信信道的安全性完全是基于硬件可信執行環境的。
EAA的主要組件有:
- Enclave-TLS
Enclave-TLS 增強了標準 TLS 以支持基于機密計算技術的異構硬件 TEE 之間的可信通信,是一種支持異構硬件可執行環境的雙向傳輸層安全性協議 (Transport Layer Security,簡稱TLS)。通過使用 Enclave-TLS,即使是非硬件 TEE 平臺也可以通過經過認證的安全信道與硬件 TEE(例如 SGX Enclave)通信以傳輸敏感信息。總的來說,TCB 的邊界從執行環境擴展到使用 Enclave-TLS 的網絡傳輸。此外,Enclave-TLS 有一個可擴展的模型來支持各種硬件 TEE。
- 機密容器
機密容器扮演證明者的角色。響應來自 Inclavared 的請求,并返回機密容器的attestation evidence(mrenclave 值和 mrsigner 值)。
- Inclavared
Inclavared 負責轉發下游的機密容器和上游的客戶端驗證者程序 Shelter 之間的流量,通信過程受到經過證明的 Enclave-TLS 通道的保護。
- Shelter
Shelter 作為部署在云下的遠程證明驗證者,記錄 Enclave 運行時的啟動度量,然后基于 Enclave-TLS 建立可信信道 Inclavared 進行通信。最后,Shelter 對Enclave 運行時的度量值進行驗證,以便租戶能夠明確知道他們的工作負載是否在真正的 TEE 環境中加載。
具體的工作流程如下:
當用戶想驗證工作負載是否運行在可信平臺上時,可以啟動 Shelter 工具發送驗證請求給 Inclavared。
1、當接收到 Shelter 的驗證請求之后,Inclavared 將請求發送給機密容器,Inclavared 和機密容器分別產生帶有 SGX 遠程認證信息的 TLS 證書。
2、Inclavared 和 Shelter 之間基于 Enclave-TLS 建立經過證明的安全信道。
3、Inclavared 與機密容器之間基于 Enclave-TLS 建立經過雙向認證的安全信道。
4、Inclavared 轉發機密容器提供的硬件可執行環境信息和敏感信息給 Shelter
5、Shelter 對 Enclave 運行時的度量值進行驗證,并返回驗證結果給用戶。
五大技術創新
Inclavare Containers 提供了兼容 OCI Runtime 的容器運行時,用戶可根據需要在 Docker 集群或者 Kubernetes 集群中運行 Enclave 容器。通過 Enclave Runtime 抹去了用戶使用機密計算技術的門檻,在 Kubernetes 集群中更是保持了與普通容器一致的使用體驗。通過 Encalve Runtime PAL API 可以提供多種 Runtime 實現,為用戶提供更多 Enclave 選擇,在安全和成本之間提供更多的選擇和靈活性。
Inclavare Containers 的技術創新主要體現在以下幾點:
1、實現了標準的應用 enclave 化技術。
- 將機密計算硬件技術(如Intel? SGX)與成熟的容器生態結合,兼容 OCI Runtime 和 OCI 鏡像標準,實現了機密容器形態。用戶的敏感應用以機密容器的形式部署和運行,并保持與使用普通容器相同的使用體感。
2、基于Enclave-TLS、shelter、inclavared 設計了靈活可擴展的 K8s 集群級遠程證明架構。
- 通過構建通用且跨平臺的遠程證明安全架構,能夠向用戶證明其敏感的工作負載是運行在真實可信的基于硬件的可信執行環境中的。
3、制定了通用的PAL API,規范化了enclave runtime 對接 Inclavare Containers 的接口,打造 Inclavare Containers 的生態。
- 通過標準的 API 規范來對接各種形態的 Enclave Runtime,在簡化特定的Enclave Runtime 對接云原生生態的同時,也為用戶提供了更多的技術選擇。
4、構造基于零信任模型的機密計算集群基礎設施。
- 移除對云服務提供商的信任,Inclavare Containers 的安全威脅模型假設用戶無需信任云服務提供商,即用戶工作負載的安全性不再依賴云服務提供商控制的特權組件。
5、與 Kubernetes 生態無縫整合。
- Inclavare Containers 可以部署在任何公共云 Kubernetes 平臺中,實現了統一的機密容器部署方式。
結語
作為業界首個面向機密計算場景的開源容器運行時,Inclavare Containers 為ACK-TEE(ACK-Trusted Execution Environment)提供了使用機密容器的最佳實踐。ACK-TEE 依托 Inclavare Containers,能夠無縫地運行用戶制作的機密容器鏡像,并保持與普通容器相同的使用體感。ACK-TEE 可被廣泛應用于各種隱私計算的場景,包括:區塊鏈、安全多方計算、密鑰管理、基因計算、金融安全、AI、數據租賃。
未來,Inclavare Containers將繼續為開源社區提供面向云原生場景的機密計算容器技術、機密計算集群技術和安全架構,并成為該領域的事實標準。在不斷深化實施零信任模型原則的同時,不斷提升開發者和用戶的使用體驗,并最終完全消除與運行普通容器在使用體感上的差別。同時,Inclavare Containers 將積極參與共建云原生社區,深度聯手上下游伙伴一同推動云原生安全技術不斷進步,為打造更安全的云原生環境不懈努力。
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。?
總結
以上是生活随笔為你收集整理的Inclavare Containers:云原生机密计算的未来的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贾扬清演讲实录:一个AI开发者的奇幻漂流
- 下一篇: MaxCompute跨境访问加速解决方案