4. AURIX内存保护与访问审计
在AURIX多核安全系统中,内存保护单元(MPU)是隔离安全域与非安全域、防止越权访问的第一道硬件防线。与通用处理器的MMU不同,AURIX的MPU不负责地址翻译,而是对物理地址空间施加访问权限约束:每个总线主设备(CPU、DMA、HSM等)在发起访问时,MPU根据预配置的区域描述符判断该访问是否被允许。若不允许,硬件产生保护陷阱(Protection Trap),同时将违规信息写入专用寄存器,供审计与取证使用。理解MPU的配置逻辑、违规事件的产生机制以及日志的捕获解析方法,是构建可追溯安全审计体系的基础。
内存区域划分与MPU配置模型
AURIX的MPU采用“区域描述符”模型。每个CPU可配置若干数据区域(Data Range)和代码区域(Code Range),每个区域由基地址、结束地址和权限位组成。权限位通常包括读(R)、写(W)、执行(X)以及用户/特权模式区分。以TC3xx为例,每个CPU支持多个数据区域,区域之间不允许重叠,且必须按地址升序排列。配置时需注意:区域0通常用于覆盖默认地址空间,权限应设为最严格;后续区域逐步放开特定外设或共享内存的访问。
一个典型的配置示例如下:假设CPU0需要访问LMU共享内存(0x90000000起始)用于核间通信,同时禁止访问HSM私有RAM(0xA0000000起始)。配置步骤为:先设置区域0覆盖全地址空间,权限为只读;再设置区域1覆盖LMU范围,权限为读写;区域2覆盖HSM RAM范围,权限为无访问。这样,任何对HSM RAM的访问都会触发保护陷阱。配置代码片段如下:
/* 示例:TC3xx MPU数据区域配置(伪代码) */
MPU_DATA_RANGE(0) = { BASE: 0x00000000, END: 0xFFFFFFFF, PERM: R };
MPU_DATA_RANGE(1) = { BASE: 0x90000000, END: 0x9000FFFF, PERM: R|W };
MPU_DATA_RANGE(2) = { BASE: 0xA0000000, END: 0xA0003FFF, PERM: NONE };
MPU_ENABLE(0); /* 使能CPU0的MPU */
需要强调的是,MPU配置必须在特权模式下完成,且配置后需执行同步屏障指令确保生效。若配置顺序错误(如区域重叠或未按升序排列),硬件可能产生配置错误陷阱,而非预期的访问违规。
访问权限违规事件的产生与分类
当总线主设备发起一次访问,MPU检查其目标地址落在哪个区域,并比对访问类型(读/写/执行)与区域权限。若权限不足,硬件立即中止该访问,并触发保护陷阱。保护陷阱属于Trap Class 4(TCN=4),其陷阱标识(TIN)可区分具体原因:例如TIN=1表示数据访问违规,TIN=2表示代码访问违规,TIN=3表示区域配置错误。同时,硬件将违规地址、访问类型、主设备ID等信息写入数据访问陷阱寄存器(如DSTR)和地址寄存器(如DSTR_ADDR)。
违规事件可分为三类:第一类是非法写操作,例如非安全任务试图写入安全数据区;第二类是非法执行,例如跳转到未授权代码段;第三类是非法读操作,例如调试接口读取受保护密钥区。不同类别的审计价值不同:非法写和执行通常意味着攻击或严重软件缺陷,非法读则可能涉及信息泄露。审计系统应记录每类事件的完整上下文,包括时间戳、CPU ID、任务ID、违规地址和访问类型。
违规访问日志的捕获与解析
捕获违规日志的关键在于陷阱处理程序。当保护陷阱触发时,CPU跳转到对应的陷阱向量,处理程序需在清除陷阱标志前读取相关寄存器,否则信息可能被后续陷阱覆盖。典型的捕获流程为:读取DSTR获取访问类型和主设备信息,读取DSTR_ADDR获取违规地址,读取PCXI获取当前任务上下文,然后将这些信息写入非易失性日志缓冲区或通过HSM安全通道上报。
解析日志时,需将原始寄存器值映射为可读事件。例如,DSTR中的OPC字段表示访问类型(0=读,1=写,2=执行),SBC字段表示总线主设备。结合地址范围表,可判断违规地址属于哪个安全域。以下是一个解析示例:
/* 示例:违规日志解析输出 */
时间戳: 0x000A3F21
CPU: 0
主设备: DMA_CH2
访问类型: 写
违规地址: 0xA0000010
所属区域: HSM私有RAM
权限要求: 无访问
事件等级: 严重(潜在攻击)
在实际工程中,建议将日志分为两级:一级日志记录所有保护陷阱的摘要信息,用于实时监控;二级日志记录完整上下文,用于事后取证。一级日志可存储在CPU本地RAM中,二级日志应通过HSM加密后写入外部Flash,防止篡改。此外,需注意日志缓冲区的大小和溢出策略:若违规事件频繁发生,应采用环形缓冲区并记录溢出计数,避免丢失关键事件。
审计策略与工程实践要点
在实际部署中,MPU配置与审计日志需协同设计。首先,区域划分应遵循最小权限原则:每个任务仅能访问其必需的内存范围,共享内存区域应明确标注读写权限。其次,陷阱处理程序应尽量精简,避免在陷阱上下文中执行复杂逻辑,否则可能引发嵌套陷阱。建议将原始数据快速存入缓冲区,由低优先级任务异步解析。
日志解析时需注意地址对齐和字节序问题。AURIX采用大端模式,寄存器值需按大端解析。此外,DSTR中的主设备ID编码需对照芯片手册的Bus Master ID表,不同型号的编码可能不同。对于频繁发生的同类违规,应设置去重机制,避免日志被单一事件淹没。例如,若同一地址在1ms内被重复违规访问,可只记录首次和计数。
最后,审计日志的完整性保护至关重要。建议将日志通过HSM的加密引擎进行签名后存储,确保事后取证时日志未被篡改。同时,日志应包含足够的上下文信息,如任务ID、中断状态和调用栈摘要,以便还原违规发生时的系统状态。通过MPU配置、陷阱捕获和日志解析的闭环设计,AURIX系统能够实现从硬件级访问控制到软件级审计取证的完整安全链条。