走向机密云计算

2021-03-13 23:19:09

3月7日,2021年第19卷,发行1 Mark Russinovich,Manuel Costa,CédricFournet,David Chisnall,Antoine Delignat-Lavaud,Sylvan Clebsch,Kapil Vaswani,Vikas Bhatia

虽然在很大程度上受到规模经济的推动,但现代云的发展也能够提高安全性。大型数据中心提供总可用性,可靠性和安全保证。确保操作系统,数据库和其他服务具有安全配置的操作成本可以在所有租户中摊销,允许云提供商采用负责安全负责的专家;对于较小的企业来说,这通常是不可行的,系统管理员的角色通常与许多其他人混淆。

云数据中心也受到严格的物理安全性:有物理访问的人数有限,并且他们访问的控制在大型云提供商中更严格,而不是在房地上 - 通常很容易受到内部威胁的威胁作为患有敏感数据或物理媒体的副本(包括现场备份)的副本。

云提供商系统地使用与租户关联的键系统地加密在传输(在网络上)和休息(在磁盘和备份上):即使攻击者访问数据中心,除非他们也可以查看租户数据的明文妥协他们的托管密钥。这种越来越多的云安全趋势将继续;下一步是机密计算,在使用中将硬件强制加密保护扩展到数据(即,在计算期间)。

为什么租户会在面值上从云中取消保证?租户信任他们的供应商到不同的范围。有些人可以完全信任它来保持他们的数据安全。有些人可能会担心其他租户,软件错误或内幕攻击(例如,来自数据中心技术人员)。有些人可能要求遵守严格的隐私法规。有些人也可能怀疑提供者'例如,执行其规定的安全政策的愿意或能力 - 例如,在没有他们的同意甚至害怕云管辖区内的司法管辖区内的违规者和其他法律攻击,他们的数据永远不会使用它们的数据操作。为了解决这些问题,租户越来越多地期待以下内容:

机密计算通过允许租户完全控制用于运行云工作负载的TCB来满足这些期望:机密计算允许租户精确地定义可访问其工作负载(数据和代码)的所有硬件和软件,并且提供核数强制执行此保证的技术机制。简而言之,租户保持完全控制自己的秘密。

特别是,机密计算机可以将工作负载渲染到云提供商,因为租户可以使用这种精确的控件水平来防止管理程序和其他云托管基础架构访问其秘密。这可以防止来自云面料及其运营商的攻击,并补充了保护云面料免受潜在恶意租户的传统安全目标。

Warning: Can only detect less than 5000 characters

认证。证明是建立对机密计算的信心的机制。与加密消息系统一样,没有完整的机密性不足。能够以这样的方式运行软件,即云提供商无法检查或篡改,如果您可以&#39保证它确实是您预期运行的软件。

证明使用由信任的硬件根源维护的硬件秘密源的键来签署证据,即TEE处于由真实硬件设备保护的已知状态。该证据类似于安全启动签名:TEE的一组测量,例如,初始内存内容的散列以及各种安全关键寄存器的状态。在接收和验证本证据时,远程用户或软件组件可以确定T恤的完整性,然后通常建立加密信道以在TEE内部部署秘密和控制计算。

物理隔离是保证机密性和完整性的最简单方法 - 例如,通过使用简单的I / O接口使用孤立的核心。这是Apple' s安全元素(在iOS设备和最近的Mac中找到的路线)。当TEE中运行的代码具有计算和存储要求时,这是足够的,该存储要求由单个供应商提供。它在具有弹性要求的云环境中并不充足,许多租户:云面料必须能够创建可变大小的T恤,以在一个系统上托管多个T恤,并动态分配/将资源分配给T恤。

