Rust 大展拳腳的新興領域:機密計算

語言: CN / TW / HK

雲原生時代,Go 語言憑藉其原生支援高併發等特性,一躍成為雲原生基層設施建設首選語言,榮登各大程式語言排行榜前列,成為使用者增長最快的新興程式語言之一。而相比之下,同樣以取代 C/C++為目的被創造出來的另一門新語言 Rust 在很長一段時間裡則不溫不火,陷入“叫好不叫座”的尷尬境地。

幸運的是,隨著雲原生浪潮逐漸進入下半場,企業和使用者對資料的安全性有了更高的要求,“可信原生”與“機密計算”等資料安全新概念被業界提出,並吸引了大批軟硬體巨頭入場佈局, 也讓 Rust 這門注重記憶體安全的高效能程式語言迎來了絕佳的發展機遇。
 
深耕金融、支付相關技術領域的螞蟻集團是國內外機密計算技術領域的先行者,其開源的SOFAEnclave 機密計算解決方案被包括微軟在內的多家科技巨頭採用,團隊輸出的相關技術論文也多次在國際頂會發表,受到工業界和學術界的廣泛認可。為深入瞭解這一前沿技術領域,我們邀請到了螞蟻集團機密計算總監閆守孟,為我們揭開機密計算的神祕面紗。
 

什麼是機密計算?

隨著雲端計算的快速發展,越來越多的關鍵性服務和高價值資料被遷移到了雲端。雲安全也因此成為學術界和工業界關注的一個焦點。
 
機密計算填補了當前雲安全的一項空白——使用中資料(Data-in-use)的加密。過去通行的做法是對資料在儲存中(比如硬碟)和傳輸中(比如網路)加密,而在使用中(比如記憶體)解密,以便處理。而機密計算可以保護使用中資料的機密性和完整性。
 
也就是說,通過機密計算技術,一些對資料安全性要求極高的傳統企業如金融、銀行、政企等客戶,也可以放心地使用公有云服務。
 
目前,多家雲端計算巨頭都在不約而同地推廣這項技術:微軟已於 2017 年 7 月宣佈開始接受 Azure 機密計算的早期試用申請;IBM 於 2017 年 12 月宣佈 IBM 雲資料保護(Cloud Data Guard)的預覽版;谷歌也於 2018 年 5 月開源了名為 Asylo 的機密計算框架。
 
2019 年 8 月, Linux 基金會宣佈 聯合多家科技巨頭組建“機密計算聯盟( Confidential Computing Consortium ,簡稱 CCC)”,創始成員包括阿里巴巴、Arm、百度、谷歌、IBM、英特爾、微軟、紅帽、瑞士通以及騰訊。讓機密計算技術進入了更多開發者的視野。
 
那麼,機密計算究竟是如何實現的呢?
 
實際上,上述所有云計算巨頭在實現機密計算時都離不開一種稱為“可信執行環境(TEE)”的技術。
 
顧名思義,TEE 提供一種與不可信環境隔離的安全計算環境,正是這種隔離和可信驗證機制使得機密計算成為可能。
 
TEE 一般是直接基於硬體實現的,比如 Intel SGX,Intel TDX,AMD SEV,ARM TrustZone,以及 RISC-V Keystone 等;基於虛擬化技術也可以構造 TEE,比如微軟的 VSM,Intel 的 Trusty for iKGT & ACRN。
 
其中,Intel 軟體防護拓展(Software Guard Extensions,簡稱 SGX)是目前商用 CPU 中最為先進的 TEE 實現,它提供了一套新的指令集使得使用者可以定義稱為 Enclave 的安全記憶體區域。CPU 保證 Enclave 與外界強隔離,並提供記憶體加密和遠端證明機制,從而保護Enclave程式碼和資料的機密性、完整性和可驗證性。不同於之前的 TEE 實現,比如 ARM TrustZone,SGX 每個 APP 都可以有自己獨立的 TEE,甚至可以建立多個 TEE,而 TrustZone 是整個系統有一個 TEE;這裡也省去了向裝置廠商申請將 TA (可信應用)裝入 TEE 的過程。由於 SGX 的先進性,目前雲端機密計算領域甚至已公認用 Enclave 這個詞來指代 TEE。
 
