MIPS-VZ与ARMv8-M CMSE安全大比拼
概述
ARMv8-M安全特性扩展(CMSE)是基于Trust-zone(TZ)技术。类似于其他基于TZ的系统,他们都存在一个安全的空间和一个不安全的空间。这意味着所有受保护的代码必须相互信任,因为它们的执行会共享同一段同属安全区域的地址空间。
MIPS-VZ采用的是基于硬件的CPU虚拟化技术,可以实现多个执行域,每个域都是独立的且是彼此间受保护的。这样就有一个好处,即受保护的代码不需要信任其他代码,因为它们都拥有私有执行域。MIPS-VZ架构最多支持255个独立的域,某些特定的CPU可能实现较少数目的域。
执行模式
ARMv8-M CMSE和MIPS-VZ增加了新的执行模式来区分对待不同的代码,对于绝对信任的代码则赋予更多权限,对于其他非信任代码则使用较低的执行权限。
ARMv8-M在NonSecure-Handler和NonSecure-Thread(较低信任度)状态的基础上增加了Secure-Handler和Secure-Thread(较高信任度)执行模式。
与之相似的是MIPS-VZ在Guest-Kernel和Guest-User(信任度最低)模式的基础上增加了Root-Kernel(信任度最高)和Root-User执行模式。
对于ARMv8-M CMSE和MIPS-VZ模型我们可以等价来看:MIPS架构同样设置了一个安全域,除此之外还提供多个“正常(Normal)”执行域,各个域彼此相互隔离。
内存管理
ARMv8-M CMSE采用两个模块来解决内存访问问题,即SAU(Security Attribute Unit,安全属性单元)和MPU(Memory ProtecTIon Unit,内存保护单元),分别作为安全分区和非安全分区。SAU解决了安全/非安全模式下内存访问问题,然后MPU单元负责各自安全模式访问特权级问题。
MIPS-VZ采用MMU(Memory Management Unit,存储器管理单元),并有两种配置方式:
1对于大型系统采用二级TLB设置。a.Guest TLB用于Guest OS(访客模式)b.Root TLB用于Root-Kernel模式(管理员模式)。这是典型的虚拟化执行模型,对于访客提供访客模式的系统,从操作系统(OS)级别提供了访问隔离。
2对于小型系统采用二级MMUa.访客分区可以是全TLB或者是Fixed-Mapping-TranslaTIon(固定映射转换,FMT)单元。b.对于Root分区则采用精简的TLB,不支持物理地址寻址,称为RPU(Root ProtecTIon Unit,根保护单元)。对于RPU的管理类似于TLB,在初始化任何Guest(非信任级)访问前采用安全程序对RPU单元进行配置。对于异常则不是通过handler(处理程序句柄)来处理,而是采用分页请求(demand-paging),尽管handler也能进行类似的操作。
Guset MMU采用FMT模式时,Root MMU采用RPU模式,这样就可以提供了应用级的隔离功能。也就是说,访客模式下的应用程序/代码执行全部在普通特权级情况下执行。可认为这是一个更静态或受约束的运行环境。举个例子,OEM厂商生产和提供的芯片时往往预先烧写了一些自己专用程序,这些程序可以在访客模式或者Root模式下执行且能保持隔离。除此之外VAR(value added reseller,增值分销商)也会向芯片内烧写自己的专用程序或者第三方程序,它们的运行环境也在访客模式下也保持了彼此的隔离。
MIPS-VZ MMU是基于CAM实现的,而ARMv8-M SAU/MPU是基于基地址绑定(即地址比较器)实现的。与基于比较器实现的MMU表项相比,基于CAM实现的MMU表拥有更小的硅片(Die)面积。因此,MIPS虚拟化方案是一种全面可扩展的解决方案,可以实现从应用级到操作系统级的隔离。
不同安全分区的程序调用
ARMv8-M CMSE增加了这样一个功能,即非安全程序(Non-Secure Code)可以调用安全分区内特定的程序但无需使用安全监控程序调用(Secure Monitor Call),这就避免了安全监控程序调用在不同状态下保存/恢复操作所带来的开销。
实现方式:a)使用SG(安全网关)指令申请一个安全分区地址空间的合法接入点。b)SAU的使用指明运行时被调用的程序可以驻留在某个非安全模式(Non-Secure-World)分区内,这样的分区统一被称为NSC(Non-Secure-Callable,非安全可调用)分区。c)如果允许的话,SG指令后面紧跟着跳转至在安全内存空间的安全函数。
对于MIPS-VZ,同样的功能是通过在多个访客/域之间分享程序调用实现的。通过配置MMU的Root分区来创建分页,使指定的访客(Gusets)可以共享这部分分页空间。为了保护代码我们可以设置程序为仅允许执行属性(既不允许读操作也不允许写操作)。Root MMU会根据Write-Inhibit, Execute-Only和Read-Inhibit属性设置进行权限审查。
MIPS-VZ方案在执行速度和延迟表现更佳,因为它不需要SG指令和相关的紧跟在SG指令后面的跳转指令,避免了这部分开销。