當 Kubernetes 遇到機密計算,阿里巴巴如何保護容器內數據的安全?

頭圖.jpeg

做者 | 賈之光(甲卓) 阿里巴巴高級開發工程師,專一於 Kubernetes 安全沙箱和機密計算領域,主要參與 Incalvare Containers 社區開發。html

8 月 26 日,咱們發起了第 6 期 SIG Cloud-Provider-Alibaba 網研會直播。本次直播主要介紹了機密計算的概況, InclavareContainers 開源項目架構、已支持的功能和迭代計劃,以及阿里雲 ACK-TEE 的發展示狀和規劃。linux

本文聚集了這次直播完整視頻回顧及資料下載,並整理了直播過程當中收集的問題和解答,但願可以對你們有所幫助~阿里巴巴雲原生公衆號後臺回覆「826」便可下載相關 PPT。算法

直播視頻回顧連接:https://v.qq.com/x/page/z3143a6agsg.html安全

機密計算簡介

1. 應用容器安全現狀

1.png

Portworx and Aqua Security 發佈的《2019 容器接受度調研》報告顯示,安全性成爲了用戶使用容器技術和業務上雲面臨的最大挑戰,其中數據安全問題最爲突出;根據 Risk Based Security 發佈的數據泄露報告顯示,2019 年數據泄露事件發生的數量和泄露的數據量與 2018 年相比均增長了 50%+。網絡

2. 機密計算時代到來

2.png

數據在整個生命週期有三種狀態:At-Rest(靜態)、In-Transit(傳輸中)和 In-Use(使用中)。架構

  • At-Rest 狀態下,通常會把數據存放在硬盤、閃存或其餘的存儲設備中。保護 At-Rest 狀態的數據有不少方法,好比對文件加密後再存放或者對存儲設備加密;less

  • In-Transit 是指經過公網或私網把數據從一個地方傳輸到其餘地方,用戶能夠在傳輸以前對文件加密或者採用安全的傳輸協議保證數據在傳輸中的安全,好比 HTTPS, SSL, TLS, FTPS 等;運維

  • 然而 In-Use 狀態的數據很長時間內都沒有很好的保護的方法,直到機密計算的出現。ide

機密計算聯盟給機密計算的定義是:機密計算是在一個基於硬件的**可信執行環境(TEE)**中保護數據執行計算。函數

機密計算的核心功能有:

  • 保護 In-Use 數據的機密性:內存中的數據是被加密的,即使被攻擊者竊取到內存數據也不會泄露數據;
  • 保護 In-Use 數據的完整性:度量值保證了數據和代碼的完整性,使用中有任何數據或代碼的改動都會引發度量值的變化;
  • 保護 In-Use 數據的安全性:相比普通應用,機密計算應用有更小的 TCB(Trusted Compute Base),意味着更小的攻擊面,也意味着更安全。,以 Intel SGX 爲例,除了 CPU 和可信應用自身之外,其餘軟硬件的訪問都是被拒絕的,包括操做系統、Hypervisor 等。

在 2019 年 Gartner 的《計算基礎設施成熟度曲線》中把機密計算也列入其中,雖然還處在早起階段,這也說明機密計算開始逐步進入你們的視野並獲得重視。

在 2020 年 Gartner的《雲廠商本地安全解決方案比較》中,阿里雲在 Trusted execution enviorments 中拿到一個 H,是由於 2020 年年初阿里雲容器服務發佈了機密計算產品 ACK-TEE,更多參考連接

3. 機密計算業務場景

3.png

機密計算旨在保護敏感的代碼和數據。業務場景有:區塊鏈、祕鑰管理、金融、AI、多方計算、數據租賃、邊緣計算等。

以多方計算爲例,不一樣用戶或廠商之間相互共享數據以便計算挖掘出更大的數據經濟價值,但不想把本身的數據泄露給對方。機密計算能夠保護共享數據運行在受硬件保護的可信執行環境中,數據在內存中是加密的,從而保證數據不會被泄露。