通過機密計算技術,能夠解決那些業務資料敏感的使用者對雲原生平臺不信任的問題,也由此引出了“可信原生”的概念,即讓雲原生基礎設施在使用者一側更加可信。

 

機密計算應用開發難點

顯然,這一技術的成熟意味著包括金融、政企等業務資料敏感的使用者上雲成為可能,市場前景廣闊。雖然這些聽起來很美,但機密計算在實際應用中仍面臨很多的挑戰。
 
  • 首先,Enclave 是一個受限的環境,從程式設計介面到程式設計模型都跟開發者熟悉的 Linux 環境有很大不同。
 
  • 其次,開發者要花力氣學習市面上的多種不同 Enclave 硬體架構。
 
  • 再有,目前主流的叢集排程系統(如 K8s)還不支援 Enclave,限制了 Enclave 的大規模使用。
 
以基於 Intel SGX CPU 開發機密計算應用程式為例。
 

SGX 應用是一種基於劃分的模型:在使用者態的(不可信)應用程式(上圖紅色部分)可以嵌入 SGX TEE 保護的區域(上圖綠色部分),被稱為 Enclave。支援 SGX 的 Intel CPU 保證 Enclave 中的受保護內容是在記憶體中加密的,並且與外界強隔離。外界的程式碼如果想進入 Enclave 中執行其中的可信程式碼必須通過指定的入口點,後者可以實施訪問控制和安全檢查以保證 Enclave 無法被外界濫用。
 
由於 SGX 應用程式是基於這種劃分的架構,應用開發者通常需要使用某種 SGX SDK,比如 Intel SGX SDK、Open Enclave SDK、Google Asylo 或 Apache Rust SGX SDK等。但無論使用上述哪種 SDK,開發者會遭遇下面的開發困境:
 
  • 必須將目標應用做二分:開發者需要決定哪些元件應該置於 Enclave 內部,哪些置於 Enclave 外部,以及雙方如何通訊。對於複雜的應用,確定高效、合理且安全的劃分方案本身就是一件頗具挑戰的工作,更不要說實施劃分所需的工程量。
  • 被限定在某個程式語言:無論使用上述哪種 SDK 開發,一個開發者都將被限定在該 SDK 所支援的語言,這通常意味著 C/C++(當使用 Intel SGX SDK、Open Enclave SDK 或 Google Asylo 時),而無法使用 Java、Python、Go 等更加友好的程式語言。
  • 只能獲得很有限的功能:出於硬體限制和安全考慮,Enclave 中是無法直接訪問 Enclave 外的(不可信)OS 的。由於 Enclave 中缺乏 OS 的支援,各種 SDK 只能提供普通不可信環境下的一個很小的功能子集,這使得很多現有的軟體庫或工具都無法在 Enclave 中執行。
 
上述困境使得為 SGX 開發應用成為一件十分痛苦的事,制約了 SGX 和機密計算的普及度和接受度。
 

螞蟻機密計算軟體棧SOFAEnclave

為了解決這些挑戰,螞蟻開發了 SOFAEnclave 機密計算軟體棧,分為如圖所示的三個部分:

Occlum LibOS

Occulum 是螞蟻開源的 TEE 作業系統,也是 CCC 機密計算聯盟中第一個由中國公司發起的開源專案。
 
Occlum 提供 POSIX 程式設計介面,支援多種主流語言(C/C++, Java, Python, Go, Rust 等),支援多種安全檔案系統。可以說,Occlum 提供了一個相容 Linux 的 Enclave 執行環境,使得機密計算可以輕鬆支援已有的應用,也使得機密應用開發者複用原有開發技能。Occlum 不但在工業界場景中得到了廣泛的應用,而且也在系統頂會 ASPLOS 2020 發表了學術論文,代表了機密計算業界的領先水平。
 
