RP2350 通过光子发射引导的激光故障注入实现安全调试访问

Ledger Donjon 的研究人员展示了对 Raspberry Pi RP2350 微控制器(A4 版本)的成功攻击,绕过了永久调试禁用设置,从一次性可编程(OTP)内存中恢复了秘密。该攻击结合了光子发射显微镜(PEM)和激光故障注入(LFI),覆盖了芯片的安全执行链,使攻击者获得了具有安全属性的调试访问权限。

漏洞:DEBUGEN 覆盖机制

RP2350 的安全模型依赖于存储在 OTP 内存中的永久 CRIT1.DEBUG_DISABLE 标志。当该标志被设置时,其目的是永久禁用核心的内存访问端口(Mem-APs),防止外部调试器访问系统总线。

然而,硬件中包含一个内存映射寄存器 DEBUGEN,可用于覆盖此永久禁用状态。如果设置了 DEBUGEN 寄存器,安全软件可以重新启用 Mem-APs。研究人员发现,尽管 OTP 安全字段使用冗余编码和多数表决机制来防止意外或恶意翻转,但 DEBUGEN 寄存器缺乏此类保护。这种缺乏冗余使其成为故障注入的高价值目标。

攻击方法:PEM 与 LFI

在硅片上定位单个寄存器位是一个“大海捞针”问题。为解决此问题,研究人员采用两阶段定位与注入流程:

1. 光子发射显微镜(PEM)

晶体管在状态切换时会发出微弱的近红外光子。通过让安全软件在循环中切换 DEBUGEN 寄存器的特定位,并使用高灵敏度相机捕获由此产生的发射信号,研究人员可以隔离这些位的物理位置。通过减去不同位掩码循环的均值堆栈,他们消除了背景噪声,从而隔离出与 DEBUGEN 位 0–3 相关的特定位置。

2. 激光故障注入(LFI)

一旦确定了空间坐标,研究人员使用脉冲激光(980 nm)注入故障。由于设置一个位可能会意外清除另一个位,他们采用迭代序列:先脉冲 PROC1 位置(启用 Mem-AP),再脉冲 PROC1_SECURE 位置(允许安全访问),直到两者均被设置。

该过程在数秒内即可实现安全调试访问。研究人员指出,需要 50x 物镜才能达到所需精度;20x 物镜视野过宽,常常同时击中“置位”和“清零”区域。

从 OTP 中恢复秘密

即使获得安全调试访问权限,研究人员仍面临 OTP 页面的运行时锁定。在挑战配置中,固件在启动后立即应用运行时锁定(sw_lock[48]),使该页面对所有主体(包括安全调试)均不可访问。

为绕过此限制,研究人员利用了 RP-AP 救援复位。CTRL.RESCUE_RESTART 命令触发完整系统复位,使启动 ROM 标记处理器在任何用户固件运行前停止。由于运行时锁定仅由固件应用,救援复位将 OTP 页面恢复到其持久锁定状态(LOCK_S = READ_WRITE),使秘密可通过现已启用的安全 Mem-AP 读取,而在固件能够重新收紧锁定之前。

缓解措施与局限性分析

软件层面的缓解措施

研究人员得出结论,软件层面的缓解措施仅是“尽力而为”的运行时保护。尽管固件可使用 ACCESSCTRL 阻止调试器事务,或定期检查 DEBUGEN 寄存器以触发安全复位,但这些措施无法阻止攻击,因为救援复位在固件执行前就已停止芯片。

DEBUGEN_LOCK 的有效性

DEBUGEN_LOCK 寄存器旨在防止意外的软件写入 DEBUGEN,但无法阻止激光引起的更改。激光脉冲即使在对应锁位设置为 1 时仍能设置 DEBUGEN 位,甚至在某些情况下,脉冲本身还会设置锁位,使固件无法后续恢复禁用状态。

攻击需求与影响

该攻击高度针对性,且需要大量资源:

  • 物理访问:设备必须进行背面去封装(移除封装以暴露硅基底)。
  • 设备:Ledger Donjon 描述的设置成本约为 25 万美元。
  • 专业知识:需要具备样品制备、晶圆导航和激光故障注入的高级知识。

尽管成本高昂,社区讨论表明,类似攻击可能使用低成本、家庭实验室设备(例如使用 PicoEMP 等工具实现不同类型的故障)或在已知坐标后采用“撒网式”方法进行复制。

结论

RP2350 攻击凸显了一个关键的系统级教训:安全依赖于整个执行路径。尽管 Raspberry Pi 团队为 OTP 标志实施了强大的冗余表决机制,但可变的 DEBUGEN 寄存器和救援复位行为共同造成了一个漏洞,使研究人员能够恢复挑战秘密。系统的安全并非因单一机制失效而被破坏,而是多个已知硬件特性的相互作用所致。

Sources

相关