SOFAEnclave:螞蟻金服新一代可信編程環(huán)境,讓機密計算為金融業(yè)務保駕護航102年

導讀:近日,Linux 基金會宣布全球多家巨頭企業(yè)成立機密計算聯(lián)盟(Confidential Computing Consortium),在對于數(shù)據(jù)安全和隱私擔憂的不斷增長下,基于可信執(zhí)行環(huán)境技術(shù)的機密計算作為一種可行的解決方案,成為互聯(lián)網(wǎng)巨頭關(guān)注的焦點。螞蟻金服很早就關(guān)注此類技術(shù),并基于機密計算打造了螞蟻金服新一代可信編程中間件 SOFAEnclave,為金融業(yè)務保駕護航。機密計算是螞蟻安全計算的一環(huán),也是金融級云原生的一塊重要版圖,螞蟻金服表示:相信未來機密計算將和 HTTPS 一樣,成為云計算的標配。
一、引言

互聯(lián)網(wǎng)金融本質(zhì)上是對大量敏感數(shù)據(jù)的處理以及由此沉淀的關(guān)鍵業(yè)務智能。近年來涌現(xiàn)出來的新業(yè)態(tài)更是將數(shù)據(jù)處理的范疇從單方數(shù)據(jù)擴展到了涉及合作方的多方數(shù)據(jù)。

另一方面,從 GDPR 到 HIPAA,數(shù)據(jù)隱私監(jiān)管保護的范圍愈加擴大,力度日益增強??梢?對金融數(shù)據(jù)和關(guān)鍵業(yè)務智能的安全保護,不僅是互聯(lián)網(wǎng)金融業(yè)務的基礎(chǔ),也是其創(chuàng)新發(fā)展的依托,更是攸關(guān)合規(guī)的關(guān)鍵因素。

近年來迅速發(fā)展的機密計算技術(shù)是一種創(chuàng)新的數(shù)據(jù)隔離和加密處理技術(shù),其重要特點是,TCB(trusted computing base 可信計算基) 中僅包含應用自身和基礎(chǔ)硬件,即使 OS kernel、Hypervisor、甚至 BIOS 等特權(quán)軟件都已經(jīng)遭到破壞甚至本來就是惡意的,敏感數(shù)據(jù)和代碼依然能安全無虞。

螞蟻金服在自身的實踐過程中,基于機密計算底層技術(shù)發(fā)展出金融級的機密計算中間件,確保金融應用數(shù)據(jù)和代碼的機密性和完整性,為關(guān)鍵業(yè)務提供易用、安全、集群化的計算環(huán)境。

本文從機密計算的技術(shù)背景、關(guān)鍵問題、螞蟻的技術(shù)突破、以及典型應用場景等方面展開。

二、機密計算的技術(shù)背景

隨著云計算的快速發(fā)展,越來越多的關(guān)鍵性服務和高價值數(shù)據(jù)被遷移到了云端。云安全也因此成為學術(shù)界和工業(yè)界關(guān)注的一個焦點。

近年來,云安全領(lǐng)域最重要的一項技術(shù)進展名為機密計算(Confidential Computing)。機密計算填補了當前云安全的一項空白——使用中數(shù)據(jù)(Data-in-use)的加密。過去通行的做法是對數(shù)據(jù)在存儲中(比如硬盤)和傳輸中(比如網(wǎng)絡)加密,而在使用中(比如內(nèi)存)解密,以便處理。而機密計算可以保護使用中數(shù)據(jù)的機密性和完整性。

目前,多家云計算巨頭都在不約而同地推廣這項技術(shù):微軟已于 2017 年 7 月宣布開始接受 Azure 機密計算的早期試用申請;IBM 于 2017 年 12 月宣布 IBM 云數(shù)據(jù)保護(Cloud Data Guard)的預覽版;谷歌也于 2018 年 5 月開源了名為 Asylo 的機密計算框架。

那么,機密計算究竟是如何實現(xiàn)的呢?

