在数据安全和隐私保护越来越受到重视的今天,机密计算(Confidential Computing)作为具备广泛应用前景的前沿技术领域,受到国内外互联网公司重视。蚂蚁基于在机密计算方面的探索和实践,打造了 SOFAEnclave 机密计算解决方案,下面就让我们系统的来了解一下 SOFAEnclave 技术栈里都包括哪些组成部分,以及它是如何解决落地问题的。
云原生的概念这两年逐渐深入人心,越来越多的应用从设计之初就是面向云环境的。但是,据统计,仍然有很大一部分应用由于各种原因没有上云,尤其是那些较为重要、敏感的应用。我们认为,用户不上云的一个重要原因是对云平台的信任不足,不确定自己的重要应用跑在云上是否有安全保证。为了解决这个问题,我们提出来可信原生的概念,让基础设施更加可信。
可信原生技术包括了平台的可信、存储和通讯的安全,以及我们今天要讲的主题——机密计算。利用芯片提供的可信执行环境或者叫做 Enclave,机密计算使得应用不再担心来自其他应用、操作系统、其他租户的威胁。
听起来很美。但是,今天机密计算在实际应用中仍面临较多的挑战。
首先,Enclave 是一个受限的环境,从编程接口到编程模型都跟我们熟悉的 Linux环境有很大不同。
其次,开发者要花力气学习市面上的多种不同 Enclave 架构。
再有,目前主流的集群调度系统还不支持 Enclave,限制了 Enclave 的大规模使用。
为了解决这些挑战,蚂蚁开发了 SOFAEnclave 机密计算软件栈,分为如图所示的三个部分,下面我逐一介绍。
1. Occlum:让人人都可以“机密计算”
首先介绍一下我们的开源项目 Occlum LibOS。Occlum 提供POSIX编程接口,支持多种主流语言(C/C++, Java, Python, Go, Rust等),支持多种安全文件系统。可以说,Occlum 提供了一个兼容 Linux 的 Enclave 运行环境,使得机密计算轻松支持已有应用,也使得机密应用开发者复用原有开发技能。Occlum 不但在工业界场景中得到了广泛的应用,而且也在系统顶会 ASPLOS2020 发表了学术论文,代表了机密计算的领先水平。
从架构上来看,Occlum 不但提供基本的类似 Linux 的操作系统能力,而且提供一个类似 Docker 的用户使用接口,比如这里的 Occlum build 和 Occlum run 等都跟Docker的命令类似。
社区方面,Occlum 是阿里巴巴 Inclavare Containers 的缺省运行时,也在与 Hyperledger Avalon 等其他社区项目合作。同时,Occlum 已经捐赠给机密计算联盟CCC,目前是唯一一个来自中国的开源项目。另外,值得一提的是,微软 Azure Cloud 在今年的 Microsoft Ignite(类似阿里云栖大会)大会上公开推荐在 Azure 上基于 Occlum 开发机密计算应用。
Occlum开源地址:
https://github.com/occlum/occlum
Occlum 也在探索新的特性,比如我们提供了 Occlum embedded mode,分割型应用可以把 Occlum 当作一个库(而不是OS)按需链接特定代码到应用里,兼顾 TCB 小和接口丰富之间的平衡。
2. HyperEnclave:提供统一的Enclave抽象
我们一开始就提到市场上目前有多种 Enclave 硬件平台。这些 Enclave 各有特点,但也给开发者带来了较大的学习负担。作为这些硬件的用户,我们其实希望有一个统一的 Enclave 抽象。另外,我们也希望能对 Enclave 的启动和证明有更多的控制,能一定程度上抵御困扰硬件 Enclave 的侧信道攻击。
针对上述问题,我们提出了 HyperEnclave。这是一个统一的 Enclave 平台。作为抽象层,它既能映射到现有的各种 Enclave 硬件实现,也能使用未来的硬件能力,比如 Intel MKTME/TDX。它支持现有的 Enclave SDK,比如 Intel SGX SDK。它甚至可以支持没有 Enclave 扩展的机器,在这种机器上我们基于虚拟化技术实现了隔离机制——我们开发了一个 Type 1.5的 hypervisor 用来创建和管理基于虚拟化的 Enclave。在可信方面,我们基于可信计算技术(如TPM等)实现了可信启动和远程证明。基于 HyperEnclave,我们甚至可以在AMD的机器上跑 SGX Enclave Apps。加上 AMD SEV 或者 Intel MKTME 等内存加密硬件能力,HyperEnclave 也可以防护物理攻击。
我们详细看一下这个系统的生命周期各界段。首先 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。
3. KubeTEE:让机密计算支持大规模k8s集群
前面提到的 Occlum 和 HyperEnclave 都还是针对单个计算节点的技术。但是目前的互联网应用都是基于大规模集群的,尤其是基于 Kubernetes 的。Kubernetes 提供了很多基础的集群管理、调度、和监控能力,但这些能里并不能很好适用到机密计算场景。首先我们需要让 Kubernetes 能够认识 Enclave 硬件,将 Enclave 暴露给容器,监控 Enclave 资源,并处理 Enclave 特有的事务比如远程证明等等。
我们研发的 KubeTEE 就是 Kubernetes 和 Enclave 也就是 TEE 的有机结合。基于 KubeTEE,用户可以使用 Kubernetes 的工作流程来轻松管理机密计算集群,部署 Enclave 服务,使用 Enclave 中间件等等。
KubeTEE 开源地址:https://github.com/SOFAEnclave/KubeTEE
KubeTEE 也包含一个叫做 AECS 的组件,基于机密计算的远程证明机制,简化集群内 Enclave 的密钥分发和部署过程。
最后总结一下。我们发现机密计算在实际应用中面临很多挑战,而我们希望 SOFAEnclave 机密计算软件栈能帮助大家解决这些挑战,希望降低机密计算的门槛,促进云原生到可信原生的演进。SOFAEnclave 的三个组件中,Occlum、KubeTEE 已经开源,HyperEnclave 也将开源。希望跟业界加强交流合作,谢谢!
本文归档在 sofastack.tech。