try ai
科普
编辑
分享
反馈
  • 可信执行环境:硬件强制的安全

可信执行环境:硬件强制的安全

SciencePedia玻尔百科
核心要点
  • TEE 创建一个名为安全区(enclave)的硬件强制隔离区域,以保护代码和数据,即使面对特权级且可能恶意的操作系统也不例外。
  • 远程证明允许第三方通过密码学方式验证合法代码是否运行在未经篡改的硬件上的真实 TEE 内部。
  • 尽管隔离性很强,TEE 仍然容易受到微架构侧信道攻击的威胁,这些攻击通过缓存等共享硬件资源泄露秘密信息。
  • TEE 应用广泛,从保护操作系统组件、缓解软件漏洞到实现隐私保护的多方计算。
  • TEE 的安全保证伴随着性能上的权衡,包括进入/退出安全区的高延迟以及复杂、开销大的I/O操作。

引言

在计算世界中,我们依赖层层软件来构建数字防御体系,但如果其根基——操作系统(OS)——本身无法信任,那该怎么办?一个受损的操作系统掌握着整个系统的主密钥,使得纯软件的保护措施形同虚设。这个根本性的安全悖论突显了一个关键的知识鸿沟:当机器上拥有最高权限的软件成为对手时,我们如何保护敏感数据和代码?可信执行环境(TEE)作为一种颠覆性的解决方案应运而生,它将信任根从可变的软件转移到了不可变的硬件。TEE 在处理器内部提供了一个安全的庇护所,在这里,机密性和完整性由芯片(silicon)而非仅仅由代码来强制执行。

本文将对这一变革性技术进行全面探索。第一章 ​​“原理与机制”​​ 将带您深入处理器架构,揭示 TEE 如何实现其卓越的保证。我们将剖析构成信任基石的硬件级隔离、内存加密和加密证明。随后,​​“应用与跨学科联系”​​ 章节将拓宽我们的视野,展示这项基础技术如何在不同领域得到应用——从加固操作系统安全、缓解常见软件缺陷,到其在嵌入式系统和未来安全分布式计算中的应用。读完本文,您不仅将理解什么是 TEE,还将领会它对未来安全计算的深远影响。

原理与机制

想象一下,您需要在计算机上保护一个秘密——可能是一个私钥、一份敏感的医疗记录,或是一段专有的金融逻辑。您的第一反应可能是用软件将其锁定:加密、密码、访问控制。但如果您所依赖的基础本身就充满陷阱呢?如果操作系统(OS)——您计算机资源的万能管理者——是恶意的或已被攻破,那该怎么办?操作系统就像一个持有所有房间万能钥匙的楼管;原则上,它可以窥探内存的任何部分。

这正是可信执行环境(TEE)旨在解决的根本难题。TEE 不仅仅是又一层软件,它是处理器内部由硬件强制实现的一个庇护所。它旨在创建一个“数字保险箱”,代码和数据可以在其中被隔离,不仅免受其他应用程序的干扰,还免受特权操作系统乃至对 CPU 芯片外部硬件的物理攻击。要理解这一非凡壮举是如何实现的,我们必须踏上一段深入机器核心的旅程,探索硬件、密码学和系统设计之间美妙而复杂的协同作用。

堡垒之墙:隔离与内存保护

TEE 的首要且最关键的任务,是在一块内存区域周围建立坚不可摧的墙壁,创建一个通常被称为​​安全区(enclave)​​的地方。这绝非易事,因为在普通计算机中,内存对于操作系统来说就像一本完全打开的书。

最直接的威胁是数据在处理器外部传输时易受攻击。当 CPU 需要获取其本地缓存中没有的数据时,它必须从主内存(DRAM)中抓取,而 DRAM 位于主板上,在 CPU 封装之外。攻击者可以物理“监听”连接 CPU 和 DRAM 的总线,读取经过的一切信息。为了应对这一点,TEE 在 CPU 裸晶(die)上直接采用了一个​​内存加密引擎​​。当 enclave 的秘密数据需要写入主内存时,该引擎会即时对其进行加密。当数据被读回时,它在重新进入 CPU 封装的安全区域时即被解密。用于此加密的密钥永远不会离开处理器。对于外部观察者来说,enclave 的内存内容只是一堆毫无意义的、被打乱的噪声。此外,这种保护还通过完整性检查得到加强,确保攻击者无法篡改或重放旧的加密数据,否则硬件会立即检测到欺诈行为。

