你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

信息安全专题 | 代码保护(1)使用STM32H7新特性保护片上代...

[复制链接]
STMCU-管管 提问时间:2021-3-3 11:19 /
信息安全专题 | 代码保护(1)
使用STM32H7新特性保护片上代码的机密性

2.1.gif

上周的微信文章《STM32信息安全概览:是时候KO安全问题了!》是STM32信息安全专题系列文章的开篇词。

本文将为大家介绍使用STM32H7新特性保护片上代码的机密性。

谈到STM32的高性能家族产品,大家已经对STM32F2/F4/F7耳熟能详。之后的STM32H7系列继承和发展了高性能产品家族的特性。然鹅,如何使用STM32H7进行安全存储、代码保护?你造吗?


使用STM32H7安全用户存储区
控制调试端口访问、保护片上代码安全



使用STM32H7新特性保护片上代码的机密性包括:

※       调试端口连接可控
(1)    在RDP0条件下也可实现对调试端口的保护,上电调试接口即不可连接(具有类似RDP2的效果)
(2)    比RDP2更灵活,可以由用户代码控制调试端口访问权限,实现安全调试,并保留修改选项字节的可能性
※       用户片上Flash进一步隔离-保护敏感代码不被木马程序攻击
※       安全STM32H7可以实现以下功能
(1)    安全启动
(2)    安全用户存储区
(3)    安全调试

2.2.png

STM32H7 硬件安全特性与机制主要包括:
※       安全STM32H7的启动路径
※       安全STM32H7的 “安全用户存储区”
※       安全STM32H7的安全调试

2.3.png

安全STM32H7 启动流程
※       安全STM32H7新增选项字节:SECURITY、SEC_AREA
※       系统复位,装载选项字节的过程中,如果SECURITY置位,则无论BOOT引脚电平以及 BOOTADDR选项字节的内容,一定从位于片上系统Flash的RSS启动
※       RSS会检查SEC_AREA的内容,是否已经有指定的有效区域(有效区域是指起始地址小于 结束地址)。如果区域有效,则跳转到它所指向的用户Flash上的“安全用户存储区”执行。如果区域无效,则按照常规启动流程,根据BOOT引脚电平,选择从BOOTADDR0或 BOOTADDR1指向的地址启动
※       BOOTADDR0和BOOTADDR1可以填写[0x0,0x3FFF 0000]范围内的任意地址。RDP2情况 下,系统只能从片上用户Flash启动。如果BOOTADDR0或者BOOTADDR1指向的不是片上 用户Flash,系统会强制从0x0800 0000启动
※       SECURITY=1时,系统复位时调试端口关闭
※       运行在RSS和安全用户存储区时,调试端口关闭

2.4.png

安全用户闪存区

※       上电复位状态
(1)    只要使能Security并设置了安全用户闪存区的有效范围,则总是跳转到该区域的首地址运行
(2)    在这个区域(region A)内执行的时候,无法通过Debug连接芯片(即使RDP0状态下)
(3)    复位和运行在region A的时候,芯片处于“安全访问模式”

2.5.png

从安全用户闪存区,不使能对它的保护,直接跳转到普通UserFlash区(region B)
处于region B的PC依旧可以访问安全用户闪存区(region A)内容
在region B内执行的时候,仍然无法通过Debug连接芯片(即使RDP0状态下)
运行在region B的时候,虽然不在安全用户闪存区范围内,仍然处于“安全访问模式”

2.6.png

从安全用户闪存区,开启对它保护后,再跳转到普通UserFlash区(region B)
※       处于region B的PC无法访问安全用户闪存区(region A)内容,直到下一次复位后PC在region A执行
※       在region B内执行时,调试连接是可能的 (取决于跳转之前应用代码是否人为关闭了调试端口)
※       运行在region B的时候,不再处于“安全访问模式”

2.7.png

安全用户闪存区的设置和撤销
※       芯片出厂时选项字节的缺省设置:SECURITY=0,“安全用户闪存区”是无效区域
※       设置 “安全用户闪存区”必须在SECURITY置位之后;否则设置无效
※       “安全用户闪存区”有效的情况下,或者PCROP区域有效的情况下, SECURITY的清 零无法成功;需要先把这两种区域都设置成无效,再对SECRUITY清零
※       “安全用户闪存区”的撤销,只需要运行在RSS或“安全用户闪存区” 的代码,把选项字节在Flash接口中对应的寄存器,其起始地址设置成大于结束地址,并让选项字节生效即可
※       PCROP区域的撤销,需要通过RDP降级和PCROP区域无效,同时进行才能完成

2.8.png

安全STM32H7 代码保护示例
安全调试例程简介
※       解压缩软件包,使用熟悉的IDE分别打开Boot和App两个工程,编译后下载
※       打开串口调试助手:115200波特率,8bit数据位,1bit停止位;无校验位,无流控
※       STM32H753-Nucleo板
(1)    按下复位键,松开,程序运行
(2)    松开复位键时保持用户按键按下
(3)    根据屏幕菜单显示操作
※       使用STM32CubeProgramer 的”hotplug”和”under reset”方式尝试连接目标芯片,以验证调试端口的保护效果;以及对隔离区内容的保护

2.9.png
2.10.png
▲Boot工程 菜单

2.11.png
▲App工程

2.12.png
▲ 带身份认证的调试使能控制

2.13.png
▲ 安全调试例程:安全用户闪存区的设置和撤销


注意事项
※       SEC_AREA 没有安全区时,只能由RSS来初始化;有了安全区后,运行在其中的代码可以修改 SEC_AREA ;STM32CubeProgrammer 是无法操作SEC_AREA 成功的
※       SECURITY=1,IDE下载可能会失败;要么从STM32CubeProgramer连接后,清零SECURITY;要么修改工程的复位连接方式

2.14.png


小结
STM32H7通过以下两方面对片上代码施加保护:
※       保护Bootloader里的敏感操作和数据
(1)    Bootloader运行时,调试不可连接
(2)    执行普通代码时,打开调试端口;普通代码 无法访问Bootloader区域内容
※       保护片上代码不被普通用户调试,仅开放给持有密钥的特定用户
(1)    安全用户区里内容可以被其他区域代码访问
(2)    打开调试后,安全区代码无法被调试访问

2.15.png


▲ 点击上方链接观看完整视频

收藏 评论0 发布时间:2021-3-3 11:19

举报

0个回答

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版