本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
机密 Kubernetes:使用机密虚拟机和飞地来提高你的集群安全性
在本篇博文中,我们将介绍机密计算(Confidential Computing,CC)的概念,以提高任何计算环境的安全性和隐私性。此外,我们还将展示云原生生态系统,特别是 Kubernetes,如何从这种新的计算范式中受益。
机密计算是之前在云原生世界中引入的一个概念。机密计算联盟(Confidential Computing Consortium,CCC)是 Linux 基金会下的一个项目社区,已经致力于定义和实现机密计算。在其白皮书中,他们为使用机密计算提供了很好的动机:
数据存在三种状态:传输中、静止时和使用中。……保护敏感数据的所有状态比以往任何时候都更加关键。密码学现已普遍部署,以提供数据机密性(防止未经授权的查看)和数据完整性(防止或检测未经授权的更改)。虽然保护传输中和静止时数据的技术现已普遍部署,但第三种状态——保护使用中的数据——是新的前沿领域。
机密计算主要旨在通过引入硬件强制的可信执行环境(Trusted Execution Environment,TEE)来解决**保护使用中数据**的问题。
可信执行环境
十多年来,可信执行环境(TEE)已在商业计算硬件中以硬件安全模块(HSM)和可信平台模块(TPM)的形式存在。这些技术为受保护的计算提供了可信环境。它们可以存储高度敏感的加密密钥,并执行关键的加密操作,如签名或加密数据。
TPM 针对低成本进行了优化,使其能够集成到主板中,并作为系统的物理信任根。为了保持低成本,TPM 的范围有限,即它们仅为少数密钥提供存储,并且仅能进行一小部分加密操作。
相比之下,HSM 针对高性能进行了优化,为更多的密钥提供安全存储,并提供先进的物理攻击检测机制。此外,高端 HSM 可以编程,以便编译和执行任意代码。缺点是它们非常昂贵。AWS 的托管 CloudHSM 成本约为每小时 1.50 美元或每年约 13,500 美元。
近年来,一种新型的 TEE 越来越受欢迎。像 AMD SEV、Intel SGX 和 Intel TDX 这样的技术提供了与用户空间紧密集成的 TEE。这些 TEE 不是支持特定用例的低功耗或高性能设备,而是保护正常的进程或虚拟机,并且开销相对较低。这些技术各有不同的设计目标、优点和局限性,并且在不同的环境(包括消费级笔记本电脑、服务器和移动设备)中可用。
此外,我们还应提及 ARM TrustZone,它针对智能手机、平板电脑和智能电视等嵌入式设备进行了优化,以及 AWS Nitro Enclaves,它仅在 Amazon Web Services 上可用,并且与 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 本身的可用性。在云中运行时,可用性通常由云提供商以服务水平协议(SLA)的形式保证,并且不能通过加密方式强制执行。
机密性和完整性本身在某些情况下作用有限。例如,考虑一个在远程云中运行的 TEE。你如何知道这个 TEE 是真实的,并且正在运行你预期的软件?它可能是一个冒名顶替者,一旦你发送数据过去,它就会窃取你的数据。这个问题由**可证明性**来解决。证明允许我们基于硬件本身颁发的加密证书来验证 TEE 的身份、机密性和完整性。这个功能也可以通过远程证明的形式提供给机密计算硬件之外的客户端。
TEE 可以保存和处理在可信环境之前或之后存在的信息。这可能意味着跨越重启、不同版本或平台迁移。因此,**可恢复性**是一个重要特性。在写入持久存储之前,TEE 的数据和状态需要被封装(sealed),以保持机密性和完整性保证。对这些封装数据的访问需要有明确的定义。在大多数情况下,解封(unsealing)与 TEE 的身份绑定。因此,确保恢复只能在相同的机密上下文中发生。
这不必限制整个系统的灵活性。AMD SEV-SNP 的迁移代理(MA)允许用户将机密虚拟机迁移到不同的主机系统,同时保持 TEE 的安全属性完整。
功能比较
本文的这些部分将更深入地探讨具体实现,比较支持的功能并分析其安全属性。
AMD SEV
AMD 的安全加密虚拟化(SEV)技术是一系列旨在增强 AMD 服务器 CPU 上虚拟机安全性的功能。SEV 使用唯一的密钥透明地加密每个虚拟机的内存。SEV 还可以计算内存内容的签名,该签名可以发送给虚拟机的所有者,作为初始客户机内存未被篡改的证明。
第二代 SEV,称为加密状态(Encrypted State)或 SEV-ES,通过在发生上下文切换时加密所有 CPU 寄存器内容,提供了额外的保护,以防范虚拟机监控程序。
第三代 SEV,安全嵌套分页(Secure Nested Paging)或 SEV-SNP,旨在防止基于软件的完整性攻击,并降低与内存完整性受损相关的风险。SEV-SNP 完整性的基本原则是,如果虚拟机可以读取一个私有(加密)内存页,它必须总是读取它最后写入的值。
此外,通过允许客户机动态获取远程证明声明,SNP 增强了 SEV 的远程证明能力。
AMD SEV 是逐步实现的。每个新 CPU 代都增加了新功能和改进。Linux 社区将这些功能作为 KVM 虚拟机监控程序的一部分以及为主机和客户机内核提供。最初的 SEV 功能于 2016 年被讨论和实现——参见 2016 年 Usenix 安全研讨会的《AMD x86 内存加密技术》。最新的重大补充是 Linux 5.19 中的 SEV-SNP 客户机支持。
自 2022 年 7 月起,基于 AMD SEV-SNP 的机密虚拟机已在 Microsoft Azure 中提供。同样,Google Cloud Platform (GCP) 也提供基于 AMD SEV-ES 的机密虚拟机。
Intel SGX
Intel 的软件防护扩展(Software Guard Extensions)自 2015 年起推出,并随 Skylake 架构一同引入。
SGX 是一套指令集,使用户能够创建一个受保护和隔离的进程,称为*机密计算环境*(enclave)。它提供了一个反向沙盒,保护机密计算环境免受操作系统、固件和任何其他特权执行上下文的影响。
无论当前的特权级别和 CPU 模式如何,机密计算环境的内存都不能从外部读取或写入。调用机密计算环境函数的唯一方法是通过一条新指令,该指令会执行多项保护检查。其内存是加密的。窃听内存或将 DRAM 模块连接到另一个系统只会得到加密的数据。内存加密密钥在每次上电周期都会随机更改。该密钥存储在 CPU 内部,无法访问。
由于机密计算环境是进程隔离的,操作系统的库不能直接使用;因此,需要 SGX enclave SDK 来为 SGX 编译程序。这也意味着应用程序需要经过设计和实现,以考虑可信/不可信的隔离边界。另一方面,应用程序的构建具有非常小的 TCB。
一种新兴的方法是利用库操作系统(library OSes),以便轻松过渡到基于进程的机密计算,并避免构建自定义应用程序的需要。这些操作系统有助于在 SGX 机密计算环境中运行原生的、未经修改的 Linux 应用程序。库操作系统会拦截应用程序对主机操作系统的所有请求,并安全地处理它们,而应用程序并不知道自己正在一个 TEE 中运行。
第三代至强 CPU(即 Ice Lake Server - "ICX")及后续几代产品改用一种名为全内存加密-多密钥(Total Memory Encryption - Multi-Key)(TME-MK)的技术,该技术使用 AES-XTS,从而摒弃了消费级和至强 E 系列 CPU 所使用的内存加密引擎。这增加了可能的机密计算环境页缓存(EPC)大小(最高可达 512GB/CPU)并提升了性能。有关多插槽平台上 SGX 的更多信息,请参阅白皮书。
Intel 提供了一份支持的平台列表。
SGX 在 Azure、阿里云、IBM 等多家云服务商中均有提供。
Intel TDX
Intel SGX 旨在保护单个进程的上下文,而 Intel 的可信域扩展(Trusted Domain Extensions)则保护整个虚拟机,因此与 AMD SEV 最为相似。
与 SEV-SNP 一样,TDX 的客户机支持已在 Linux 内核 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 可以替代或补充机密计算,以保护相关方及其数据的隐私。同样,多方计算使多方能够共同进行计算,即每一方都将其数据提供给结果,而不会泄露给任何其他方。
机密计算的用例
所介绍的机密计算平台表明,隔离单个容器进程从而最小化可信计算基,以及隔离“完整虚拟机”都是可能的。这已经催生了许多有趣且安全的项目。
机密容器
机密容器(Confidential Containers, CoCo)是一个 CNCF 沙箱项目,它将 Kubernetes Pod 隔离在机密虚拟机内部。
CoCo 可以通过 Operator 安装在 Kubernetes 集群上。该 Operator 将创建一组运行时类,可用于在多个不同平台(包括 AMD SEV、Intel TDX、IBM Z 的 Secure Execution 和 Intel SGX)的机密计算环境中部署 Pod。
CoCo 通常与签名和/或加密的容器镜像一起使用,这些镜像在机密计算环境内部被拉取、验证和解密。诸如镜像解密密钥之类的 Secret,由一个可信的密钥代理服务(Key Broker Service)有条件地提供给机密计算环境,该服务在释放任何敏感信息之前会验证 TEE 的硬件证据。
CoCo 有多种部署模型。由于 Kubernetes 控制平面在 TCB 之外,CoCo 适用于托管环境。借助 API 适配器,CoCo 可以在不支持嵌套的虚拟环境中运行,该适配器会在云中启动 Pod 虚拟机。CoCo 也可以在裸机上运行,即使在多租户环境中也能提供强大的隔离。
托管的机密 Kubernetes
Azure 和 GCP 都支持使用机密虚拟机作为其托管 Kubernetes 产品的 Worker 节点。
这两项服务都旨在通过为容器工作负载启用内存加密来提供更好的工作负载保护和安全保证。然而,它们并不寻求将集群或工作负载与服务提供商或基础设施完全隔离。具体来说,它们不提供专用的机密控制平面,也不为机密集群/节点提供证明能力。
Azure 还在其托管的 Kubernetes 产品中启用了机密容器。它们支持基于 Intel SGX 机密计算环境和基于 AMD SEV 的虚拟机的创建。
Constellation
Constellation 是一个 Kubernetes 引擎,旨在提供最佳的数据安全性。Constellation 将你的整个 Kubernetes 集群包装在一个单一的机密上下文中,与底层的云基础设施隔离开来。内部的一切都始终被加密,包括运行时的内存。它保护了 Worker 节点和控制平面节点。此外,它已经与流行的 CNCF 软件(如 Cilium)集成以实现安全网络,并提供了扩展的 CSI 驱动程序以安全地写入数据。
Occlum 和 Gramine
Occlum 和 Gramine 是开源库操作系统项目的例子,可用于在 SGX 机密计算环境中运行未经修改的应用程序。它们是 CCC 下的成员项目,但也有由公司维护的类似项目和产品。借助这些库操作系统项目,现有的容器化应用程序可以轻松转换为支持机密计算的容器。许多精选的预构建容器也已可用。
我们今天处于什么位置?供应商、局限性和开源软件现状
正如我们希望您从前面部分所看到的,机密计算是提高安全性的一个强大的新概念,但我们仍处于(早期)采用阶段。新的产品正在涌现,以利用其独特的属性。
Google 和 Microsoft 是首批提供机密产品的主要云提供商,这些产品可以在受保护的边界内运行未经修改的应用程序。尽管如此,这些产品仅限于计算,而针对机密数据库、集群网络和负载均衡器的端到端解决方案则需要自行管理。
这些技术为将最敏感的工作负载引入云端提供了机会,并使它们能够利用 CNCF 生态系统中的所有工具。
行动号召
如果您目前正在开发一个由于法律要求而难以在公共云中运行的高安全性产品,或者正在寻求将您的云原生项目的隐私和安全性提升到一个新的水平:请联系我们重点介绍的所有优秀项目!每个人都热衷于提高我们生态系统的安全性,您可以在这一旅程中发挥至关重要的作用。