作为机密计算努力的一部分,在过去几年中,T恤在大多数通用处理器上获得。 ARM' S TrustZone提供了一个早期的TEE实现,允许内存在启动时分配给两个世界 - 安全或正常 - 并允许安全世界中的小值得信赖的内核提供孤立的过程。在此模型中,所有安全世界组件必须信任安全内核(如果存在的话)必须信任安全内核(以及安全的管理程序),尽管它们不必相信正常世界和#39; S管理程序和操作系统内核。

英特尔' SGX(软件保护扩展)进一步逐步迈出了这一步,并提供了在用户模式进程的虚拟地址空间中创建孤立的内存区域的能力。在引导之后可以动态地创建任何数量的这些区域,但经过资源约束。该区域内的代码和数据通过CPU实现的访问控制检查来保护软件攻击:虚拟机管理程序和内核无法看到或篡改区域内的数据。通过内存加密,该区域也受到保护攻击者:每当使用中的数据离开CPU缓存时,它会在被写回内存之前加密。

如果您只想保证机密性,内存加密开销是低的,并且在存在与访问内存总线的对手的反对派存在的重放攻击存在下的加密完整性。 Xbox 360和更高版本的模型已经使用AES(高级加密标准)以便自发射以来的内存加密,并且提供足够的带宽和游戏的延迟,即现代CPU上的一些最苛刻的工作负载。主流CPU的内存控制器现在正在获得类似的功能,包括对不同内存区域的不同键的支持。保护大规模的记忆完整性对物理攻击更昂贵;减少此开销的方案是一个积极研究的领域。

SGX' S孤立的内存区域是小TCB服务的理想选择,但使用它们以运行全VM(虚拟机)机密性是具有挑战性的,因为它们缺乏对多个地址空间和特权和非特权模式分离的支持。这为LED AMD开发了另一种类型的TEE,重点是VM级隔离。 AMD处理器通过一系列设计迭代,旨在完全从信任边界中删除虚拟机管理程序。他们的第一步,ev(安全加密的虚拟化)自动加密VM中使用的内存。接下来,SEV_ES(SEV以加密状态)在每个转换到管理程序时添加了对VM寄存器状态的加密。最后,SNP(安全嵌套分页),提供了额外的保证,通过篡改虚拟内存映射无法篡改虚拟内存映射来执行完整性或重放攻击机密VM。携带在一起,这些功能保证了虚拟机管理程序无法使用VM状态读取或篡改(即,管理程序超出TCB)。 Intel'最近宣布的TDX(信任域扩展)为SNP提供了类似的安全保证,它针对全面的VM级机密性。

最后,几个重要的工作负载需要专门的处理器,例如GPU,FPGA(现场可编程门阵列)和其他加速器。这些设备也可以通过T恤功能增强,具有大的设计空间。 12例如,一些加速器可以具有用物理包装保护的大存储器(例如,高带宽存储器),使加密更效求。在许多情况下,加速器一次可以分配给单个租户,从而消除攻击并进一步简化其设计。

要安全有效地使用这些设备,I / O总线也需要更改。大多数当前系统假设I / O总线是值得信赖的,但这已经是嵌入式系统的问题:直到最近在大多数汽车中使用的CAN(控制器区域网络)总线没有执行任何端到端认证,允许诸如媒体播放器的受损组件,用于发送假装从发动机管理系统的消息。类似地,PCI(外围组件互连)总线规范假定所有端点都是可信的,使恶意设备能够欺骗发起者ID,例如,机密加速器需要一种用于在设备和主机之间建立端到端安全频道的机制T恤和用于集成设备和主机之间的加密。

揭示机密计算硬件需要更改云结构的系统层。这包括更改管理程序以处理无法看到VM状态的约束。主流管理程序设计遵循分层信任模型。管理程序完全由访客信任,负责在上下文交换机之间存储客户状态,并完全访问客户存储器。

