2. ARM TrustZone 技术基础
2.1 TrustZone 硬件架构概述
ARM TrustZone 是一种系统级的安全扩展技术,内置于 ARM Cortex-A 系列处理器中。它通过硬件强制隔离,将系统资源划分为两个独立的执行环境:安全世界(Secure World)和非安全世界(Normal World)。这种隔离机制从处理器核心开始,延伸至内存总线、外设和中断控制器,形成一套完整的硬件安全边界。
TrustZone 的核心设计原则是:非安全世界无法直接访问安全世界的任何资源,除非通过硬件定义的特定安全监控器(Monitor)进行切换。这种隔离在硬件层面实现,不依赖操作系统或软件配置,因此具有极高的安全性。
关键特性:
- 硬件强制隔离:安全状态由处理器核心的 NS(Non-Secure)位控制,所有总线事务都携带安全/非安全标识。
- 系统级覆盖:不仅隔离 CPU,还隔离内存、DMA、中断、外设和调试接口。
- 低性能开销:上下文切换由 Monitor 模式管理,切换次数少,对系统性能影响极小。
2.2 安全世界(Secure World)与非安全世界(Normal World)的划分
TrustZone 将物理处理器核心虚拟化为两个逻辑核心:安全核心和非安全核心。这两个核心通过时间片轮转共享同一个物理 CPU,但拥有完全独立的执行上下文。
| 对比维度 | 安全世界(Secure World) | 非安全世界(Normal World) |
|---|---|---|
| 运行目标 | 运行 TEE(可信执行环境),处理安全敏感任务 | 运行 REE(富执行环境),如 Linux、Android |
| 内存访问 | 可访问安全内存 + 非安全内存(通过配置) | 仅可访问非安全内存 |
| 外设访问 | 可访问安全外设(如安全键盘、指纹传感器) | 仅可访问非安全外设 |
| 中断处理 | 使用 FIQ(快速中断请求) | 使用 IRQ(普通中断请求) |
| 调试接口 | 安全调试(需认证) | 普通调试(可开放) |
| 安全等级 | 高(硬件隔离,不受非世界影响) | 低(易受恶意软件攻击) |
设计要点:安全世界和非安全世界共享同一个物理 CPU,但拥有独立的寄存器组、MMU 配置和异常向量表。切换世界时,Monitor 负责保存和恢复上下文,确保两个世界互不干扰。
2.3 Monitor 模式的作用
Monitor 模式是 ARM TrustZone 架构中一个特殊的处理器模式,位于安全世界和非安全世界之间,充当两个世界的安全网关。Monitor 模式拥有最高的执行权限,负责处理世界切换(World Switch)的所有关键操作。
Monitor 模式的核心职责
- 处理 SMC 指令:安全监控调用(Secure Monitor Call)是触发世界切换的唯一软件指令。非安全世界通过执行
SMC指令进入 Monitor 模式,再由 Monitor 决定是否切换到安全世界。 - 上下文保存与恢复:切换世界时,Monitor 负责保存当前世界的寄存器状态(包括通用寄存器、系统控制寄存器、MMU 配置等),并恢复目标世界的上下文。
- 中断路由:Monitor 模式根据中断类型(FIQ/IRQ)和当前世界状态,决定将中断路由到安全世界还是非安全世界。
- 安全策略执行:Monitor 可以实施访问控制策略,例如拒绝非安全世界对安全内存的非法访问请求。
安全注意事项:Monitor 模式代码是 TrustZone 安全模型中最关键的软件组件。如果 Monitor 代码存在漏洞,攻击者可能绕过世界隔离,直接访问安全资源。因此,Monitor 代码必须经过严格的形式化验证和审计。
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 带来的安全风险和维护成本。