作为业界首个面向机密计算场景的开源容器运行时,Inclavare Containers 项目于 2020 年 5 月开源,短短一年多时间内发展势头非常迅猛,吸引了众多领域专家和工程师的关注与贡献。2021 年 9 月 15 日,云原生计算基金会(CNCF)宣布通过全球 TOC 投票接纳 Inclavare Containers 成为 CNCF 官方沙箱项目,成为机密计算技术在云原生领域第一个进入 CNCF 的项目。
Inclavare Containers:云原生机密计算的未来
At-Rest 状态下,一般会把数据存放在硬盘、闪存或其他的存储设备中。保护 At-Rest 状态的数据有很多方法,比如对文件加密后再存放或者对存储设备加密。
In-Transit 是指通过公网或私网把数据从一个地方传输到其他地方,用户可以在传输之前对文件加密或者采用安全的传输协议保证数据在传输中的安全,比如HTTPS、SSL、TLS、FTPS 等。
In-Use 是指正在使用的数据。即便数据在传输过程中是被加密的,但只有把数据解密后才能进行计算和使用。也就意味着,如果数据在使用时没有被保护的话,仍然有数据泄露和被篡改的风险。
机密计算指使用基于硬件的可信执行环境(Trusted Execution Environment,TEE)对使用中的数据提供保护。 通过使用机密计算,我们现在能够针对“使用中”的数据提供保护。
机密计算的核心功能有:
保护 In-Use 数据的机密性。未经授权的实体(主机上的应用程序、主机操作系统和Hypervisor、系统管理员或对硬件具有物理访问权限的任何其他人。)无法查看在TEE中使用的数据,内存中的数据是被加密的,即便被攻击者窃取到内存数据也不会泄露数据。 保护 In-Use 数据的完整性。防止未经授权的实体篡改正在处理中的数据,度量值保证了数据和代码的完整性,使用中有任何数据或代码的改动都会引起度量值的变化。 可证明性。通常 TEE 可以提供其起源和当前状态的证据或度量值,以便让另一方进行验证,并决定是否信任 TEE 中运行的代码。最重要的是,此类证据是由硬件签名,并且制造商能够提供证明,因此验证证据的一方就可以在一定程度上保证证据是可靠的,而不是由恶意软件或其他未经授权的实体生成的。
目前机密计算目前正处于百花齐发和百家争鸣的阶段,市场和商业化潜力非常巨大。但机密计算在云原生场景中还有一些不足:
3、服务提供商提供的技术方案相对单一。现在很多服务提供商都提供了机密计算的技术方案,但方案总体来说比较单一,并不能完全满足用户上云的需求。 比如 Google 的 Asylo 和 Azure 的 OpenEnclave,他们是在 Intel® SGX SDK 的基础上做了封装,以降低用户使用机密计算技术的成本。但这仍然需要用户掌握 Intel® SGX 的开发技能,对用户而言仍然是有学习门槛的。 再比如 Occlum、GraphaneSGX 等 LibOS 技术,他们的目的是让用户在不改动代码或做改动很少的代码就能让应用运行在 Enclave中。对用户而言不必再去学习复杂的机密计算的开发技术,但这只是解决了用户开发的问题,但仍然没有解决在容器中运行机密计算应用的问题。
总之,目前已有的机密计算技术方案存在以上困境,不能够完全满足用户不同场景的安全需求。
为了解决以上问题,Inclavare Containers 提供了首个面向机密计算场景的开源容器运行时,把机密计算技术和容器技术完美地结合在一起,其价值可概括为三点:
抹平机密计算的高使用门槛,为用户提供与普通容器一致的使用体感。 基于处理器提供的多种硬件安全技术,提供对多种 Enclave 形态的支持,为用户在安全和成本之间提供更多的选择和灵活性。 加速基于零信任模型的机密计算云基础设施的构建。
轻松将机密应用带入云原生。
在基于硬件的 TEE 中运行修改/未修改的应用程序(取决于 Enclave Runtime)。 为应用的数据和代码提供机密性、完整性和可证明性。
如下图所示,Inclavare Containers 中包含多个组件,这些组件可以利用基于硬件支持的 Enclave 技术使可信应用运行在容器中。包含的组件有 rune、shim-rune、Enclave Runtime等。
rune:rune 是一个命令行工具,用于根据 OCI 规范在容器中生成和运行 Enclave。rune 是在 runc 代码基础上开发的,既可以运行普通 runc 容器也可以运行 Enclave 容器;rune已经写入 OCI 运行时实现列表:
https://github.com/opencontainers/runtimespec/blob/master/implementations.md。
shim-rune:为容器运行时 rune 提供的 shim,主要负责管理容器的生命周期、把普通镜像转换成 TEE 镜像; 管理容器的生命周期,与 rune 配合完成容器的创建、启动、停止、删除等操作。 Enclave Runtime:负责在 Enclave 内加载和运行受信任和受保护的应用程序。rune 和 Enclave Runtime 之间的接口是 Enclave Runtime PAL API,它允许通过定义良好的函数接口来调用 Enclave Runtime。机密计算应用通过这个接口与云原生生态系统进行交互。
此外,您可以使用您喜欢的任何编程语言和 SDK(例如英特尔 SGX SDK)编写自己的Enclave Runtime,只要它实现了 Enclave Runtime PAL API。
Inclavare Contianers主要有以下特点:
Docker 集群
{
"runtimes": {
"rune": {
"path": "/usr/local/bin/rune",
"runtimeArgs": []
}
}
}
1、用户开发机密应用。用户不需要掌握机密计算的知识,Occlum 提供了工具可以把普通应用转换为机密应用。需要注意的是:Occlum 有一些使用限制,详情请查阅文档:https://github.com/occlum/occlum。
无法动态管理和调度 EPC。
容器编排能力弱,没有 Kubernetes 面向终态设计的容器管理方式。
为此,Inclavare Containers 提供了 shim-rune 用于在云上 Kubernetes 机密计算集群中创建 Enclave 容器。在这种场景下,shim-rune 和 rune 可以组成一个 enclave 容器化栈,所以在构建容器镜像时不需要安装 Enclave Runtime,提供和普通容器一样的体验。
[plugins.cri.containerd]
...
[plugins.cri.containerd.runtimes.rune]
runtime_type = "io.containerd.rune.v2"
然后重启 containerd 即可。
如上图所示,在云上 Kubernetes 机密计算集群中创建 Occlum 机密容器的工作流程如下:
1、kubelet 向containerd 发起 CRI(Container Runtime Interface)请求,比如请求创建一个 Pod。
2、Containerd 中有一个 cri-containerd 的插件实现了 CRI 接口,Containerd 接收到请求后,把请求转给 shim-rune。
3、shim-rune 既可以创建 runc 容器也可以创建 rune 容器。在创建 runc 和 rune 容器的处理流程也有差异:
创建 runc 容器:与创建普通 runc 容器过程完全一样,比如 Pod 的 pause 容器就是 runc 容器。
创建 rune 容器:利用 LibOS 把普通镜像转换成 TEE 镜像,rune 会在容器内创建 Enclave 并把应用运行在 Enclave 中。
创建 runc 容器:与 runc 创建 runc 容器的流程完全一样。
创建 Enclave 容器:每种 Enclave Runtime 都会提供一个实现了 Enclave Runtime PAL API 的动态库 liberpal.so 。rune 先在 Host 上加载 liberpal.so,然后按照 runc 的方式创建容器,并在容器内启动 1 号进程 init-runelet ,init-runelet 接收到 rune 的请求后加载并创建 Enclave。Encalve 包含一般包含两部分:LibOS 和 App/语言 Runtime。LibOS 是 Enclave Runtime 提供的用于支撑应用运行的操作系统库,App/语言 Runtime 是应用本身,有的语言也会有语言 Runtime,比如运行 OpenJDK 11 应用需要 JVM。
EAA的主要组件有:
Enclave-TLS
机密容器
机密容器扮演证明者的角色。响应来自 Inclavared 的请求,并返回机密容器的attestation evidence(mrenclave 值和 mrsigner 值)。
Inclavared
Inclavared 负责转发下游的机密容器和上游的客户端验证者程序 Shelter 之间的流量,通信过程受到经过证明的 Enclave-TLS 通道的保护。
Shelter
Shelter 作为部署在云下的远程证明验证者,记录 Enclave 运行时的启动度量,然后基于 Enclave-TLS 建立可信信道 Inclavared 进行通信。最后,Shelter 对Enclave 运行时的度量值进行验证,以便租户能够明确知道他们的工作负载是否在真正的 TEE 环境中加载。
具体的工作流程如下:
当用户想验证工作负载是否运行在可信平台上时,可以启动 Shelter 工具发送验证请求给 Inclavared。
1、当接收到 Shelter 的验证请求之后,Inclavared 将请求发送给机密容器,Inclavared 和机密容器分别产生带有 SGX 远程认证信息的 TLS 证书。
2、Inclavared 和 Shelter 之间基于 Enclave-TLS 建立经过证明的安全信道。
五大技术创新
Inclavare Containers 提供了兼容 OCI Runtime 的容器运行时,用户可根据需要在 Docker 集群或者 Kubernetes 集群中运行 Enclave 容器。通过 Enclave Runtime 抹去了用户使用机密计算技术的门槛,在 Kubernetes 集群中更是保持了与普通容器一致的使用体验。通过 Encalve Runtime PAL API 可以提供多种 Runtime 实现,为用户提供更多 Enclave 选择,在安全和成本之间提供更多的选择和灵活性。
将机密计算硬件技术(如Intel® SGX)与成熟的容器生态结合,兼容 OCI Runtime 和 OCI 镜像标准,实现了机密容器形态。用户的敏感应用以机密容器的形式部署和运行,并保持与使用普通容器相同的使用体感。
通过构建通用且跨平台的远程证明安全架构,能够向用户证明其敏感的工作负载是运行在真实可信的基于硬件的可信执行环境中的。
通过标准的 API 规范来对接各种形态的 Enclave Runtime,在简化特定的Enclave Runtime 对接云原生生态的同时,也为用户提供了更多的技术选择。
移除对云服务提供商的信任,Inclavare Containers 的安全威胁模型假设用户无需信任云服务提供商,即用户工作负载的安全性不再依赖云服务提供商控制的特权组件。
Inclavare Containers 可以部署在任何公共云 Kubernetes 平台中,实现了统一的机密容器部署方式。
作为业界首个面向机密计算场景的开源容器运行时,Inclavare Containers 为ACK-TEE(ACK-Trusted Execution Environment)提供了使用机密容器的最佳实践。ACK-TEE 依托 Inclavare Containers,能够无缝地运行用户制作的机密容器镜像,并保持与普通容器相同的使用体感。ACK-TEE 可被广泛应用于各种隐私计算的场景,包括:区块链、安全多方计算、密钥管理、基因计算、金融安全、AI、数据租赁。
未来,Inclavare Containers将继续为开源社区提供面向云原生场景的机密计算容器技术、机密计算集群技术和安全架构,并成为该领域的事实标准。在不断深化实施零信任模型原则的同时,不断提升开发者和用户的使用体验,并最终完全消除与运行普通容器在使用体感上的差别。同时,Inclavare Containers 将积极参与共建云原生社区,深度联手上下游伙伴一同推动云原生安全技术不断进步,为打造更安全的云原生环境不懈努力。
了解更多
3、项目钉钉群:33054182。
1.InfoQ专访阿里云马涛:一款兼容CentOS生态的双内核开源操作系统长什么样?
5.国内首家商密OS重磅发布,Anolis商密版OS为用户数据保驾护航