4. 安全容器與機密計算的區別

4.png

除了機密計算外,還有一個與安全相關的概念-安全容器。阿里雲在安全容器和機密計算領域都有佈局,雖然兩者都與安全相關,但它們的定位和應用場景是不一樣的。

安全容器的定位是隔離,把惡意應用隔離起來,防止它出去對其餘應用搞破壞。主要的應用場景有三類:

  • 不可信負載隔離
  • 多租戶應用隔離
  • 性能和故障隔離

機密計算的定位是保護,保護應用不會被其餘惡意應用進來竊取數據和搞破壞。應用場景是保護敏感代碼和數據。

5. TEE 硬件平臺

5.png

支持 TEE 的硬件平臺主要有 3 個:Intel SGX、ARM TrustZone 和 AMD SEV,它們有不一樣的應用場景和實現方式:

  • ARM TrustZone 把硬件資源分爲安全世界和非安全世界兩部分,全部須要保密的操做在安全世界執行,其他操做在非安全世界執行,安全世界和非安全世界經過一個名爲 Monitor Mode 的模式進行轉換。典型的應用場景有移動支付、數字錢包等;
  • AMD 利用 SEV(AMD Secure Encrypted Virtualizationn),SME(AMD Secure Memory Encryption)和SEV-ES(Secure Encrypted Virtualization-Encrypted State)等技術實現虛擬機的 Guest 內存加密和安全隔離;
  • Intel SGX 是 Intel 提供的一組指令,用於提升應用的代碼和數據的安全性,用戶能夠把敏感數據放入到 Encalve 中,Enclave 是一種受保護的可信執行環境。

阿里雲 ACK-TEE 和開源項目 Inclavare Containers 都是基於 Intel SGX 實現的機密計算。

6. Intel SGX 有更小的 TCB(Trusted Computing Base)

6.png

按照普通方式部署敏感應用,應用會依賴操做系統、VMM、硬件甚至是雲廠商,TCB 很是大,面臨的攻擊面也很是大。只要 TCB 中只要有一處遭到攻擊,應用都有數據泄露和破壞的風險。

而把敏感應用部署在 Intel SGX 的 TEE 中,TCB 只有 CPU 和 TEE 自己。一方面攻擊面變得很小,另外一方面 TEE 的安全機制也會使應用更安全。

7. 基於 Intel SGX 的可信應用開發和使用流程

7.png

Intel SGX 把應用分紅了可信區和不可信區。用戶可經過在 EDL(Enclave Definition Language)中定義可信區和不可信區以及用到的函數。這些函數用戶可信區和不可信區之間的通訊,分爲 ECALL 和 OCALL。ECALL 用於不可信區訪問可信區的數據,OCALL 用於可信區訪問不可信區的數據。

基於 Intel SGX 的可信應用開發和使用流程以下:

  • 申請祕鑰:向 Intel 申請 SGX 相關的商業簽名加密密鑰;
  • 安裝環境:
    • 安裝 Intel SGX 驅動
    • 安裝 SGX SDK 和 PSW
    • 安裝 AESM 服務
  • 開發應用:
    • 明確應用可信區中須保護的代碼和數據;
    • 編寫 EDL 文件,明確 ECALL 和 OCALL 函數;
    • 編寫可信區代碼和非可信區代碼;
  • 編譯構建
    • 使用 sgx_edger8r 基於 edl 文件生產用於 ECALL 的不可信區的代理函數和用於 OCALL 的可信代理函數;
    • 編譯 Enclave動態連接庫文件;
    • 簽名上一步驟的 Enclave 動態連接庫文件;
    • 編譯應用,打包鏡像。
  • 用 Docker 運行容器

Inclavare Containers 保護敏感應用和數據

1. Inclavare Containers 的目標和價值

8.png

