1. Arm DRTM架构中的DMA保护机制解析
在Arm的动态可信执行环境(DRTM)架构中,DMA保护是确保系统安全性的关键技术之一。DMA(直接内存访问)允许外设直接与内存交互而不需要CPU介入,这种机制虽然提高了系统性能,但也带来了潜在的安全风险——恶意设备可能通过DMA访问敏感内存区域。
1.1 DMA保护的两种实现模式
DRTM架构定义了两种DMA保护实现方式:
-
完全保护模式(Complete Protection):
- 通过SMMU(系统内存管理单元)硬件强制阻断所有来自非安全设备的DMA访问
- 保护在动态启动时启用,并持续到DLME显式解除
- 实现简单彻底,但会暂时禁用所有DMA传输
-
区域保护模式(Region-based Protection):
- 平台特定的硬件机制,可保护多个指定内存区域
- 允许非保护区域的DMA继续运行
- 需要定义内存保护表,明确每个保护区域的物理地址和大小
- 灵活性更高,适合需要持续DMA传输的场景
重要提示:即使选择区域保护模式,平台实现也可能因特定原因只保护请求的部分区域。DLME可以通过DLME数据查询实际受保护的所有内存区域。
1.2 DMA保护的技术实现细节
在硬件层面,DMA保护主要通过以下组件协同工作:
-
SMMU配置:
- 动态启动时重新配置流表(Stream Table)和上下文描述符(Context Descriptor)
- 对受保护区域设置严格的访问权限控制
- 确保即使设备持有DMA控制器,也无法绕过保护机制
-
内存保护表结构:
c复制struct mem_protect_region { uint64_t base_address; // 区域基地址(必须4KB对齐) uint64_t size; // 区域大小(必须4KB的倍数) uint32_t attributes; // 保护属性(如只读、不可执行等) }; -
保护启用时机:
- 由DCE前导码(DRTM_PARAMETERS)指定保护模式