大多数半虚拟的设备接口都是假设任何Guest Memory可用于DMA(直接内存访问)缓冲区的虚拟等效物。这些假设在主流硬件上停止了,引入了AMD' s ex。内存加密意味着虚拟机管理程序必须为客人可以使用的反弹缓冲区提供一个区域。 Linux通过软件IOTLB(输入/输出转换缓冲区缓冲区)驱动程序支持这种操作模式。

在从TEE内部执行显式域转换到周围环境时,硬件实现通常保留寄存器上下文。对于异步退出通常不属实,这可能会泄漏敏感信息。在虚拟机管理程序是信任的模型中,此信息对于处理VM Exit可能是有用的。当虚拟机管理程序不受信任时,必须修改它,因此它不利用该功能,或者必须添加垫片以消毒信息。

例如,考虑第二级地址转换中的页面错误。在传统系统中,管理程序使用完整寄存器上下文和异常寄存器接收陷阱,指定故障地址。它可以杀死VM,发出UPCALL以询问VM' s内核以处理缺失页面中的缺失页面中的页面。在机密计算系统中,这将允许虚拟机管理程序进行单步执行,并在每一步中查看寄存器状态。至少,管理程序必须仅接收加密和完整的保护版本的寄存器状态,但即使知道故障地址也可能泄漏过多的信息。在更安全的设计中,TEE内的垫片层将收到异步退出,并决定是否发出超级计算机以填写缺失页面或简单地通知内核故障。然后,此代码可以强制执行与诸如此类退出的频率相关的策略,以便缓解来自虚拟机管理程序的可能攻击。

值得注意的是,通过信任软件隔离不可用的虚拟机管理程序,可以创建一种形式的TEE。这是Windows&#39的基础;基于虚拟化的安全性,使用Windows Server 2016和Windows 10引入,其中通过Hyper-V从Windows内核中孤立的关键组件运行。这可以支持与其他T恤相同的抽象,包括类似于SGX的孤立的内存区域,但具有较弱的威胁模型:在这种设计中,管理程序仍然是值得信赖的。这类似于亚马逊' s nitro concaves最近使用的方法。 1

系统层通过一组平台抽象将机密计算硬件暴露给开发人员和用户:机密虚拟机,机密容器和环保。

机密虚拟机允许租户具有运行现有未修改应用程序的完全向后兼容的VM体验。在后台,系统记录和检查证明以验证安全保证并使其令人疑虑。将整个VM放在T恤中对于快速和轻松采用至关重要,但它也会导致一些问题。例如,VM的管理员对VM具有完全读/写控件,在许多情况下太粗糙。另一个问题是VM的TCB大:VM图像远远超过内核和应用程序;它包括大量系统服务。在最坏的情况下,这仍然可能比在房屋或现有的云基础架构上运行软件更安全,但可能有更好的解决方案。

机密容器允许租户对TCB进行更精细的控制程度,并保密地运行新的或现有的集装箱化应用程序。在过去几年中,容器已成为在云中部署软件的常见方式。确切的技术变化,但容器通常是一个小(通常分层或虚拟)文件系统,其中包含运行单个程序所需的最小程序。

建议在每个容器中运行单个微服务建议的最佳实践。然后,编排基础架构支持部署协作的MicroService容器的车队。这具有若干优点:容器可以被配置为具有比完整的机密VM更小的TCB,并且机密容器可能在VM中运行,而VM管理员能够访问它。提供容器隔离的TEE仍然可以基于VM级隔离机制(SNP,TDX等),或者它可以基于处理级别隔离。 (避难所2和SGX-LKL 11 [Linux内核库]等系统采用库操作系统和Exokernel World的想法在SGX内存区域内运行Windows或Linux库操作系统。)

MicroServices的集装箱部署介绍了复杂的证明问题:Orchestration框架需要以足够的状态提供这些服务,以便它们可以获取键,并且他们需要管理用于建立整个微服务集的身份的协议。

在理想的世界中,为安全编写的软件将专注于最小的TCB。要使开发人员完全控制TCB,机密计算平台暴露了一个飞地

......