Inclavare,是 Enclave 一詞的拉丁語詞源,讀音是 [ˈinklɑveə]。Enclave 指的是一種受保護的執行環境,能爲其中的敏感和機密數據提供基於密鑰學算法的強安全隔離,阻止不可信的實體訪問用戶的數字資產。

Inclavare Containers 是由阿里雲操做系統安全團隊和阿里云云原生容器服務團隊主導,並聯合了阿里經濟體內多個研發團隊(螞蟻安全計算團隊、雲安全團隊、語言 runtime 團隊等)共同研發的面向機密計算場景的開源容器運行時技術棧。

當前機密計算在雲原生場景中提供的技術,有不少缺陷和不足:

  • 使用和開發成本都比較高;
  • 容器化和對接 Kubernetes 的成本和複雜度高;
  • 服務提供商提供的技術解決方案也相對單一

因爲以上緣由,很是不利用機密計算技術的普及和應用。而 Inclavare Containers 目的就是爲業界提供一款面向機密計算領域的開源容器運行時引擎和安全架構,其價值在於:

  • 抹平機密計算的高使用門檻,爲用戶提供與普通容器一致的使用體感;
  • 基於處理器提供的多種硬件安全技術,爲用戶的工做負載提供多種不一樣的 Enclave 形態,在安全和成本之間提供更多的選擇和靈活性。

2. Inclavare Containers 架構

9.png

在介紹 Inclavare Containers 架構以前,先介紹一下架構中各個組件的做用:

  • kubelet:Kubernetes 集羣中每一個 Node 節點上運行的主要「節點代理」,負責與 Apiserver 的通訊和管理節點上 Pod;
  • Containerd:一個工業級標準的容器運行時,它強調簡單性、健壯性和可移植性,Containerd 能夠在宿主機中管理完整的容器生命週期:容器鏡像的傳輸和存儲、容器的執行和管理、存儲和網絡等;
  • shim-rune:爲容器運行時 rune 提供的 shim,主要負責管理容器的生命週期、把普通鏡像轉換成 TEE 鏡像;
  • rune:rune 是一個命令行工具,用於根據 OCI 規範在容器中生成和運行 Enclave。 rune 是在 runc 代碼基礎上開發的,既能夠運行普通 runc 容器也能夠運行 Enclave 容器;
  • SGX LibOS:SGX LibOS 是爲了讓普通應用在不作或作不多更改的狀況下,就可以在 Intel SGX 上運行起來。目前 Inclavare Containers 支持的 LibOS 有 Occlum,Graphene-SGX 正在對接中;
  • 語言 Runtime:LibOS 對多語言的支持,好比 Occlum 中提供了 Golang 和 JDK 語言運行時;
  • PAL-API:rune 和 LibOS 之間通訊的接口。好比 pal_init 用於初始化 Enclave,pal_create_process 用於建立 Encalve。
  • liberpal.so:是實現了 PAL-API 的 Linux 動態庫,主要負責 rune 和 LibOS 的通訊。

Inclavare Containers 的工做流程以下:

  1. kubelet 向 Containerd 發起 CRI(Container Runtime Interface) 請求,好比請求建立一個 Pod
  2. Containerd 中有一個 cri-containerd 的插件實現了 CRI 接口,Containerd 接收到請求後,把請求轉給 shim-rune
  3. shim-rune 既能夠建立 runc 容器也能夠建立 rune 容器。在建立 runc 和 rune 容器的處理流程也有差別:
    1. 建立 runc 容器:與建立普通 runc 容器過程徹底同樣,好比 Pod 的 pause 容器就是 runc 容器。
    2. 建立 rune 容器:利用 LibOS 把普通鏡像轉換成 TEE 鏡像,rune 會在容器內建立 Enclave 並把應用運行在 Enclave 中。
  4. rune 加載 liberpal.so,用於 rune 與 LibOS 的通訊。
  5. rune 把 Intel SGX 驅動載入容器內,並在容器內建立 1 號進程 init-runelet,再由 init-runelet 建立 Encalve。Enclave 是一個受 Intel SGX 保護的可信執行環境,Enclave 內包含:LibOS、語言 Runtime 和 應用自己。至此一個可信應用就運行起來了。

