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对于小型系统采用二级MMU
a. 访客分区可以是全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指令后面的跳转指令,避免了这部分开销。

更进一步讲,只有Root权限程序或者安全启动代码会使用到MIPS虚拟化模型提供的保护机制,因此而对于其他大部分应用程序是透明的。也就是说在提供了安全控制措施情况下。但是编程模型与非虚拟化系统仍然相似,。Root权限程序可以全面监控访客的活动,但是无需通过将权限交给操作环境来完成。

中断处理

当运行在安全执行模式下,ARMv8-M CMSE支持ARM快速中断机制

与之相似的是,MIPS-VZ同样支持MIPS快速中断机制。中断可以直接分配给每个Guest,而且中断的处理不需要Root-Kernel程序/监控程序或者额外的安全机制来干预,同样中断也可以分配给Root。

SOC安全

ARMv8-M CMSE支持传统的TZ HNONSEC信号和HPROT内存属性信号,IO设备利用这些信号来判断哪个实体(安全分区或非安全分区)正在发起内存空间请求。

MIPS-VZ采用多比特GuestID信号实现同样的功能。由于采用多个比特位,因此可以通过不同的二进制位编码使每个Guest都能够被识别,IO设备根据不同的Guest会有不同的操作,因此多个受保护域可以扩展到整个SOC

上下文切换

TrustZone安全空间<->非安全空间的上下文切换需要对GPRs和FPRs进行保存和恢复操作。

在MIPS-VZ架构下类似这种上下文切换的功能是Root模式<->Guest模式之间的上下文切换,但是这里不再需要对COP0进行保存/恢复操作,因为在Root模式和Guest模式下都有自己的COP0的副本(COP0在MIPS架构下用于记录CPU特权级控制/状态寄存器,异常逻辑寄存器,MMU状态)。对于GPRs和FPRs状态需要被保存和恢复这种情况,以M5150为例,影子寄存器特性可以与CPU虚拟化机制相结合,GPR影子寄存器可以分配给每个Guest,这样就不需要GPRs的保存/恢复操作。另外在处理器内核MIPS架构同样定义了多线程(Multi-Threading)虚拟化,在同一个核中多个独立的上下文可以实现时分多路复用,并且完全隔离,且不需要保存/恢复某一状态。

因为MIPS-VZ支持多个域/Guests,那么就会发生Guest1<->Guest2之间的上下文切换。每个Guest都好比是一个操作系统,因此可能控制COP0,对于这种情况下GPRs,FPRs和COP0不得不进行保存/恢复。同样,影子寄存器特性仍然可以用来减轻GPR状态保存/恢复操作的影响。

与此形成鲜明对比的是,TrustZone不支持运行多个Guest操作系统环境,仅限于在共享模式下的TZ RTOS或者TZ管理员环境下运行多个安全应用程序。

总结

MIPS虚拟化架构是一个简单但是全面稳定性更高的安全应用解决方案,能够灵活的实现应用程序级到操作系统级的安全隔离机制,这些特色,可以灵活的满足用户的各种不断变化的安全威胁需求。

声明:
本文为原创文章,转载需注明作者、出处及原文链接,否则,本网站将保留追究其法律责任的权利

精彩专辑《MIPS处理器》阅读同主题信息。
--电子创新网--
粤ICP备12070055号