文章摘要
文章探讨了在公共云环境中保护虚拟机隐私的挑战,指出尽管Linux能够隔离虚拟机,但系统内存仍可能被云提供商访问。为了满足对隐私高度敏感的客户需求,机密计算技术被引入以保护虚拟机内存,即使对虚拟机监控程序也不可访问。然而,Linux云堆栈需要重新设计以支持机密虚拟机,同时平衡性能与安全这两个常常相互冲突的目标。硬件辅助虚拟化和系统级编排(如KVM)是实现资源隔离的关键技术。
文章总结
重新思考Linux云栈以支持机密虚拟机
在公共云中,隐私存在固有的限制。尽管Linux可以隔离虚拟机(VM),但系统内存中的内容最终仍可能被云服务提供商访问。为了满足对隐私要求极高的客户,机密计算(Confidential Computing)保护了虚拟机的内存,甚至防止了虚拟机管理程序(hypervisor)的访问。然而,为了支持机密虚拟机,Linux云栈需要重新设计,以平衡两个常常相互冲突的目标:性能与安全性。
隔离是保护系统安全的最有效方式之一,它能够限制有缺陷或被入侵的软件组件的影响。这对于基于虚拟化的云环境来说是个好消息,因为虚拟化设计本质上隔离了虚拟机内的资源。这种隔离通过硬件辅助虚拟化、系统级编排(如集成到内核中的KVM虚拟机管理程序)以及用户空间封装来实现。
在硬件层面,架构特权级别(如x86_64中的0-3环或ARM中的异常级别)和I/O内存管理单元(IOMMU)等机制提供了隔离。虚拟机管理程序通过处理虚拟机的执行上下文,进一步在共享的物理资源上强制分离。在用户空间层面,控制组(cgroups)限制了进程可用的资源(CPU、内存、I/O),而命名空间隔离了系统的不同方面,如进程树、网络栈、挂载点、MAC地址等。机密计算则增加了新的隔离层,保护虚拟机免受潜在被入侵的主机影响。
在提升安全性的同时,云环境中Linux的性能优化也在持续进行,特别是在吞吐量和用户体验(通常通过低I/O尾延迟等服务质量指标衡量)方面。云服务提供商越来越多地采用I/O直通技术来加速Linux,绕过主机内核(有时甚至绕过虚拟机内核),直接将物理设备暴露给虚拟机。这可以通过用户空间库(如数据平面开发工具包DPDK)或硬件访问功能(如virtio数据路径加速vDPA)实现。
然而,硬件卸载在虚拟化中引发了一个根本性的矛盾:安全性和性能往往背道而驰。虽然卸载确实为网络流量提供了更快的路径,但它也带来了一些缺点,如限制了可见性和审计、增加了对硬件和固件的依赖,以及绕过了基于操作系统的流量和数据安全检查。Linux在提供快速资源访问的同时,强制执行严格的工作负载隔离,这确实是一个棘手的问题。
解决这一矛盾的一个潜在方案是将机密计算扩展到设备本身,使它们成为虚拟机信任圈的一部分。AMD的SEV可信I/O(SEV-TIO)等技术允许机密虚拟机通过加密方式验证设备的身份和配置。一旦建立信任,虚拟机可以通过直接内存访问(DMA)与设备交互,并共享加密的内存数据,从而避免使用临时内存副本(如GPU训练AI模型时的明文数据访问),显著加快I/O操作。
TEE设备接口安全协议(TDISP)定义了机密虚拟机与设备如何建立互信、保护通信以及管理接口的附加和分离。常见的实现方式是使用支持单根I/O虚拟化(SR-IOV)的设备,该功能允许物理设备暴露多个虚拟设备。然而,TDISP需要对整个软件栈进行修改,包括设备固件、硬件、主机CPU和虚拟机管理程序,且并非所有供应商都支持该协议。
安全启动是支持机密计算的另一个关键环节。在传统的安全启动过程中,固件验证预引导加载程序(如shim),随后加载引导程序(如GRUB),最终验证并加载虚拟机内核。在机密计算中,安全虚拟机服务模块(SVSM)成为第一个执行的组件,验证固件本身,并在特殊的硬件模式(如AMD的VMPL0或Intel的VTL0)下运行。虚拟机通过远程验证(如RATS架构)确认平台的完整性,确保其运行环境安全。
机密计算的引入增加了启动时间,特别是在云环境中,即使是几秒钟的延迟也可能对大规模部署产生显著影响。此外,不同的机密计算实现方式(如微软的Linux虚拟化安全LVBS)也带来了不同的权衡。
在运行时,机密虚拟机的主要性能开销来自DRAM的加密和解密,以及内存访问权限的强制执行。为了减少运行时开销,SVSM应在启动过程中预先接受所有内存页。
扩展性也是机密计算面临的一个挑战。每个机密虚拟机都需要一个唯一的地址空间标识符(ASID),而Linux可用的ASID数量通常受限于BIOS,最多只有几百个。随着多核处理器核心数量的增加,Linux需要支持更多的机密虚拟机,以避免核心资源的浪费。
交换内存在机密虚拟机中需要加密,以确保数据在移动到磁盘时仍保持机密性。此外,虚拟机通过网络通信时,必须建立安全的端到端会话,以维护数据在不受信任的主机网络中的完整性和机密性。
实时迁移是云环境中的一个重要功能,允许虚拟机在主机之间移动,而不会对虚拟机产生明显影响。然而,迁移后,虚拟机必须在目标节点上重新进行验证,以确保其内存和执行上下文在迁移过程中得到正确保存。
总结,硬件卸载在虚拟化中始终意味着性能与安全性之间的权衡。通过机密计算,Linux可以在不牺牲安全性的情况下提升性能。然而,这也加深了Linux对固件和硬件的依赖,信任从软件转移到了硬件和设备制造商。开放架构(如RISC-V)可能通过可审计的硬件设计提供解决方案,最终消除对第三方的信任需求。
作为现代公共云的基础,Linux在探索机密虚拟机潜力方面处于有利位置。尽管需要对Linux云栈进行大量修改,但这一投资对于整个内核社区来说可能是值得的。
评论总结
评论主要围绕“机密计算”(Confidential Computing)的可行性和实际应用展开,观点分为支持和质疑两方。
支持观点: 1. 解决隐私合规问题:机密计算被视为解决欧洲GDPR合规问题的潜在方案,特别是医疗研究人员希望通过这种方式获得可扩展的基础设施。 - "Confidential computing is the straw for many people to overcome GDPR headaches in Europe." (评论2) - "Apple has done a good job on the implementation and documentation for their confidential computing." (评论6)
- 技术实现与文档支持:苹果在机密计算的实现和文档方面表现良好,为非苹果用户提供了参考。
- "Read the Apple docs - they are very well written and accessible for the average HN reader." (评论6)
质疑观点: 1. 安全性与实际效果存疑:许多评论者认为机密计算更多是营销噱头,实际效果有限,尤其是在减少攻击向量方面。 - "It is more a promise than a reality at the moment with very little actual benefit in term of reducing relevant attack vectors." (评论2) - "Confidential Computing is mostly a failure and a PR stunt from cloud providers." (评论8)
硬件控制与后门问题:评论者指出,只要硬件不在用户完全控制下,加密和机密计算都无法真正保证数据安全,且可能存在后门。
- "Any kind of encryption means that there is a secret somewhere and if you have control over the stack below the VM you’ll be able to read that secret." (评论5)
- "There will always be a back door and when authorities can access the back door, so can the providers and malicious actors." (评论3)
硬件漏洞与不可修复性:硬件层面的漏洞无法通过固件或微码更新修复,进一步削弱了机密计算的可信度。
- "The hardware capabilities CC is built upon are unsecure and can’t be fixed by firmware or microcode update." (评论8)
总结:尽管机密计算在隐私合规和技术实现方面有一定潜力,但其实际安全性和硬件控制问题引发了广泛质疑。评论者普遍认为,对于高度敏感的数据,完全控制硬件仍是更可靠的选择。