stm32 在指定rom地址 数组_STM32的存储与执行保护

点击链接观看视频课程:

电堂科技​c.51diantang.com

STM32安全特性概览

40a96108684034f31f9c134017f58611.png

从产品系列来看

693b47cd28a35ef806832f336106069f.png

STM32 UID

出厂前由STM32烧写在芯片的系统Flash部分,提供STM32芯片的唯一标志号

  • Wafer位置,X坐标值BCD编码@2字节
  • Wafer位置,Y坐标值BCD编码@2字节
  • Lot编号低地址,ASCII编码 @2字节
  • Wafer编号 @1字节
  • Lot编号高地址,ASCII编码 @4字节

常见用途:

  • 通过某种算法生成该芯片所在产品的序列号
  • 密钥派生

从产品系列来看UID

0952da0c38a05d67c58ebbe3c82c234c.png

STM32 Flash写保护

  • 保护片上Flash指定区域的内容不被意外地修改,也不能被擦除
  • 常见用途:WRP+RDP2,锁定一段片上Flash区域成为ROM
  • 通过选项字节使能保护和撤除保护

30d0588805e07002d59eb6fae3681039.png

从产品系列来看WRP

00d54bd9229d5ca0bd1f7c6d68233c49.png

STM32私有代码保护PCROP

保护片上Flash指定区域不能被数据总线访问,只能执行

  • 不能被读、修改、擦除
  • 调试接口也无法读出区域里的内容
  • 这段代码可以被调试:观察寄存器、堆栈等上下文

常见用途:联合开发时,对IP代码进行保护,不被终端用户读出或修改

通过选项字节使能保护

  • L4、H7、G0、G4、WB:设置起始page和末尾page,连续地址
  • 其他系列:每个page/sector可独立设置

通过选项字节撤除保护:RDP降级+同时取消保护区域的范围设置

  • PCROP_RDP=1,RDP降级:片上Flash所有内容被擦除,包括PCROP保护的区域
  • PCROP_RDP=0,RDP降级:只擦除PCROP区域以外

PCROP使用技巧

使用技巧1,关于敏感代码涉及的常数

  • 在IDE中设置特别的编译选项
  • 代码用到的常量放在保护区域之外

使用技巧2,存储敏感数据

  • 也要结合其他保护机制,把敏感数据恢复到安全的寄存器/SRAM

使用技巧3,可以增大PCROP保护区域

从产品系列来看PCROP

82b148978e64f012a5b1605d2d1f4a0a.png

STM32读保护RDP

在不同保护级别下,可以实现对谁的,什么保护(什么条件下的什么行为)

0e255e1c272a26b6f8f8e7aedb31574d.png

a376d71c9022e7fdc509e1d55a9a2e64.png

f1d8ef5971f2834d0fb2430b3797e96c.png

RDP级别转化

77bd4e28b8632141f1033b14470ebd3c.png

RDP级别1

能做什么:

  • 从用户Flash启动,对所有保护对象的操作不受任何限制(除非介质本身的属性限制)
  • 允许调试器连接,读、修改选项字节
  • 被调试器连接,但是内核复位
  • 被调试器hotplug连接,读取SRAM1和外设寄存器当前值

不能做什么:

  • 被调试器连接/从SRAM启动/从系统Flash启动,看不到用户Flash、备份域、受保护SRAM的内容
  • 从SRAM启动的代码不能通过DMA读出用户Flash的内容

RDP级别2

选项字节被锁死,任何代码都无法再修改它

  • 选项字节的配置永久生效:读保护、启动地址、PCROP……
  • 写保护+RDP2

调试接口再也无法连接

  • 失效分析受影响

只能从用户Flash启动,仍可做用户Flash的固件更新

从产品系列来看RDP

a1fbfea76ac3bb458c398ef1b3b48c00.png

STM32唯一启动入口UBE

dd568e109503f8423f7687f7f07f4cb2.png

G0/G4的UBE控制位

c499f93ef7bb8b440ce9c2f07767e84c.png

STM32安全用户存储区/G0,G4

安全用户闪存,用于配合UBE,做安全启动。

  • 用于隔离用户代码和敏感代码:secure开关打开后,这段区域不可见,直到下次复位
  • (secure开关打开之前)执行敏感代码时,可关闭调试访问

安全用户闪存是用户Flash的一部分。

  • 起始地址固定在0x0800 0000
  • 大小可配置,SEC_SIZE@FLASH_SECR(和UBE的使能控制在同一寄存器)。大小为0时,表示没有安全用户闪存;只能在RDP0时修改该位域;大小粒度,和Flash page相同:2KB/4KB。

secure开关,用户软件置位后,只能由系统复位清零。

235819a33db23c6be77a2f7b8f8bc377.png

从产品系列来看UBE+安全用户存储区

97a23331057f3f1bdbf6c88a89047581.png

STM32集成的MPU

ef6d1054882bf3994ce505f8f5b18b55.png

MPU常见用法和相关设计资源

MPU常见用法:

  • OS或者敏感代码设置成特权级别的代码才能访问,防止不可靠的非特权级别用户代码因为软件漏洞,而污染了敏感代码
  • 把DMA控制寄存器所在区域设置成只能特权级别代码访问,防止非特权级别的用户代码操作DMA来避开MPU的限制
  • 把RAM区域设置成XN,以免缓冲区溢出造成的攻击
  • 任务切换之前,把其他任务的数据区设置成不能访问,以免造成相互污染

相关设计:

  • AN4838 STM32上的MPU
  • PM0056,PM0223,PM0214,PM0253 Cortex-M3/M0+/M4/M7 内核编程手册

从产品系列来看MPU

798058fd01ed323a2227bf356a768326.png

STM32防火墙Firewall

a04edad14a002eb3d1d2ae6fbfe5fe1c.png

防火墙的运行时保护

2e95564f7eb0257008efcbf1e9058ce5.png

防火墙常见用法

防火墙注意事项:

  • 进入防火墙执行前,最好关闭中断(如果ISR在墙外),否则中断发送时会立刻产生复位,或者在ISR执行完返回时复位,取决于FPA
  • 通过寄存器操作激活防火墙功能,知道下一次系统复位,防火墙状态才能再次回到IDLE
  • PC从固定的入口进入,才能open防火墙;此状态下是可以调试的

相关设计资源

  • AN4730使用L0和L4的防火墙来安全访问敏感代码和数据
  • STM32CubeL4 Nucleo-L496/L476 example/FIREWALL

从产品系列来看Firewall

0de75be3fb1d6a4b9c4511783f2044b5.png

STM32L5引入新的安全特性

TrustZone,从ARM Cortex-M33内核,扩展到STM32L5整个系统

  • 新的系统架构,启动模式
  • 新的编程模型
  • 新的安全规划思路
  • 新的生态系统

OTFDEC

  • 对存储在外部OSPI Flash的数据和指令,取指和取数据,与实时解密同时进行
  • 该功能仅在TZ使能时可用

STM32的入侵检测 Tamper

a23f17c7c8ae19068f652fd96aba9251.png

从产品系列来看tamper

8c6817880e0e7ba5ee9137b254ac8484.png

http://weixin.qq.com/r/ey4gONXE7IiTrZFb93tp (二维码自动识别)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值