ECU存储安全之存储器安全

目录

固件提取的原理

通过调试连接提取

如何防范调试连接提取固件

使用夹具挂载Flash

使用编程器读取Flash

小结

参考


本文总结了目前最为流行的存储器固件提取技术,虽然在技术的层面上没有任何新意可言,但是确是少数以防守为目的进行的总结,可以更好地理解ECU的存储安全需求,制定更加合理的安全存储策略。

固件提取的原理

提取固件的技术大致可以分为两类:侵入式提取与非侵入式提取。”侵入“在固件提取中的具体涵义为”是否需要拆卸存储器“,如果不需要拆卸存储器,那么我们就将这类提取技术归为”非侵入式提取“,反之则归类为”侵入式提取“。

非侵入式有两种实现思路,一种思路是通过JTag、SWD等调试接口与设备建立连接,然后通过协议实现的数据读取功能实现提取;另外一种思路是通过夹具连接存储器管脚,将存储器变成树莓派等提取工具的外挂存储器,使用树莓派给存储器上电并提取存储器中的内容。

侵入式提取,即将存储器拆卸下来,通过读卡器或者编程器读取存储器内的固件。

通过调试连接提取

这种方式主要针对控制器的内置Flash,因为内置Flash没有直接向攻击者暴露管脚,物理拆卸难度极大,所以站在攻击者的角度考虑,通过调试提取的方式可行性最高。如下为通过调试接口提取STM32系列芯片存储器固件的原理图:

调试器(如JTag、Jlink等)通过调试接口与设备相连,实际的设备接线方式类似下图:

 连接好设备之后,通过调试命令即可提取固件,如下为通过JTag提取固件的命令:

jtag> readmem 0x1fc00000 0x400000 flash.bin
address: 0x1FC00000
length:  0x00400000
reading:
addr: 0x20000000
Done.

需要注意的是,在线提取需要一些前提条件,比如设备release之后调试端口依然可用,并且调试连接的建立不需要password,以及控制器的读保护功能未开启。

如何防范调试连接提取固件

针对调试提取的方式,STM32自带的一种读保护机制(RDP)值得我们参考和学习。根据STM32开发手册的描述[1],STM32在内置存储器中划分了一篇选项配置区域,该区域用来配置STM32运行时需要用到的各种重要参数,其中就包含了对RDP的描述。RDP配置包含一个用来描述是否开启RDP功能的比特位,以及开启后保护的地址范围的字节信息。选项配置区域的写权限由管理员掌握的password保护,以保证该区域的安全性。

调试器与STM32建立连接后,会给STM32发送调试命令。当STM32收到读取存储器内容的命令时,首先会判断RDP位是否已经置位,如果已经置位,说明开启了RDP功能,在这种情况下STM32直接返回否定响应NACK,以拒绝调试器的读取请求。下图为STM32在USART协议中对读命令的处理流程:

通过相关安全研究人员的博客[2],我对STM32 RDP的代码层实现进行了求证。STM32中RDP的实现主要集成在bootloader之中,因为bootloader实现了各种通信或调试协议,因此理所当然地应该在这些协议中加入对RDP的判断逻辑。下图所示汇编代码包含了在USART通信过程中,当STM32收到读地址内容的请求之后,调用RDP判断函数的过程:

 如下汇编代码包含了RDP的判断逻辑,该代码片段表明STM32从0x40022000获取了一个地址,然后以此为基址,取了0x1C偏移处的内容,通过LSLS移位和BPL跳转条件判断第二个bit位是否置位:

 

这个实现完全符合STM32开发手册中的描述,STM32使用选项寄存器FLASH_OBR的第一个比特位RDPRT控制RDP:

 在设备的bootloader中实现RDP具备一定的开发成本,对于本身不具备RDP功能的设备,需要充分考虑安全需求和实现成本。如果成本受限但又必须考虑安全性,那么可以考虑直接禁用调试端口,或实现基于口令的安全调试。从安全的角度考虑我们应该直接禁用调试,但是从研发的角度考虑,我们在各个阶段都会存在调试需求,因此基于口令或证书的安全调试可能是一个不错的选择。

另外,STM32的开发文档明确指出了RDP是对”internal Flash“的保护,但是按照实际的实现逻辑,只要STM32的bootloader在收到读取指令时进行RDP的判断,理论上对外置存储器的读请求也会拒绝掉。STM32这么描述的原因,我猜测其出发点是保护的效果,因为对于内置存储而言,拆卸难度太大,最有效的提取方式就是调试连接,如果在调试连接中实现了RDP,可以说基本阻断了提取途径;但对于外挂存储器,还存在其他可行的攻击手段,比如通过夹具挂载Flash,以及拆卸Flash,禁用调试读命令完全达不到保护的效果。

使用夹具挂载Flash

