2. ARM TrustZone技术基础

2.1 TrustZone 硬件架构概述

ARM TrustZone 是一种系统级的安全扩展技术,内置于 ARM Cortex-A 系列处理器中。它通过硬件强制隔离,将系统资源划分为两个独立的执行环境:安全世界(Secure World)和非安全世界(Normal World)。这种隔离机制从处理器核心开始,延伸至内存总线、外设和中断控制器,形成一套完整的硬件安全边界。

TrustZone 的核心设计原则是:非安全世界无法直接访问安全世界的任何资源,除非通过硬件定义的特定安全监控器(Monitor)进行切换。这种隔离在硬件层面实现,不依赖操作系统或软件配置,因此具有极高的安全性。

关键特性:
  • 硬件强制隔离:安全状态由处理器核心的 NS(Non-Secure)位控制,所有总线事务都携带安全/非安全标识。
  • 系统级覆盖:不仅隔离 CPU,还隔离内存、DMA、中断、外设和调试接口。
  • 低性能开销:上下文切换由 Monitor 模式管理,切换次数少,对系统性能影响极小。
TrustZone 系统级硬件架构 安全世界(Secure World) 安全 CPU 核心 安全内存(TZRAM) 安全外设 安全中断(FIQ) 安全存储(Trusted Storage) TEE 内核(如 OP-TEE / Trusty) 非安全世界(Normal World) 非安全 CPU 核心 非安全内存(DDR) 非安全外设 非安全中断(IRQ) 富操作系统(Linux / Android) 普通应用程序 Monitor 模式(安全监控器)

2.2 安全世界(Secure World)与非安全世界(Normal World)的划分

TrustZone 将物理处理器核心虚拟化为两个逻辑核心:安全核心和非安全核心。这两个核心通过时间片轮转共享同一个物理 CPU,但拥有完全独立的执行上下文。

对比维度 安全世界(Secure World) 非安全世界(Normal World)
运行目标 运行 TEE(可信执行环境),处理安全敏感任务 运行 REE(富执行环境),如 Linux、Android
内存访问 可访问安全内存 + 非安全内存(通过配置) 仅可访问非安全内存
外设访问 可访问安全外设(如安全键盘、指纹传感器) 仅可访问非安全外设
中断处理 使用 FIQ(快速中断请求) 使用 IRQ(普通中断请求)
调试接口 安全调试(需认证) 普通调试(可开放)
安全等级 高(硬件隔离,不受非世界影响) 低(易受恶意软件攻击)
设计要点:安全世界和非安全世界共享同一个物理 CPU,但拥有独立的寄存器组、MMU 配置和异常向量表。切换世界时,Monitor 负责保存和恢复上下文,确保两个世界互不干扰。
安全世界与非安全世界切换流程 非安全世界 运行:Linux / Android 安全世界 运行:TEE(OP-TEE / Trusty) Monitor 模式 安全监控器(SMC 处理) SMC 调用 返回

2.3 Monitor 模式的作用

Monitor 模式是 ARM TrustZone 架构中一个特殊的处理器模式,位于安全世界和非安全世界之间,充当两个世界的安全网关。Monitor 模式拥有最高的执行权限,负责处理世界切换(World Switch)的所有关键操作。

Monitor 模式的核心职责

  1. 处理 SMC 指令:安全监控调用(Secure Monitor Call)是触发世界切换的唯一软件指令。非安全世界通过执行 SMC 指令进入 Monitor 模式,再由 Monitor 决定是否切换到安全世界。
  2. 上下文保存与恢复:切换世界时,Monitor 负责保存当前世界的寄存器状态(包括通用寄存器、系统控制寄存器、MMU 配置等),并恢复目标世界的上下文。
  3. 中断路由:Monitor 模式根据中断类型(FIQ/IRQ)和当前世界状态,决定将中断路由到安全世界还是非安全世界。
  4. 安全策略执行:Monitor 可以实施访问控制策略,例如拒绝非安全世界对安全内存的非法访问请求。
安全注意事项:Monitor 模式代码是 TrustZone 安全模型中最关键的软件组件。如果 Monitor 代码存在漏洞,攻击者可能绕过世界隔离,直接访问安全资源。因此,Monitor 代码必须经过严格的形式化验证和审计。
Monitor 模式中断路由与切换流程 硬件中断到达 FIQ / IRQ ? FIQ 路由到安全世界 TEE 处理安全中断 IRQ 路由到非安全世界 REE 处理普通中断 Monitor 模式 上下文保存 / 恢复 / 策略执行 SMC 指令触发切换

Monitor 模式的工作流程

步骤 操作 说明
1 非安全世界执行 SMC #0 触发安全监控调用异常,CPU 切换到 Monitor 模式
2 Monitor 保存非安全世界上下文 保存通用寄存器、SPSR、ELR 等关键状态到 Monitor 栈
3 Monitor 验证调用参数 检查 SMC 功能号和参数合法性,防止非法调用
4 Monitor 恢复安全世界上下文 从安全世界保存区加载寄存器状态
5 CPU 切换到安全世界执行 设置 NS 位为 0,进入安全世界处理请求
6 安全世界处理完成后执行 SMC #0 再次触发 Monitor,切换回非安全世界
7 Monitor 恢复非安全世界上下文 加载之前保存的非安全世界状态,返回结果
Monitor 模式的关键安全属性:
  • 不可绕过性:所有世界切换必须经过 Monitor,非安全世界无法直接跳转到安全世界代码。
  • 最小权限原则:Monitor 只执行切换和策略检查,不参与具体业务逻辑。
  • 上下文隔离:每个世界拥有独立的寄存器保存区,Monitor 确保切换时不会泄露数据。

Monitor 模式的实现方式

在实际系统中,Monitor 模式可以通过以下两种方式实现:

  • 固件实现(ATF):ARM Trusted Firmware(ATF)是 ARM 官方推荐的 Monitor 实现,运行在 EL3 异常级别,提供标准化的 SMC 处理框架。
  • 自定义实现:部分 SoC 厂商会编写自己的 Monitor 代码,以满足特定的安全需求或性能优化。
实践建议:在开发 TrustZone 应用时,尽量使用 ATF 作为 Monitor 层。ATF 已经过广泛的安全审计和性能优化,可以避免自定义 Monitor 带来的安全风险和维护成本。