然而,保护传输中的数据只是成功了一半。我们还需要防止不受信任的操作系统甚至试图访问 enclave 的物理内存页。这由内存管理单元(MMU)处理,MMU 是将程序使用的虚拟地址转换为内存硬件使用的物理地址的硬件。虽然 TEE 使用独立的“地址簿”(页表)来将 enclave 的地址转换与操作系统的分离开,但在微架构中潜伏着一个微妙的威胁。为了加速地址转换,处理器会缓存页表遍历的中间步骤。如果这些缓存由 enclave 和操作系统共享,而没有通过安全上下文进行标记,操作系统就可以通过观察缓存时序的变化来推断 enclave 正在访问哪些内存区域——这是一种侧信道攻击。这说明了一个深刻的道理:真正的隔离要求每一个共享资源,无论多么不起眼,都必须被分区或得到谨慎管理。

堡垒还必须保卫其周边。现代系统充满了诸如网卡和存储控制器之类的设备,它们可以绕过 CPU 直接读写内存,这个过程称为直接内存访问(DMA)。一个受损的设备可能被恶意操作系统指示去读取 enclave 的内存。为防止这种情况,TEE 依赖一种称为​​输入输出内存管理单元(IOMMU)​​的硬件。IOMMU 充当所有 DMA 流量的警惕边界守卫。它强制每个设备在其自己独立的“保护域”内操作,并使用一套严格的页表条目,仅授予其访问预先批准的内存区域的权限。需要将数据放入 enclave 缓冲区的网卡,会从 IOMMU 获得一本“护照”,该护照仅对该特定缓冲区有效,对其他任何区域都无效。

交战规则:执行与特权

堡垒之墙已立,我们必须定义墙内与墙外的生活规则。代码如何在 enclave 内部运行?当它需要与墙外不受信任的世界互动时会发生什么?架构师们为此发展出了两种主要哲学。

​​“双世界”模型​​,其著名实现是 Arm TrustZone,它将整个处理器划分为“普通世界”和“安全世界”。每个世界都是一个拥有自身特权级别的平行宇宙——有自己的内核和用户应用程序。当安全世界中发生像系统调用或硬件中断之类的事件时,由该世界内的可信安全操作系统来处理。这种设计提供了强大而清晰的隔离,因为普通世界完全看不到其安全对应方的内部运作。一个高特权的固件,即​​安全监视器​​,作为唯一的守门人,管理着两个世界之间严格受控的转换。

相比之下,​​“单世界”模型​​,以 Intel 的软件防护扩展(SGX)为例,则更像将 enclave 视为位于“普通世界”领土内的一个设防使馆。enclave 代码作为标准的用户空间应用程序运行,不具备操作系统内核那样的上帝般权限。这样做的好处是最小化了可信代码(即“可信计算基”)的数量。但当 enclave 需要操作系统才能提供的服务时,比如写入文件,会发生什么呢?它必须执行一次​​异步安全区退出(AEX)​​。硬件会一丝不苟地将 enclave 的整个状态(所有秘密寄存器值)保存到一个名为状态保存区(SSA)的受保护内存区域,退出 enclave 模式,然后将控制权交还给不受信任的操作系统来处理请求。当操作系统完成后,enclave 会被恢复,其状态从 SSA 中安全地还原,然后继续执行。

这种频繁的跨界行为带来了惊人的性能成本。enclave 内部的一次页面错误,需要操作系统介入处理,可能需要数万个处理器周期——在现代 CPU 的时间尺度上,这是一个极其缓慢的停顿。这个延迟是硬件从 enclave 中陷出、操作系统完成其工作以及硬件恢复 enclave 的总和。这是保持警惕的代价。

出生证明:安全加载与证明

如果敌人已经潜入内部,堡垒就毫无用处。我们如何在不被操作系统窥视或篡改的情况下,将可信的代码和数据加载到 enclave 中?一旦它开始运行,远程方——比如互联网上的一个服务器——如何确信它正在与一个运行着正确软件的真实 enclave 通信?这就是​​安全加载​​和​​远程证明​​的双重挑战。

解决方案始于 enclave 诞生的那一刻。当操作系统将 enclave 的初始代码和数据加载到其受保护的内存页时,CPU 内部的一个特殊硬件引擎会同时计算这些内容的加密哈希值——一个唯一的数字指纹。这个过程至关重要:它必须在硬件中完成,因为如果由操作系统计算哈希值,它完全可以撒谎,为恶意代码提供一个有效的指纹。这个由硬件生成的度量值存储在一个操作系统无法触及的特殊 CPU 内部寄存器中。