使用芯片夹具挂载Flash,首先需要一个Host,可选的设备包括树莓派、Arduino等。另外,是否能够使用夹具挂载Flash,直接取决于芯片的封装方式。如果芯片的封装方式暴露了管脚,则可以很方便地使用夹具,如果芯片的封装方式完全隐藏了管脚,那么这种方式就失去了尝试的必要。从这个角度来讲,芯片的管脚也属于一种攻击面。另外,我觉得没有必要研究芯片具体采用了哪种封装方式,因为管脚是否暴露是肉眼可见的,如下图所示:

 隐藏管脚的封装方式一般如下图:

 针对暴露管脚的存储器芯片,使用夹具进行提取的接线方式如下图所示:

以使用树莓派为例,需要开启树莓派SPI,结合存储器芯片管脚的定义以及树莓派管脚的定义,将存储器挂载为树莓派的SPI Flash,然后通过flashrom工具从SPI Flash中提取固件[3]。

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=1000 -r rasp.bin

因此站在防守的角度,如果我们能够控制存储器芯片封装的方式,那么最佳的实现应该是使用能够隐藏芯片管脚的封装方式。

使用编程器读取Flash

最后一种方式可能成本相对最高,但是理论却最为简单。首先需要购买一个编程器,然后使用热风机融化芯片焊锡,取下芯片之后放在编程器上,通过编程器对应的界面工具选择芯片型号,读取芯片内容,如下所示[4]:

为了防范通过编程器提取固件,我们可以选择加密存储的方式,或者依赖文件系统的NAND Flash,来增加提取原始固件的成本。

小结

因为提取固件的成本和难度相较于其他实验较高,本问相关内容均是参考其他研究人员的成果。但这并不妨碍我们加深对存储器攻防技术的理解,通过这种方式我们依然可以掌握攻击的原理,并且总结防守的方案。关于防守,除了文中提到的相关参考,在实际应用中需要更加细致的考虑,比如对内置和外置存储安全方案的区分,对不同代码、数据保护方案的细化,等等,希望读者结合项目实际灵活应用。

参考

[1] https://www.st.com/content/ccc/resource/technical/document/programming_manual/10/98/e8/d4/2b/51/4b/f5/CD00283419.pdf/files/CD00283419.pdf/jcr:content/translations/en.CD00283419.pdf

[2] Read secure firmware from STM32F1xx flash using ChipWhisperer - Prog.World

[3] 树莓派提取固件 | SkYe231 Blog

[4] unsafe.sh - 不安全

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 汽车电子控制单元(ECU)硬件架构设计是确保汽车正常运行的关键因素之一。一个好的ECU硬件架构设计可以降低车辆故障率,提高性能和耐久性。 ECU硬件架构设计应该从以下几个方面考虑: 1.处理器选择:ECU中的处理器应该尽可能快,可靠和稳定。大多数ECU使用ARM或者PowerPC处理器。处理器的速度和架构应该根据ECU的使用场景及其控制的零部件而定。 2.存储器选择:ECU中应该有足够的存储空间和RAM。存储器的大小和速度应该根据处理器的速度和设计场景而定。 3.电源系统:ECU的电源需求应该经过精确计算,以确保其运行安全和稳定。电源系统应该能够处理电压和浪涌电流变化。 4.接口选择:ECU应该尽可能多的提供通信接口,如CAN总线,LIN总线和以太网等。这些接口应该方便外部部件和设备与ECU之间的通信和数据交换。 以上是ECU硬件架构设计的一些基本考虑。但是,随着汽车行业的快速发展和技术的不断创新,ECU的硬件架构设计也在不断发展和变化。因此,ECU的硬件架构设计应该是一个持续改进和升级的过程。 ### 回答2: 汽车ECU(Engine Control Unit)是车辆的核心控制系统,用于控制发动机的运转和车辆的性能。ECU的硬件架构设计直接影响到其性能和可靠性。 ECU的硬件架构设计需要考虑以下几个因素: 首先,考虑处理器的选择。一般来说,ECU需要使用高性能的处理器来保证其计算能力。但是,处理器的功耗和热量也需要考虑,这对于汽车的电子系统来说是至关重要的。 其次,需要考虑ECU的内存设计。内存的大小和类型需要满足ECU的需求。ECU需要大量的RAM存储器才能缓存数据和程序,同时也需要ROM存储器存储程序代码。 第三,需要考虑ECU的输入和输出接口。ECU需要通过传感器来获取车辆的信息和通过执行器完成对发动机的控制。因为车辆的环境很恶劣,并且接口与设备之间的稳定性和耐用性很重要,所以需要选择高可靠性和高性能的接口和设备。 最后,为了解决ECU面临的复杂的功能、波动和缺陷等问题,现代汽车ECU设计中加入了一个恢复机制。系统异常时将会采用恢复机制程序进行处理,从而保证ECU可以实现可靠的控制和运行。因此,ECU的硬件架构设计除了考虑ECU本身的性能外,还需要考虑复杂环境下的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车联网安全杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值