作者:Fabian Kammel (Edgeless Systems), Mikko Ylinen (Intel), Tobin Feldman-Fitzthum (IBM)
在这篇博文中,我们将介绍机密计算(Confidential Computing,CC)的概念,以提升任何计算环境的安全性和隐私性能。此外,我们将展示云原生生态系统,特别是Kubernetes,如何从这种新的计算范式中受益。
机密计算是先前在云原生领域引入的一个概念。机密计算协会(Confidential Computing Consortium,CCC)是Linux Foundation的一个项目社区,旨在定义和推动机密计算。在白皮书中,他们提出了使用机密计算的强烈动机:
数据存在于三种状态:传输中、静态存储和使用中。保护敏感数据在所有状态下的安全性比以往更加重要。密码学现在通常用于提供数据机密性(防止未经授权的查看)和数据完整性(防止或检测未经授权的更改)。尽管保护传输和静态存储中的数据的技术现在已经普遍部署,但保护数据使用中的第三种状态仍是新的挑战。
机密计算的主要目标是通过引入硬件强制执行的可信执行环境(Trusted Execution Environment,TEE)来解决保护数据使用中的问题。
可信执行环境
在过去的十多年中,可信执行环境(Trusted Execution Environments,简称TEE)已经以硬件安全模块(Hardware Security Modules,简称HSMs)和可信平台模块(Trusted Platform Modules,简称TPMs)的形式存在于商用计算硬件中。这些技术为保护计算提供了可信环境。它们可以存储高度敏感的加密密钥,并执行重要的加密操作,如数据签名或加密。
TPM针对低成本进行了优化,可以集成到主板中,并充当系统的物理信任根。为了保持成本低廉,TPM的范围有限,即它只提供少量密钥的存储,并且只能执行少量的加密操作。
相反,HSM针对高性能进行了优化,提供安全存储更多密钥,并提供先进的物理攻击检测机制。此外,高端的HSM可以编程,以便可以编译和执行任意代码。不过,它们的成本非常高。来自AWS的托管CloudHSM每小时约1.50美元,年费约13,500美元。
近年来,一种新型的TEE越来越受欢迎。像AMD SEV、Intel SGX和Intel TDX等技术提供了与用户空间紧密集成的TEE。这些TEE不同于支持特定用例的低功耗或高性能设备,它们可以对普通进程或虚拟机进行保护,并且在性能开销相对较低的情况下实现。这些技术各自具有不同的设计目标、优势和限制,并在包括消费者笔记本电脑、服务器和移动设备在内的不同环境中可用。
此外,我们还应提及ARM TrustZone,它针对嵌入式设备(如智能手机、平板电脑和智能电视)进行了优化,以及AWS Nitro Enclaves,它仅适用于亚马逊网络服务,并且与基于Intel和AMD的基于CPU的解决方案相比具有不同的威胁模型。
IBM Secure Execution for Linux允许您在IBM Z系列硬件上的受信任执行环境中将Kubernetes集群的节点作为KVM客体运行。您可以利用这种硬件增强的虚拟机隔离来在集群中的租户之间提供强大的隔离,以及有关(虚拟)节点完整性的硬件验证。
安全性能和功能集
在下面的章节中,我们将回顾这些新技术带来的安全性能和附加功能。并非所有解决方案都提供所有性能,我们将在各自的章节中详细讨论每种技术。
机密性(Confidentiality)属性确保了在TEE中使用时信息无法被查看。这为我们提供了保护数据使用的重要功能。根据使用的具体TEE,代码和数据可能会受到来自外部观察者的保护。TEE体系结构的差异以及在云原生环境中使用它们时的考虑是设计端到端安全性的重要因素,特别是在考虑最小可信计算基(TCB)的敏感工作负载时。CCC最近在共同词汇和支持材料方面进行了工作,帮助解释在不同TEE体系结构中如何界定机密性边界以及对TCB大小的影响。
机密性是一个很好的功能,但攻击者仍然可以操纵或注入TEE执行的任意代码和数据,从而轻松泄漏关键信息。完整性(Integrity)确保TEE的所有者在运行关键计算时既不能篡改代码也不能篡改数据。
可用性(Availability)是在信息安全上经常讨论的基本属性。然而,大多数TEE都不涉及此属性。通常,它们可以被某个更高级的抽象层(如CPU本身、虚拟化程序或内核)所控制(关闭、重启等)。这是为了保持整个系统的可用性,而不是TEE本身的可用性。在云环境中运行时,可用性通常由云提供商根据服务级别协议(SLA)进行保证,并且不能通过密码方式强制执行。
仅靠机密性和完整性在某些情况下并不足够。例如,考虑一个运行在远程云中的TEE。您如何知道TEE是真实的并且正在运行您预期的软件?它可能是一个冒充者,在您发送数据后立即窃取它。这个根本性问题通过可证明性(Attestability)得到解决。证明允许我们基于硬件本身颁发的加密证书验证TEE的身份、机密性和完整性。这个功能也可以以远程证明的形式提供给机密计算硬件之外的客户端。
TEE可以保存和处理超越或超越受信任环境的信息。这可能涉及重启、不同版本或平台迁移。因此,可恢复性(Recoverability)是一个重要的功能。在将保持机密性和完整性的前提下,数据和TEE的状态需要在写入持久性存储之前进行密封。对这种密封数据的访问需要明确定义。在大多数情况下,解封密封数据与TEE的身份绑定在一起。因此,确保恢复只能在相同的机密上下文中进行。
这并不限制整个系统的灵活性。AMD SEV-SNP的迁移代理(MA)允许用户将机密虚拟机迁移到不同的主机系统,同时保持TEE的安全属性不变。
功能对比
本文的这些部分将深入探讨具体的实现方式,比较支持的功能并分析它们的安全性能。
AMD SEV
AMD的安全加密虚拟化(SEV)技术是一组增强AMD服务器CPU上虚拟机安全性的功能。SEV使用唯一密钥透明地加密每个虚拟机的内存。SEV还可以计算内存内容的签名,并将其作为证明发送给虚拟机的所有者,证明初始客户机内存未被篡改。
SEV的第二代称为Encrypted State或SEV-ES,在发生上下文切换时通过加密所有CPU寄存器内容提供额外的保护,以防止来自虚拟机监控程序(hypervisor)的攻击。
SEV的第三代称为Secure Nested Paging或SEV-SNP,旨在防止基于软件的完整性攻击并降低与受损内存完整性相关的风险。SEV-SNP完整性的基本原则是,如果虚拟机可以读取私有(加密)内存页,则它必须始终读取其最后写入的值。
此外,通过允许虚拟机动态获取远程证明语句,SEV-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上提供。同样,谷歌云平台(GCP)提供基于AMD SEV-ES的机密虚拟机。
Intel SGX
英特尔的软件保护扩展(Software Guard Extensions,简称SGX)自2015年起可用,并在Skylake架构中引入。
SGX是一套指令集,使用户能够创建一个受保护且隔离的进程,称为enclave(飞地)。它提供了一个反向沙盒,保护enclave免受操作系统、固件和任何其他特权执行环境的影响。
无论当前特权级别和CPU模式如何,外部无法读取或写入enclave内存。调用enclave函数的唯一方法是通过一条新指令,该指令执行多个保护检查。enclave的内存是加密的。对内存进行窃听或将DRAM模块连接到另一个系统只会产生加密数据。内存加密密钥在每个电源循环时随机更改,并存储在CPU内部,无法访问。
由于enclave是进程隔离的,操作系统的库不能直接使用;因此,需要使用SGX enclave软件开发工具包(SDK)来编译针对SGX的程序。这也意味着应用程序需要设计和实现以考虑受信任/不受信任的隔离边界。另一方面,应用程序的建设基于非常小的Trusted Computing Base(TCB)。
一种便于过渡到基于进程的机密计算并避免构建定制应用程序的新方法是利用库操作系统。这些操作系统可以在SGX enclave中运行原生的、未修改的Linux应用程序。库操作系统截获所有应用程序对主机操作系统的请求,并在应用程序不知情的情况下安全地处理这些请求,使其在一个TEE中运行。
第三代至强处理器(也称为Ice Lake Server - "ICX")及其后代转而使用一种名为Total Memory Encryption - Multi-Key(TME-MK)的技术,该技术使用AES-XTS,摆脱了消费者级和至强E级处理器所使用的内存加密引擎。这增加了可用的enclave页面缓存(EPC)大小(最多512GB/CPU),并提高了性能。关于多插槽平台上的SGX的更多信息可在白皮书中找到。支持的平台列表可在英特尔的官方网站上找到。SGX可在Azure、阿里云、IBM等云服务提供商上使用。
Intel TDX
英特尔的可信域扩展(Trusted Domain Extensions,简称TDX)旨在保护完整的虚拟机,因此与AMD SEV最为相似。
与SEV-SNP一样,TDX的客户机支持已合并到Linux Kernel 5.19中。然而,硬件支持将随着Sapphire Rapids的推出在2023年到来。阿里云提供邀请预览实例,Azure也宣布了其TDX预览计划。
开销分析
机密计算技术通过强大的隔离和增强的安全性为客户数据和工作负载提供了诸多优势,但这并非免费的。对这种影响进行量化是具有挑战性的,并取决于许多因素:TEE技术、基准测试、指标以及工作负载类型都对预期性能开销产生巨大影响。
基于Intel SGX的TEE的性能测试具有一定难度,如不同的研究论文所示。所选择的SDK/库操作系统、应用程序本身以及资源需求(尤其是大内存需求)对性能有巨大影响。如果应用程序适合在enclave内运行,则可预期性能开销为个位数百分比。
基于AMD SEV-SNP的机密虚拟机不需要对执行的程序和操作系统进行任何更改,因此更容易进行性能基准测试。Azure和AMD的一个基准测试显示,SEV-SNP虚拟机的性能开销在<10%之内,有时甚至低至2%。
虽然会有一定的性能开销,但这应该足够低,使得真实世界的工作负载能够在这些受保护的环境中运行,并提高我们数据的安全性和隐私性。
与FHE、ZKP和MPC相比的机密计算
全同态加密(Fully Homomorphic Encryption,FHE)、零知识证明/协议(Zero Knowledge Proof/Protocol,ZKP)和多方计算(Multi-Party Computations,MPC)都是加密或密码学协议的形式,提供了与机密计算类似的安全性保证,但不需要硬件支持。
全同态加密允许对加密数据进行计算,例如加法或乘法。这提供了加密在使用中的属性,但不像机密计算那样提供完整性保护或认证。因此,这两种技术可以相互补充。
零知识证明或协议是一种保护隐私的技术,它允许一方证明关于其数据的事实,而不泄露有关数据的其他信息。ZKP可以替代或与机密计算结合使用,以保护涉及各方和其数据的隐私。类似地,多方计算使多个参与方可以共同进行计算,即每个参与方提供其数据给出结果,而不向其他任何方泄露数据。
机密计算的使用案例
所展示的机密计算平台表明,既可以隔离单个容器进程从而最小化可信计算基础,也可以隔离完整的虚拟机。这已经使许多有趣且安全的项目得以出现:
机密容器
机密容器(CoCo)是一个CNCF沙箱项目,它将Kubernetes pod隔离在机密虚拟机中。
可以使用运算符将CoCo安装在Kubernetes集群上。运算符将创建一组运行时类,可以用于在几个不同平台上部署在保险库中的pod,包括AMD SEV、Intel TDX、用于IBM Z的安全执行和Intel SGX。
CoCo通常与签名和/或加密的容器映像一起使用,这些映像在保险库内部进行拉取、验证和解密。诸如图像解密密钥之类的机密信息通过受信任的密钥经纪服务有条件地提供给保险库,该服务在发布任何敏感信息之前会验证TEE的硬件证据。
CoCo具有多种部署模型。由于Kubernetes控制平面位于TCB之外,CoCo适用于托管环境。在虚拟环境中,借助API适配器,在云中启动pod虚拟机,即使不支持嵌套,也可以运行CoCo。CoCo还可以在裸机上运行,即使在多租户环境中也能提供强大的隔离。
托管的机密Kubernetes
Azure和GCP都支持将机密虚拟机作为其托管Kubernetes提供的工作节点使用。
这两项服务旨在通过为容器工作负载启用内存加密,实现更好的工作负载保护和安全性保证。然而,它们并不旨在完全隔离集群或工作负载免受服务提供商或基础设施的影响。具体而言,它们不提供专用的机密控制平面,也不公开机密集群/节点的证明能力。
Azure还在其托管的Kubernetes服务中支持机密容器。他们支持基于Intel SGX保险库和基于AMD SEV的虚拟机的创建。
Constellation
Constellation是一个旨在提供最佳数据安全性的Kubernetes引擎。Constellation将整个Kubernetes集群封装在一个受保护的机密上下文中,使其免受底层云基础设施的影响。其中的所有内容,包括运行时的内存,都始终进行加密。它同时保护工作节点和控制平面节点。此外,它已经与流行的CNCF软件(如Cilium)集成,用于安全网络,并提供了扩展的CSI驱动程序以实现安全数据写入。
Occlum和Gramine
Occlum和Gramine是开源库操作系统项目的示例,可用于在SGX保险库中运行未修改的应用程序。它们是CCC的成员项目,但公司也维护了类似的项目和产品。借助这些libOS项目,现有的容器化应用程序可以轻松转换为启用机密计算的容器。许多经过精心策划的预构建容器也可用。
我们现在处于什么地步?供应商、局限性和FOSS(自由开源软件)领域
我们希望您已经从前面的部分中看到,机密计算是一种强大的新概念,可以提高安全性,但我们仍处于(早期)采用阶段。新产品开始出现,以利用其独特的特性。
Google和Microsoft是第一批拥有机密产品的主要云提供商,可以在受保护的边界内运行未修改的应用程序。然而,这些产品仅限于计算,而机密数据库、集群网络和负载均衡器的端到端解决方案需要自行管理。
这些技术为将最敏感的工作负载引入云中提供了机会,并使其能够利用CNCF领域中的所有工具。
行动号召
如果您目前正在开发一个高安全性的产品,由于法律要求而难以在公共云中运行,或者希望将您的云原生项目的隐私和安全性提升到新的水平:与我们所强调的众多优秀项目取得联系!每个人都渴望改善我们的生态系统的安全性,您可以在这一旅程中扮演至关重要的角色。
本文翻译自kubernetes.io
点击阅读原文了解更多