初识 TDX (2)

通过上文, 我们已经对 TDX 有了基本的了解,本文将继续介绍它是如何进行架构设计,实现机密计算的。如有理解有误的地方,欢迎交流指正。

机密计算 (Confidential Computing) : 一种在基于硬件的可信执行环境 (TEE, Trusted Execution Environment) 中执行计算过程,为使用中的数据提供保护的计算模式。

对于 TEE,它必须具有一定级别的数据完整性、数据机密性和代码完整性。所谓机密性和完整性,其实就是能否从"增删改查" 四个方面保护敏感内容。

  • 数据机密性:未经授权的实体无法查看在 TEE 内使用中的数据。(查)
  • 数据完整性:未经授权的实体不能添加、删除或更改在 TEE 中使用的数据。(增删改)
  • 代码完整性:未经授权的实体不能添加、删除或更改 TEE 中执行的代码。(增删改)

TDX 作为一种基于硬件的虚拟机隔离技术,通过创建的 TD 实现可信执行环境 (TEE),能够为整个 VM 提供保护和隔离。接下来介绍其如何实现机密性和完整性。

1 . 内存机密性和完整性

(Memory Confidentiality and Integrity)

1.1 TME-MK 生成密钥

TDX 使用 TME-MK 生成密钥进行内存加密,并新增了内存完整性保护 (Memory integrity protection) 。内存完整性保护有 Ci 和 Li 两种。

  • 加密完整性保护 (cryptographic-integrity protection),简称 Ci : 可防止 host/system software 对敏感数据的访问,并检测来自软件的篡改。
    • 软件的篡改,例如 rowhammer, 这是一种利用 DRAM 中电荷积累效应的攻击方式。它通过特殊的程序反复访问 DRAM 中的相邻行,来对特定行的数据进行访问或修改。
    • 这种模式下,内存使用 MACTD owner bit 进行加密和保护。 (每个 cache line 中有 1 bit 是 TD-ownership 标签,表示该行是否与分配给 TD 的内存页相关联。)
  • 逻辑完整性 (logical-integrity protection), 简称 Li : 仅可防止 host/system software 对敏感数据的访问。
    • 这种模式下,内存使用 TD owner bit 进行加密和保护。

每个 TME-MK 提供的密钥 (key) 都有一个对应的 KeyID 。通过 PCONFIG 指令,TDX module 可以为 KeyID 提供一个 CPU 生成的,唯一且临时的 AES-XTS 128-bit 密钥。而且该密钥经过定制,不能通过软件或使用 SOC 的外部接口访问。

1.2 基于 KeyID 的访问控制

如下图所示,TME-MK 支持的 KeyID 分为两组:Private KeyID 和 Shared KeyID。内存也分为私有内存 (private memory) 和共享内存 (shared memory)。

创建 TD 时,TDX module 会通过 PCONFIG 为每个 TD 分配一个唯一的私有密钥。而且只允许从 SEAM 调用 (即从 TDX module 调用) PCONFIG 为 private KeyID 编码密钥。

除了 TDX module 和 TD,其他软件都禁止访问 private KeyID,否则会产生 #PF (page-fault exception); 任何设备使用 private KeyID 的进行 DMA 操作同样也会被中止。

1.3 Private KeyID 加密的内存

不受信任的实体访问加密的内存可能会触发两种错误:

  • TD-ownership check failure: 当软件或设备去访问被 private KeyID 加密的内存时,会通过 cache line 中的 TD-ownership bit 判断该访问是否使用了 shared KeyID。如果使用 shared KeyID 进行访问,则被认为是无效访问, 此时 TME-MK 会返回固定的数据,避免密文解析。(Ci/Li)

  • MAC-verification failure: 当 Ci 开启时,MAC 会确保 TD 读回的 private memory 中的数据和上次写入内容一致。如果发现内容遭受了篡改,则会发生 MAC 验证失败。

无论 MAC-verification failure 或者 TD-ownership check failure 都会导致该 TD 被终止,而其他 TD 和平台上的软件都不会受到影响。

如下图所示,当不受信任的软件 (使用 private KeyID 的软件) 读取 MKTME 保护的内存时,读操作只会获取固定的值,写操作也会被终止。

当 TD 读取被保护的内存数据时,如果 MAC 校验成功,则会顺利读取;若保护的内存中数据被篡改,将导致 MAC 校验失败,从而访问失败。

2. 地址转换完整性

(Address-Translation Integrity)

2.1 两种内存

