在嵌入式系统安全领域,内存防火墙作为硬件级的安全防护机制,其重要性不亚于传统网络安全中的防火墙。Arm Corstone SSE-710子系统中的防火墙设计体现了现代嵌入式安全架构的核心思想——通过硬件强制实施的访问控制策略来保护关键资源。
SSE-710的防火墙系统由多个独立组件构成,每个组件负责保护特定的子系统或外设:
AONPERIPH防火墙:保护Always-On域的外设,包括系统ID、电源控制单元(PPU)和时钟控制器等关键组件。这些外设即使在低功耗模式下也需要保持可访问性,因此被划分在独立的安全域中。
SYSPERIPH防火墙:负责主系统外设的保护,其区域配置会根据SSE-710的具体配置动态变化。典型受保护资源包括:
DBGPERIPH防火墙:专门保护外部调试总线(0x1800_0000),这是系统安全中最敏感的部分之一,防止未授权的调试访问。
EXPMST防火墙:为扩展主接口提供可配置的保护区域,支持软件定义的安全边界。
每个防火墙组件通过"区域"概念实现精细化的访问控制。一个区域本质上是一个连续的内存地址范围,附带特定的访问规则:
c复制struct firewall_region {
uint32_t base_addr; // 区域基地址
uint32_t size; // 区域大小编码
uint8_t mulnpo2; // 大小编码格式标志
uint32_t permissions;// 访问权限位图
};
关键设计特点包括:
预定义区域:AONPERIPH等组件有固定的区域划分,如:
动态配置区域:EXPMST组件支持运行时配置,通过以下寄存器定义:
FIREWALL_F0_CFG_SSE710_EXPMST0_FC_RGN{x}_BASE_ADDRFIREWALL_F0_CFG_SSE710_EXPMST0_FC_RGN{x}_SIZE大小编码规则:
关键安全实践:在配置防火墙区域时,必须确保区域之间没有重叠,同时要覆盖所有需要保护的外设。一个常见的错误是遗漏了某些外设的地址范围,导致安全漏洞。
SSE-710为每个主控或主控组分配唯一的StreamID,形成事务识别的基础:
| StreamID | 主控 | 安全属性 |
|---|---|---|
| 0 | Secure Enclave | 安全世界 |
| 1 | Host CPU | 可配置 |
| 16 | External System 0 | 依赖集成实现 |
| 17 | External System 1 | 依赖集成实现 |
| 32-255 | Expansion | 可配置 |
传输过程中,StreamID通过AXI5协议的AxMMUSID信号传递,确保整个路径上的访问控制一致性。
对于多核主机系统,CPUID通过ARUSER[1:0]和AWUSER[1:0]信号传递:
assembly复制; 示例:主机CPU核2发起的访问会设置
MOV ARUSER, #0b10 ; CPUID=2
防火墙的访问控制决策遵循以下逻辑序列:
AONPERIPH组件包含24个预定义区域,保护Always-On域的关键外设:
| 区域 | 外设 | 基地址 | 大小 | 典型用途 |
|---|---|---|---|---|
| 0 | System ID | 0x1A00_0000 | 0x0C | 设备识别和安全启动 |
| 3 | SYSTOP PPU | 0x1A03_0000 | 0x0C | 系统电源域控制 |
| 12 | NS WDOG CTRL | 0x1A30_0000 | 0x0C | 非安全看门狗控制 |
| 14 | S WDOG CTRL | 0x1A32_0000 | 0x0C | 安全看门狗控制 |
| 21 | Interrupt Router | 0x1A50_0000 | 0x0C | 中断路由配置 |
配置示例:设置安全看门狗区域仅允许Secure Enclave访问
c复制// 设置Region 14的访问权限
REG_WRITE(AONPERIPH_FIREWALL_BASE + 0x38,
(0x1 << 16) | // Secure访问使能
(0x0 << 8) | // 非安全访问禁止
(0x1 << 0)); // StreamID 0(SE)使能
SYSPERIPH的区域布局随系统配置变化,主要考虑因素包括:
HOST_CPU_NUM_CORES:主机CPU核心数,影响PPU区域数量EXT_SYSx_TZ_SPT:外部系统的TrustZone支持,决定MHU区域典型区域配置流程:
SYSPERIPH_FIREWALL_CONFIG寄存器获取当前区域数量调试技巧:使用Arm CoreSight SDC-600组件可以安全地传输防火墙配置数据,避免在开放调试接口时暴露安全敏感信息。
当访问保留地址空间时,系统会产生错误响应:
主机系统保留区域:由防火墙返回预设错误值
扩展区域保留空间:由集成商定义响应行为
错误响应值通过以下配置选项设置:
HOST_FC_ERR_RESP_DEFFIREWALL_F0_CFG_GLOBAL_SSE710_ERR_RESP_PER_MST_ID{x}_VAL每个防火墙组件可配置为在违规访问时触发中断:
通过FIREWALL_x_INT_EN寄存器使能中断类型:
中断路由到:
c复制// 使能AONPERIPH防火墙的所有中断类型
REG_WRITE(AONPERIPH_FIREWALL_BASE + 0x100,
(1 << 2) | // 安全违规
(1 << 1) | // 非安全违规
(1 << 0)); // 权限错误
在安全启动过程中,防火墙的典型配置顺序:
上电后,Boot ROM配置最小防火墙区域:
第一阶段引导加载程序:
操作系统加载后:
使用MHU进行核间通信时的防火墙配置要点:
为每个MHU对分配独立区域:
c复制// HSE MHU0发送区域配置
SET_FIREWALL_REGION(SSE710_HSE_MHU0_BASE, 0x1000,
STREAMID_HOST, STREAMID_SE);
设置最小必要权限:
配合使用消息认证码(MAC)确保消息完整性
在低功耗状态下(如BSYS.SLEEP1):
区域重叠:两个区域包含相同地址
权限不足:主控无法访问预期外设
大小不对齐:区域大小不符合2^n对齐要求
在开发基于Corstone SSE-710的安全敏感应用时,建议采用渐进式的防火墙配置策略——从最小权限开始,逐步扩展访问规则,同时利用硬件提供的所有安全特性构建深度防御体系。实际部署前,必须通过全面的渗透测试验证防火墙配置的有效性,特别是检查是否存在权限提升或边界绕过漏洞。