從架構上來看,Occlum 不但提供基本的類似 Linux 的作業系統能力,而且提供一個類似 Docker 的使用者使用介面,比如這裡的 Occlum build 和 Occlum run 等都跟 docker 的命令類似。

 
社群方面,Occlum是阿里巴巴 Inclavare Containers 的預設執行時,也在與 Hyperledger Avalon 等其他社群專案合作。同時,Occlum 已經捐贈給機密計算聯盟 CCC,目前是唯一一個來自中國的開源專案。另外,值得一提的是,微軟 Azure Cloud 在去年 9 月的 Microsoft Ignite 大會上 介紹機密計算技術的新進展 時,還公開推薦在 Azure 上基於 Occlum 開發機密計算應用。
 
Occlum開源地址: https://github.com/occlum/occlum
 

HyperEnclave

前面提到,市場上目前有多種 Enclave 硬體平臺。這些 Enclave 各有特點,但也給開發者帶來了較大的學習負擔。作為這些硬體的使用者,螞蟻技術團隊其實希望有一個統一的 Enclave 抽象,另外,他們也希望能對 Enclave 的啟動和證明有更靈活的控制。
 
針對上述問題,螞蟻機密計算團隊提出了機密計算硬體虛擬化技術 HyperEnclave。這是一個統一的 Enclave 平臺。作為抽象層,它既能對映到現有的各種 Enclave 硬體實現,也能使用未來的硬體能力,比如 Intel MKTME/TDX。“它甚至可以支援沒有 Enclave 擴充套件的機器,在這種機器上我們基於虛擬化技術實現了隔離機制 —— 我們開發了一個Type 1.5 的 hypervisor 用來建立和管理基於虛擬化的 Enclave。在可信方面,我們基於可信計算技術(如 TPM 等)實現了由使用者靈活掌控的信任機制。”
 
基於 HyperEnclave,加上 AMD SEV 或者 Intel MKTME 等記憶體加密硬體能力,HyperEnclave 也可以防護物理攻擊。有趣的是,HyperEnclave支援現有的 Enclave SDK。這意味著使用者已有的只能跑在x86平臺的Encalve應用,現在可以執行在HyperEnclave支援的任何硬體平臺上(包括國產CPU),極大的緩解了使用者Enclave程式碼跨平臺移植的困擾,同時使得使用者對信任鏈有更靈活的控制。
 
我們詳細看一下這個系統的生命週期各階段。首先 Linux 系統像往常一樣啟動。接著,我們的hypervisor 模組開始載入。Hypervisor 載入完畢之後,會把原來的 Linux host 降級為一個不被信任的 guest。
 
這個 Hypevisor 支援建立 Enclave 虛擬機器。Enclave 虛擬機器支援傳統機密計算 SDK 提供的二分式程式設計模型。Enclave 虛擬機器也支援利用 Occlum 將整個應用執行在 Enclave 裡面。


總結一下這個虛擬化技術的特點:
 
第一,安全第一的設計原則。TCB 是一個非常小的、可形式化驗證的、用記憶體安全語言 RUST 開發的 hypervisor。
 
第二,支援基於 TPM/TXT 的 Enclave 可信啟動和遠端證明。
 
第三,相容 Linux 已有生態。前面提到這是一個 Type 1.5 Hypervisor,顧名思義這是一個兼具Type 1 & Type 2 特點的 Hypervisor,更明確地說就是,它 boot like type 2, 但 run like type 1。這樣一來我們可以很好地適應目前主流的 Linux 部署方式。另外,這個 Hypervisor 也可以跟 demoted Linux 裡面的 KVM 很好地配合。
 
第四,我們可以比較容易地引入硬體提供的記憶體加密能力,比如 Intel MKTME/TDX 或者 AMD SEV。
 

KubeTEE

前面提到的 Occlum 和 HyperEnclave 都還是針對單個計算節點的技術。但是目前的網際網路應用都是基於大規模叢集的,尤其是基於 Kubernetes 的。Kubernetes 提供了很多基礎的叢集管理、排程、和監控能力,但這些能裡並不能很好適用到機密計算場景。首先我們需要讓Kubernetes 能夠認識 Enclave 硬體,將 enclave 暴露給容器,監控 Enclave 資源,並處理Enclave 特有的事務比如遠端證明等等。
 
