历史上的今天
返回首页

历史上的今天

今天是: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 的分区权限设置这个功能,可以帮助开发人员定位错误。


推荐阅读

史海拾趣

Chiefdom Electronic Co Ltd公司的发展小趣事

面对全球市场的日益开放和竞争,Chiefdom Electronic Co Ltd积极寻求与其他行业巨头的战略合作。通过与全球知名的电子产品制造商、芯片供应商等建立紧密的合作关系,公司不仅获得了更多的技术和市场资源,还进一步提升了自身的品牌影响力和市场份额。这些合作不仅帮助公司拓展了业务领域,还为其在全球电子行业中树立了良好的口碑。

GainSpan ( Telit)公司的发展小趣事

风华的故事始于1984年,当时广东肇庆风华电子厂成立,最初业务聚焦于收录机装配。一年后,即1985年,国内首条从美国引进的年产1亿只片式多层陶瓷电容器生产线落户风华,标志着公司正式踏入高新技术产业领域。这一举措不仅提升了公司的技术实力,也为后续的发展奠定了坚实基础。

High Voltage Power Solutions Inc公司的发展小趣事

随着业务的不断扩展和技术实力的提升,风华电子厂于1993年实施股份制改革,并更名为广东风华高新科技股份有限公司。1996年,公司在深圳证券交易所成功上市(证券简称风华高科,证券代码000636),成为电子元器件行业的重要一员。上市不仅为公司筹集了更多资金,也进一步提升了公司的知名度和市场竞争力。

Bipolarics Inc公司的发展小趣事

在快速发展的过程中,Bipolarics Inc始终重视人才培养和团队建设。公司注重从高校和研究机构引进优秀人才,同时加强内部员工的培训和晋升机制。通过打造一支高效、专业的团队,Bipolarics Inc在技术研发、市场营销等方面取得了显著成绩。此外,公司还积极营造良好的企业文化氛围,激发员工的创新精神和团队凝聚力。

安信可(Ai)公司的发展小趣事

2012年4月,深圳市安信可科技有限公司正式成立,标志着这家公司在电子行业的起点。成立之初,安信可便专注于物联网领域,致力于为客户提供高质量的模组产品。通过引入先进的科技和创新理念,安信可逐渐在物联网市场中崭露头角,为后续的发展奠定了坚实的基础。

Dielectric Laboratories公司的发展小趣事

作为一家在电子行业中具有重要地位的企业,DLI始终将创新作为公司的核心竞争力。公司不断投入研发资金,探索新的技术领域,推出具有领先性的产品。例如,在电容器领域,DLI研发了StackiCapTM技术,使得高CV电容器得到进一步发展。这一技术的推出不仅提升了DLI的产品竞争力,也为整个电子行业的发展注入了新的活力。同时,DLI还积极参与国际交流和合作,与全球知名的电子企业建立合作关系,共同推动电子行业的发展。

以上五个故事简要概述了Dielectric Laboratories(DLI)公司在电子行业中的发展历程和成就。通过这些故事,我们可以看到DLI在不断创新、追求卓越的过程中,逐渐成为了电子行业中具有重要影响力的企业。

问答坊 | AI 解惑

单片机常用开发板原理图

大家好,上传一个单片机开发板的原理图,如果有错误请大家修改后再上传。 希望和大家共同研究,后面我将会上传有关LED电子显示屏的PCB图。希望大家多多指导! [ 本帖最后由 caihong0217 于 2008-11-1 15:07 编辑 ]…

查看全部问答>

单片机驱动继电器问题,用2个电源是否多余

用单片机一个口接一个光耦TLP521,然后光耦接三极管,三极管驱动继电器,继电器和光耦的右端都是一个电源,单片机和光耦的左端是一个电源。 问题1:这样的设计对提高系统稳定性有效果么 问题2:其中光耦是不是多此一举,可以去掉呢 这里ZC0是接 ...…

查看全部问答>

点阵显示的移动

  #include <reg51.h>#include <absacc.h> #define uchar unsigned char#define uint  unsigned int#define hang0  XBYTE[0X7FFF]#define hang1  XBYTE[0XbFFF]#define lie    XBYTE[0XDFFF] char co ...…

查看全部问答>

[原创].使用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有问题

WINCE在开机后自动弹出来一个WIFI无线配置的窗口,但是这个窗口比LCD高了,有没有好办法把这个窗口缩小一点呀!如果单改代码来缩小窗口,那窗口上的控件也要调整,比较麻烦,改资源文件又好像只有英文版的才有效,哪位前辈能给小弟一点建议呀?!…

查看全部问答>

高手请进

   大家好呀!!我今天想问一下大家一个有关usb接口的问题:我们学校机房中的电脑所有的usb接口都被禁止了,请问大家要怎样破解!!或者有什么好的破解这个的软件,还有就是那个接口被禁止是不是老师那台机子控制的?…

查看全部问答>

细细学习版主须知的感受

在浏览版块时候,看到了版主驿站,细细品读了一下soso姐写的东西,才知道还有这么多的东西需要注意学习,对自己的这则也有了很清楚的认识,感觉自己突然想有了工作的人似的还有工资 但是更重要的是对eeworld的理解更进一步的加深了,在奖惩方面,e ...…

查看全部问答>

请教:CC里可以调用printf函数吗?

我看书上的C语言例程是调用了printf函数的。 但我编的一个小程序里却因为调用了printf函数,而链接不成功。 我的程序框架是这样的: #include "regs2407.h" #include "stdio.h" void main(void) {       &nbs ...…

查看全部问答>

LPC1768 燒錄問題

各位大大好  小弟我是大三生之前都是用8051寫程式  後來老師說要微型化 所以買了一個LPC1768這個ARM的開發版http://twarm.com/commerce/product_info.php?products_id=844我是用FT232R去燒錄的類似這樣的接腳http://www.bing.com/images/ ...…

查看全部问答>