實際上,上述所有云計算巨頭在實現(xiàn)機密計算時都離不開一種稱為“可信執(zhí)行環(huán)境(TEE)”的技術(shù)。

顧名思義,TEE 提供一種與不可信環(huán)境隔離的安全計算環(huán)境,正是這種隔離和可信驗證機制使得機密計算成為可能。

TEE 一般是直接基于硬件實現(xiàn)的,比如 Intel SGX,AMD SEV,ARM TrustZone,以及 RISC-V Keystone 等;基于虛擬化技術(shù)也可以構(gòu)造 TEE,比如微軟的 VSM,Intel 的 Trusty for iKGT & ACRN,但尚不能匹敵硬件 TEE 的安全性。

其中,Intel 軟件防護拓展(Software Guard Extensions,簡稱 SGX)是目前商用 CPU 中最為先進的 TEE 實現(xiàn),它提供了一套新的指令集使得用戶可以定義稱為 Enclave 的安全內(nèi)存區(qū)域。CPU 保證 Enclave 與外界隔離,從而保護其中的代碼和數(shù)據(jù)的機密性、完整性和可驗證性。不同于之前的 TEE 實現(xiàn),比如 ARM TrustZone,SGX 每個 APP 都可以有自己獨立的 TEE,甚至可以創(chuàng)建多個 TEE,而 TrustZone 是整個系統(tǒng)有一個 TEE;這里也省去了向設(shè)備廠商申請將 TA 裝入 TEE 的過程。由于 SGX 的先進性,目前云端機密計算領(lǐng)域甚至已公認用 Enclave 這個詞來指代 TEE。

圖片1.png

圖 1  典型 TEE 安全特性和使用流程 [1]

典型的 Enclave 達到的安全目標可以用 CIA 概括,即機密性(Confidentiality)、完整性(Integrity)和真實性(Authenticity)。在實現(xiàn)上具有以下基本要求:

1) Enclave 內(nèi)存保護

Enclave 內(nèi)存只有 Enclave 本身的代碼可以訪問。CPU 通過內(nèi)存隔離和加密來防止對安全內(nèi)存的軟件攻擊和硬件嗅探。SGX 更通過內(nèi)存控制器的 integrity tree 防止了對 Enclave 內(nèi)存的物理篡改。

2) Enclave 的可信驗證

CPU 支持對 Enclave 中數(shù)據(jù)和代碼的測量,以及對 Enclave 合法性的本地或遠程驗證。有了測量和驗證,本地的 Enclave 之間、客戶端與遠程 Enclave 之間,就可以認證身份,進而建立安全的通信信道。

如何開發(fā)受 Enclave 保護的應用程序呢?

以 SGX 為例,其中一種方法是利用 Intel SGX SDK。如下圖所示,基于 SGX SDK 的應用程序分為兩部分:Enclave 外的不可信組件(左邊黃色部分)和 Enclave 內(nèi)的可信組件(右邊綠色部分)。兩邊可以通過跨 Enclave 的函數(shù)調(diào)用通信:不可信組件可以通過 ECall 調(diào)用可信組件中定義的函數(shù);反之,可信組件也可以通過 OCall 調(diào)用不可信組件中定義的函數(shù)。

圖片2.png

圖 2  Enclave 編程模型 [2]

三、機密計算面臨的關(guān)鍵問題

Enclave 給我們帶來了前文所謂 CIA 的安全保障,但是目前面臨較大的易用性問題。主要體現(xiàn)在幾個方面。

第一,需要將原有應用分割成兩部分,一部分是 enclave 外的 untrusted 部分,一部分在 enclave 里面作為 trusted 部分;

第二,需要精心設(shè)計兩部分之間的接口,規(guī)劃好什么時候進入 Enclave,什么時候退出 Enclave——這存在一定技術(shù)門檻,而且比較繁瑣容易出錯;

第三,即使我們做了完美的分割, Enclave 里面的環(huán)境相對于我們熟悉的通常的 Linux 運行環(huán)境來說是非常受限的。例如,enclave 里面不能進行系統(tǒng)調(diào)用,libc、pthread 不完整,沒有 openmp,多進程支持欠缺等等。