这个度量值构成了证明报告的核心。enclave 可以请求 CPU 生成一份签名的引述(quote),其内容大致是:“我,作为硬件,证明我正在运行一个 enclave,其初始内容的度量值为 M。”这份引述使用一个特殊的​​证明密钥​​进行签名,该密钥对每个 CPU 都是唯一的,并源自工厂刻录在芯片中的一个秘密。远程服务器只要知道供应商签名密钥的公钥部分,就可以验证引述的真实性。然后,它可以将度量值 M 与一个已知良好度量值的列表进行核对。如果匹配,服务器就获得了高保证的证据,证明它正在与一个运行在真实 TEE 内部、未受本地操作系统篡改的合法代码通信。

看不见的战场:微架构侧信道

即使有了加密内存和加密证明,对完美隔离的追求也并未结束。最阴险的威胁并非来自推倒堡垒的围墙,而是来自窃听它们发出的微弱振动。这些就是​​微架构侧信道攻击​​。

为了提高性能并节省芯片面积,现代 CPU 在不同进程之间共享许多内部资源。分支预测器就是一个这样的资源,它猜测条件 if-then-else 语句的结果。如果攻击者的代码和 enclave 中依赖于秘密的代码恰好使用了分支预测器表中的同一个条目,攻击者就可以通过观察它如何影响自己预测的准确性来推断 enclave 的秘密选择。这就像通过观察哪条路现在被踩得更实,来判断某人在十字路口转向了哪个方向。

同样,其他共享结构,如用于地址转换的缓存,甚至临时保存数据的物理寄存器文件,都可能泄露信息。核心问题是争用:当两方使用同一资源时,一方的行为会以可测量的方式影响另一方的性能。设计能够抵御这些攻击的 TEE 是一个持续而活跃的研究领域,通常涉及硬件层面的资源分区或避免产生泄密模式的复杂软件。这些攻击是一个美妙而又令人谦卑的提醒:在安全世界里,逻辑上分离的东西,物理上可能并非如此。

信任之基:信任根与生命周期管理

归根结底,TEE 的全部安全性都建立在一个公理之上:CPU 硬件本身是值得信赖的。但即使是 CPU 也会运行其自己的低级特权软件,称为​​微码​​。如果这个微码有漏洞,或者攻击者找到了安装恶意版本的方法怎么办?

这就是​​硬件信任根​​发挥作用的地方。这是安全的基石,由通过​​电可编程熔丝(eFuses)​​物理烧录到芯片中的不可变逻辑和密钥组成,这些熔丝只能写入一次。对手无法改变这个基础。

当系统启动时,这个信任根会验证加载的任何微码的签名。为防止攻击者诱骗系统加载一个旧的、有漏洞的微码版本(一种​​回滚攻击​​),硬件采用了​​单调计数器​​。这些是特殊的计数器,通常在 eFuses 中实现,就像一个棘轮——它们只能增加,永远不能减少。CPU 只会接受版本号严格大于单调计数器中记录的版本号的微码更新。这个版本号随后会被包含在证明报告中,允许远程方验证 TEE 不仅是真实的,而且还运行在最新、最安全的固件基础上。从上电到完全运行并经过证明的 enclave,整个过程是建立在这个不可伪造的硬件根之上的一系列精心编排的序列。这一点,连同加密和隔离的开销,共同构成了安全的总功耗和能源成本——这是信任设计中最终的物理权衡。

在这个错综复杂的架构中,我们看到了 TEE 的真正之美:它是计算机工程的杰作,一个依靠自身力量,在一个默认被假定为充满敌意的世界中创造出一小片可验证信任的系统。

应用与跨学科联系

既然我们已经探讨了可信执行环境的核心原理——即在处理器内部为代码和数据打造一个微小而坚不可摧的堡垒——我们就可以开始一段更激动人心的旅程。让我们不再问它是什么,而是问它为了什么。我们能用这样的工具构建什么?答案出人意料且意义深远,其应用范围从我们操作系统的根基一直延伸到未来计算机协作的方式。我们将看到,TEE 不仅仅是一个新的安全特性;它是一个催化剂,促使我们重新思考计算本身的架构。

重塑基石:保护操作系统

