02-TEE 硬件
TEE技术是隐私计算的核心技术之一,目前较为成熟的技术主要有:Intel SGX、ARM TrustZone、AMD SEV 和 Intel TXT 等。
ARM TrustZone
TrustZone 是 ARM 针对消费电子设备安全所提出的一种架构,带有 TrustZone 的 ARM 处理器实现了体系结构安全扩展,其中每个物理的处理器内核提供了两个虚拟内核,一个被认为是非安全的,被称为“非安全区”,另一个被认为是安全的,被称为“安全区”,以及一个在两者之间的上下文切换机制,称为监视模式。
最简单的情况下,当非安全区的用户模式需要获取安全区的服务时,首先需要进入到非安全区的特权模式,在该模式下调用SMC(System Monitor Call),处理器将进入到监视模式,监视模式备份非安全区的上下文,然后进入到安全区的特权模式,此时的运行环境是安全区的执行环境,此后进入到安全区的用户模式,执行相应的安全服务。
这里把安全区的用户模式和特权模式分离,是因为通常特权模式中的执行环境是系统级别的,而用户模式的安全服务是应用级别的,两者的提供者通常是不同的。图1是TrustZone模式切换方式的示意图。
安全区域是指处理器处于安全状态时运行的一切,而正常区域是指处理器处于非安全状态时运行的一切。 建立了硬件屏障是防止正常区域的组件访问安全区域的资源;安全区域则不受限制。
具体而言,该存储系统防止正常区域访问:
i)物理存储器中指定的安全区域;
ii)适用于安全区域的系统控制;
iii)在少数批准的机制之外的状态切换。
上述的分区可以是物理的和/或虚拟的。举例来说,物理和安全处理器以时间分割的方式共享物理处理器核心,这给了两个区域一个幻想,即它拥有处理器。安全区域使构建隔离的可编程环境成为可能,该环境可以运行各种安全应用程序。
各芯片产商会根据 ARM 公司对于 TrustZone 的硬件设计在具体的芯片上进行设计和实现,基于 TrustZone 技术,可以搭建一个可信执行环境 TEE,在 TEE 内可以有基于 TrustZone 的操作系统
如高通的 QSEE、开源的 OPTEE 等,下图即为高通的 QSEE 的整体架构。
在国产化方面,飞腾、华为等都推出了基于 ARM 架构 CPU 的 TrustZone 方案,如下图所示是支持 TrustZone 技术的飞腾 FT-2000CPU 的系统软件架构。
Intel SGX(Software Guard Extensions)
https://www.intel.com/content/www/us/en/developer/tools/software-guard-extensions/overview.html
SGX 是 Intel 开发的 TEE 实现。SGX 是 Intel 架构新的扩展,在原有架构上增加了一组新的指令集和内存访问机制。这些扩展允许应用程序实现一个被称为安全区(Enclave(飞地)
)的容器,在应用程序的地址空间中划分出一块被保护的区域,为容器内的代码和数据提供机密性和完整性的保护,免受拥有特殊权限的恶意软件的破坏,即使底层的高特权系统软件(例如OS或虚拟机管理程序)是恶意的或已被破坏,SGX 仍可抵抗物理内存访问类的攻击。
在 SGX 安全模型中,可信计算基(Trusted Computing Base,TCB)被视为CPU组件,而系统的其他部分则被视为不可信任。SGX 的实现需要处理器、内存管理部件、BIOS、驱动程序、运行时环境等软硬件协同完成。除了提供内存隔离与保护安全属性,SGX 架构还支持远程认证和密封的功能,可用于安全软件应用和交互协议的设计。
其大致工作原理如下:SGX划分了一块专属内存区域,只有运行在SGX内部的程序能访问此段内存。其方法是在CPU这一层加了一个判断:如果外部访问的内存地址属于SGX的保护范围,则会返回无法访问。其整个判断过程都是写死在CPU电路里的,可以认为难以被篡改。
SGX 最关键的优势在于将应用程序以外的软件栈如 OS 和 BIOS 都排除在了 TCB 以外,一旦软件和数据位于 Encalve 中,即便是操作系统和 VMM(Hypervisor)也无法影响 Enclave里面的代码和数据,Enclave 的安全边界只包含CPU和它本身。
SGX Enclave 运行时主要由三个部分组成,分别是运行在 Ring0 的系统模块即 SGX 驱动,和运行在 Ring3 中的非可信运行时系统即 uRTS,以及运行在 EPC 内存区的可信运行时系统(tRTS),其中 Enclave 代码和数据放置在被称为 Enclave Page Cache。
SGX驱动主要完成如下工作:
- Enclave加载。
- 内存空间分配与销毁。
- 换页和缺页中断处理。
uRTS主要完成如下工作:
- Enclave加载和卸载。
- 调用管理,处理所有ECall和OCall请求。其中ECall指调用Enclave内的请求,OCall指从Enclave内调用外部的请求。
- 异常处理,判断具体异常反向调用Enclave。
tRTS主要完成如下工作:
- Enclave加载。
- 调用管理,处理ECall和OCall。
Enclave 代码和数据放置在被称为 Enclave Page Cache(EPC)的特殊内存区域中,该内存区域使用内存加密引擎(MEE)进行加密,下图展示的是 SGX 对 Enclave 内存的保护过程:
Intel SGX 的工作原理
- 每个 SGX 应用程序至少包含两个不同的部分。位于安全区内部并在 Enclave 页面缓存(EPC)中执行的受信任代码,以及位于不受信任的系统内存中并执行的不受信任的代码;
- 不可信任的部分创建 Enclave,并且定义进入点并执行放置在称为 Enclave页面缓存(EPC)的加密且受信任的内存中的安全区。
- 安全区初始化后,不受信任的代码通过调用 EENTER 指令来调用Enclave代码,该指令将处理器模式从保护模式切换到安全区模式;
- 然后处理器在 Enclave 内执行被调用的代码;
- 调用 EEXIT 指令会导致 Enclave 内执行线程退出 Enclave,并且执行流程返回到不受信任的代码。
除了用户创建的 Enclave 外,SGX还使用了一些基础架构 Enclave(例如引用Enclave和配置Enclave)为本地或远程验证机制提供支持。 最后,SGX提供了一个可以保护静态Enclave数据的Enclave密封机制。
SGX创建有限大小的加密内存区域称为Enclave页面缓存(EPC),其中所有enclave在此区域内创建。在当前的实现中,EPC大小可以设置为32MB,64MB或128MB (SGX2 可支持256MB),SGX还提供了一种硬件访问控制机制来保护Enclave的内存,非法进入Enclave内存的结果是页面错误。
SGX还提供了在系统内存和EPC页面之间安全封送数据的功能,SGX使用硬件内存加密引擎(MEE)来对数据进行加密和解密。 SGX允许代码在Enclave内直接访问EPC外部的内存,但是,从Enclave内部到外部的内存访问由操作系统内存管理策略控制。因此,Enclave不能无视操作系统内存访问策略。这是因为Enclave代码只能在操作系统的第3环中执行处理任何系统调用。任何从Enclave内部的代码对Enclave外部内存非法访问的尝试会导致页面错误。
此外,SGX支持Enclave内部的多线程处理,以加速并行应用程序的执行性能。不同于其它的 TEE 实现, SGX 每个 APP 都可以有自己独立的 TEE,甚至可以创建多个TEE,这里也省去了向设备厂商申请将 TA (可信应用)装入 TEE 的过程。
值得关注的是,Intel SGX 已经先后发布了 SGX1 与 SGX2 两代次。其中在服务端芯片中 SGX2 已在 2021 正式开始大规模商用。
SGX2 相较于 SGX1 增加了Enclave动态内存管理(Enclave Dynamic Memory Management,简称为EDMM)能力。在SGX1的指令集中,创建Enclave时需要提前确认Enclave需要用到的内存大小。并且在运行过程中代码模块不能动态加载到Enclave中。这种设计一是增加了Enclave的启动时间,因为需要确认所有内存地址。二是限制了EPC的空间大小,因为需要预分配,考虑到合理性,SGX1 EPC内存上限被设置为256M。这就导致了在运行过程中超过256M的堆栈,会被以换页的形式加密换出到系统内存中,类似换页就会带来较大的性能开销。
SGX2设计引入了EDMM机制,提供了在保证安全性的同时可动态扩缩Enclave内存的能力。EDMM方案中EPC中内存的分配主要有基于OCall事件触发的分配以及基于缺页终端触发的分配两种模式。其核心都是由SGX Driver分配内存页,再由Enclave确认分配生效,分配机制对应用层透明。
SGX2在引入EDMM后,安全性没有降低。SGX2依旧确保Enclave内存页的一致性,一致性可以被度量。由于内存分配依赖OS,为了防止OS提供错误的内存页,每一次内存调整Enclave都需要二次检查内存页(包括权限)的正确性。
SGX支持通过安全认证技术来向挑战者证明Enclave中运行的用户程序的完整性和真实性。SGX的安全认证分为本地认证和远程认证,下图展示的是SGX的远程认证流程:
AMD 的 SEV (Secure Encrypted Virtualization)
SEV 通过提供加密的 VM 隔离来解决高特权系统软件类别的攻击,每个虚拟机使用一个密钥隔离客户机系统和虚拟机管理程序。密钥由 AMD 安全处理器生成和管理,内存控制器中嵌入了 AES-128 加密引擎。提供适当的密钥后,将自动对主存储器中的数据进行加密和解密。
SEV 需要在客户机操作系统和管理程序中启用。客户更改允许 VM 指示哪些页面应在内存中加密。系统管理程序(Hypervisor)更改通过使用硬件虚拟化指令以及与 AMD 安全处理器的通信来管理内存控制器中相应的密钥,也就是说系统组件(比如系统管理程序)试图读取客户机的内存时,只能看到被加密后的字节。
SEV VM 使用客户机中页表中的加密比特 C 来控制一个内存页是私密的还是共享的,比特C的位置有具体实现定义,可以是物理地址的最高位,见下图,VM标记共享(非加密)内存页时,C比特=“0”,表明不必使用该VM的内存加密密钥对其加密,私密(加密)内存页只能用于VM,标记C比特=“1”,一个典型的VM中,大多数内存页被标记为私密的,只有那些与外部通信的内存页才会标记为共享的,由于SEV对保密性的承诺,SEV-SNP对完整性的保证尽适用于客户机私密的内存页。
2017 年 AMD 又引入了 SEV-ES(Encrypted State)增加了对 CPU 寄存器状态的保护,当 VM 停止运行时,将加密所有 CPU 寄存器的内容。这样可以防止将 CPU 寄存器中的信息泄露给虚拟机管理程序之类的组件,甚至可以检测到对 CPU 寄存器状态的恶意修改。
随后,AMD又推出了SEV-SNP,SEV-SNP建立在原始的AMD SEV和SEV-ES的基础上,可提供额外的基于硬件的内存完整性保护,以抵御基于管理程序的攻击,比如:数据回放、内存重新映射等。“SEV-SNP完整性的基本原理是,如果VM能够读取内存的私有(加密)页面,则它必须始终读取其最后写入的值。这意味着,如果VM将值A写入内存位置X ,每当以后读取X时,它要么必须看到值A,要么必须得到一个异常,指示无法读取内存。 SEV-SNP的设计使VM不能看到与内存位置X不同的值。”
SEV 主要有三个核心技术:
- SVM,虚拟化技术。
- SME,内存加密技术。AMD在DRAM的控制器中添加了加解密模块,用来控制内内存数据的加密和解密。
- SEV,虚机内存保护技术。是在SVM、SME的基础上对虚拟机进行保护提供的安全增加功能,主要完成对虚拟机内存数据的保护。
将主内存加密功能与现有的AMD-V虚拟化体系结构来支持加密的虚拟机。 加密虚拟机不仅可以让虚拟机免受物理威胁,还可以免受其他虚拟机甚至是hypervisor本身。 因此,SEV代表了一种新的虚拟化安全范例,特别适用于虚拟机不需要完全信任其主机的hypervisor和管理员的云计算系统。 与SME一样,不需要修改应用程序软件即可支持SEV。
在国产化方面,海光推出过相关的解决方案。
Intel TXT(Trusted Execution Technology)
Intel TXT 的主要目标是通过使用特定的Intel CPU、专用硬件以及相关固件,建立一个从开机就可信的环境,从而为系统上运行的用户程序提供更好的安全保护。
Intel TXT 依赖于可信平台模块(Trusted Platform Module,TPM)来保存软件的指纹信息,每次软件启动时都会 Intel TXT 都会检测并对比这些指纹信息是否一致,从而判断是否存在风险。
Intel TXT 引入了两个 TCG 概念:静态信任链(Static Chain of Trust)和动态信任链(Dynamic Chain of Trust),如下图所示。静态信任链度量平台配置,动态信任链度量系统软件、软件配置及策略。对于Intel TXT而言,信任根(Root of Trust)就是支持TXT技术的Intel CPU。
在国产化方面,兆芯推出过基于其自主设计的开先系列CPU的ZX-TCT解决方案,来应用于可信计算领域。
Apple SEP(Secure Enclave Processor) 安全协处理器
在没有使用 Intel SGX 和 Arm Trustzone 技术的情况下,Apple 另辟蹊径提出了自己的安全协处理器 SEP 方案。
SEP 是一个 独立于 主处理器外的安全处理器。它具有自己的安全操作系统,能够执行加密运算,管理密钥,以及处理与生物识别相关的事务。SEP 与主处理器隔离,即使操作系统被攻破,SEP 中的数据也难以被直接访问。
SEP 使用加密的内存,并包括一个硬件随机数生成器。SEP 提供了用于数据保护密钥管理的所有加密操作,即使内核受到威胁,也可以维护数据保护的完整性。通过将安全区域与应用处理器之间的通信隔离到中断驱动的邮箱和共享内存数据缓冲区,可以对其进行严格控制。
SEP 包括专用的安全隔离区引导只读存储器(ROM)。与应用程序处理器启动 ROM 相似,安全协处理器启动 ROM 是不可变的代码,可为安全协处理器建立硬件信任根。
SEP 是某些版本的 iPhone,iPad,Mac,Apple TV,Apple Watch 和 HomePod 的硬件功能,即:
- iPhone 5s(或更高版本)
- iPad Air(或更高版本)
- 包含T1芯片或Apple T2安全芯片的Mac计算机
- Apple TV 4代(或更高版本)
- Apple Watch Series 1(或更高版本)
- HomePod
Microsoft Virtualization-based Security (VBS) and Hypervisor-based TEE
不同的TEE方案的特点
从前面的例子中可以看到几类TEE实现方案的特点:
- 以ARMTrustZone为代表的特权模式方案,使用指令或中断在同一处理器上的执行环境之间切换,就像更高特权模式下的特殊中断处理程序一样,下层模式无法访问其代码和内存,可用于运行单独的操作系统和应用,就ARMTrustZone而言,支持GP(Global Platform)的TEE标准,GP标准主要是针对移动设备和IoT设备;
- 以IntelSGX为代表的用户安全Enclave方案,对特定区域的内存进行加密保护,它的特点是:在一个进程中形成一个安全容器,对RAM进出的内存进行加密,TCB的规模最小,只有硬件和Enclave,能够受益于操作系统的所有功能,初始代码是从普通空间复制而来,不是加密信息。 需要远程验明才能从外部加载/存储密钥,并且该方案不提供本地安全的输入和输出;
- 以AMDSME/SEV为代表的内存加密方案,通过对整个操作系统的内存加密来防止通过总线/ DRAM遭受物理攻击,当客户机从租户获得密钥时,加密可以扩展到虚拟化环境,通过对客户操作系统进行加密来对抗被入侵的虚拟机管理程序。操作系统本身在TCB(Trust Computing Base)中,该方案多用于云中的应用,可保护数据免受CSP(Cloud Solution Provider)的侵害;
- 以苹果安全Enclave为代表的协处理器方案,通常是芯片组或SoC中内置协处理器,内部带有单独的操作系统和应用程序,应用通过安全信道与外部通信,通常包括加密引擎。