可見,把應用移植到 Enclave 里面是極具挑戰(zhàn)的,在某些時候甚至是不可能做到的。而且,由于開發(fā)過程中必須考慮業(yè)務無關(guān)的繁雜瑣細的方面,即使最終能完成應用開發(fā)移植目標,也會導致低下的開發(fā)效率,極高的開發(fā)成本,這對于快節(jié)奏的互聯(lián)網(wǎng)業(yè)務來說是難以接受的。

機密計算走向工程實用面臨的另一較大問題是,如何將機密計算從單節(jié)點向集群擴展。由于缺乏標準的做法,或者沒有一個 best practice 作為參考,很多時候各個業(yè)務不得不各自從頭造輪子,搭建跟業(yè)務邏輯過度耦合的 Enclave 集群基礎(chǔ)設(shè)施。從而導致低下的開發(fā)效率和重復的資源投入。

另一方面,互聯(lián)網(wǎng)業(yè)務日趨云原生化,越來越多地采用云原生的 container->k8s->serverless 技術(shù)棧,機密計算集群如何跟云原生技術(shù)棧相結(jié)合,目前仍然是較為棘手的問題。

四、SOFAEnclave:螞蟻金服的機密計算創(chuàng)新

螞蟻金服作為中國互聯(lián)網(wǎng)金融領(lǐng)導企業(yè),對于數(shù)據(jù)保護有大量的需求,因此圍繞機密計算進行了豐富的業(yè)務創(chuàng)新和技術(shù)探索。本節(jié)針對上面提到的機密計算面臨的關(guān)鍵問題,主要介紹螞蟻金服在這方面的創(chuàng)新性成果,即 SOFAEnclave 機密計算中間件。

SOFAEnclave 屬于螞蟻金服金融級分布式架構(gòu) SOFAStack 的一環(huán),從 2007 年開始,SOFAStack 產(chǎn)生于螞蟻金服內(nèi)部需求,起初是為了解決高速發(fā)展下的業(yè)務問題。到 2019 年,已經(jīng)歷 12 年的業(yè)務錘煉,是一套成熟的金融級最佳實踐。從 2018 年起,螞蟻金服宣布將 SOFAStack 貢獻給開源社區(qū),目前已貢獻出超過 10 個核心項目,受到社區(qū)廣泛關(guān)注。

SOFAEnclave 主要關(guān)注底層基礎(chǔ)設(shè)施的安全防護,為數(shù)據(jù)和代碼打造一層可信中間件。我們的總體目標是通過易用性的提升,向業(yè)務屏蔽 Enclave 開發(fā)挑戰(zhàn)和機密計算集群復雜性,使業(yè)務保持原有開發(fā)部署習慣。用一句話總結(jié)就是,使業(yè)務只需關(guān)注業(yè)務。

圖片3.png

圖 3  SOFAEnclave

SOFAEnclave 的核心包括三部分,Enclave 內(nèi)核 Occlum,云原生機密計算集群 KubeTEE,以及安全測試和分析框架。這里主要介紹 Occlum 和 KubeTEE。

1. Occlum LibOS:安全高效的機密計算內(nèi)核

針對 Enclave 易用性問題,我們設(shè)計了一個名為 Occlum 的 Enclave 內(nèi)核,并將其作為一個開源項目采用社區(qū)模式開發(fā)。類比操作系統(tǒng)內(nèi)核,Occlum LibOS 向 Enclave 內(nèi)的可信應用提供完整的系統(tǒng)服務,應用不需要分割和修改即可得到 Enclave 保護。

Occlum 兼容 POSIX 編程接口,并支持多線程、OpenMP、和多進程;同時,Occlum 實現(xiàn)了多進程隔離機制,使得多個可信應用之間可以相互隔離。Occlum 使得開發(fā)者方便利用 Enclave 的 CIA 能力,達到可用不可見、可用不可攻的效果,使數(shù)據(jù)保護能真正得到落實。