我们的第一站是任何计算机上最基础的软件层:操作系统。操作系统内核是机器的主宰,是管理所有资源的万能实体。但当这个主宰本身需要保护时会发生什么?考虑一下那些“王国的钥匙”——例如,用于全盘加密的主密钥。如果一个高明的攻击者成功攻破了内核,他们就能窃取这个密钥,解开设备上的所有秘密。

在这里,我们可以扭转局势,使用 TEE 来构建一个连内核都无法打开的保险库。然而,这引发了一个有趣的架构困境。全能的内核如何向一个按设计就不信任它的保险库请求秘密?现实世界中出现了两种主要哲学。

一种方法,见于 Intel SGX 等技术,是将保险库放置在用户空间应用程序中。enclave 是一个堡垒,但它是一个位于用户空间“平民之地”而非内核“皇家宫廷”的堡垒。内核为了访问一个密钥,必须暂停自己的皇家职责,进行一次代价高昂的上下文切换到一个指定的辅助进程,该进程再进入 enclave 执行操作。这是间接的,并引入了其自身特有的安全挑战。作为中介的不受信任的内核,可能会通过操纵 enclave 的输入来试图欺骗或迷惑它——这是一类被称为“Iago 攻击”的漏洞利用方式。

另一种方法,体现在 ARM TrustZone 等技术中,是设想处理器拥有两个平行的宇宙:一个“普通世界”,标准操作系统生活于此;以及一个“安全世界”,一个完全独立的执行环境。普通世界的内核可以发出一个特殊的、特权的“安全监视器调用”来向安全世界请求服务。这比通过用户空间辅助进程的路径更为直接,但仍然涉及两个世界之间代价高昂的转换。

无论哪种情况,我们都学到了一个至关重要的教训:没有免费的午餐。保护我们系统的根基是一场在性能与安全之间进行权衡取舍的游戏。此外,即使保险库的墙壁坚固,秘密也可能以微妙的方式泄露。控制操作系统的攻击者可能无法读取密钥,但他们可能会观察到其使用的副作用——比如缓存访问模式的微弱变化或页面错误的时序——并利用这些侧信道来拼凑出内部的秘密信息。

从缺陷到堡垒:软件安全的新纪元

从操作系统向上层移动,让我们考虑我们日常使用的应用程序。几十年来,最持久的安全漏洞之一是缓冲区溢出,这是一个简单的编程错误,攻击者可以利用它来劫持程序的控制流。一种流行的防御措施是“栈金丝雀”,一个像绊脚索一样放置在栈上的秘密值。如果攻击者破坏了栈,他们就会扰乱金丝雀,程序可以在造成任何实际损害之前关闭。

但一个能够读取程序内存的聪明攻击者,可以简单地读取金丝雀的值,执行他们的攻击,然后将原始值写回,从而巧妙地越过绊脚索。这正是 TEE 可以彻底改变游戏规则的地方。

我们可以不把秘密值存储在栈上,而是将 TEE 用作一个加密预言机。在函数开始时,程序请求 TEE:“请使用你隐藏的密钥来为函数合法的返回地址计算一个加密签名——一个基于哈希的消息认证码(HMACHMACHMAC)。”这个签名(它本身不是秘密)被作为金丝-雀放置在栈上。就在函数返回之前,它再次请求 TEE:“请为当前的返回地址重新计算签名,并告诉我它是否与我存储的那个匹配。”

这个方案的妙处在于,HMACHMACHMAC 密钥永远不会离开 TEE。攻击者可以读取栈上的签名,但他们无法为自己的恶意地址伪造一个有效的签名,因为他们没有秘密密钥。绊脚索现在变得不可伪造。这将一个简单的缺陷检测启发式方法转变为一个稳健的、有密码学支持的安全保证,展示了 TEE 的一个深远用途:不仅是隐藏秘密,更是提供不可伪造的完整性证明。

双刃剑:当安全工具被误用

强大的工具很少只被善良者使用。使 TEE 在防御方面如此有效的特性,同样可以被用于攻击。考虑一下现代的勒索软件瘟疫。对抗勒索软件的安全分析师的主要工作是逆向工程恶意软件,通常通过在其运行时转储其内存,以找到它用来加密受害者文件的加密密钥。

一个编写拙劣的勒索软件会将其密钥(哪怕是片刻)保存在自己的内存中。但如果勒索软件开发者很聪明呢?如果他们使用了 TEE 呢?

