1.7 硬件辅助计算机安全

除了电路级IC供应链保护方法,硬件安全还可以为软件安全研究者提供高层保护方法。换言之,软件安全研究者借助分层安全保护开发了各种方法,通过较低抽象层(如虚拟机监视器)的安全增强保护较高抽象层(如操作系统)[119-121]。通过这种链式保护,软件安全保护方案已经从虚拟机向下推至管理程序(hypervisor)。根据这一趋势,研究者正在开发新的方法,修改底层硬件以直接支持复杂的安全策略,使系统级运行的保护方案更加高效[122]。事实上,支持软件安全保护的安全硬件在学术研究和行业产品中已经变得相当普遍[29,30,123]

1.7.1 ARM TrustZone

在众多支持软件保护的安全硬件中,最有名的例子是由ARM公司开发的TrustZone。实现可信计算的TrustZone方法基于可信平台,其硬件架构支持并强化了整个系统的安全基础。换言之,TrustZone架构并非保护特定的硬件模块,而是强制将系统范围的安全性扩展到系统的任意组件。TrustZone架构旨在提供一个安全框架,以便能够构建一个可编程环境,使得应用程序资产的机密性和完整性免受各类软件攻击[29]

TrustZone的实现依赖于划分片上系统(SoC)的硬件和软件资源,让其存在于两个区域:安全区域和非安全区域。硬件支持访问控制和权限控制机制,以处理安全区域和非安全区域的应用程序及其之间的交互和通信。软件资源支持安全系统的调用和中断,使系统能在多任务环境下安全运行。TrustZone从硬件和软件两方面确保除通过安全通道之外,非安全区域的组件无法访问任何安全区域资源,在安全区域和非安全区域之间建立有效的安全隔离。TrustZone保护模式已扩展到通过启用TrustZone的AMBA3 AXI总线结构连接到系统总线的I/O,可管理内存分区。

1.7.2 英特尔SGX

英特尔SGX(软件防护扩展)是为执行内存访问策略和权限而添加到英特尔架构中的安全扩展。这些安全扩展使应用程序在本机操作系统环境中执行时能够保持机密性和完整性,用户空间划分通过指令集架构(instruction set architecture,ISA)扩展得以实现。这些安全扩展可用于生成硬件可执行容器,其粒度由开发者确定,可选择细粒度和粗粒度。这些安全扩展允许应用程序实例化一种叫作enclave的受保护容器。envlave定义了应用程序地址空间的受保护区域。envlave虽对操作系统不透明,但仍由操作系统管理。非enclave中的软件尝试访问enclave内存区域会被阻止,即使是特权软件,如虚拟机监视器(VMMs)、BIOS和OS也遵循这一原则。SGX在enclave内存访问语义和地址映射保护方面提供了改进的架构支持[30,124]

从上述介绍中可以分析出,enclave是应用程序地址空间的一个保护区,即使在有特权软件的情况下,也能保证机密性和完整性。在构建enclave之前,可以自由对enclave代码和数据进行检查和分析。一旦受保护的部分被加载到enclave中,其代码和数据就会被监控,并拒绝所有外部软件访问。

1.7.3 CHERI扩展

CHERI扩展(硬件性能增强RISC指令)试图在保持软件兼容性的同时,在硬件中提供细粒度的内存分区。在CHERI扩展技术出现之前,有些安全保护技术因通过软件虚拟化提供细粒度分区导致了较高的性能开销,而通过硬件分区来减少开销却只提供了粗粒度的保护。内存管理单元(memery management unit,MMU)页面保护或堆栈框架是分区的两个例子。虽然它们在提高性能的同时还可提供虚拟化保护,但是仍然无法提供细粒度保护[125]

CHERI扩展通过基于性能的寻址方案和MMU虚拟内存支持,扩展了64位MIPS-ISA(指令集架构)和字节粒度的内存保护。研究者已实现对LLVM编译器和FreeBSD操作系统的修改以支持CHERI扩展。CHERI扩展涉及的主要技术热点是通过以下八个需求进行内存保护:非特权使用、细粒度、不可伪造性、访问控制、段及域可扩展性、增量部署和指针安全。一般在系统调用不频繁时,强制保护指的是非特权使用。细粒度的保护方式不仅要能够容纳压缩后的数据,并且还要能够处理奇数的字和字节。因为CHERI扩展的实现机制不涉及增加权限的操作,所以防范了通过增加权限来伪造软件的攻击方式。硬件应该监视并控制受保护的内存区域及其权限,以满足访问控制的要求。每个段和域的内存存储开销应分别随受保护区域的数量和使用频率进行适当调整。最后,即使共享库等受保护的组件利用细粒度的保护进行增量部署,也应该在不重新编译的情况下运行现有的用户层面的应用。通过将保护属性与类似于宽指针的对象引用相关联,可以加强指针的安全性。换言之,每个指针都对其所指向的地址、框架的边界进行编码控制。

1.7.4 开放硬件平台lowRISC

开放硬件平台lowRISC由一个非营利的组织运营,与剑桥大学和开源社区紧密合作,旨在成为一个基于64位RISC-V指令集架构的完全开源SoC[126,127]。其主要设计目标包括40/28nm技术节点、开放许可、新型安全特性、可编程I/O、AMBA总线和Linux支持。此外,SoC将作为低成本运算平台的核心计算单元,以便于批量生产。剑桥大学的研发团队主要受开源社区和创新创业公司的激励,希望能够提供一个由学者、专家和爱好者共同支持的研究平台。

在早期的设计阶段,lowRISC开发者已发布一些他们认为可以实现安全性和高性能的SoC细节:标记内存和minion内核。这些是已计划、尚未实现的设计目标,因此尚未提出评估和性能指标。实际上,minion内核是简单的处理器,具有可预测的特性,可直接访问I/O,用于筛选I/O及运行性能要求不高的任务。标记内存将数据与每个内存位置相关联,用于执行细粒度内存访问限制。

在lowRISC标记内存的实现中,每个内存地址都用标记位标记。这样,lowRISC的实现可以支持基本的进程隔离。为防止内存破坏影响返回地址、vtable指针和堆栈指针,可对编译器进行修改,使其生成的指令可以标记易受攻击的位置。对于返回地址或vtable指针,可以进行简单的只读保护,或通过锁定和解锁代码指针防范“释放后使用(use-after-free)”漏洞。此外,根据程序的控制流,可以应用控制流完整性检查跳转目标的有效性。lowRISC提供的广泛安全策略实施的最低要求包括ISA扩展和对编译器、内存分配器与libc环境的修改,以及更新内核虚拟内存系统来处理标记位。