瑞萨芯片固件提取思路以及存在上锁的情况怎么破

IoT 4周前 admin
80 0 0
麻烦点个关注

蹭一波瑞萨热度,最近瑞萨收购Altium,瑞萨风光无限,未来可期,前几天也看到有小伙伴问我瑞萨固件的不可读提取方法。

我直接给了一份故障注入的文档,但是我也知道实践起来有困难。

通过深入讨论,了解到这位朋友对瑞萨某芯片进行数据修改时,能写入,但不能读,瑞萨提示ID问题,交流后,对芯片固件提取有一种初步的想法。如果这位朋友描述准确,我将问题/需求分为两个:1、调试密码获取。2、绕过读保护。

0x01 Renesas Security Code

根据瑞萨官方的文档资料(https://www.renesas.com/us/en/document/apn/security-conscious-debugging-methods-rh850-devices-main-core-debugging?r=469301)

瑞萨芯片固件提取思路以及存在上锁的情况怎么破

大致内容是开发者可以通过芯片的信息安全功能,保护芯片程序。

在E2调试中,涉及的就是如下设置

瑞萨芯片固件提取思路以及存在上锁的情况怎么破

(图片采自Renesas Flash Programmer(RFP)使用方法介绍及认证ID配置-CSDN博客)

其中RH850.PDF datasheet也提到了默认的ID Code

https://pdf1.alldatasheet.com/datasheet-pdf/download/1572479/RENESAS/R7F701648.html

瑞萨芯片固件提取思路以及存在上锁的情况怎么破

 FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FF FF

不只是瑞萨,很多芯片其实默认的都是重复的f,所以提取的时候任何相关软件都行。

程序软件也会基于默认的规则,要么是没加锁,要么是默认的code。但是往往开发者会有安全意识,不会使用默认的idcode。造成第三方人员调试时出现无法调试的情况。

0x02 为什么有的芯片地址段可写但不可读?

查阅手册

https://www.renesas.com/us/en/document/mah/rh850f1k-users-manual-flash-hardware-interface

https://www.renesas.com/us/en/document/apn/readwrite-accesses-chip-eeprom

一般来说,芯片地址数据存在可读可写两种状态,哪些可写,哪些可读,哪些可读可写,可以通过用户手册查看,出现可写不可读的情况,目前有几种猜测

1、该地址段是只写存储器。

只写存储器(WOM)具有只写特性。(可能性不大,维基百科几个案例证明只写存储器没什么市场)

2、该地址段被保护。

如果不是只写存储器,且地址图显示可读可写,那么通过文档(https://www.renesas.com/us/en/document/apn/readwrite-accesses-chip-eeprom)可以猜测是出于安全考量通过某种配置进行读保护某些地址。

瑞萨芯片固件提取思路以及存在上锁的情况怎么破

通过手段对通信的R/W进行控制,也能造成只写的错觉。

3、其他待补充

0x03 调试密码获取

目前经过一定的项目积累,我将调试密码获取分为几类:

1、教程/官方材料中设置的密码

在一些嵌入式培训中,讲师会出于安全考虑目的,以及对学员的安全意识培养,会在某章节中提及相关调试密码的问题。并提供demo,出于习惯,学员会将此demo中的调试密码作为自己的密码。官方demo中,若存在调试密码选项,会提供案例的密码,开发人员引用时,未考虑到相关安全问题,也作为自己的调试密码。

例如包括但不限于github泄露的配置文件,代码注释等(前提是你得知道某些信息的确能表示相关的调试密码)

2、泄露的密码

这类一般是通过供应商渠道泄露。

3、弱密码

正如所言,对弱密码的定义我没法提供具体的信息,可以参考维基百科

弱密码是易于猜测的密码,主要有以下几种:

  1. 顺序或重复的字符:“12345678”、“111111”、“abcdefg”、“asdf”、“qwer”键盘上的相邻字母。

  2. 使用数字或符号的仅外观类似替换,例如使用数字“1”、“0”替换英文字母“i”、“O”,字符“@”替换字母“a”等。

  3. 登录名的一部分:密码为登录名的一部分或完全和登录名相同。

  4. 常用的单词:如自己和熟人的名字及其缩写,常用的单词及其缩写、宠物的名字等。

  5. 常用数字:比如自己或熟人的生日、证件编号等,以及这些数字与名字、称号等字母的简单组合。


维基百科


针对嵌入式的调试加密,密码是0-9以及A-F的多个随机组合,顺序或重复的字符。例如0xAAAAAAAA…

4、通过暴力枚举方式获取

此类可针对很多芯片,基本上不会有结果。

    思路是仔细分析相关程序,对软件程序进行爆破(或者是FUZZ),具体怎么做因软件不同,方式不同。

    最笨的方式是:

    你可以通过Python做一个简单的视觉处理,使用Windowsapi,模拟手工操作。

    如何监视,以及如何确定结果,是需要思考的。

    0x04 绕过读保护

    1、故障注入

    此类文章其实有很多,比如:

    https://mp.weixin.qq.com/s/FSjdMLf8tpEh3xVZTP741w

    https://icanhack.nl/blog/rh850-glitch/

    故障注入是一种在正常操作范围之外运行 CPU 的方法。这可以通过(非常短暂地)改变工作电压(电压故障)或时钟频率(时钟故障)来实现。也可以通过向芯片发送电磁或激光脉冲来影响行为。

    电压和时钟故障都可以通过相对便宜的硬件(例如 FPGA 或小型微控制器和少量外部部件)来实现。

    故障注入的主要目的是影响微控制器的行为。这可能由于直接跳过指令或导致内存读取/写入失败而发生。

    可能需要相当长的时间才能找到故障注入的正确时间。

    2、其他方式

    此种方式存在,但仍未公开,我也无法知道其细节。只要认真分析芯片手册,从原理入手应该能获取到线索。

    0x05 芯片不同对其调试方式的区别

    https://www.renesas.com/us/en/document/mat/list-mcus-supported-renesas-flash-programmer-v3

    可以通过此表查看区别。

    理论上,软件定义调试口。

    0x06 不同的调试器之间的区别

    从网上找了几个常用的,以及官方的调试器:

    xxxx,xxxxx 、Renesas E2

    瑞萨芯片固件提取思路以及存在上锁的情况怎么破

    类似这样,一个调试器,然后各式封装的芯片接口,或嵌入,或贴片。

    其实大概能猜到,这种是通用型,不仅仅是针对瑞萨一家的产品。

    而瑞萨官方的E2

    瑞萨芯片固件提取思路以及存在上锁的情况怎么破

    专门针对自家产品的调试器。且支持官方调试软件。



    参考链接:

    https://zhuanlan.zhihu.com/p/341765068

    https://mp.weixin.qq.com/s/FSjdMLf8tpEh3xVZTP741w

    https://blog.csdn.net/announced1/article/details/114222508

    https://icanhack.nl/blog/rh850-glitch/

    https://www.renesas.com/us/en/document/mat/list-mcus-supported-renesas-flash-programmer-v3

    https://www.renesas.com/us/en/document/apn/security-conscious-debugging-methods-rh850-devices-main-core-debugging?r=469301

    https://www.renesas.com/us/en/document/mah/rh850f1k-users-manual-flash-hardware-interface

    https://www.renesas.com/us/en/document/apn/readwrite-accesses-chip-eeprom

    https://pdf1.alldatasheet.com/datasheet-pdf/download/1572479/RENESAS/R7F701648.html


    原文始发于微信公众号(网络安全知识):瑞萨芯片固件提取思路以及存在上锁的情况怎么破

    版权声明:admin 发表于 2024年8月20日 上午10:05。
    转载请注明:瑞萨芯片固件提取思路以及存在上锁的情况怎么破 | CTF导航

    相关文章