本文已超过一年。较旧的文章可能包含过时内容。请检查页面信息自发布以来是否已变得不正确。

机密 Kubernetes:使用机密虚拟机和安全飞地提升集群安全性

在这篇博文中,我们将介绍机密计算 (Confidential Computing, CC) 的概念,以改善任何计算环境的安全和隐私属性。此外,我们将展示云原生生态系统,特别是 Kubernetes,如何从这一新的计算范式中受益。

机密计算是一个先前已在云原生领域中引入的概念。机密计算联盟 (Confidential Computing Consortium, CCC) 是 Linux 基金会下的一个项目社区,他们已经在致力于定义和启用机密计算。在白皮书中,他们提供了使用机密计算的强大动机:

数据存在于三种状态:传输中、静止时和使用中。……保护所有状态下的敏感数据比以往任何时候都更加重要。密码学现在被广泛部署以提供数据机密性(阻止未经授权的查看)和数据完整性(阻止或检测未经授权的更改)。虽然保护传输中和静止时数据的技术现已广泛部署,但第三种状态——保护使用中数据——是新的前沿领域。

机密计算主要旨在通过引入硬件强制的可信执行环境 (Trusted Execution Environment, TEE) 来解决保护使用中数据的问题。

可信执行环境

十多年来,可信执行环境 (TEEs) 已以硬件安全模块 (HSMs) 和可信平台模块 (TPMs) 的形式在商用计算硬件中可用。这些技术为受保护的计算提供了可信环境。它们可以存储高度敏感的加密密钥,并执行签名或加密数据等关键加密操作。

TPMs 为低成本而优化,使其可以集成到主板中,并作为系统的物理信任根。为了保持低成本,TPMs 的范围有限,即它们只提供少量密钥的存储空间,并且只能执行一小部分加密操作。

相比之下,HSMs 为高性能而优化,为更多密钥提供安全存储,并提供高级物理攻击检测机制。此外,高端 HSMs 可以编程,从而可以编译和执行任意代码。缺点是它们非常昂贵。AWS 的托管 CloudHSM 成本约为每小时 1.50 美元或每年约 13,500 美元。

近些年来,一种新型 TEE 越来越受欢迎。诸如AMD SEVIntel SGXIntel TDX 之类的技术提供了与用户空间紧密集成的 TEE。这些 TEE 不是支持特定用例的低功耗或高性能设备,而是屏蔽普通进程或虚拟机,并且可以做到相对较低的开销。这些技术各有不同的设计目标、优势和局限性,并且在各种环境中可用,包括消费级笔记本电脑、服务器和移动设备。

此外,我们还应提及针对智能手机、平板电脑和智能电视等嵌入式设备进行优化的ARM TrustZone,以及仅在亚马逊云服务 (Amazon Web Services) 上可用的AWS Nitro Enclaves,后者与 Intel 和 AMD 基于 CPU 的解决方案相比,具有不同的威胁模型。

IBM Secure Execution for Linux 允许您在 IBM Z 系列硬件的可信执行环境中将 Kubernetes 集群的节点作为 KVM 访客运行。您可以使用这种硬件增强的虚拟机隔离来在集群中的租户之间提供强隔离,并带有关于(虚拟)节点完整性的硬件证明。

安全属性和特性集

在以下各节中,我们将回顾这些新技术带来的安全属性和附加功能。并非所有解决方案都提供所有属性;我们将在各自的部分中进一步详细讨论每项技术。

机密性属性确保信息在 TEE 中使用时无法被查看。这为我们提供了保护使用中数据这一非常需要的功能。根据使用的特定 TEE,代码和数据都可以免受外部查看者的影响。TEE 架构的差异以及它们在云原生环境中的使用方式是在设计敏感工作负载的端到端安全时需要考虑的重要因素,特别是要考虑最小化可信计算基 (Trusted Computing Base, TCB)。CCC 最近发布了通用词汇表和支持材料,有助于解释不同 TEE 架构下的机密性边界如何划定,以及这如何影响 TCB 的大小。

