车载操作系统信息安全技术介绍
目前主流的车载操作系统信息安全技术是基于ARM Trust Zone的TEE技术。ARM Trust Zone是基于硬件的安全功能,通过对硬件架构进行修改,在处理器层次引入了两个不同权限的保护域——安全域和普通域,任何时刻处理器仅在其中的一个环境内运行。同时这两个域完全是硬件隔离的,具有不同的权限,普通域中运行的应用程序或操作系统访问安全域资源受到严格的限制,反过来安全域中运行的程序可以正常访问普通域中的资源。两种域之间的硬件隔离和不同权限等属性为代码和数据提供了有效安全机制,普通域用于运行操作系统,提供了正常执行环境(Rich Execution Environment,REE);安全域则使用安全小内核(TEE-kernel)提供可信执行环境(Trusted Execution Environment,TEE),机密数据可以在TEE中被存储和访问。即使普通域中操作系统被破坏入侵或ROOT,攻击者也无法读取或篡改TEE,保护关键业务与数据。TEE支持设备安全启动、安全升级保护、敏感信息保护、安全管理等,对关键业务实时保护,TEE不需要额外的硬件支持,可由软件控制自主切换。
•杂凑算法:MD5(不安全)、SHA1(160比特、不安全)、SM3、SHA256,用于保障数据完整性、数字签名、MAC设计。
随着国密算法的引入,国密安全模块逐渐成为系统中的组成部分。国密安全服务通过固化在只读存储中的根证书和CA平台进行交互,当系统收到外部请求,服务先将请求报文中的证书部分进行校验比对,再通过证书附着的公钥对请求内容进行验签,以此确认报文真实可靠,通过这种方式可以服务对外部进入的软件升级包、控制命令、推送消息等进入的消息进行验证,防止其被篡改。同时,组合AES、3DES以及国密的SM2和SM4构成的对称、非对称加密组合为通讯的私密性提供有效的保护。国密安全服务能够为总线通讯、网络连接、数据存储等其他模块提供加密、验签、签名和密钥存储、证书管理等功能。
ARM Trust Zone
为提高系统的安全性,ARM早在ARMv6架构中就引入了Trust Zone技术,且在ARMv7和ARMv8中得到增强,Trust Zone技术能提供芯片级别对硬件资源的保护和隔离,当前在手机芯片领域已被广泛应用。
SoC硬件框
支持Trust Zone技术的ARM核在运行时将工作状态划分为两种:安全状态和非安全状态。当处理器核处于安全状态时只能运行TEE侧的代码,且具有REE侧地址空间的访问权限。当处理器核处于非安全状态时只能运行REE侧的代码,且只能通过事先定义好的客户端接口来获取TEE侧中特定的数据和调用特定的功能。
系统通过调用安全监控模式调用(secure monitor call,smc)指令实现ARM核的安全状态与非安全状态之间的切换。而ARM核对系统资源的访问请求是否合法,则由SoC上的安全组件通过判定ARM核发送到SoC系统总线上的访问请求中的安全状态读写信号位(Non-secure bit,NS bit)来决定。只有当ARM核处于安全状态(NS bit=0)时发送到系统总线上的读写操作才会被识别为安全读写操作,对应TEE侧的数据资源才能被访问。反之,当ARM核处于非安全状态(NS bit=1)时,ARM核发送到系统总线上的读写操作请求会被作为非安全读写操作,安全组件会根据对资源的访问权限配置来决定是否响应该访问请求。这也是Trust Zone技术能实现对系统资源硬件级别的保护和隔离的根本原因。
在ARMv8架构中使用执行等级(Execution Level,EL)EL0~EL3来定义ARM核的运行等级,其中EL0~EL2等级分为安全态和非安全态。ARMv8架构与ARMv7架构中ARM核运行权限的对应关系如图所示。
ARMv7/v8运行权限对比
一、ARM安全扩展组件
·对其他外围组件进行了相应的扩展,提供安全操作权限控制和安全操作信号。
二、AXI总线上安全状态位的扩展
当主设备通过总线发起读写操作时,从设备或者外围资源同时也需要将对应的PROT控制信号发送到总线上。总线或者从设备的解码逻辑必须能够解析该PROT控制信号,以便保证安全设备在非安全态下不被非法访问。所有的非安全主设备必须将安全状态位置成高位,这样就能够保证非安全主设备无法访问到安全从设备。如果一个非安全主设备试图访问一个安全从设备,将会在总线或者从设备上触发一个错误操作,至于该错误如何处理就依赖于从设备的处理逻辑和总线的配置。通常这种非法操作最终将产生一个SLVERR(slave error)或者DECERR(decode error)。
三、AXI-to-APB桥的作用
Trust Zone同样能够保护外围设备的安全,例如中断控制、时钟、I/O设备,因此Trust-Zone架构还能用来解决更加广泛的安全问题。比如一个安全中断控制器和安全时钟允许一个非中断的安全任务来监控系统,能够为DRM提供可靠的时钟,能够为用户提供一个安全的输入设备从而保证用户密码数据不会被恶意软件窃取。
AMBA3规范包含了一个低门数、低带宽的外设总线,被称作外设总线(Advanced Peripheral Bus,APB),APB通过AXI-to-APB桥连接到系统总线上。而APB总线并不具有安全状态位,为实现APB外设与Trust Zone技术相兼容,APB-to-AXI桥将负责管理APB总线上设备的安全。APB-to-AXI桥会拒绝不匹配的安全事务设置,并且不会将该事务请求发送给外设。
四、Trust Zone地址空间控制组件
Trust Zone地址空间控制组件(Trust Zone Address Space Controller,TZASC)是AXI总线上的一个主设备,TZASC能够将从设备全部的地址空间分割成一系列的不同地址范围。在安全状态下,通过编程TZASC能够将这一系列分割后的地址区域设定成安全空间或者是非安全空间。被配置成安全属性的区域将会拒绝非安全的访问请求。
使用TZASC主要是将一个AXI从设备分割成几个安全设备,例如off-Soc、DRAM等。ARM的动态内存控制器(Dynamic Memory Controller,DMC)并不支持安全和非安全分区的功能。如果将DMC接到TZASC上,就能实现DRAM支持安全区域和非安全区域访问的功能。需要注意的是,TZASC组件只支持存储映射设备对安全和非安全区域的划分与扩展,但不支持对块设备(如EMMC、NAND flash等)的安全和非安全区域的划分与扩展。
TZASC组件示意
五、Trust Zone内存适配器组件
Trust Zone内存适配器组件(Trust Zone Memory Adapter,TZMA)允许对片上静态内存(on-SoC Static Memory)或者片上ROM进行安全区域和非安全区域的划分。TZMA支持最大2MB空间的片上静态RAM的划分,可以将2MB空间划分成两个部分,高地址部分为非安全区域,低地址部分为安全区域,两个区域必须按照4KB进行对齐。分区的具体大小通过TZMA的输入信号R0SIZE来控制,该信号来自TZPC的输出信号TZPCR0SIZE。即通过编程TZPC可以动态地配置片上静态RAM或者ROM的大小。
使用TZMA组件的链接示意
六、Trust Zone保护控制器组件
Trust Zone保护控制器组件(Trust Zone Protection Controller,TZPC)是用来设定TZPCDECPORT信号和TZPCR0SIZE等相关控制信号的。这些信号用来告知APB-to-AXI对应的外设是安全设备还是非安全设备,而TZPCR0SIZE信号用来控制TZMA对片上RAM或片上ROM安全区域大小的划分。TZPC包含三组通用寄存器TZPCDECPROT[2:0],每组通用寄存器可以产生8种TZPCDECPROT信号,也就是TZPC最多可以将24个外设设定成安全外设。TZPC组件还包含一个TZPCROSIZE寄存器,该寄存器用来为TZMA提供分区大小信息。
TZPC组件接口示意
当上电初始化时,TZPC的TZPCDECROT寄存器中的位会被清零,同时TZPCR0SIZE寄存器会被设置成0x200,表示接入到TZMA上的片上RAM或者ROM的安全区域大小为2MB。通过修改TZPC的寄存器配置的值可实现用户对资源的特定配置。
TZPC使用示例
七、Trust Zone中断控制器组件
在支持Trust Zone的SoC上,ARM添加了Trust Zone中断控制器(Trust Zone Interrupt Controller,TZIC)。TZIC的作用是让处理器处于非安全态时无法捕获到安全中断。TZIC是第一级中断控制器,所有的中断源都需要接到TZIC上。TZIC根据配置来判定产生的中断类型,然后决定是将该中断信号先发送到非安全的向量中断控制器(Vector Interrupt Controller,VIC)后以nIRQ信号发送到处理器,还是以nTZICFIQ信号直接发送到处理器。
TZIC在SoC中的使用示意
通过对TZIC的相关寄存器进行编程,可对TZIC进行配置并设定每个接入到TZIC的中断源的中断类型。TZIC具有众多寄存器,细节说明可以参考相关ARM的文档。在TZIC中用来设置中断源类型的寄存器为TZICIntSelect,如果TZICIntSelect中的某一位被设置成1,则该相应的中断源请求会被设置成快速中断请求(Fast Interrupt Request,FIQ)。如果某一位被设置成0,则该中断源的中断请求会被交给VIC进行处理。如果VIC的IntSelect将获取到的中断源设置成FIQ,那么该中断源会被再次反馈给TZIC进行处理。
八、Cache和MMU的扩展
在支持Trust Zone的SoC上,会对MMU进行虚拟化,使得寄存器TTBR0、TTBR1、TTBCR在安全状态和非安全状态下是相互隔离的,因此两种状态下的虚拟地址转换表是独立的。
存放在MMU中的每一条页表描述符都会包含一个安全状态位,用以表示被映射的内存是属于安全内存还是非安全内存。虚拟化的MMU共享转换监测缓冲区(Translation Lookaside Buffer,TLB),同样TLB中的每一项也会打上安全状态位标记,只不过该标记是用来表示该条转换是正常世界状态转化的还是安全世界状态转化的。
Cache也同样进行了扩展,Cache中的每一项都会按照安全状态和非安全状态打上对应的标签,在不同的状态下,处理器只能使用对应状态下的Cache。
九、Trust Zone技术对资源隔离的实现
ARM处理器核的虚拟化和资源隔离是Trust Zone实现安全需求的根本。支持Trust Zone的处理器核具有虚拟化,也即将一个物理核分成安全状态和非安全状态。当处理器处于非安全状态时,只能访问属于非安全的外设和内存,而不能访问安全的资源;当处理器处于安全态时,处理器既可以访问安全资源,也可以访问非安全的资源,只有当处理器核为安全世界状态时才可能发出PROT的安全访问信号。
十、中断源的隔离
在原来的ARM芯片中,使用VIC来对外部中断源进行控制和管理,支持Trust Zone后,ARM提出了TZIC组件,在芯片设计时,该组件作为一级中断源控制器,控制所有的外部中断源,通过编程TZIC组件的相关寄存器来设定哪个中断源为安全中断源FIQ,而未被设定的中断源将会被传递给VIC进行处理。一般情况下VIC会将接收到的中断源设定成普通中断请求(Interrupt Request,IRQ),如果在VIC中将接收到的中断源设定成FIQ,则该中断源会被反馈给TZIC组件,TZIC组件会将安全中断源送到安全世界状态中进行处理。
十一、片上RAM和片上ROM的隔离
芯片内部存在小容量的RAM或者ROM,以供芯片上电时运行芯片ROM或者存放芯片自身相关的数据。Trust Zone架构对该部分也进行了隔离操作。隔离操作通过使用TZMA和TZPC组件来实现。
TZMA用来将片上RAM或者ROM划分成安全区域和非安全区域,安全区域的大小则由接入的TZPCR0SIZE信号来决定。而TZPCR0SIZE的值可以通过编程TZPC组件中的TZPCR0SIZE寄存器来实现。
当处理器核访问片上RAM或者ROM时,TZMA会判定访问请求的PROT信号是安全操作还是非安全操作,如果处理器发出的请求为非安全请求而该请求又尝试去访问安全区域时,TZMA就会认为该请求为非法请求。这样就能实现片上RAM和ROM的隔离,达到非安全态的处理器核无法访问片上安全区域的RAM和ROM。
十二、片外DRAM的隔离
一个完整的系统必然会有片外RAM,对片外RAM的隔离是通过TZASC组件实现的,ARM本身的DMC可以将DRAM分割成不同的区域,这些区域是没有安全和非安全分类。将DMC与TZASC相连后再挂到总线上,通过对TZASC组件进行编程可以将DRAM划分成安全区域和非安全区域。当主设备访问DRAM时,除需要提供物理地址之外,还会发送PROT信号。TZASC组件首先会判定主设备需要访问的DARM地址是属于安全区域还是非安全区域,然后再结合接收到的PROT信号来判定该次访问是否有效。如果PROT信号为非安全访问操作,且访问的DRAM地址属于安全区域,则TZASC就不会响应这次访问操作,这样就能实现DRAM中安全区域和非安全区域的隔离。
十三、外围设备的隔离
其他外围设备都会挂载到APB总线上,然后通过AXI-to-APB桥连接到AXI总线上,AXI-to-APB结合TZPC组件的TZPCDECROT的值及访问请求的PROT信号来判定该访问是否有效。当处理器需要访问外围设备时,会将地址和PROT信号发送到AXI总线上。
AXI-to-APB桥会对接收到的请求进行解析,获取需要访问的所需外围设备,然后通过查询TZPCDECROT的值来判断外设的安全类型,再根据PROT信号就能判定该请求的安全类型。如果该请求是非安全请求,但需要访问的外围设备属于安全设备,则AXI-to-APB会判定该访问无效。通过对TZPC中的TZPCDECROT寄存器进行编程能够设置外设的安全类型,从而做到外设在硬件层面的隔离。
十四、ARM可信固件
ARM可信任固件(ARM Trusted Firmware,ATF)是由ARM官方提供的底层固件,该固件统一了ARM底层接口标准,如电源状态控制接口(Power Status Control Interface,PSCI)、安全启动需求(Trusted Board Boot Requirements,TBBR)、安全世界状态(SWS)与正常世界状态(NWS)切换的安全监控模式调用(secure monitor call,smc)操作等。ATF旨在将ARM底层的操作统一使代码能够重用和便于移植。
ATF的源代码共分为bl1、bl2、bl31、bl32、bl33部分,其中bl1、bl2、bl31部分属于固定的固件,bl32和bl33分别用于加载TEEOS和REE侧的镜像。整个加载过程可配置成安全启动的方式,每一个镜像文件在被加载之前都会验证镜像文件的电子签名是否合法。
ATF主要完成的功能如下:
·支持自有固件的引导,开发者可根据具体需求将自有固件添加到ATF的引导流程中。
十五、ATF与TEE的关系
为规范和简化Trust Zone OS的集成,在ARMv8架构中,ARM引入ATF作为底层固件并开放了源码,用于完成系统中BootLoader、Linux内核、TEEOS的加载和启动以及正常世界状态和安全世界状态的切换。
ATF将整个启动过程划分成不同的启动阶段,由BLx来表示。例如,TEEOS的加载是由ATF中的bl32来完成的,安全世界状态和正常世界状态之间的切换是由bl31来完成的。在加载完TEEOS之后,TEEOS需要返回一个处理函数的接口结构体变量给bl31。当在REE侧触发安全监控模式调用指令时,bl31通过查询该结构体变量就可知需要将安全监控模式调用指令请求发送给TEE中的那个接口并完成正常世界状态到安全世界状态的切换。
ARMv8架构之后ARM提供了ATF,BootLoader、TEE镜像文件、Linux内核镜像文件、recovery镜像文件都是由ATF来进行引导和加载而不是由ChipRom来完成的。ChipRom只会去验证ATF中bl1的合法性,后续引导过程同样也是按照链式验签的方式进行,符合TBBR规范。在ARMv8架构中整个安全引导的流程如图所示。
ARMv8的Secure Boot流程
在ARMv8架构中,如果系统需要支持TEE,则几乎都必须使用由ARM提供的ATF作为底层固件。
十六、ARM V9 CCA机密计算
Arm CCA建立在Armv8-A中已经广泛使用的隔离技术之上。Arm CCA提供额外的安全架构,即使在使用中也能保护数据和代码,并能够更好地控制谁可以访问数据和算法。这项在Armv9-A中引入的技术将通过降低与共享数据相关的风险并帮助开发人员实施强大的隐私控制来帮助释放数据的真正力量和潜力。
Arm机密计算架构引入了Realm Management Extension(RME),该扩展支持称为Realm的新型可证明隔离环境。该环境建立在Trust Zone Normal和Secure世界上,增加两个额外的世界,每个世界都有自己的安全状态和专用的物理地址空间。RME还允许在运行时在世界之间移动内存,而新硬件会检查每个内存访问,阻止那些世界之间的隔离边界不允许的访问。
RME保护主流计算工作负载,例如虚拟机或容器免受特权软件和硬件代理的影响,包括hypervisor程序、普通世界内核甚至Trust Zone应用程序。
非常适合保护在公共云环境和主机操作系统的安全性和完整性难以审核或保证的任何平台中运行的工作负载。
Realms、Normal和Secure世界之间的关系
Trust Zone动态内存更有效地利用宝贵的DRAM提高了使用Trust Zone进行内存密集型操作的灵活性例如媒体解码、内容保护和机器学习模型的保护。
已完成
数据加载中