初识 Intel TDX 机密虚拟机技术

850 阅读5分钟

本文结合 Intel 公开的 TDX 白皮书(TDX Whitepaper),对其提出的硬件辅助机密计算技术进行简要介绍。如有理解有误的地方,欢迎交流指正。 TDX overview-202311241445.png

1. TDX 概述

Intel 信任域扩展 (TDX, Trust Domain Extensions) 是第四代至强处理器 Sapphire Rapids 中引入的一种新机制。它以 VMX,TME-MK 为基础,从硬件上提供支持,为虚拟机 (VM) 的安全提供硬件隔离。

每个硬件隔离出来的环境,称为信任域 (TD, Trust Domain)。在 TDX 架构中,TD 之间相互隔离;TD 与虚拟机管理器 VMM,hypervisor,以及其他在 host 上的非 TD 软件之间也都是相互隔离的。TD 中的各种信息,比如寄存器状态,内存数据都无法被 TD 之外的对象访问,这与普通 VM 的数据可能泄露给 VMM 完全不同。

TDX overview-202311222204.png 传统的虚拟化架构中,VMX root mode 中的 VMM 使用指令 VMLAUNCH/VMRESUME 完成 VM-entry,CPU 切换到 VMX non-root mode 下运行 VM。当执行到敏感指令时,触发 VM-exit,CPU 又退回到 VMX root mode 执行 VMM。

而在 TDX 架构下,VMM 和 TD 之间的切换增加了一个 TDX module 作为中介。

  • Host 中的 VMM 首先通过 SEAMCALL 指令将执行权交给安全的 TDX module,然后在 SEAM module 中发生 VM-entry 进入 TD 中。
  • TD 需要退出到 host 时会使用 TDCALL 指令,CPU 先通过 VM-exit 退出到 TDX module,再通过 SEAMRET 返回 VMM。

该架构下,TDX module 完成了 VMM 的部分功能,并运行在加密保护的 SEAM memory 内,以保证 VMM 无法获取 TD 的信息。

2. TDX module

为了帮助执行 TD 的安全策略,TDX 架构中增加了一种新的 CPU 模式——安全仲裁模式 (SEAM, Secure-Arbitration Mode);和一个由 Intel 提供的,被安全认证的服务模块——TDX module, 或称 SEAM module

TDX module 托管在一个称为 SEAM memory 的 BIOS 预留的内存空间中,由特殊寄存器 SEAMRR (SEAM-range register) 管理空间范围。CPU 只允许运行在 SEAM memory 范围内的软件访问其中的资源。当其他软件的访问和设备的 DMA 操作,指向这块特殊的区域时都会被禁止。SEAM 在设计上也禁止访问其他受保护的内存区域,如 SMM,SGX 保护的空间。

3. 加载 TDX module

为了安装 TDX module,Intel 提供了一个 SEAM loader (SEAMLDR),帮助验证 SEAM module 上的数字签名,并将其加载到 SEAM memory 中。 SEAMLDR 是一个经 Intel 的可信执行技术 (TXT, Trusted Execution Technology) 认证过的代码模块 (ACM, authenticated code module)。根据设计,它会将 SEAM module 的测量值 (measurement) 和 SVN (security version number) 记录到硬件测量寄存器 (hardware measurement registers) 中, 然后由 VMM 调用 SEAMLDR ACM,将 TDX module 加载到 SEAM memory 中。

4. 相关的指令及其用法

在 TDX 架构中,引入了几个新的指令。

  • SEAMCALL,用于 host 调用 TDX module host-side 接口函数,使 CPU 进入 TDX module 中执行。
  • TDCALL ,用于 guest 调用 TDX module guest-side 接口函数。该指令会触发 VM-exit ,使 CPU 进入 TDX module。
  • SEAMRET,用于 TDX module 将执行控制权交给 VMM。
  • SEAMREPORT, 用于可创建一个证据结构 (evidence structure),其通过一个 28-bit 的消息认证码 (MAC, message authentication code) 与平台硬件加密绑定。该证据结构可用于生成认证报告(remote attestation quote),以便后续的远程认证。

接下来详细介绍 SEAMCALLTDCALL

4.1 SEAMCALL

VMM 通过 SEAMCALL 调用 TDX module 提供的接口,完成 TD 的创建,删除和执行等工作。

当 VMM 使用 SEAMCALL 创建 TD 时,需要将所需的 memory page 提供给 TDX module,用于存储 TD 中的代码,数据,以及 TD 有关的数据结构,如 VMCS,和 state-save area。 在 TDX module 中,使用 VMRESUME/VMLAUNCH 完成 VM-entry,CPU 切换到 SEAM-VMX non-root mode 并执行 TD。 TD 在执行过程中,TDX module 会拦截 VMM 或者其他不受信任的实体对 TD 私有资源的访问。如,

  • 控制寄存器 (control registers),
  • MSR,
  • 调试寄存器 (debug registers),
  • 性能监控计数器 (performance-monitoring counters),
  • 时间戳计数器 (TSC, Time-Stamp Counter) 等。 TDX module 可以启用/禁用提供给 VMM 的功能。比如,调试和性能监控功能需要在创建 TD 时授权才行,否则 TD 执行时会禁用这些功能。

4.2 TDCALL

对于在 TD 中执行的一些特殊指令,如 CPUIDIN/OUT, HLT, RD/WRMSR 等,会触发 #VE (Virtualization Exception)。以便 TD OS 可以在实现 #VE handler 时,通过 TDCALL 调用 TDX module 完成所需的功能,以一种安全的方式模拟这些指令。

TD 通过 TDCALL 触发 VM-exit,CPU 从 SEAM-VMX non-root mode 退出到 SEAM-VMX root mode, 然后调用 TDX module 提供的服务。

TD 退出到 TDX module 中时,module 会将寄存器的值保存到为该 TD 分配的状态保存区域 (state-save area). 这些寄存器包括:

  • the general-purpose registers,
  • control register,
  • MSRs,
  • debug registers,
  • performance-monitoring counters,
  • extended-state registers,
  • other CPU state associated with the TD

将执行控制权交到 VMM 之前,module 还会擦除这些寄存器,以防止 TD 状态泄露。而当后续恢复 TD 执行时,会再将 CPU 状态从 state-save area 恢复。

5. 最后

从白皮书看,Intel 对 TDX 的开发分为了几个阶段。对于 TDX 1.0,会提供一些基本的功能。

  • A. 内存机密性和完整性 (Memory Confidentiality and Integrity)
  • B. 地址转换完整性 (Address-Translation Integrity)
  • C. CPU 状态机密性和完整性 (CPU-State Confidentiality and Integrity)
  • D. 安全的中断和异常发送机制 (Secure Interrupt and Exception Delivery)
  • E. 远程认证 (Remote Attestation)

而后续的 TDX 版本,会陆续引入新的功能,包括:

  • F. Live Migration
  • G. TD Partitioning
  • H. VM Preserving Updates

部分基本功能的实现原理,在下文继续介绍。

Related

初识机密计算(Confidential Computing) - 腾讯云开发者社区-腾讯云 (tencent.com)

本文作者:文七安

本文链接:juejin.cn/post/730749…

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!