目前,Occlum 可輕松支持大型人工智能框架,例如 XGBoost、TensorFlow 等,也可支持大型服務器應用例如 Shell, GCC,Web Server 等。Occlum 具有如下技術(shù)特點:

1)    內(nèi)存安全

內(nèi)存安全問題是系統(tǒng)軟件中最常見的安全隱患。競態(tài)條件、緩沖區(qū)溢出、空指針、棧溢出、堆耗盡、釋放后訪問、或重復釋放,這些術(shù)語都用于描述內(nèi)存安全漏洞。微軟 2019 年 2 月表示,在過去 12 年里,微軟所有補丁中大約 70% 是針對內(nèi)存安全漏洞的。因此,防范內(nèi)存安全問題對系統(tǒng)軟件的安全性和健壯性非常重要。

Occlum 是業(yè)界首個內(nèi)存安全的 SGX LibOS。Occlum LibOS 是基于保證內(nèi)存安全的 Rust 語言開發(fā),只包含極少量的 Unsafe Rust、C 和匯編代碼(小于 1000 行)。這使得 Occlum 難以出現(xiàn)最底層的內(nèi)存安全相關(guān)的 bug 和漏洞。因此,相比使用 C/C++ 開發(fā)的傳統(tǒng) SGX LibOS(如 Graphene-SGX 和 SCONE),Occlum 更值得開發(fā)者信賴,作為開發(fā)高安全應用的基礎(chǔ)。

2)    簡單易用

Occlum LibOS 使得 Linux 應用程序在只修改少量代碼或者完全不修改代碼的情況下運行于 Enclave 安全環(huán)境中。用戶只需使用 Occlum 工具鏈(occlum-clang)編譯應用程序,并使用名為 occlum 的命令行工具在 SGX enclave 中運行該應用程序。該命令行工具提供了諸多子命令,其中最重要的三個是:occlum init:初始化 Occlum 的上下文occlum build:制作 Occlum 的可信鏡像和 enclaveocclum run:在 enclave 中運行 Occlum 可信鏡像中的一個程序。

Occlum 大大降低了為 Enclave 開發(fā)應用的開發(fā)成本。我們以一個最簡單的 Hello World 為例說明。使用 Intel SGX SDK 開發(fā)的 SGX Hello World 工程包含 10 個左右的文件,300 行左右的代碼;使用百度的 Rust SGX SDK 需要 200 行左右的代碼;Google 的 Asylo 也需要 100 行左右的代碼。相比之下,Occlum 不要求用戶給 Linux 版本 Hello World(5 行代碼)增加任何額外的代碼,并且只需三行命令即可將 Linux 版的 Hello World 程序運行于 SGX enclave 中,效果如下:

動圖4.gif

圖 4  3行命令在 Enclave 里跑 5 行代碼的 Hello World

3)    高效多進程

任何應用程序在 LibOS 上都是作為進程運行的,而應用程序往往又由多個進程組成。因此,LibOS 對多進程的高效支持就顯得至關(guān)重要了。然而,現(xiàn)有 SGX LibOS 對多進程的支持并不能令人滿意。閉源的 SCONE 只支持多線程,尚不支持多進程。開源的 Graphene-SGX 是目前最成熟的 SGX LibOS,且能夠支持多進程,但它的每個 LibOS 進程必須在一個單獨的 SGX enclave 中運行,且每個 enclave 中必須運行一個獨立的 LibOS 實例。這種 N 進程 -N enclave 的架構(gòu)雖然保證了 LibOS 進程之間的強隔離,但也導致了性能和功能方面的問題:

①進程啟動慢:Graphene-SGX 要為每個 LibOS 進程創(chuàng)建一個單獨的 enclave,而創(chuàng)建 enclave 的開銷非常高,因此 Graphene-SGX 的 LibOS 進程啟動極慢(比 Linux 啟動進程慢接近 10,000 倍)。