机密性是一个很棒的特性,但攻击者仍然可以操纵或注入任意代码和数据供 TEE 执行,从而轻易泄露关键信息。完整性向 TEE 所有者保证,在运行关键计算时,代码和数据都不会被篡改。

可用性是信息安全背景下经常讨论的基本属性。然而,这个属性超出了大多数 TEE 的范围。通常,它们可以被更高层次的抽象控制(关闭、重启等)。这可以是 CPU 本身、管理程序或内核。这样做是为了保证整个系统的可用性,而不是 TEE 本身。在云中运行时,可用性通常由云提供商通过服务水平协议 (SLAs) 来保证,而不是通过加密强制执行。

机密性和完整性本身在某些情况下才有用。例如,考虑一个在远程云中运行的 TEE。你如何知道这个 TEE 是真实的并且正在运行你想要的软件?它可能是一个在你发送数据过去后立即窃取你数据的冒名顶替者。这个基本问题通过可证明性来解决。证明允许我们基于硬件本身颁发的加密证书来验证 TEE 的身份、机密性和完整性。这个特性也可以以远程证明的形式提供给机密计算硬件之外的客户端。

TEE 可以持有和处理早于或晚于可信环境存在的信息。这可能意味着跨越重启、不同版本或平台迁移。因此,可恢复性是一项重要特性。数据和 TEE 的状态在写入持久存储之前需要进行密封,以保持机密性和完整性保证。对这些密封数据的访问需要明确定义。在大多数情况下,解密封与 TEE 的身份绑定。因此,确保恢复只能在相同的机密环境中进行。

这不必限制整个系统的灵活性。AMD SEV-SNP 的迁移代理 (MA) 允许用户将机密虚拟机迁移到不同的宿主机系统,同时保持 TEE 的安全属性不变。

特性比较

本文的这些部分将更深入地探讨具体的实现,比较支持的特性并分析它们的安全性。

AMD SEV

AMD 的安全加密虚拟化 (SEV) 技术是一组旨在增强 AMD 服务器 CPU 上虚拟机安全性的特性。SEV 使用唯一密钥透明地加密每个虚拟机的内存。SEV 还可以计算内存内容的签名,作为初始访客内存未被篡改的证明发送给虚拟机的所有者。

第二代 SEV,称为加密状态或 SEV-ES,通过在上下文切换时加密所有 CPU 寄存器内容来提供对管理程序的额外保护。

第三代 SEV,安全嵌套分页或 SEV-SNP,旨在防止基于软件的完整性攻击,并降低与受损内存完整性相关的风险。SEV-SNP 完整性的基本原则是,如果虚拟机可以读取私有(加密)内存页,它必须总是读取它最后写入的值。

此外,通过允许访客动态获取远程证明声明,SNP 增强了 SEV 的远程证明能力。

AMD SEV 是一步步实现的。每一代新的 CPU 都增加了新的特性和改进。Linux 社区将这些特性作为 KVM 管理程序的一部分以及宿主和访客内核的功能提供。第一个 SEV 特性在 2016 年进行了讨论和实现 - 参见 2016 年 Usenix 安全研讨会上的AMD x86 内存加密技术。最新的重大添加是Linux 5.19 中的 SEV-SNP 访客支持

基于 AMD SEV-SNP 的机密虚拟机自 2022 年 7 月起在 Microsoft Azure 中可用。类似地,Google Cloud Platform (GCP) 提供基于 AMD SEV-ES 的机密虚拟机

Intel SGX

Intel 的软件防护扩展 (Software Guard Extensions, SGX) 自 2015 年起可用,并随 Skylake 架构一同推出。

SGX 是一组指令集,允许用户创建一个受保护和隔离的进程,称为飞地 (enclave)。它提供了一个反向沙箱,保护飞地免受操作系统、固件和任何其他特权执行上下文的影响。