總結下來,Inclavare Containers 的特色有:

  • 將 IntelSGX 與容器生態結合,兼容 OCIRuntime 和 OCI 鏡像標準,實現 Enclave 容器形態;
  • 與 Kubernetes 生態無縫整合;
  • 基於 LibraryOS 技術,改善 IntelSGX 引入的約束條件所帶來的兼容性問題;
  • 提供對高級語言 Runtime 的支持,進一步提高兼容性;
  • 定義通用的 EnclaveRuntimePALAPI 規範,構建 EnclaveRuntime 生態。

3. shim-rune 工做流程

10.png

shim-rune 包含兩部分 Core 和 Carrier,它們的做用分別是:

  • 管理容器生命週期
  • 利用 LibOS 把普通容器轉換爲 TEE 鏡像

shim-rune 的工做流程爲:

  1. 以容器鏡像爲輸入,利用 LibOS 生成未簽名的 Enclave 動態庫;
  2. 從 Enclave 動態庫中導出簽名材料;
  3. 以簽名材料爲輸入,請求籤名服務進行簽名,返回的內容有摘要文件和公鑰;
  4. 生成簽名的動態庫;
  5. rune 加載簽名的動態庫,建立並啓動 Enclave。

4. 客戶端簽名與服務端簽名

11.png

Inclavare Containers 支持客戶端簽名和服務端簽名兩種工做方式,兩種工做方式的差別以下:

11-12.jpg

相比客戶端簽名,服務端簽名優勢以下:

  • 下降了開發者使用門檻,開發者不須要掌握 Intel SGX 的技術,按照 LibOS 要求構建出普通鏡像便可;

注意:每種 LibOS 對普通鏡像也有必定要求,好比 Occlum 只支持 musl libc 而不支持 glibc,因此 glibc 應用須要改造爲 musl libc 應用以後才能在 Inclavare Containers 中運行起來。

  • 用戶不須要本身向 Intel 申請商業證書;
  • 可運行在 Kubernetes 集羣中。

5. 多團隊共建合做

12.png

Inclavare Containers 項目是由多個團隊共建合做而成的,各組件做用和團隊分工以下:

  • Occlum:由螞蟻安全計算團隊自研的基於 Intel SGX 技術並實現了內存安全的多進程 Library OS
  • Graphene-SGX:基於 IntelSGX 技術並能夠運行未經修改程序的開源 library OS
  • Dragonwell:由阿里編譯器團隊定製的 LTS OpenJDK 發行版本
  • sgx-device-plugin:由阿里雲容器服務團隊和螞蟻安全計算團隊針對 IntelSGX 聯合開發的 Kubernetes Device Plugin
  • AliyunLinux:由阿里 BaseOS 團隊對 Inclavare Containers 提供全棧適配 aliyun linux 的支持

6. Inclavare Containers 開源項目

13.png

Inclavare Containers 是業界首個面向雲原生的機密計算場景下的開源容器運行時技術棧,被阿里巴巴開源委員會評爲重點開源項目。而且已經加入到官方機密計算 OCIRuntime 參考實現列表。

目前支持的功能有:

  • 支持經過 K8s 和 Docker 啓動 Enclave 容器
  • 支持 Occlum 和 Graphene 兩個主流 LibOS
  • 支持 Java 和 Golang 語言 Runtime

該項目每月月底進行一次發佈,面向社區提供 CentOS 和 Ubuntu 的 binary release,並對內提供 AliyunLinux 發行版本。

7. Inclavare Containers 里程碑

14.png

14-15.jpg

8. 2020 年機密計算技術業產業