②IPC 開銷高:Graphene-SGX 的每個 LibOS 進程都被一個 enclave 同外界完全隔離,因此 LibOS 進程間通信必須借助于 enclave 外的不可信緩存,并傳輸加密數(shù)據(jù)。加密解密大大增加了進程間通信的開銷。

③難保證一致性:Graphene-SGX 有 N 個進程就有 N 個 LibOS 實例,而原則上來講,這 N 個 LibOS 實例應該向上層的應用程序提供一致的 OS 狀態(tài),比如加密文件系統(tǒng)。但顯然在多個 LibOS 實例之間同步文件系統(tǒng)的狀態(tài)(比如每個文件塊的密鑰)是困難的。這也是為什么 Graphene-SGX 至今都未提供加密文件系統(tǒng)。

與 Graphene-SGX 不同,Occlum 是一個單地址空間 LibOS,即在同一個 enclave 中運行多個 LibOS 進程。該架構(gòu)特別適用于多進程協(xié)作的使用場景,即多個互信的進程組成同一個應用或服務。這個“多進程共享 enclave”的架構(gòu)為 Occlum 的多進程支持帶來了三個優(yōu)勢:

①進程啟動快:Occlum 的進程啟動比 Graphene-SGX 快 13-6600 倍(圖 4);

②IPC 開銷低:Occlum 的進程間通信帶寬是 Graphene-SGX 的 3 倍(圖 5);

③加密文件系統(tǒng):Occlum 支持對應用透明的、可寫加密文件系統(tǒng),保證文件系統(tǒng)的元數(shù)據(jù)與數(shù)據(jù)的機密性和完整性。

圖片4.png

圖 5  進程啟動時延比較 程序大小分別為 14KB、400KB 和 14MB

圖片5.png

圖 6  進程間通信 (pipe) 帶寬比較

2.KubeTEE:金融級云原生的機密計算集群

針對 Enclave 集群化方面的問題,我們思考如何能更高效和簡潔的使用 TEE 資源提供機密計算服務,我們的解決方法是 KubeTEE——結(jié)合云原生,提供機密計算集群服務。

一方面避免了業(yè)務用戶重復進行基礎(chǔ)設(shè)施建設(shè),另一方面用戶注冊賬號即可使用機密計算集群服務,大大降低了機密計算門檻,提高了易用性和利用率。KubeTEE 為了更高效的使用物理資源,基于 k8s + container 更優(yōu)雅地部署和管理機密計算鏡像和 EPC 資源?;?k8s 的容器調(diào)度能力,KubeTEE 可以快速實現(xiàn)機密計算服務資源的橫向擴縮容。概括來說,我們希望以一種更加云原生的方式來使用 Enclave 和機密計算集群資源。

1)提供基于 Enclave Container 的業(yè)務部署能力,基礎(chǔ)設(shè)施運維和業(yè)務無感知升級等能力

2)提供 Serverless 機密計算服務,基于通用的機密計算資源池支持業(yè)務服務

3)基于通用的機密計算組件、中間件服務和研發(fā)流程結(jié)合提供平臺化的業(yè)務開發(fā)能力

圖片6.png

圖 7 KubeTEE 系統(tǒng)架構(gòu)

上圖中描述了我們實現(xiàn) Serverless 機密計算集群的過程,我們一方面提供最終態(tài)的機密計算服務,同時將過程中積累的組件抽象化為可復用模塊,應對不同業(yè)務的定制化需求,提升機密計算業(yè)務的 Enclave 開發(fā)效率。

五、典型應用場景

機密計算應用場景非常廣泛,常見的應用有基于 Enclave 的版權(quán)保護、生物識別保護、基因數(shù)據(jù)處理、密鑰保護、密鑰管理系統(tǒng)、隱私保護的機器學習、加密數(shù)據(jù)分析、以及保密數(shù)據(jù)庫等。其他如區(qū)塊鏈隱私計算、區(qū)塊鏈 +AI、隱私邊緣計算等都可以構(gòu)建在機密計算技術(shù)基礎(chǔ)上,以更好的服務應用場景。這一節(jié)結(jié)合互聯(lián)網(wǎng)業(yè)務探討兩個略微復雜的應用場景。

