历史上的今天
今天是:2026年02月28日(星期六)
2023年02月28日 | 安全启动 - STM32安全技术RDP与MPU
2023-02-28 来源:zhihu
检查安全配置 & 构造安全执行环境
同一般的 MCU 启动比较,STM32 安全启动多了一些步骤。首先,安全启动检查相关的安全静态配置是否已经设置完毕,例如 RDP 的级别,PCROP,WRP。如果首次启动则需要配置这些选项字节。然后,安全启动会去设置那些每次运行都需要重新设置的硬件配置 Firewall,MPU,IWDG 的配置。用户可参考下图图示理解安全启动的过程。最后,是对下一级固件进行验证。这个安全的执行环境保证了启动的顺序不会被改变,以及启动代码的保密性。

防外部攻击
此处谈及的外部攻击不是把芯片剖开,使用光学显微镜进行拍照,从而进行逆向工程;或者使用激光对芯片线路进行切割或者连接。这种攻击的成本非常高,需要丰富的专业知识,也不是通用 MCU 所设计防护的目标。还是那句话,没有绝对的安全。我们所做的防范都是根据安全风险分析而制定的。
MCU 的内置 Flash、内置 SRAM 的特点决定了 STM32 可以很容易做到防外部攻击。因为外部攻击的主要手段会来自 JTAG。而不像非单片机那样,你需要担心外置的 Flash,是否直接被 Solder off, 然后放在其他读写器进行修改。也不需要担心外置的 SRAM 会不会被攻击者进行探测。
STM32 防外部攻击主要通过将 RDP 设置成2。
RDP
读保护 RDP 是 STM32 系列一个非常重要的安全设置,而且设置特别简单。
芯片默认的 RDP 一般是等级 0。这个时候任何人可以通过 JTAG 访问所有资源,可以擦除、读写 Flash,可以进行调试,可以通过 JTAG 直接从 SRAM 启动,也可以修改 boot pin 脚从 system memory 进行启动。
若需要达到的一般化的安全等级,RDP 要设置成 1。这个时候通过 JTAG 就没有办法直接访问 Flash 了。在这种情况下,固件的知识产权受到了保护。
为了更好的安全性,一般将 RDP 设置成2。
◎ JTAG 不能连接 STM32
◎ 选项字节再也不能修改;例如 WRP 所保护的区域就是一个真正的 ROM 了,再也不能修改了。
不过 RDP 设置成2,就再也不能回退了。所以,如果代码还没有测试好,例如通过软件更新系统的功能还没有测试好,那么就不要急着把 RDP 设成2。
STM32 全系列都有 RDP 的设置。当然 STM32F1 系列不具有 RDP2 的设置。使用 STM32F1,又想达到比较高的安全性,需要自己考虑软件中的设计。或者,简单一点,可以考虑去使用其他兼容 STM32F1 的系列,例如cSTM32F4 替换。
RDP 的设置非常简单,开发时可以通过 ST-Link 直接选择。也可以通过 STM32 CubeProgrammer 来完成。更方便的途径,是可以在程序里直接完成。若想了解在程序里直接设置 RDP 的代码,可以参考 SBSFU 开发包。
其他手段
外部攻击还有一些手段,例如操纵电压、操作芯片的温度、操纵时钟,将设备打开让开发板的布线暴露,针对这些攻击,STM32 也有相应的技术。我们把它归结为系统监控类。这些防护我们后面会提到。
防内部攻击
内部攻击的表现形式一般是注入恶意代码,或者缓冲区溢出。通过这些攻击手段,攻击者的目的就是为了盗取密钥,固件代码或者其他敏感信息,达到破解设备或者仿冒设备的结果。“外敌易挡,家贼难防”,如果有恶意代码混进来,我们需要额外的多项 STM32 安全技术来保护。
MPU
内存保护单元是来自 ARM 的一项技术。在所有的 STM32 系列除了 STM32F0,都有该硬件单元。STM32F0 的用户,也不用着急。为了更好的安全,用户可以选择产品 STM32G0。STM32G0 是可以看成是 STM32F0 的升级版本。
MPU 是一种权限设置保护。通过MPU,可以将内存分成多个单元。每个单元可以单独的设置权限。例如,若将 RAM 设置成不可执行,那么代码注入和 Buffer overflow 到 RAM 就不能工作。
MPU 是一种内存保护技术,主要保护内核所访问的内存,缺点之一它不能保护DMA,缺点之二是它不能自己保护自己。默认情况下,后面的代码依然可以修改MPU 配置。也就是说,如果如果你前面使用了MPU 保护一段内存单元,后面的其他代码还可以修改MPU 配置将保护去掉。
解决这个问题的办法是结合内核的特权模式与非特权模式。我们可以查阅 STM32 的编程手册。手册里写到,某些寄存器只有在特权模式下才能访问。这些只有在特权模式下才能访问的寄存器,就包括了 MPU 的控制寄存器。即只有特权模式才能将 MPU 的配置 修改。如果我们将整个代码分成两部分:安全敏感性操作工作在特权模式,一般用户固件工作在非特权模式下。那么非特权模式下的用户代码就没有办法直接修改 MPU 寄存器,也就是没有办法将配置好的 MPU 关掉或者修改掉。STM32 SBSFU 对 STM32F4、STM32F7 就使用了 MPU 结合特权用户模式,来达到更好的安全效果。
值得强调的,MPU 作为动态保护技术,无法单独存在,必须结合防护外部攻击的 RDP 一起使用。但是,MPU 也可以被用来做开发诊断。MPU 的分区权限设置这个功能,可以帮助开发人员定位错误。
史海拾趣
|
大家好,上传一个单片机开发板的原理图,如果有错误请大家修改后再上传。 希望和大家共同研究,后面我将会上传有关LED电子显示屏的PCB图。希望大家多多指导! [ 本帖最后由 caihong0217 于 2008-11-1 15:07 编辑 ]… 查看全部问答> |
|
用单片机一个口接一个光耦TLP521,然后光耦接三极管,三极管驱动继电器,继电器和光耦的右端都是一个电源,单片机和光耦的左端是一个电源。 问题1:这样的设计对提高系统稳定性有效果么 问题2:其中光耦是不是多此一举,可以去掉呢 这里ZC0是接 ...… 查看全部问答> |
|
[原创].使用Nios II 9.1 SP1 SBTE的Flash Programmer的几点注意事项.[Nios II] 自从Altera公司推出Nios II 9.1 Software Build Tools for Eclipse(简称Nios II 9.1 SBTE),许多新特性的引入,令众多使用者感到欣慰,尤其是在编译的速度上。但是Nios II 9.1 SBTE并不完美,譬如说无法调用用户自定义外设的HAL文件、无 ...… 查看全部问答> |
|
我的CAMERA中断怎么使能了就不能禁止了?我把使能位清掉了还是关不了中断,虽然关不了,但不能进行实时捕捉了,什么原因? 我的CAMERA中断怎么使能了就不能禁止了?我把使能位清掉了还是关不了中断,虽然关不了,但不能进行实时捕捉了,什么原因?… 查看全部问答> |
|
WINCE在开机后自动弹出来一个WIFI无线配置的窗口,但是这个窗口比LCD高了,有没有好办法把这个窗口缩小一点呀!如果单改代码来缩小窗口,那窗口上的控件也要调整,比较麻烦,改资源文件又好像只有英文版的才有效,哪位前辈能给小弟一点建议呀?!… 查看全部问答> |
|
在浏览版块时候,看到了版主驿站,细细品读了一下soso姐写的东西,才知道还有这么多的东西需要注意学习,对自己的这则也有了很清楚的认识,感觉自己突然想有了工作的人似的还有工资 但是更重要的是对eeworld的理解更进一步的加深了,在奖惩方面,e ...… 查看全部问答> |
|
我看书上的C语言例程是调用了printf函数的。 但我编的一个小程序里却因为调用了printf函数,而链接不成功。 我的程序框架是这样的: #include "regs2407.h" #include "stdio.h" void main(void) { &nbs ...… 查看全部问答> |
|
各位大大好 小弟我是大三生之前都是用8051寫程式 後來老師說要微型化 所以買了一個LPC1768這個ARM的開發版http://twarm.com/commerce/product_info.php?products_id=844我是用FT232R去燒錄的類似這樣的接腳http://www.bing.com/images/ ...… 查看全部问答> |