无论当前的特权级别和 CPU 模式如何,飞地内存都不能从飞地外部读取或写入。调用飞地函数的唯一方法是通过一条执行多项保护检查的新指令。它的内存是加密的。即使窃听内存或将 DRAM 模块连接到另一个系统,也只能得到加密的数据。内存加密密钥在每次通电时随机更改。密钥存储在 CPU 内部,无法访问。

由于飞地是进程隔离的,操作系统的库不能直接使用;因此,需要 SGX 飞地 SDK 来编译 SGX 程序。这也意味着应用程序需要设计和实现,以考虑可信/不可信的隔离边界。另一方面,构建的应用程序具有非常小的 TCB。

一种新兴的方法可以轻松过渡到基于进程的机密计算,并避免构建自定义应用程序的需求,那就是利用库操作系统 (library OSes)。这些操作系统有助于在 SGX 飞地内运行原生、未修改的 Linux 应用程序。库操作系统拦截应用程序对宿主操作系统的所有请求,并在应用程序不知道它正在运行 TEE 的情况下安全地处理这些请求。

第三代 Xeon CPU(也称 Ice Lake Server - "ICX")及后续几代开始使用一种名为全内存加密 - 多密钥 (Total Memory Encryption - Multi-Key, TME-MK) 的技术,该技术使用 AES-XTS,取代了消费级和 Xeon E CPU 使用的内存加密引擎。这增加了可能的飞地页缓存 (EPC) 大小(高达 512GB/CPU)并提高了性能。关于多插槽平台上 SGX 的更多信息可以在白皮书中找到。

Intel 提供支持的平台列表

SGX 可在Azure阿里云IBM 等多个平台上使用。

Intel TDX

与 Intel SGX 旨在保护单个进程的上下文不同,Intel 的可信域扩展 (Trusted Domain Extensions, TDX) 保护整个虚拟机,因此与 AMD SEV 最为接近。

与 SEV-SNP 一样,对 TDX 的访客支持已合并到 Linux Kernel 5.19 中。然而,硬件支持将在 2023 年随 Sapphire Rapids 一同到来:阿里云提供邀请预览实例,并且 Azure 已宣布其 TDX 预览机会。

开销分析

机密计算技术通过强大的隔离和增强的安全性为客户数据和工作负载带来的好处并非没有代价。量化这种影响具有挑战性,并且取决于许多因素:TEE 技术、基准测试、指标和工作负载类型都对预期的性能开销产生巨大影响。

基于 Intel SGX 的 TEE 很难进行基准测试,正如不同论文展示那样。选择的 SDK/库操作系统、应用程序本身以及资源需求(特别是大内存需求)都对性能产生巨大影响。如果应用程序非常适合在飞地内部运行,则可以预期个位数的百分比开销。

基于 AMD SEV-SNP 的机密虚拟机不需要对执行程序和操作系统进行任何更改,因此基准测试要容易得多。Azure 和 AMD 的一项基准测试显示,SEV-SNP 虚拟机的开销低于 10%,有时甚至低至 2%。

尽管存在性能开销,但它应该足够低,以支持实际工作负载在这些受保护的环境中运行,并提高我们数据的安全性和隐私性。

机密计算与 FHE、ZKP 和 MPC 的比较

全同态加密 (FHE)、零知识证明/协议 (ZKP) 和多方计算 (MPC) 都属于加密或密码协议的一种形式,它们提供与机密计算类似的安全保障,但不需要硬件支持。

全(也包括部分和一些)同态加密允许在加密数据上执行计算,例如加法或乘法。这提供了数据在使用中的加密特性,但不像机密计算那样提供完整性保护或认证。因此,这两项技术可以相互补充

零知识证明或协议是一种隐私保护技术 (PPT),它允许一方证明其数据的相关事实,而无需透露关于该数据的任何其他信息。ZKP 可以用来代替或补充机密计算,以保护相关方及其数据的隐私。类似地,多方计算允许多方协作进行计算,即各方将其数据贡献给结果,同时不将其泄露给任何其他方。

