使用故障注入绕过瑞萨 RH850/P1M-E 读保护

这是一篇关于对 Renesas R7F701381(RH850/P1M-E 系列)微控制器进行故障注入攻击以读取其闪存内容的博客文章,主要内容如下:

  • 引言:作者旨在从 2021 款 Toyota RAV4 Prime 的电子助力转向(EPS)模块转储固件,该模块使用 Autosar 的新安全车载通信(SecOC)标准进行 CAN 消息认证,但其调试访问受到限制。灵感来自 Franck Jullien 对 Renesas RX65 的研究,还参考了 Collin O'Flynn 关于 NXP MPC55xx 和 MPC56xx 的研究。首先描述了芯片使用的调试协议,然后介绍了故障注入及相关硬件和软件。

    • 两线调试协议:通过标准 5V USB-TTL 电缆连接 Renesas 芯片到计算机,启用调试模式需拉高FLMD0引脚,JP0_0JP0_1连接到 USB-TTL 适配器的RXTX。安全关键应用的微控制器需注意外部看门狗,通过添加 100 欧姆电阻拉高复位线并添加 N-FET 来控制复位线。通过逻辑分析仪观察到 PC 与设备之间的通信,命令有两种类型,包含起始字节、长度字节、校验和和常数0x03。Renesas 闪存编程器 GUI 需先设置设备时钟频率和波特率,发送“同步”命令,否则会返回错误。流程图显示同步命令是设备检查是否允许程序员连接的唯一位置。
    • 故障注入:故障注入是让 CPU 在正常操作范围外运行的方法,可通过改变电压(电压毛刺)或时钟频率(时钟毛刺),也可通过发送电磁或激光脉冲影响芯片行为,本文针对微控制器电源电路进行电压毛刺。
    • 电压毛刺 - 硬件:RH850 电源电路的框图显示 CPU 核心电压由内部 1.25V 稳压器生成,通过外部引脚VCL连接电容稳定电压,该引脚是进行故障注入的方便点,RH850 有第二个核心作为检查器,需同时对两个 VCL 引脚进行毛刺,拆除去耦电容并将两个 VCL 引脚连接到由 Raspberry Pi Pico 驱动的 N-FET。
    • 电压毛刺 - 软件:使用 Raspberry RP2040 生成毛刺,通过简单的代码实现,在 PC 端有一个 Python 脚本实现调试协议并控制 RP2040,经过一天尝试后首次成功,之后每次尝试只需 5 到 30 分钟,成功通过同步命令后可发出读取内存命令并转储整个固件,还尝试了仅对单个VCL引脚进行毛刺,仅对引脚 11 有效,对引脚 66 有效但内存读取仍失败。
  • 结论:此攻击可绕过 RH850/P1M-E 的程序员禁用设置,无需复杂硬件且无需拆卸微控制器。注意到获取结果所需的毛刺长度常导致整个微控制器锁定,需全复位,虽无进一步的 ID 码或密码保护接口,但若有则会增加攻击复杂度,还可对读取命令本身进行毛刺以读取受保护区域。
  • 脚注

    1. 接口并非真正禁用,仍可协商波特率和时钟速度,只是在进入命令等待阶段时设备会告知接口无法使用。
    2. 校验和计算方式为0x100 - sum(packet[1:]) & 0xFF
阅读 9
0 条评论