一个复杂的勒索软件可以使用操作系统自带的、由 TEE 支持的加密 API。它请求 TEE 为它加密的每个文件生成一个“不可导出”的密钥。这是一种特殊的密钥,它在 TEE 内部诞生,并被硬件禁止离开。恶意软件本身从未见过原始的密钥字节;它只得到一个不透明的“句柄”,就像一张存物凭证。它可以告诉 TEE,“请使用 58 号密钥加密这个文件”,但它无法访问 58 号密钥本身。

当安全分析师到达现场并转储恶意软件的内存时,他们发现……什么都没有。句柄在那里,但密钥本身却不见了。它们仍然被锁在 TEE 内部,无法访问。这个旨在保护我们数据的安全特性被用来对付我们,使得恶意加密在没有攻击者合作的情况下实际上变得不可逆转。这是关于技术双重用途性质的一个发人深省的教训,迫使我们在网络安全的猫鼠游戏中提前思考几步。

无形计算机:保护嵌入式世界

我们的旅程现在将离开传统计算机,进入广阔互联的嵌入式系统和物联网(IoT)世界。计算机不再仅仅在我们的桌面上;它们存在于我们的恒温器、汽车和医疗植入物中。在这些系统中,正确性和时序不仅关系到便利性,更可能关系到物理安全。

想象一个智能恒温器,其核心控制循环——即读取温度并决定何时启动熔炉的逻辑——运行在 TEE 内部以防范恶意软件。这对安全来说是巨大的一步,但也从实时系统的世界带来了新的挑战。控制循环必须在严格的时间预算内完成其周期,以确保加热系统保持稳定。然而,使用 TEE 会增加延迟。这包括进入和退出 enclave、对传感器数据执行加密检查以及其他安全操作的开销。工程师必须精心预算这段时间,确保即使在最坏的情况下,系统也能足够快地响应。

这种延迟的一个主要来源来自像输入/输出(I/O)这样简单的事情。TEE 是一个孤岛;它不能直接与温度传感器或熔炉开关对话。它必须依赖不受信任的操作系统充当渡船,来回运送数据。因为操作系统不受信任,并且像 DMA 控制器这样的硬件通常不能写入受保护的 enclave 内存,所以这个过程是费力的。数据必须通过共享内存“信箱”以小的、经过认证的片段进行复制,每个片段都需要在安全边界上来回一次。这给原本简单的操作增加了显著的开销和复杂性。

用 TEE 保护嵌入式世界迫使多学科的融合。工程师必须既是安全架构师、实时系统设计师,又是资源管理者,仔细分配内存以避免页面错误带来的时序侧信道,并在安全性的铁律保证与物理世界的硬性截止时间之间取得平衡。

构建秘密社会:分布式信任的未来

为了结束我们的巡礼,让我们展望一下未来。我们主要考虑的是一个单一的 TEE 堡垒对抗一个不受信任的世界。但是,当我们拥有许多这样的堡垒,每个堡垒都属于不同的所有者,而他们之间甚至可能互不信任时,会发生什么呢?

这就是安全多方计算的前沿。想象几家医院希望利用他们敏感的患者数据合作进行一项研究。没有一家医院愿意将自己的数据展示给其他医院。通过让每家医院在 enclave 内运行其分析代码,他们可以创建一个“秘密社会”。这些 enclave 可以相互建立安全的、经过认证的通道,并协同处理一个加密的数据集。

要做到这一点,他们需要在没有中央可信机构的情况下商定共享的秘密,比如一个群组加密密钥。他们可以自己构建一个协议来完成这件事。例如,一个 enclave 可以生成一个新的群组密钥,使用其自己硬件绑定的“封装”密钥为自己锁定一个副本,然后在一个安全的环中将密钥传递给下一个 enclave。这个过程一直持续,直到群组的所有成员都拥有一个副本,使他们能够协同工作。当然,管理这个数字社会,包括像定期轮换密钥以确保前向保密性这样的任务,会引入其自身的加密开销和协议复杂性。

这种协作式 enclave 的愿景将 TEE 从简单的隔离容器转变为一个新的、去中心化信任基础设施的基本构建块。它为隐私保护机器学习、安全供应链以及新型分布式应用打开了大门,在这些应用中,信任不再寄托于单一实体,而是由一个可验证的、隔离的硬件堡垒联盟来强制执行。

从内核到云端,从你的恒温器到全球规模的数据分析,可信执行环境这个概念的影响才刚刚开始显现。它为划分可信与不可信之间的界限提供了一个新的、强大的原语,迫使我们在构建一个安全的数字世界时更具创造力、更加谨慎,并最终更有能力。