Safeheron 的 2025:在周期的潮水中,做那块坚硬的基石

从 WireTap 到 TEE.fail:TEE 安全研究的最新进展与技术分析

By Max He
|
From WireTap to TEE.fail: Recent Advances and Technical Analysis in TEE Security

近期,来自乔治亚理工学院、普渡大学及 van Schaik LLC 的研究团队发布了名为 TEE.fail 的攻击(其早期工作称 WireTap[1][2][3][4]。两者基于相同思路、在实施细节与平台覆盖上有所不同;下文统称 TEE.fail。研究表明:在具备物理接触的前提下,TEE 环境所依赖的确定性内存加密并非牢不可破。研究者通过在 CPU 与 DRAM 总线间插装硬件 interposer,对加密内存流量进行捕获与分析,成功恢复了 TEE 环境中 ECDSA 签名使用的随机数,并进一步推导出与远程证明相关的认证私钥。

这一发现对以 TEE(Trusted Execution Environment)为信任根的系统提出了新的挑战。TEE 通过处理器级隔离与远程证明为敏感代码与数据提供加密、独立且可验证的执行空间,已在云计算与 Web3 等场景广泛部署;典型实现包括 Intel SGX、Intel TDX、AMD SEV-SNP、NVIDIA TEE 等。然而,在“物理硬件篡改 + OS 内核模块篡改”的这一极端威胁模型下,实验结果显示部分内存加密实现仍可能存在信息泄露路径。

据研究者披露,TEE.fail 方法在 Intel SGX、Intel TDX、AMD SEV-SNP、NVIDIA TEE 等平台上具备适用性。为便于阐述,本文将以 Intel SGX 为例,介绍 TEE.fail 的核心原理、适用边界以及缓解策略。

远程认证(Remote Attestation) 

ECDSA 签名算法

ECDSA 是一种广泛使用的椭圆曲线签名算法[5],简单描述如下。

给定参数椭圆曲线 $E/\mathbb{F}_p$,基点 $G$(阶 $n$),哈希函数 $H$。 Attestation Key 是 $d \in [1,n-1]$,对应公钥 $Q = dG$。

签名过程(对消息 $m$):

(1) 选一次性随机数(nonce) $k \in [1, n-1]$(必须唯一、保密)。 

(2) 计算 $R = kG = (x_R, y_R)$,令 $r = x_R \bmod n$,若 $r = 0$ 重新选 $k$。

(3) 计算 $e = H(m)$。  

(4) 计算 $s = k^{-1}(e + d \cdot r) \bmod n$,若 $s = 0$ 重新选 $k$。

(5) 输出签名对 $(r, s)$。

证书体系

SGX Certificate Hierarchy
图 1:SGX 证书体系

主流 TEE 都会通过“远程证明(Remote Attestation)”建立信任,由受保护环境生成 quote 并经证书链签名,客户端验证链路与平台状态后确认其可信性。

图 1 展示了 Intel DCAP 证书体系的核心结构[6],包括了从 Intel 根证书到平台的证书链。整个信任链由 Intel SGX Root CA 起始,向下签发 Processor CA 与 Platform CA,它们分别生成用于远程证明的 PCK (Provisioning Certification Key)证书。这些 PCK 证书承载 SGX 平台或处理器的身份公钥,并由 Intel 的私钥链路签名,从而确保 Enclave 认证报告(quote)中的签名可被外部验证。整个签名体系最终由 Intel Root CA 来保证,形成 SGX 远程证明的根信任。

远程认证

On-Platform Certificate Chain
图 2:平台内证书链

图 2 展示了 Intel DCAP 在平台本地的证书链关系[7]。用户 Enclave 发起 DCAP 认证流程,首先会将报告发送给 Quote Enclave (QE),后者在验证(通过本地认证方式)后,使用 Attestation Key 签名背书。因为 QE 的证书由 Provisioning Certification Enclave(PCE) 签发完成,即使用图 1 所示的 Intel SGX PCK 证书(Provisioning Certification Key Certificate) 私钥签发,从而使整条签名链最终可追溯至 Intel SGX 根证书(Root CA)。第三方可通过验证这条完整的签名链,即可确认用户 Enclave 的身份真实性与平台的可信状态。

攻击准备

硬件插装

论文的核心硬件突破是把高端总线窃听变成了低成本可复现的工程。研究者先通过修改 DIMM 的 SPD 把 DDR4/5 频率从出厂速率降到 1333 MT/s(整个系统随之降速),从而把对采样带宽的要求大幅降低,允许使用老旧的逻辑分析仪来捕获内存总线信号[1][2]

Hardware Interposer Setup
图 3:分析硬件插装

在物理连接上,他们用普通的内存转接板做起点,借鉴 Keysight SoftTouch 探头的电感—电容—电阻隔离网络,将探头的隔离元件逐条焊到 内存转接板上,构成一个自制的 DRAM interposer。这个电路既保护了 CPU 驱动,又能把信号稳定地送到逻辑分析仪,保证系统能正常启动且不会报错。

Data Acquisition
图 4:采集数据视图

为了降低成本,采集端使用二手的逻辑分析模块与机箱,总成本不到 $1,000。现在就可以在降低后的时钟下解析 DDR4/5 的命令、地址和数据流,从而把写入/读取的密文片段和物理地址捕获下来,为后续分析提供观测数据。

内存加密机制分析

AES-XTS Encryption/Decryption Algorithm
图 5:AES-XTS 加解密算法

Total Memory Encryption (TME) [8]是一种在主流 TEE 中广泛采用(各技术文档对其命名可能有所差异)的硬件级内存加密机制,用于在不改变操作系统和应用的情况下,对整个物理内存进行透明加密。其工作原理是使用由 SoC 内部硬件随机数发生器生成的密钥,通过 NIST 标准的 AES-XTS 算法[9](如上图所示)对所有外部内存总线和 DIMM 上的数据进行加密,从而防止物理窃听或冷启动攻击。TME 的密钥不可被软件或外部接口访问,性能影响较小。

Comparison of encryption behavior for the same data at the same (left) vs. different (right) physical addresses.
图 6:不同 Enclave 在相同(左)与不同(右)物理地址上对相同数据进行加密时的行为对比

研究者通过在逻辑分析仪连接的 DIMM 上选取特定的 EPC 物理地址,对 SGX 的内存加密行为进行了实测验证。实验在 Enclave 内反复对同一内存单元执行读、改写、还原等操作,结果显示:当写入数据内容相同时,输出的密文也完全一致,证明 SGX 在服务器平台上采用了确定性加密(Deterministic Encryption)。进一步测试表明,虚拟地址不会影响密文结果——不同虚拟地址映射到相同物理页时,密文完全相同;但当物理地址不同时,即使明文相同,密文也随之变化,说明加密算法仅以物理地址作为加密 tweak 的输入,而未引入随机性或版本计数器。

内存的确定性加密机制是此次安全研究中的重中之重。

控制 Enclave 内存布局

还需要解决一个重要的问题,如何让目标 Enclave 的指定内存流量被逻辑分析仪捕获呢?为了实现这一点,攻击方必须精确地控制目标 Enclave 在物理内存中的分布与访问行为。

首先,通过修改内核模块,利用 BIOS/ACPI 的 ADXL 接口逆向出物理地址到 DRAM(controller / channel / bank / row)的映射,从而判断哪些物理页会落到被监听的 DIMM 上。接着,通过修改 SGX 驱动程序增加“钉页”机制,使受害 Enclave 的虚拟页优先分配到这些物理页上。运行过程中,研究者利用受控通道技术,通过 mprotect 与 ptrace 在页粒度暂停并介入 Enclave 执行,在关键点触发内核干预。为了让数据真正出现在内存总线上,他们在邻近核心上运行遍历大于 LLC 的缓存清空程序以驱逐缓存行,并结合 Intel CAT 限制受害进程的缓存使用范围,减少无关噪声。最终,逻辑分析仪以物理地址为触发条件精确采样,捕获到 DRAM 上的密文数据。

发起攻击

思路:从随机数 $k$ 计算 Attestation Key

从攻击者角度看,直接嗅探 Attestation Key 几乎不切实际:Attestation Key 通常被锁在受保护的密钥槽或安全元件中,不会以明文通过 CPU 和 DRAM 之间总线传输,只有通过去封装、微探针或激光注入等高度侵入性的物理手段才有可能获得。然而,这些方法成本高、技术门槛大,常称为所谓实验室攻击。

我们不妨将视线转向随机数 $k$。根据 ECDSA 签名算法,若攻击者获知签名中使用的随机数 $k$,则可由已知的签名分量 $(r,s)$ 与消息摘要 $z$ 直接恢复私钥 $d$:

$$s \equiv k^{-1}(z + r d)\pmod{n} \quad \Longrightarrow \quad d \equiv r^{-1}(k s – z)\pmod{n}$$

相比于私钥,随机数 $k$ 在签名执行过程中会参与更多中间计算,因此为侧信道提供了更大的观测面。攻击者可收集关于 $k$ 的信息,并通过统计与密码分析等方法还原 $k$,进而恢复 $k$。因此,k(签名随机数)为攻击目标,相较于直接窃取 Attestation Key 具有更高的实用性。

构建密文字典

研究者聚焦于 Intel IPP 库,更具体的,是用于 SGX DCAP 证明的标量乘点(Scalar-By-Point Multiplication) 实现。在椭圆曲线标量乘里,它把标量 $k$ 重新编码成一串带符号的小数字 $\{k_0,\dots,k_n\}$​,每个 $k_i$ 落在区间 $[ -2^{w-1}, 2^{w-1} ]$(如论文中 $w=5$,范围是 $[-16,16]$)。这样可以用预计算表 $[i]G(i=0..2^{w-1})$, 配合常数次加/减实现更少的加法。这是典型的恒时算法,可以预防针对内存访问与控制流的常见侧信道攻击。

Elliptic Curve Point Multiplication Algorithm
图 7:椭圆曲线点乘算法

继续观察上述标量乘实现。注意到临时变量 $B = k_i * G$,因为 $k_i \in [-16, 16]$,因此 $B$ 的取值来自一个有限且预先确定的集合 $\{ m \cdot G | m \in \{-16, \… , 16\} \}$。计算过程中,$B$ 会以密文形式出现在内存中。如果能捕获到内存中密文形式的 $B$,自然就有机会通过查表反推出 $k_i$,进而恢复 $k$。

这一思路依赖于内存加密模式(AES-XTS)的确定性特征:在固定的密钥和固定的物理地址条件下,相同的明文会被映射为相同的密文。因此,如果我们把写入锚定到同一个物理地址,并能观测到该地址在 DRAM 上产生的加密密文流,那么这组密文就可视作明文到密文的“字典”。具体做法是:创建一个专门用于构建字典的 Enclave ,依次将候选集合中的所有 33 个点写入同一物理地址。由于该地址已映射到被监听的 DIMM,借助插装的逻辑分析仪对总线上的 CA/DQ 活动进行采集,得到的一系列密文,这就是 $m \Rightarrow Enc(m \cdot G)$ 的映射表(即字典)。

查表还原 Nonce

研究者在构建好密文字典后,启动目标机器的 Quoting Enclave(QE),让其在生产模式下执行一次标准的 DCAP 远程认证流程。此时,QE 会使用 ECDSA 对报告进行签名。

为了在签名计算过程中捕获中间变量 $B = k_i \cdot G$ 的密文,攻击者将该变量固定映射到之前用于生成密文字典的相同物理地址。接着,在每次椭圆曲线标量乘法主循环结束时,通过操作系统中断或页故障机制暂时中断 QE 的执行(触发 AEX),并在中断期间清空对应缓存行(例如执行 CLFLUSH),从而确保下一次读取 $B$ 时必然触发一次 DRAM 读操作

由于 $B$ 所在的 DIMM 插有逻辑分析仪,攻击者可以逐轮捕获总线上出现的密文数据$Enc(k_i \cdot G)$。利用 SGX 在同一平台上所有 Enclave 共享同一 TME 内存加密密钥的特性,这些捕获到的密文即可与先前字典中的加密结果一一对应,进而恢复出每一轮 Booth 重编码的 $k_i$。通过拼接所有 $\{k_0, \cdots, k_n\}$,攻击者最终能够完整重建签名所使用的随机数 $k$。即用于 ECDSA-based Attestation 签名的随机数。

破解 Attestation 私钥

最后一步就简单了,结合上一步得到随机数 $k$,报告摘要 $z$ 以及签名$(r,s)$,计算:

$$d \equiv r^{-1}(k s – z)\pmod{n}$$

即求得 Attestation Key 。攻击宣告成功。

需要指出的是,服务器端 SGX 的 DCAP 远程证明流程与早期客户端实现存在差异:在 DCAP 流程中,生成的 quote 在发送给证明服务器之前并未被加密,因此传输的 quote 包含了可直接观测到的签名分量 $(r,s)$。

效果与影响

一旦恢复出平台本地 QE 的 Attestation Key,攻击者便可在不引起被攻击者注意的情况下伪造签名/证明,生成假的 quote 或伪造证明链,就可能使得原本应受保护的机密数据被非法分发,或允许恶意节点替换/篡改被认证的内容,从根本上破坏 TEE 基于远程证明的信任模型。

TEE.fail 影响了多个 TEE 架构,包括 Intel SGX、Intel TDX、AMD SEV-SNP 和 NVIDIA TEE,且同时覆盖 DDR4 与 DDR5 内存,这一结论已得到官方确认[10][11]它系统性地验证了确定性内存加密在可物理观测条件下的可被利用性,并在现实可行的硬件预算下展示了恢复远程认证私钥的可能性。

TEE.fail 对将远程证明作为单一信任锚的公开网络系统影响较为显著,诸如 Phala Network、Secret Network 等。此类系统依赖 SGX 的远程证明来建立节点身份与信任链;一旦攻击者在具备物理接触条件下恢复出 Attestation 私钥,就能伪造 quote、冒充可信节点,进而访问或篡改机密合约数据,严重削弱网络的隐私性与完整性保障。

相较之下,在依托大型云厂商的自建私有 TEE 服务场景中,TEE.fail 的现实影响较小。其一,大型云厂商的数据中心物理接触门槛高、分权审批与全程审计到位,硬件全生命周期受控;其二,架构层面不将 TEE 作为唯一信任锚,结合 MPC/HSM 等并行防护以降低单点失陷风险;其三,系统与业务强耦合并实施异构与网络隔离,难以形成通用化攻击与横向扩散。

缓解措施

针对 TEE.fail 攻击的防御,可以从以下三个方面来考虑:

第一,从 TEE 芯片的角度,如果要从根本上解决问题,应避免使用确定性内存加密方案。当前主流 TEE 仍采用“AES-XTS”(固定地址 + 固定密钥)确定性方案,容易被构造“密文字典”。更稳妥的方向是引入完整性校验与随机化加密,从底层切断密文复用通路。但在现阶段看来,随机化加密方案势必增大芯片设计复杂度并带来性能开销。因此,在实际设计与部署中,芯片厂商需要在安全与性能之间做出权衡。

第二,云厂商与 TEE 芯片厂家合作,提供支持位置验证与 CPU 白名单机制。在远程认证中加入位置或云服务验证,只信任登记在安全机房内的 CPU 实例,防止密钥被下发到未知硬件。理想情况下,云厂商应提供“云上证明(In-Cloud Proof)”功能,使验证方能确认证明确实来自受信任的云环境,而非云外或被伪造的 TEE。

第三,用户在应用 TEE 技术时,从设计上应限制权限、分散信任。比如不要让任何拿到可信状态的节点都能直接获取关键权限;或者考虑用安全多方计算(MPC)把密钥拆分给多个独立方,防止单点泄露导致系统沦陷。

结语

TEE.fail 攻击再次提醒我们,安全从不是一次性的成果,而是一场持续的博弈。每一次新的研究既揭示潜在漏洞,也推动防御技术的演进。无论是硬件加密、可信执行环境,还是系统级防护机制,都必须在持续的验证与改进中前行。真正的安全,不在于“已解决”,而在于“持续被研究、被强化”。Safeheron 将持续跟进 TEE.fail 及相关研究进展,并第一时间与社区分享我们的分析与应对。

参考文献

[1] Paper: WireTap: Breaking Server SGX via DRAM Bus Interposition 

[2] Paper: TEE.fail: Breaking Trusted Execution Environments via DDR5 Memory Bus Interposition

[3] WireTap.Fail

[4] TEE.Fail

[5] Elliptic Curve Digital Signature Algorithm

[6] Intel® SGX PCK Certificate and Certificate Revocation List Profile Specification

[7] Supporting Third Party Attestation for Intel® SGX with Intel® Data Center Attestation Primitives

[8] Intel® Architecture Memory Encryption Technologies

[9] [IEEE P1619] IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices. April 2008

[10] Intel: More Information on Encrypted Memory Frameworks for Intel Confidential Computing

[11] AMD:  Compromising Trusted Execution Environments through DDR5 Memory Bus Interposition

分享
联系我们