15.png

ACK-TEE

1. 簡介

16.png

ACK-TEE 於 2019 年 9 月立項

功能:

  • 對數字資產(算法、數據、代碼)有強安全訴求的雲用戶提供基於硬件加密技術的可信執行環境(TEE)
  • 下降機密計算技術的應用門檻
  • 簡化可信/機密應用的開發、交付和管理成本。

合做團隊:阿里雲容器服務團隊、操做系統內核團隊、雲安全團隊、螞蟻安全團隊和運行時語言團隊

定位:雲原生機密計算容器平臺

使命:讓天下沒有難用的機密計算

產品原則:可信安全、易開發交付、標準開放、雲原生

2. ACK-TEE 1.0

17.png

ACK-TEE 1.0 於 2020 年 1 月份上線

目標用戶羣體:原生 SGX 用戶

全新 K8s 託管集羣形態:機密計算專用集羣,支持 Intel SGX1。

複用 Managed K8s 已有能力,包括各類雲產品集成,K8s 集羣運維能力,下降 K8s 集羣的運維複雜度;

支持 EPC 加密內存的管理和調度,下降用戶使用 SGX 設備的複雜度。

3. ACK-TEE 2.0

18.png

ACK-TEE2.0 計劃在 2020 下半年上線

功能:支持原生應用在 TEE 中運行起來

目標用戶:沒有掌握機密計算技術但有數據安全需求的用戶

方案

  • 把普通鏡像轉換成 TEE 鏡像後運行在 TEE 中;
  • 經過 controller 提供安全可信的服務組件,如 KMS-Enclave-Plugin 等。

Q & A

**Q1:**這個依賴於 Intel 的芯片?爲啥還須要單獨找 Intel 申請密鑰? **A1:**Intel 芯片能保證應用執行在基於硬件的 Enclave (一種可信執行環境)中,保證應用的安全,但不能保證建立者必定是合法的。而在構建 Enclave 時咱們會用 Intel 的祕鑰對其簽名,保證使用者是合法的。

**Q2:**Inclavare Containers 本質上是一個容器運行時實現嗎?它能徹底替代 Docker 容器運行時的場景嗎? **A2:**Inclavare Containers 是一個軟件棧,它包含了 rune、shim-rune、runelet 等多個工具。其中 rune 是一個容器運行時,它是在 runc 代碼基礎上開發的。既能夠運行普通 runc 容器,也能夠跑有 Enclave 的容器。功能上說,能夠替代 Docker 容器運行(runc)時,但最大的意義在於運行 Enclave 容器,保證代碼和數據的安全。

**Q3:**應用的性能有多少影響,有作過相似的測試嗎? **A3:**Inclavare Containers 的重點是解決數據安全問題的。底層是基於 Intel SGX 的技術,目前 Intel SGX1 的 ECP 只有 128 MB 內存,相比原生容器應用的性能確定會差不少。

**Q4:**因此理解下來,只把它用在最核心的須要 in-use 加密的地方,對嗎? **A4:**是的,保護 In-Use 代碼和數據的安全是機密計算的最大價值。

**Q5:**ACK 如今有這個使用方法和 sample 嗎? **A5:**ACK 裏有託管版「加密計算」,即分享裏講到的 ACK-TEE 1.0。但面向客戶是 SGX 原生客戶,須要客戶本身基於 SGX 作應用改造和構造鏡像。ACK-TEE 2.0 還在規劃中,計劃年末上線,會把 Inclavare Containers 的能力移植過來。我理解你是想要 ACK-TEE 2.0 的 sample 是嗎?若是有興趣,你能夠按照 Inclavare Containers 0.3.0 的文檔,搭建一個支持機密計算的 Kubernetes 集羣。

關注阿里巴巴雲原生公衆號,後臺回覆 「826」 便可下載 PPT!

阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的公衆號。」

相關文章
相關標籤/搜索