TD 可以访问两类内存。

  • 私有内存 (private memory)。持有 TD 机密数据,使用前面提到的分配给 TD 的独一无二的临时密钥实现机密性和完整性保护的。
  • 共享内存 (shared memory) 。用于 TD 和外部不受信任实体进行通信,以执行各种 IO 操作,比如网络访问,存储服务,调用 hypervisor 的服务等。

2.2 Shared bit

GPA (guest-physical address) 的最高位被设计为共享位 ("Shared" bit),用于表示该地址指向的是私有内存 ("Shared" bit is 0) 还是共享内存 ("Shared" bit is 1)。(这和 AMD 的 SEV-SNP 刚好相反)

TD 的所有私有代码和数据都是存放在私有内存中,并映射到 Shared bit 为 0 的 GPA (private GPA)。所有使用私有 GPA 的内存访问,都会通过分配给 TD 的 private key 实现加密,并进行完整性保护。 而对于使用共享 GPA 的内存访问,则借助 hypervisor 管理的 shared key,实现加密,并进行完整性保护。

2.3 两种 EPT

地址转换方面,TDX 架构提供了两种 EPT (extended-page table) 创建物理地址 (PA, physical address) 和 GPA 的映射关系。

  • secure EPT,提供 private GPA 到 PA 的地址转换。该 EPT 由 TDX module 管理,保证内存布局的完整性。并由 module 提供接口给 VMM,用于增加或删除地址映射。构建 secure EPT 页表的内存也会使用每个 TD 唯一的密钥进行加密和完整性保护。
  • shared EPT, 提供 shared GPA 到 PA 的地址转换。该 EPT 由 VMM 管理。

2.4 地址转换过程

如下图。无论是 shared memory 还是 private memory,首先都是由 VMM 分配内存,在随后生成 GPA 时会有不同。 对于 shared memory, 由 VMM 管理 shared EPT,使用 shared KeyID 和 PA 生成对应的 shared GPA。 对于 private memory, VMM 调用 TDX module 提供的接口,将 PA 传入。TDX module 使用 private KeyID 和 PA,通过 secure EPT 生成对应的 private GPA。

由于 CPU 会防止 TD 的页表结构和可执行代码存放到 shared memory 中,而且如果在 shared memory 中获取下一条 TD 的执行指令 (code fetches) 或者访问 TD 的页表时,CPU 会发生 #PF (page fault)。 所以,即使 private memory 对应的 PA 对于 VMM 来说是已知的,它也无法访问这块数据,因为会触发 #PF

另外,TDX module 中还维护了一张表,称为 PAMT (Physical-Address-Metadata Table)。其中记录用到的 page size 和 page type 信息以协助 TD 的地址转换。

在性能方面,TD 的地址转换和传统 VM 类似,都是有两级 page walk, 因此它们的地址转换开销也类似。

3. CPU 状态机密性和完整性

(CPU-State Confidentiality and Integrity)

CPU state 有关的结构有:

  • virtual apic page
  • state save area
  • secure EPT
  • VMCS

它们都是托管在 VMM 提供的一组 page 中。TDX module 同样会使用分配给 TD 的 private key 加密起来。

每个 TD 都会有一组自己的 CPU 状态信息。当 TD 退出到 TDX module 时,这些状态信息会更新到 TDX module 中。但 TDX module 继续退出到 host 时, 提供给 VMM 的 CPU state 只会是一些固定的值,VMM 并不能拿到真实的 CPU state。

如果 TD 需要 VMM 完成一些功能,它可以根据 GHCI (TDX Guest-Hypervisor Communication Interface) 定义的规范,通过 TDCALL 指定哪些寄存器的内容可以暴露给 host,这时 TDX module 就不会在返回 host 时把指定的状态信息切换为固定值。

4. 安全的中断和异常发送机制

(Secure Interrupt and Exception Delivery)

TD 的中断和异常,采用的 VMX 中已有的中断虚拟化技术: VMX-APIC virtualization 和 virtual-interrupts architecture。

借助 APIC-virtualization architecture,TD 可以直接在 SEAM-VMX non-root mode 下读写 APIC 的各类寄存器, 发送 virtual interrupt,而不会触发 vm-exit。

借助 VMX-posted-interrupts-processing architecture,VMM 或者其他设备可以通过 posted-interrupt descriptor 直接向 TD 发送 virtual interrupt。

至于 TD 对中断的具体实现过程,考虑到篇幅原因,后面有时间再具体介绍。

Related

机密计算技术分析

本文作者:文七安

本文链接:juejin.cn/post/730821...

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

相关推荐
用户962377954481 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主2 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954484 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954484 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star4 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954485 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher6 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行9 天前
网络安全总结
安全·web安全