目錄
- 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)