1.1 ARMv8/ARMv9安全扩展
目录
- 1.1.1 ARM架构安全演进
- 1.1.2 ARMv8安全特性
- 异常级别(EL)安全模型
- 关键安全扩展
- 1.1.3 ARMv9安全创新
- 机密计算架构(CCA)
- 增强的隔离机制
- 1.1.4 安全扩展的TF-A支持
- 1.1.5 安全扩展配置示例
1.1.1 ARM架构安全演进
ARM架构从v7到v9的安全演进路线:
- ARMv7:引入TrustZone技术,提供硬件隔离的安全世界与非安全世界
- ARMv8:扩展TrustZone到64位架构,增加异常级别(EL)机制
- ARMv8.1:引入虚拟化扩展(VHE)和PAN(Privileged Access Never)特性
- ARMv8.2:增加指针认证(PAC)和分支目标识别(BTI)
- ARMv8.3:引入指针认证和嵌套虚拟化
- ARMv8.4:增强内存标记扩展(MTE)和安全EL2
- ARMv8.5:引入内存标记和分支记录
- ARMv9:引入机密计算架构(CCA)和领域管理扩展(RME)
1.1.2 ARMv8安全特性
异常级别(EL)安全模型
异常级别 | 特权级别 | 典型用途 |
---|---|---|
EL0 | 用户态 | 普通应用 |
EL1 | 操作系统 | Linux内核 |
EL2 | 虚拟化 | Hypervisor |
EL3 | 安全监控 | TF-A固件 |
关键安全扩展
-
TrustZone:
- 硬件强制隔离安全世界(Secure World)与非安全世界(Normal World)
- 通过NS比特位实现状态切换
- 安全外设总线(APB)保护
-
虚拟化扩展:
- 支持Type-1和Type-2 Hypervisor
- 虚拟异常级别(VHE)允许EL1直接运行Hypervisor
-
指针认证(PAC):
- 使用加密签名保护指针完整性
- 防止ROP/JOP攻击
// 指针签名示例 void* __ptrauth_sign_function(void* ptr, uint64_t key);
1.1.3 ARMv9安全创新
机密计算架构(CCA)
-
领域管理扩展(RME):
- 引入新的执行领域(Realm)
- 四世界模型:安全、非安全、领域、Root
- 硬件强制内存隔离
-
内存标记扩展(MTE):
- 每16字节内存附加4位标记
- 检测缓冲区溢出和use-after-free漏洞
// MTE指令示例 STG x0, [x1] // 存储带标签数据 LDG x2, [x1] // 加载带标签数据
增强的隔离机制
- 颗粒度保护表(GPT):
- 页级内存访问控制
- 支持动态权限调整
- 分支目标识别(BTI):
- 防止JOP攻击
- 需要显式标记合法跳转目标
1.1.4 安全扩展的TF-A支持
TF-A对不同架构版本的支持矩阵:
特性 | ARMv8.0 | ARMv8.4 | ARMv9.0 | TF-A支持版本 |
---|---|---|---|---|
TrustZone | ✓ | ✓ | ✓ | 全版本 |
S-EL2 | ✗ | ✓ | ✓ | v2.5+ |
RME | ✗ | ✗ | ✓ | v2.8+ |
MTE | ✗ | ✓ | ✓ | v2.7+ |
PAC | ✗ | ✓ | ✓ | v2.6+ |
1.1.5 安全扩展配置示例
典型TF-A编译选项启用安全扩展:
# Makefile配置示例
ENABLE_PAUTH = 1 # 启用指针认证
ENABLE_BTI = 1 # 启用分支目标识别
ENABLE_RME = 1 # 启用领域管理扩展
ENABLE_TRF = 1 # 启用跟踪过滤
硬件寄存器配置示例(ARMv8.4+):
// 启用EL2安全模式
write_scr_el3(read_scr_el3() | SCR_HCE_BIT | SCR_NS_BIT);// 配置指针认证密钥
write_apiak_el1((uint64_t)&pauth_key);
write_apia_keyhi_el1(0);
write_apia_keylo_el1(0);
安全实践建议:
- 在支持PAC的平台上务必启用指针认证
- 新项目应基于ARMv8.4+架构设计
- 机密计算场景优先考虑ARMv9 CCA特性
- 定期检查TF-A安全通告(security advisories)