1.基于 Enclave 的多方競合學習

眾所周知,人工智能能發(fā)展到今天,有兩個原因:一個是算力的提高,另一個就是數(shù)據(jù)規(guī)模的增長。但是,單一機構(gòu)的業(yè)務領(lǐng)域和業(yè)務受眾是有限的,因此其數(shù)據(jù)積累一方面是不全面的,另一方面也是難以形成規(guī)模的。

為了發(fā)揮數(shù)據(jù)的更大價值,一個自然的想法就是匯聚多方數(shù)據(jù)進行集中挖掘。但是,機構(gòu)之間出于業(yè)務保密以及行業(yè)競爭的顧慮,又不可能把自己的數(shù)據(jù)無保留分享給別人。

這導致了一種看似不可思議的矛盾局面:多個機構(gòu)既競爭又合作,既數(shù)據(jù)共享又數(shù)據(jù)保密(圖 6)——我們將其稱為多方競合學習。

怎么解決這種矛盾呢?一種方案是,把各自加密的數(shù)據(jù)導入 Enclave,在 Enclave 內(nèi)解密、匯聚、并挖掘。具體實現(xiàn)細節(jié)可以參考螞蟻金服共享智能團隊的文章。

圖片7.png

圖 8 多方競合學習

2.AI 模型安全保護

對外部署的 AI 模型攜帶大量知識產(chǎn)權(quán),一旦被逆向或泄露,既會對技術(shù)護城河造成破壞,也會降低對抗性樣本攻擊的難度,導致安全問題。

應對這種威脅的一種方案是,使用方把 AI 模型和訓練 / 預測數(shù)據(jù)加密存儲,只有在使用時才將其輸入 Enclave,在 Enclave 里面解密,由 Enclave 中運行的 AI 框架處理,結(jié)果根據(jù)具體場景需求以明文返回或加密返回并在使用方本地解密。這要求 Enclave 能支持常見的 AI 框架,而要做到這一點極為挑戰(zhàn)——一方面是因為這些 AI 框架一般使用了復雜的多線程、OpenMP 等性能優(yōu)化的運行環(huán)境,另一方面是因為 Enclave 又偏偏難以提供這些支撐環(huán)境。這就是為什么市面上很多 Enclave 支撐系統(tǒng)難以支持(或難以高效支持)AI 框架的原因。

如前所述,Occlum LibOS 在這方面取得了一定的進展,可以較為輕松的高效運行常見 AI 框架。

圖片8.png

圖 9 AI 模型安全保護

六、總結(jié)與展望

機密計算方興未艾,學術(shù)界的研究如火如荼,工業(yè)界的應用也日益豐富和實際。螞蟻金服在機密計算領(lǐng)域是技術(shù)的探索者和業(yè)務的先行者,我們?nèi)杂兄T多問題需要整個生態(tài)的合作。

我們正在逐步將 SOFAEnclave 里的模塊貢獻給開源社區(qū),歡迎行業(yè)和學術(shù)同仁聯(lián)系合作。希望合作伙伴向 Occlum 項目提出反饋并貢獻代碼,一起利用 Occlum LibOS 來支持更多實際應用,實現(xiàn) Enclave 保護的安全容器 Enclave Container。在 KubeTEE 方面,希望能與合作伙伴共建生態(tài),維護可信應用和鏡像倉庫,推進機密計算集群方案的實用化標準化。

免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2019-09-30
SOFAEnclave:螞蟻金服新一代可信編程環(huán)境,讓機密計算為金融業(yè)務保駕護航102年
導讀:近日,Linux 基金會宣布全球多家巨頭企業(yè)成立機密計算聯(lián)盟(Confidential Computing Consortium),在對于數(shù)據(jù)安全和隱私擔憂的不斷增長下,基于可信執(zhí)行環(huán)境技術(shù)的機密計算作為一種可行的解決方案

長按掃碼 閱讀全文