作者简介

Baron,九年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发。是国内较早的一批TEE制定者,对商用TEE和开源TEE有很深的研究,对未来的安全架构/安全趋势也有很清晰的看法。

1、什么是ATF?

一、什么是TF-A(ATF)?ATF是一个固件,一段代码,也是armv7-a/armv8-a/armv9-a的参考实现代码(注意,这只是参考实现。也可以用一个自己写的没有ATF的固件。)

2、那么ATF包括哪些内容呢?

最初的功能很简单:

保存和恢复cpu_context,也就是两个系统之间的切换。

电源管理、PSCI等。

但是随着技术的发展,功能越来越多,越来越复杂。以下是当前的一些功能:

安全世界的初始化,比如异常向量表,一些控制寄存器和中断寄存器。

CPU复位和断电的时序。包括Arm DynamIQ cpu支持。

标准系统IP驱动程序,如通用中断控制器(GIC)、高速缓存一致互连(CCI)、高速缓存一致网络(CCN)、网络互连(NIC)和信任区域控制器(TZC)。

一个通用的SCMI驱动程序,适用于电源控制接口,如ARM系统控制处理器(SCP)。

Smc处理,使用el3运行时服务框架

PSCI库用于CPU/集群/系统的电源管理。这个库集成到aarch64 el3的运行时中,也适用于aarch32 el3。

安全监控代码,用于切换和中断全球路由。

用于OP-TEE安全操作系统、NVIDIA可信小内核和可信安全操作系统的SPD

SecureBoot实施

预集成TBB和Arm CryptoCell产品,并利用其硬件根的信任和加密来加速服务。

3、由ATF定义的ATF启动模型

ATF分镜像,BL1 BL2属于引导镜像,BL3属于运行时镜像。BL3又进一步分为BL31 BL32 BL33,对应ATF运行时、REE运行时和TEE运行时。

(注:本文为快速入门,请自行理解这些概念:BL1bl2 BL31bl3 BL32bl3,EL3 S-EL1 NS-EL1的概念)。

4、 rt _ SVC ATF(运行时服务)简介

4.1、SPD(opteed)示例

比如负责双系统切换的SPD就是OEN_TOS的RT-Service,负责启动TEE和双系统切换。

补充两个系统切换时保存和恢复寄存器的模型(switchcpu_context模型)。

5、有ATF参与的ATF多系统交互模型

权限级别和安全状态之间的交互模型,ATF是运行在EL3权限级别的一段代码。下面是权限级别和安全状态之间的切换模型。可以看出,所有的交互和跳转都是通过异常向量表进行的。

异常权限级别之间的跳转模型都是通过同步异常或异步异常实现的:

进入ATF触发异常的方式:同步异常(不限于smc)和异步异常(irq、fiq、serror)。

如果是同步异常,会判断是否是smc调用触发的同步异常。如果是,它会在跳转ATF中的异常向量表中进入同步异常程序smchandler64或者smchandler32,分析这个程序中的smc id来选择跳转到哪个具体的rt-svc(运行时服务)。

如果是异步异常,它一定触发了irq或fiq或serror中断。此时进入ATF中异常向量表的异步异常程序,然后跳转到响应中断处理程序。

6、 ATF ATF如何处理业务逻辑

那么ATF有什么业务逻辑,如何区分和处理?

当一个异常进来时,做一些判断,比如你是同步的还是异步的?如果是异步异常,你是在做什么还是转发中断?如果是同步异常,那么您会做些什么或执行RT-Service吗?

审核编辑:李倩