閆守孟團隊研發的 KubeTEE 就是 Kubernetes 和 Enclave 也就是 TEE 的有機結合。基於KubeTEE,使用者可以使用 kubernetes 的工作流程來輕鬆管理機密計算叢集,部署 Enclave 服務,使用 Enclave 中介軟體等等。
 
 
KubeTEE 也包含一個叫做 AECS 的元件,基於機密計算的遠端證明機制,簡化叢集內 Enclave 的金鑰分發和部署過程。
 
通過以上三個元件,螞蟻開源的 SOFAEnclaves 技術棧解決了機密計算目前實際應用中的三大難題。相關技術和理念在工業界和學術界都獲得了廣泛認可,處於世界領先水平。
 

Rust閃耀機密計算

我們注意到,在螞蟻開源的 SOFAEnclaves 軟體棧中,Rust 語言扮演了十分重要的角色。其中 Occlum 和 HypeEnclave 兩大元件都主要由 Rust 語言開發完成。
 
閆守孟告訴我們,作為一門兼顧安全性與高效能的新興程式語言,Rust 語言在螞蟻集團內部已經被廣泛運用,尤其是他所在的機密計算領域,Rust 語言成為了專案開發的主力語言。
 
“我們的東西基本上都是用 Rust 寫的。一方面是 Rust 語言生態已經足夠成熟,其記憶體安全等特性是我們非常看重的。此外,Rust 的開發效率也非常高,大大提升了我們團隊的生產力。”
 
據悉,在螞蟻機密計算技術團隊中,有一位資深的 Rust 佈道師 —— Occlum 的核心開發者田洪亮。關於 Rust 語言在螞蟻內部的推廣,這裡面還有一個小故事。
 
當時,在螞蟻內部,Java 技術棧是主流,而田洪亮則是 Rust 語言的忠實擁躉,雖然公司允許他用 Rust 開展工作,但知音難覓的他有點小鬱悶。不過很快,田洪亮參加了支付寶內部的一個程式設計比賽,100 名參賽同事裡面只有他一個人用 Rust,其他人要麼用 Java 要麼用 Python,從效能上來說,要比 Rust 慢很多。這一下田洪亮相當於開掛,在這場比賽中“大殺特殺”。
 
正是通過這場比賽,Rust 的名聲在公司內打響了,有不少同事對 Rust 表示興趣。於是趁熱打鐵,田洪亮在公司內分享了關於 Rust 的公開課,還成為阿里雲的 Rust 佈道師。
 
在 Gartner 釋出的 2020 年雲安全技術成熟度曲線報告中,機密計算被列為 33 種重要技術之一,並預測在未來 5 - 10 年內成為最普遍的雲原生安全技術。
 
閆守孟表示,“我們希望 SOFAEnclave 機密計算軟體棧能幫助大家降低機密計算的門檻,促進雲原生到可信原生的演進。SOFAEnclave 的三個元件中,Occlum、KubeTEE 已經開源,HyperEnclave 也即將開源。希望跟業界加強交流合作!”
 


受訪嘉賓介紹



閆守孟是螞蟻集團資深技術專家和負責機密計算方向的研發總監。他目前的研究興趣是基於可信執行環境TEE的機密計算技術。他領導了螞蟻集團SOFAEnclave(Occlum、HyperEnclave、KubeTEE等)機密計算軟體棧的研發,發起並主導了國內外多項TEE標準的制定。加入螞蟻之前,閆守孟在Intel中國研究院任高階主任研究員,主要從事安全隔離技術的研究,研究成果融入Intel相關軟硬體產品。加入Intel之前,他在2005年從西北工業大學計算機學院獲得博士學位。他擁有20餘項專利,並在ASPLOS, PLDI, FSE, MM等頂級會議發表文章。
 
END -


文章轉載自支付寶技術點選這裡閱讀原文了解更多

聯絡關於Linux基金會




Linux基金會是非營利性組織,是技術生態系統的重要組成部分。 

Linux基金會通過提供財務和智力資源、基礎設施、服務、活動以及培訓來支援建立永續開源生態系統。在共享技術的建立中,Linux基金會及其專案通過共同努力形成了非凡成功的投資。請長按以下二維碼進行關注。

本文分享自微信公眾號 - LFAPAC(gh_8442c14fe49e)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

分享到: