本文介紹如何使用阿里云虛擬化Enclave創建一個可信的隔離空間,從而保護您的應用程序和數據的安全。
背景信息
數據一般分為三種形態:靜態數據、傳輸中的數據以及使用中的數據。前兩者可以通過加密等方式來保障數據安全;而使用中的數據的安全性保障十分困難,目前一般使用機密計算(Confidential Computing)來保護使用中的數據的安全性。
阿里云虛擬化Enclave在ECS實例內部提供一個可信的隔離空間,將合法軟件的安全操作封裝在一個Enclave中,保障您的代碼和數據的機密性與完整性,不受惡意軟件的攻擊。
阿里云虛擬化Enclave正在邀測中。您可以提交工單申請使用。
阿里云虛擬化Enclave適用于對敏感和機密數據有強保護需求的業務,例如金融服務、互聯網、醫療等。
Enclave的工作原理
使用阿里云虛擬化Enclave構建機密計算環境的工作原理,是在ECS實例(即主VM)內切分計算資源(包括vCPU和內存),創建一個Enclave VM(簡稱EVM)作為可信執行環境。EVM的安全性保障體現在以下幾方面:
由底層虛擬化技術提供安全隔離,EVM和主VM之間隔離,并且和其他ECS實例也隔離。
EVM運行獨立的、定制化的可信操作系統,沒有持久化存儲、交互式連接或外部網絡通路,僅允許通過本地安全信道(基于vsock)與主VM進行通信,最大程度縮小攻擊面。您可以將涉及機密數據的應用放入EVM中運行,通過安全調用的形式與運行在主VM上的應用進行交互。
阿里云虛擬化Enclave的工作原理圖如下所示。
阿里云虛擬化Enclave提供的安全性由多個方面結合實現。底層基于帶有TPM/TCM芯片的第三代神龍架構,且為EVM提供vTPM/vTCM設備來增強其安全性和可信能力;上層提供高兼容性的SDK,方便您快速搭建Enclave環境并使用。在可信證明能力方面,您可以對運行在機密執行環境中的代碼進行驗證,例如借助SDK,機密應用可在運行時生成證明材料(包括平臺、應用信息、簽名等),再通過遠程證明服務端(可結合KMS)驗證證明材料的有效性。當主VM切分資源給EVM,并且EVM開始運行時,底層會執行資源訪問隔離,確保主VM無法訪問這些已經切分出去的vCPU或內存資源,保障EVM的正常運行和私密性。
阿里云虛擬化Enclave功能的架構圖如下所示。
使用限制
僅g7、c7、r7支持阿里云虛擬化Enclave。
每臺ECS實例只允許創建一個Enclave。
使用Enclave前,您必須至少為主VM保留一個處理器物理核以及部分內存,剩余的處理器和內存資源可以靈活地分配給Enclave。如果您開啟了超線程,則代表保留了屬于一個物理核的兩個處理器超線程,因此啟用Enclave特性的ECS實例至少需要具備4 vCPU。
其他通用限制,請參見使用限制。
通過工具集使用Enclave
安裝Enclave Runtime工具集。
Enclave Runtime工具集負責在主VM上管理Enclave的生命周期,包括Enclave的啟動和終止。您可以通過以下任一方式安裝:
在創建ECS實例時勾選Enclave,自動安裝Enclave Runtime工具集。
說明通過OpenAPI創建Enclave機密計算的ECS實例時,只能調用RunInstances實現,CreateInstance目前不支持設置機密計算模式參數(
SecurityOptions.ConfidentialComputingMode
)。在創建ECS實例后,運行以下命令,在主VM中安裝Enclave Runtime工具集。
sudo rpmkeys --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 sudo yum install -y alinux-release-experimentals sudo yum install -y https://enclave.oss-cn-hangzhou.aliyuncs.com/de-platform-runtime-0.1.0-1.2.al7.x86_64.rpm
安裝Enclave Runtime后,本地服務會嘗試自動拉起Enclave,默認的Enclave鏡像存儲于/usr/local/share/dragonfly/image.bin,您可以修改配置文件/etc/enclave.conf來變更鏡像存儲所在路徑。配置文件還提供了更多的配置選項,包括分配給Enclave的vCPU和內存資源等。
初次手動安裝后,運行以下命令將Enclave鏡像下載保存到本地。
wget -O /usr/local/share/dragonfly/image.bin \ https://enclave-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com/download/linux/enclave_image/x86_64/0.1.0/image-0.1.0.bin
運行systemctl命令,對Enclave進行操作。
systemctl status de_platform_service # 查看運行狀態 systemctl start de_platform_service # 啟動服務 systemctl restart de_platform_service # 重啟服務 systemctl stop de_platform_service # 關閉服務
通過SDK使用Enclave
阿里云虛擬化Enclave提供了SDK,讓您在啟用了Enclave的ECS實例上開發自己的應用。阿里云虛擬化Enclave還提供了一組與SGX-SDK兼容的API接口定義和代碼庫,如果您已經有SGX應用,則只需經過少量遷移工作即可將應用運行在Enclave平臺上。
在開發環境中準備以下Dockerfile文件。
FROM registry.cn-hangzhou.aliyuncs.com/alinux/aliyunlinux RUN rpmkeys --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 \ && yum install -y alinux-release-experimentals \ && yum install -y devtoolset-9 wget openssl-devel zlib-devel patch git cmake3 \ https://enclave.oss-cn-hangzhou.aliyuncs.com/de-platform-runtime-0.1.0-1.2.al7.x86_64.rpm \ https://enclave.oss-cn-hangzhou.aliyuncs.com/teesdk-0.1.0-1.1.al7.x86_64.rpm \ && yum clean all -y \ && wget -O /devtoolset9_enable.sh \ https://enclave.oss-cn-hangzhou.aliyuncs.com/devtoolset9_enable.sh \ && chmod +x /devtoolset9_enable.sh WORKDIR /opt/app-root/src ENTRYPOINT ["/devtoolset9_enable.sh"]
運行以下命令,利用docker創建Enclave鏡像。
docker build -t deenclave/sdk-builder .
執行成功后,自動生成名為deenclave/sdk-builder的鏡像。您只需使用該鏡像,即可進行DE Enclave的應用構建。阿里云提供了SDK示例供您參考。
SDK示例一:啟動容器構建應用
阿里云提供了SDK示例程序,位于/opt/alibaba/teesdk/desdk/examples/SampleMath。該示例程序接收外部輸入的兩個平面坐標點,并在Enclave內計算兩點之間的直線距離,最后將計算結果輸出至控制臺。您可以按照以下步驟完成示例操作。
運行以下命令,通過構建的docker鏡像deenclave/sdk-builder啟動容器。
docker run -it \ -v /opt/alibaba/teesdk/desdk/examples/SampleMath:/opt/app-root/src:z \ deenclave/sdk-builder
在啟動后的容器實例內,運行以下命令配置環境變量。
source /opt/alibaba/teesdk/desdk/environment
在啟動后的容器實例內,運行cmake命令對示例代碼執行構建。
cmake3 -B build && \ cmake3 --build build
構建成功后,應用和Enclave所在路徑分別為/opt/app-root/src/build/SampleMath/App/app和/opt/app-root/src/build/SampleMath/Enclave/enclave.signed.so。
將應用上傳至主VM。
在主VM上啟動Enclave,并執行示例代碼SampleMath,然后查看執行結果。
[root@AliYun ~]# ./app A(3,4) -> B(1,8) -> 4.47214 A(6,9) -> B(6,2) -> 7 A(3,3) -> B(7,5) -> 4.47214
SDK示例二:通過Attestation生成證明材料
Attestation是一個認證的過程,您可以通過它來確保運行在Enclave中的鏡像、操作系統和應用程序代碼沒有被修改或篡改。您可以在自己的Enclave應用代碼內調用SDK提供的API接口生成證明材料,并將證明材料上傳至遠程證明服務進行驗證,遠程證明服務會將驗證結果返回給調用者。
阿里云提供了以下示例,您可以使用與SDK示例一中SampleMath相同的方式構建并運行這些示例。
生成證明材料的示例程序,位置在/opt/alibaba/teesdk/desdk/examples/QuoteGenerationSample。
驗證證明材料的示例程序,位置在/opt/alibaba/teesdk/desdk/examples/QuoteVerificationSample。