STM32 安全启动与安全固件更新参考实现
1概述
2STM32安全启动与安全固件更新参考实现
3适用于TrustZone架构的STM32安全启动与安全固件更新参考实现
4参考资料与培训资源
文档资料
培训资料
在嵌入式系统的信息安全中,可信的固件是一个安全基础,同时固件的安全又是一个在整个设备生命周期中都需要考虑的问题。
在设备运行和使用阶段,需要保证每一次上电复位后MCU中运行的固件都是设备厂商原始的可信的固件,而不是可能被替换、篡改过或者注入了恶意代码的应用程序。通常的做法是建立设备信任根,也就是一段不可更改的启动代码及数据,这是一段每次上电复位的时候都会运行且不能被绕过的代码,这段启动代码将检查系统配置的正确性,并使用密码学算法及其配套的密钥对后续即将运行的应用程序的完整性以及合法性进行校验,只有校验通过才能正常启动应用程序,这就是安全启动的过程。
攻击物联网设备的一种常见方法就是利用固件更新的漏洞注入非法代码。因而,对于具有软件升级能力的设备,还需要确保每一次更新的过程依旧能够保证固件的可信性,也就是设备需要安全地进行固件升级。
安全固件升级需要考虑的因素包括
固件完整性和来源可靠性,确保固件来自可信的发布者且未经过篡改
固件的保密性,防止在升级过程中固件内容被窃取
固件版本防回滚,防止恶意的降级(例如降级到已知有某些安全漏洞的旧版本)
X-CUBE-SBSFU是针对基于Cortex v6/v7内核的STM32系列的安全启动和安全固件更新参考实现。软件包下载地址:https://www.st.com/x-cube-sbsfu (注:需要在线填写申请,获取下载链接)。X-CUBE-SBSFU支持的系列包括:STM32F4, STM32F7, STM32L1, STM32L0, STM32L4, STM32G0, STM32G4, STM32H7, STM32WB。STM32WL系列的CubeFW软件包中已经包含SBSFU参考实现,不需要另外下载。
X-CUBE-SBSFU软件包提供的主要功能包括:
•安全启动(Secure Boot)
确保复位时的唯一启动入口,上电后总是首先运行安全启动代码,且安全启动代码不可更改
检测系统配置状态,确保相关硬件安全功能按照期望的配置进行设置
执行应用程序代码之前进行固件映像数据验证 (包括真实性和完整性)
•安全固件更新(Secure Firmware Update)
通过SBSFU自带的Loader或者通过用户应用程序下载新版本固件(通过UART接口基于Ymodem协议接收固件数据)
•验证新固件Image:
固件认证 / 完整性检查 :支持对称密钥(AES)和非对称密钥(ECDSA)方案
固件解密:支持固件加密,更新安装过程会自动对加密固件进行解密和验证
固件版本验证 :版本防回滚
支持全部固件代码更新或部分固件代码更新
固件安装(替换现有应用程序),支持双image和单image模式
•密钥管理功能(目前支持B-L475E-IOT01A开发板)
为应用程序提供密钥存储与管理服务以及加解密操作服务,基于PKCS#11 API
•不同的校验和加密方式
基于对称密钥AES-GCM模式的MAC校验和更新过程固件加密
基于非对称密钥ECDSA模式进行签名校验
基于非对称密钥ECDSA模式进行签名校验+ 更新过程固件加密(AES CCM)
结合STSAFE-A100(CC EAL5+级别安全芯片)基于X.509数字证书的签名校验和密钥存储(目前支持B-L475E-IOT01A板)
X-CUBE-SBSFU参考实现中充分利用不同STM32MCU系列所具有的硬件安全特性,实现安全启动和安全固件更新所需要的安全要求。
由于不同系列的MCU所具有的硬件安全能力有所差别,因而安全功能的实现也会使用不同系列MCU的各自硬件特性,X-Cube-SBSFU在不同系列上的实现所使用的硬件安全特性如下图所示:
X-CUBE-SBSFU已经支持的STM32系列以及示例代码基于的开发板型号见下表
STM32系列 | STM32参考板 |
STM32L4 | 32L496GDISCOVERY, B-L475E-IOT01A, NUCLEO-L432KC, NUCLEO-L476RG |
STM32G0 | NUCLEO-G031K8, NUCLEO-G071RB |
STM32G4 | NUCLEO-G474RE |
STM32H7 | STM32H750B-Discovery, NUCLEO-H753ZI, STM32H7B3I-Discovery |
STM32WB | P-NUCLEO-WB55 |
STM32L0 | NUCLEO-L073RZ |
STM32L1 | NUCLEO-L152RE |
STM32F4 | STM32F413H-Discovery |
STM32F7 | STM32F769I-Discovery |
针对Cortex v8M TrustZone架构的STM32 MCU(如STM32L5, STM32U5),安全启动和安全更新的参考实现是STM32Cube TF-M。
STM32Cube TF-M提供Root of Trust解决方案,覆盖安全启动,安全更新和安全服务。该参考方案来源于开源的TF-M(Trusted Firmware-M)项目(https://www.trustedfirmware.org/projects/tf-m/),其具体实现则结合了STM32 MCU的各种硬件安全特性。STM32Cube TF-M同时获得了ARM PSA(Platform Security Architecture)的认证(https://www.psacertified.org/)。
Arm® trusted firmware-M (TF-M)的架构如下图所示。TF-M基于Cortex v8M架构实现,大的框架上分为非安全执行环境(NSPE)和安全执行环境(SPE)两部分,在SPE中又分成以下几个部分:
不可更改的信任根Immutable RoT
可升级的信任根Updatable RoT
应用可升级信任根Application UPdatable RoT
其中涉及安全启动和安全更新的部分属于不可更改的信任根(Immutable PSA Rot),见下图。
除了安全启动和安全更新,TF-M还提供了一系列原生安全服务,例如安全存储,Cryptography加解密,Initial Attestation等。这部分属于可升级的信任根Updatable RoT。安全启动和安全升级覆盖SPE和NSPE中可升级的FW部分。
在此架构下,还可以扩展添加应用自己的安全服务,也就是应用可升级信任根Application UPdatable RoT的部分。
运行在NSPE的应用程序可以通过Developer API调用TF-M SPE中的服务,包括原生安全服务和应用层安全服务。
文档资料
应用笔记/用户手册 | ||
Integration guide for the X-CUBE-SBSFU STM32Cube Expansion Package 《X-CUBE-SBSFU STM32Cube扩展包集成指南》 | X-CUBE-SBSFU | |
Getting started with the X-CUBE-SBSFU STM32Cube Expansion Package 《X_CUBE_SBSFU安全启动和固件更新软件入门》 | ||
《STM32L5的安全启动和安全固件升级方案介绍》 | STM32L5 SBSFU | |
Getting started with STM32CubeL5 TFM application 《STM32L5 TF-M应用入门》 | STM32L5 TF-M | |
Getting started with STM32CubeU5 TFM application 《STM32U5 TF-M应用入门》 | STM32U5 TF-M | |
STM32CubeL5 TFM security guidance for SESIP profile for Arm® PSA Level 2 chip 《STM32L5 TF-M针对SESIP和Arm® PSA Level2认证的安全指南》 | STM32L5 TF-M | |
SBSFU | 实战经验文章 |
培训资料
培训课程及资料 | |
视频课程 | |
培训课件 | |