RISC-V 物理内存保护漏洞
摘要 RISC-V 架构通过物理内存保护与基于页表的虚拟内存两套机制协同控制内存访问。PMP 由机器模式配置,提供物理地址上的粗粒度权限;MMU 由监管者模式管理,实现细粒度的页级保护。然而,RISC-V 特权规范对两者权限叠加规则的定义存在模糊空间——部分微架构实现采用“最严格”策略,部分采用“最宽松”或“时序竞争”策略。攻击者可利用这一裂隙,在 S‑mode 下构造特殊的 PMP 与页表配置组合,使物理内存保护被虚拟内存权限意外覆盖,进而从 S‑mode 提升至 M‑mode 权限等级,读取或篡改安全监控固件。 RISC-V 的两层内存保护 PMP 物理内存保护是 RISC-V 机器模式下的安全基石。PMP 单元由最多 64 个配置寄存器(pmpcfgX)和地址寄存器(pmpaddrX)组成,支持三种地址匹配模式:自然对齐 4 字节区域(NA4)、自然对齐 2 的幂区域(NAPOT)和范围模式(TOR)。每个区域的访问权限由独立的 R(读)、W(写)、X(执行)位控制,并有一个 L(锁定)位。一旦 L 位被置位,PMP 配置对于更低特权级(包括 S‑mode)变为只读,即便 M‑mode 软件也无法修改,除非系统复位。 PMP 检查发生在物理地址完成转换后:当一条 load/store/指令 fetch 请求抵达物理地址总线前,硬件会遍历所有 PMP 条目,找到第一个匹配的区域,并根据访问类型和当前特权级(M、S、U)决定是否允许。若检查失败,对于 load/store 会触发访问错误异常,对于指令 fetch 则产生指令访问错误异常。 MMU RISC‑V S‑mode 通过页表(通常是 Sv39/Sv48 格式)实现虚拟地址到物理地址的转换。页表项包含 U(用户)、R、W、X 位,权限检查发生在翻译阶段。对于 S‑mode…