LEDyyds 发表于 2021-12-30 09:29

STM32 安全启动与安全固件更新参考实现

1.概述在嵌入式系统的信息安全中,可信的固件是一个安全基础,同时固件的安全又是一个在整个设备生命周期中都需要考虑的问题。在设备运行和使用阶段,需要保证每一次上电复位后MCU中运行的固件都是设备厂商原始的可信的固件,而不是可能被替换、篡改过或者注入了恶意代码的应用程序。通常的做法是建立设备信任根,也就是一段不可更改的启动代码及数据,这是一段每次上电复位的时候都会运行且不能被绕过的代码,这段启动代码将检查系统配置的正确性,并使用密码学算法及其配套的密钥对后续即将运行的应用程序的完整性以及合法性进行校验,只有校验通过才能正常启动应用程序,这就是安全启动的过程。
攻击物联网设备的一种常见方法就是利用固件更新的漏洞注入非法代码。因而,对于具有软件升级能力的设备,还需要确保每一次更新的过程依旧能够保证固件的可信性,也就是设备需要安全地进行固件升级。


安全固件升级需要考虑的因素包括
[*]固件完整性和来源可靠性,确保固件来自可信的发布者且未经过篡改
[*]固件的保密性,防止在升级过程中固件内容被窃取
[*]固件版本防回滚,防止恶意的降级(例如降级到已知有某些安全漏洞的旧版本)

LEDyyds 发表于 2021-12-30 09:29

2.STM32安全启动与安全固件更新参考实现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参考板
STM32L432L496GDISCOVERY, B-L475E-IOT01A, NUCLEO-L432KC, NUCLEO-L476RG
STM32G0NUCLEO-G031K8, NUCLEO-G071RB
STM32G4NUCLEO-G474RE
STM32H7STM32H750B-Discovery, NUCLEO-H753ZI, STM32H7B3I-Discovery
STM32WBP-NUCLEO-WB55
STM32L0NUCLEO-L073RZ
STM32L1NUCLEO-L152RE
STM32F4STM32F413H-Discovery
STM32F7STM32F769I-Discovery



LEDyyds 发表于 2021-12-30 09:30

3.适用于TrustZone架构的STM32安全启动与安全固件更新参考实现针对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中的服务,包括原生安全服务和应用层安全服务。
4.参考资料与培训资源文档资料

应用笔记/用户手册
AN5056Integration guide for the X-CUBE-SBSFU   STM32Cube Expansion Package《X-CUBE-SBSFU STM32Cube扩展包集成指南》X-CUBE-SBSFU
UM2262Getting started   with the X-CUBE-SBSFU STM32Cube Expansion Package《X_CUBE_SBSFU安全启动和固件更新软件入门》
AN5447Overview of Secure   Boot and Secure Firmware Update solution on Arm® TrustZone® STM32L5 Series   microcontrollers《STM32L5的安全启动和安全固件升级方案介绍》STM32L5 SBSFU
UM2671Getting started   with STM32CubeL5 TFM application《STM32L5 TF-M应用入门》STM32L5 TF-M
UM2851Getting started   with STM32CubeU5 TFM application《STM32U5 TF-M应用入门》STM32U5 TF-M
UM2745STM32CubeL5 TFM   security guidance for SESIP profile for Arm® PSA Level 2 chip《STM32L5 TF-M针对SESIP和Arm® PSA Level2认证的安全指南》STM32L5 TF-M
SBSFU一步一步使用STM32安全启动与固件更新实战经验**
培训资料
培训课程及资料
STM32信息安全线上课程视频课程
SBSFU原理介绍培训课件
SBSFU初体验
SBSFU在STM32G0上的实现
X_Cube_SBSFU和STM32G0


页: [1]
查看完整版本: STM32 安全启动与安全固件更新参考实现