3. TrustZone系统启动流程

TrustZone系统的启动流程是构建可信执行环境(TEE)的基石。从芯片上电复位到安全操作系统运行,整个引导链必须确保每一级固件的完整性和真实性,防止恶意软件在启动阶段植入后门。本章深入分析从BootROM到ATF(ARM Trusted Firmware)的安全引导链,以及EL3异常等级与安全监控调用(SMC)的核心机制。

3.1 安全引导链概述

ARM TrustZone系统的启动流程遵循严格的层级信任模型。每一级固件在加载下一级之前,必须验证其数字签名或哈希值,形成一条从硬件根信任(Root of Trust, RoT)到操作系统内核的信任链。

核心原则:信任链的起点是芯片内部不可篡改的BootROM,后续每一级固件都由前一级验证,任何一级验证失败都会导致系统停止启动或进入安全恢复模式。
TrustZone 安全引导链(信任链传递) BootROM 硬件根信任 BL1 (ATF) 安全引导加载 BL2 (ATF) 平台初始化 BL31 (ATF) EL3运行时 安全世界 OS (TEE) 如 OP-TEE / Trusty 非安全世界 OS 如 Linux / Android 信任链:BootROM → BL1 → BL2 → BL31 → 安全/非安全世界 OS

3.2 启动阶段详细流程

TrustZone系统的启动流程分为多个阶段,每个阶段对应不同的固件镜像和异常等级。下表总结了各阶段的关键特征:

阶段 固件名称 异常等级 主要职责 验证方式
1 BootROM EL3 硬件初始化、加载BL1 硬件不可变(ROM)
2 BL1 (ATF) EL3 验证BL2、加载BL2到SRAM 数字签名验证
3 BL2 (ATF) EL1 (S-EL1) 平台初始化、加载BL31/BL32/BL33 哈希校验
4 BL31 (ATF) EL3 运行时服务、SMC处理、电源管理 由BL2验证
5 BL32 (TEE OS) S-EL1 安全世界操作系统 由BL2验证
6 BL33 (UEFI/uboot) EL2/EL1 非安全世界引导加载 由BL2验证

3.3 ATF(ARM Trusted Firmware)的角色

ARM Trusted Firmware(ATF)是ARM官方提供的开源安全固件参考实现,运行在EL3异常等级。它在TrustZone启动链中扮演以下关键角色:

  • 安全引导加载器(BL1/BL2):实现信任链的传递,确保每一级固件都经过验证。
  • 运行时服务(BL31):提供SMC处理框架、电源管理协调、PSCI(Power State Coordination Interface)实现。
  • 异常等级管理:管理EL3、S-EL1、EL2/EL1之间的切换和上下文保存。
  • 安全监控调用(SMC)分发:将非安全世界的SMC请求路由到对应的安全服务。
实践建议:ATF的BL31是系统安全的关键组件。在定制TEE时,建议保留ATF的SMC处理框架,避免直接修改BL31核心代码,以减少安全漏洞风险。

3.4 EL3异常等级与安全监控调用(SMC)

EL3(Exception Level 3)是ARMv8-A架构中最高的异常等级,拥有对系统所有资源的完全访问权限。TrustZone利用EL3实现安全世界与非安全世界之间的隔离和切换。

3.4.1 EL3的核心职责

  • 安全监控器(Secure Monitor):作为安全世界和非安全世界之间的门卫,控制所有跨世界访问。
  • 中断路由:配置GIC(通用中断控制器),将安全中断路由到安全世界,非安全中断路由到非安全世界。
  • 上下文切换:在安全世界和非安全世界之间切换时,保存和恢复寄存器状态。
  • 系统控制:管理电源状态、复位、调试配置等系统级操作。

3.4.2 SMC(安全监控调用)机制

SMC指令是ARM架构中从非安全世界调用安全世界服务的标准机制。当非安全世界需要执行安全操作(如密钥派生、数据解密)时,通过SMC指令陷入EL3,由ATF的BL31分发到对应的安全服务。

SMC调用流程:非安全世界 → EL3 → 安全世界 非安全世界 EL1/EL2 Linux / Android 调用 SMC #0 SMC指令 EL3 安全监控器 ATF BL31 SMC分发 上下文保存/恢复 路由 安全世界 S-EL1 TEE OS 安全服务 返回结果(SMC返回) SMC调用示例:非安全世界请求密钥派生服务 1. 非安全世界执行 SMC #0 指令 → 2. 陷入EL3,ATF保存上下文 3. ATF根据SMC功能ID路由到TEE OS → 4. TEE执行安全操作并返回

3.4.3 SMC调用标准

ARM定义了SMC调用约定(SMCCC),规范了SMC调用的参数传递和返回值格式:

寄存器 参数 说明
X0 功能ID 标识要调用的安全服务(如密钥管理、加密操作)
X1-X6 参数1-6 传递给安全服务的参数(如密钥句柄、数据缓冲区地址)
X0(返回) 返回值 安全服务执行结果(成功/错误码)
X1-X3(返回) 返回值1-3 额外的返回数据(如加密结果、状态信息)
安全警告:SMC调用是跨世界通信的唯一通道,必须严格验证传入参数。非安全世界传入的内存地址必须经过安全检查,防止安全世界被恶意利用读取或写入非安全内存。

3.5 安全引导链的验证机制

安全引导链的每一级都包含验证步骤,确保固件的完整性和真实性:

  1. BootROM验证BL1:BootROM使用芯片内置的公钥验证BL1的数字签名。公钥通常存储在一次性可编程(OTP)存储器中。
  2. BL1验证BL2:BL1从闪存加载BL2镜像,验证其哈希值是否与存储在安全区域的参考哈希匹配。
  3. BL2验证BL31/BL32/BL33:BL2加载并验证后续所有固件镜像,包括ATF运行时、TEE OS和非安全引导加载器。
  4. 运行时验证:安全世界和非安全世界操作系统在运行时可以进一步验证动态加载的模块和应用程序。
安全引导链验证流程 BootROM 验证BL1签名 BL1 验证BL2哈希 BL2 验证BL31/32/33 BL31 运行时服务 OS 运行 验证方式:数字签名(RSA/ECDSA) + 哈希校验(SHA-256) 密钥存储:公钥存储在OTP/eFuse中,私钥由设备制造商安全保管

3.6 安全引导链的常见攻击与防御

攻击类型 攻击方式 防御措施
固件回滚攻击 攻击者将固件降级到存在已知漏洞的旧版本 使用防回滚计数器(RPMB分区或OTP),每次升级递增计数器
签名绕过 修改固件镜像,绕过签名验证逻辑 签名验证代码必须在BootROM中执行,不可被篡改
调试接口攻击 通过JTAG/SWD接口读取固件或注入代码 生产设备禁用调试接口,或使用安全调试认证机制
侧信道攻击 通过功耗、电磁辐射分析获取签名密钥 使用恒定时间算法、随机掩码、物理屏蔽
关键总结:TrustZone系统的安全启动链从BootROM开始,通过ATF的BL1、BL2、BL31实现层级验证,最终在EL3安全监控器的管理下,安全世界和非安全世界各自运行。SMC调用是跨世界通信的唯一入口,必须严格验证参数。安全引导链的完整性是TEE安全存储密钥设计的前提,任何启动链的破坏都会导致密钥泄露风险。