机密计算的使用案例

所介绍的机密计算平台表明,隔离单个容器进程,从而最小化可信计算基,以及隔离“完整虚拟机”都是可能的。这已经催生了许多有趣且安全的项目。

机密容器

机密容器 (CoCo) 是一个 CNCF 沙箱项目,它将 Kubernetes Pod 隔离在机密虚拟机内部。

CoCo 可以通过操作员(operator)安装在 Kubernetes 集群上。该操作员将创建一组运行时类,这些类可用于在多个不同平台(包括 AMD SEV、Intel TDX、用于 IBM Z 的 Secure Execution 和 Intel SGX)的 enclave 中部署 Pod。

CoCo 通常与经过签名和/或加密的容器镜像一起使用,这些镜像在 enclave 内部被拉取、验证和解密。密钥(例如镜像解密密钥)由一个受信任的密钥代理服务有条件地提供给 enclave,该服务在发布任何敏感信息之前会验证 TEE 的硬件证明。

CoCo 有多种部署模型。由于 Kubernetes 控制平面位于 TCB 之外,CoCo 适用于托管环境。CoCo 可以在不支持嵌套的虚拟环境中运行,借助一个 API 适配器在云中启动 Pod VM。CoCo 也可以在裸金属上运行,即使在多租户环境中也能提供强大的隔离。

托管式机密 Kubernetes

AzureGCP 都支持在其托管式 Kubernetes 服务中使用机密虚拟机作为工作节点。

两项服务都旨在通过为容器工作负载启用内存加密来提供更好的工作负载保护和安全保障。然而,它们并不寻求将集群或工作负载完全隔离于服务提供商或基础设施之外。具体来说,它们不提供专用的机密控制平面,也不为机密集群/节点暴露认证能力。

Azure 还在其托管式 Kubernetes 服务中启用了机密容器。它们支持基于Intel SGX enclaveAMD SEV 虚拟机的创建

Constellation

Constellation 是一个 Kubernetes 引擎,旨在提供最佳的数据安全性。Constellation 将您的整个 Kubernetes 集群包裹在一个单一的机密上下文中,使其免受底层云基础设施的影响。内部的一切始终处于加密状态,包括运行时内存中的数据。它屏蔽了工作节点和控制平面节点。此外,它已经与流行的 CNCF 软件集成,例如用于安全网络的 Cilium,并提供了扩展的 CSI 驱动程序以安全地写入数据。

Occlum 和 Gramine

OcclumGramine 是开源库操作系统 (libOS) 项目的示例,它们可用于在 SGX enclave 中运行未经修改的应用程序。它们是 CCC 下的成员项目,但由公司维护的类似项目和产品也存在。通过这些 libOS 项目,可以将现有的容器化应用程序轻松转换为支持机密计算的容器。许多精选的预构建容器也可用。

我们今天在哪里?供应商、限制和 FOSS 生态

正如我们希望您从前几节中看到的那样,机密计算是增强安全性的一种强大的新概念,但我们仍处于(早期)采用阶段。新的产品正在涌现,以利用其独特的特性。

Google 和 Microsoft 是首批提供机密计算服务的主要云提供商,这些服务可以在受保护的边界内运行未经修改的应用程序。然而,这些服务目前仅限于计算方面,而机密数据库、集群网络和负载均衡器的端到端解决方案则需要自行管理。

这些技术提供了将最敏感的工作负载引入云端的机会,并使它们能够利用 CNCF 生态中的所有工具。

行动号召

如果您目前正在开发一个因法律要求而在公共云中难以运行的高安全性产品,或者正在寻求将您的云原生项目的隐私和安全性提升到新的水平:请联系我们重点介绍的所有优秀项目!每个人都渴望改善我们生态系统的安全性,您可以在这一旅程中发挥至关重要的作用。