内容来自:《移动互联网时代的智能终端安全》李兴新侯玉华周晓龙郭晓花严斌峰等编著
1、软件架构
TrustZone硬件架构将新的安全扩展特性应用于CPU内核之中,为建立安全执行环境提供了硬件基础,操作系统厂商、手机制造商和芯片厂商可以根据自己的安全需求,在一个可共用的硬件框架之上扩展和开发不同的安全解决方案。
ARM同时提供了一个典型的安全软件架构,如图3-3所示。安全软件架构包括安全世界、普通世界两个区域,通过监控器实现两者的切换。目前的绝大多数解决方案都是严格基于此架构实现。
TrustZone的安全软件架构设计基于智能终端的使用模式,包含安全启动、监控模式、TrustZone API 3个方面。
(1)安全启动
TrustZone软件安全启动过程如图3-4所示。
在系统初始化时,在安全特权模式下从片内安全引导代码区启动,采用这种方式以避免OS被攻击。
片内安全引导代码完成系统安全状态的设置,然后引导OS启动。
在OS启动的每一个阶段,功能模块均需通过验证才允许加载。
通过检查保存在安全域内的签名可以保证OS引导代码的完整性,避免终端设备被非法重新硬件编程。
(可以看看我在ATF的那个翻译-COT信任链,这种启动链的安全校验更多地是像一种思维模式)
(2)监控模式
TrustZone监控器实现软件系统在安全世界和普通世界之间的切换管理。
如前所述,普通世界的应用程序可以通过3种异常进入监控模式:执行安全监视调用SMC指令、外部中止、FIQ和IRQ。
典型的切换过程如下。当普通世界的应用需要切换到安全世界的服务时,首先切换到普通世界的特权模式,在该模式下调用SMI,处理器将切换进入监控模式;
监控模式首先备份普通世界的运行时环境和上下文,然后进入安全世界的特权模式,再转换为安全世界的用户模式,此时的运行环境为安全世界的执行环境,可以执行相应的安全服务。
上述过程包括普通世界和安全世界的切换,以及用户模式和特权模式的切换。执行环境的切换只有在各自世界的特权模式下才能实现,但应用的调用关系只能在用户模式下执行,避免应用越权使用系统级别的调用。(执行和切换)
监控模式中的代码实现两个虚拟运行世界的上下文备份和恢复。CP15协处理器中的安全状态寄存器SCR的NS位标志着当前处理器所处的安全状态,该寄存器不允许被普通世界的应用访问。由于监控器负责环境切换时对状态的存储和恢复,所以执行环境的切换不需要在各自系统中增加环境切换代码。
TrustZone通过优化中断向量表的设计避免恶意中断攻击,并满足必要的执行环境切换需求。
TrustZone把中断向量表分成两部分:安全的中断向量表置于安全存储器,而且指向安全的中断处理程序;
非安全的中断向量表和处理程序置于普通存储器中,以避免某些恶意程序修改安全的中断向量表和处理程序或其他通过非法手段进入安全世界。
处理器执行完安全任务后,TrustZone监视器最后还要执行一遍SMI指令,其目的在于清除CP15的NS位。
监视器还会将之前的内容重新存回所有寄存器,使处理器恢复到之前的非安全状态。
通过这种恢复机制,所有安全世界中的指令和数据还是原值,未受任何的修改,这也是安全世界之所以安全的关键。(函数的堆栈调用)
(3)TrustZone API
TrustZone API为希望获取安全保护的应用程序提供了一个标准接口,定义了运行在普通世界中的客户端与安全世界之间交互的接口,应用程序必须通过调用TrustZone API才能被允许进入安全世界。
应用使用TrustZone API能够与一个独立于实际所在系统的安全部件进行通信,使开发者能够专注于应用程序本身的功能和性能,并且缩短开发周期,同时保证应用的安全性。
但是,希望使用TrustZone提供安全保护的应用程序必须根据它们运行的安全平台进行重写,导致市场被过度细分,制约了应用程序与服务之间良好的生态环境的形成。
客户端包括应用程序和Service Stub服务抽象层,调用普通世界下的TrustZone API呼出,通过TrustZone交互机制传送给安全世界下的服务管理器和安全服务。
大部分的API函数都设计为客户端程序与安全服务间的沟通桥梁,两者通过结构体信息(Structured Messages)及共享内容(Shared Memory)这两个机制形成通信信道。
当传递的信息量较小时,可通过结构体信息来传送及沟通**;而当传递的信息量较大时,则会直接将客户端的memory映射到安全服务区的memory空间,然后通过该Share Memory作为客户端与服务端之间直接存取信息的缓冲区。**(这个部分就是动态TA加载)
2、SecureBoot安全启动技术
由于厂家版本的OS大多嵌入了相当数量的厂家生态应用,同时不明来源的系统镜像和不可靠的刷机是系统风险引入的一个重要途径,多数手机厂商希望用户能保留和使用厂家的OS版本。另外,有的恶意病毒会通过从定向系统启动位置引入安全风险,由此提出了系统安全启动技术。
安全启动技术的逻辑大同小异,本节以展讯的SecureBoot为例说明。
展讯的SecureBoot安全启动技术采用多级认证的机制,建立了自底向上的可信启动过程。
SecureBoot对系统软件采用签名认证的方式,在手机出厂前对手机操作系统的Image文件进行签名认证,计算签名文件的散列值并写入芯片的一次性可编程模块。手机每次启动时先校验系统的散列值,然后对签名Images逐级校验,实现从手机芯片到系统软件的链式校验过程。
防止非授权更改甚至替换手机原版操作系统中固件或者操作系统,避免手机出厂后没有得到客户签名认证的非授权操作,保护手机中原有的操作系统和软件版本。
SecureBoot在启动过程中从Rom Code到Images采用了多层链式校验机制;包括对RomCode的散列校验,对SPL的完整性的RSA校验。需要注意的是,RSA私钥是SecureBoot的保障,需要小心保存。
SecureBoot安全启动的流程如下。
- (1)ROMCode读取存储于一次性可编程模块中BSC(Base Station Controller,基站控制器)的散列值和UID(User Identification,用户身份)。
- (2)加载SPL(Second Program Loader,第二次装载系统)和BSC。
- (3)RomCode利用散列函数来验证BSC的完整性。
- (4)RomCode利用RSA算法来验证SPL的完整性。
- (5)加载和运行安全操作系统引导程序。
- (6)验证和运行安全操作系统。
- (7)SPL利用RSA算法验证UBoot。
- (8)UBoot利用RSA算法验证bootimage、recoveryimage、modem、sp等。
这个逻辑其实感觉是单核的,不过感觉逻辑挺快乐的。不像实验室设计的,好几个核,反正很花里胡哨,流程复杂。
不过这个是芯片层面的东西了,下一篇看看加密芯片