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

信息安全主题 | 代码保护(2)使用STM32L5 TrustZone 特性控制调试端口访问,保护片上代码安全

[复制链接]
STMCU-管管 发布时间:2021-6-15 16:44
1.gif
7 l# a& N8 S* a. G9 I8 x1 S
STM32L5微控制器系列基于 Arm Cortex-M33 内核,充分利用该内核的安全特性,即适用于 Arm V8-M 的 TrustZone技术,从内核到整个芯片系统,实现了安全区域和非安全区域之间的有效隔离。; c0 i" ~' p# @. W  h9 C9 c; P! p

! L8 _, k4 S1 G- x

- [5 S: r0 P2 G6 K, L1 n7 w; {在调试端口保护方面,TrustZone 和 RDP(读保护)的配合,同样可以实现灵活的调试端口访问控制,有效阻断来自调试端口对片上代码的窥探。7 w: h3 D' W, t+ j/ \
  • 2 {5 d: `9 Y1 G, O
6 m9 B5 B5 k+ y; S" j. q
▲ 点击观看视频讲解

3 u: f! t3 t  X# @% W7 h8 l, d
# [0 x* f1 @* s# w8 O

, V9 j5 d1 R" P8 G4 H" X& {
使用 STM32L5 TrustZone 保护片上代码的机密性
* A$ m& `0 ~/ X# f
·调试端口连接可控0 X0 r, C3 E. n- u  _
! S( ?) Y6 Q: O% X0 z

  V. O5 L! Q4 Y" H+ \. ]4 @- U在RDP1或者RDP0.5条件下,如果芯片使用了TrustZone上电调试接口就不可连接(具有类似RDP2的效果)
2 u7 {) e' J( P" x2 P
  i, O2 H8 Y$ U% a' @$ X' r. h

2 r8 H# X* e; i5 q0 d比RDP2更灵活,可以由用户代码控制后续调试端口访问权限,实现安全调试,并保留修改选项字节的可能性
3 I7 G$ ?; x  s
1 u/ I2 k/ h& w- r
3 G: d7 i3 V/ ]
·用户片上Flash进一步隔离# {: T* O9 D, l7 K$ h; b2 j
# v0 I- K. g7 }2 c+ ?; ~1 K# c

. \2 Q9 o8 N9 T5 C7 u  h5 i安全闪存区域不能被非安全世界任意访问
" L- o% ?0 L- b1 p
1 B8 h) V' _7 V+ l" w# L/ |  j) t
9 c# _8 F9 W' }; ~- n
非安全世界不能访问安全世界的数据2 {  M2 u& R! N2 X  ^
+ W3 i+ T( {& k* N$ h* V) Y! }

! X! m, I4 g. X& O  R8 P4 _& g非安全世界不能访问安全世界的外设( ]" ]  A5 F) B( g# ?

3 ?1 U5 x8 }' _+ n' f; m, E1 A

& }) ?' i0 ~0 g; b5 c# H" G, ?) p7 @非安全世界访问安全世界的函数,需要按照一定规则,不可随意调用
- k8 ?5 f( d8 J" M7 N! ?' _% Y
11.png
, Q8 y+ N% e5 D. ^* q
STM32L5 TrustZone 助力代码保护示例
, g  t9 V1 c; F2 B8 d( d9 X·资源在“安全世界”和“非安全世界”之间的分配
. A! ~) g6 [$ k1 l·示例菜单和测试功能  S; K; X# _1 C4 V  e; ^' d* ?
·示例运行注意事项
4 C& z! o2 ^/ I2 ^8 x- p* w1 u/ f3 g' P; G3 `& z

, U7 I* }  q. b; \$ o资源的分配: K  z8 K3 T. b  L1 I. ~  {
  F$ j$ E1 V0 \

, S6 n! }6 J4 {5 g·上电运行安全世界代码,做资源分配
! g+ g8 I0 O' i8 f4 v3 y. H: y; X$ q  c
, K6 }: O6 z% o
·安全世界:, x! e5 n2 S+ R

: u9 V! I: o4 B
9 v8 i; {1 v* J& n
关键操作,关键数据
7 r: i8 c9 A; x( T& T; ^0 L$ ~: `配合读保护,可以阻断调试端口连接
' `$ j4 j, x* C: z; {" L3 R1 D# T$ z5 N

1 l! F7 C# l3 h- {3 a5 I·非安全世界:
4 c' V% q& s5 x$ r" j
0 z  T" B& l* {$ g9 V+ L; m6 Z

8 ^8 \) l- \& i& X+ g& s人机交互
# A) ^4 d: e& F3 e; w+ e可以使能调试端口,但是无法访问到安全世界的关键数据和外设
* \: X: s% ~! ?: ^
12.png

+ p- ]5 h; A" H" k/ n1 }0 N- ^5 c调试端口的连接控制RDP=00 O5 a% P( |  g! Z1 R! h: X

7 u0 L. ^8 C  o4 ?4 Q* h

( a  ~& E! t6 s' H3 N·读保护级别为0(芯片缺省状态)! \8 x0 C9 s8 I0 ?

: q+ W; m7 L, {5 v6 Z
4 L) @1 X  x4 r- }# t' }. Y# k( l9 v
芯片复位可被调试端口连接
6 U( P; Y7 z9 a" A: X+ S, \- s7 S
13.png

1 @8 }5 S& e( v3 _  l5 n运行示例* j6 O- E! L2 i' ^
14.png
) G2 ?3 @9 I* ]3 a) m! d
15.png
$ d2 p2 \8 r  g( v
  L! L3 S  L9 U( G9 o
( `; N" `* A$ [5 z% |
调试端口的连接控制RDP=0.5
* f2 A/ S# U3 T; G- A# @
. l2 i" M7 T/ A8 H
# N1 R, W% t3 b0 ~
·读保护级别为0.5
" ]% \& g3 |8 k& f2 e  s1 @: r" ]5 _1 O6 @5 A' @

* c  H% b( B+ P! t硬件保证:CPU处于安全状态时,调试无法连接;包括复位时,运行安全代码时4 T) m7 l" k! r6 k. s4 m
软件操作:安全代码在跳转到非安全区域之前,关闭调试端口
3 H: h$ x/ y$ g9 Y# Z/ E
& f" x0 {" K9 J5 u, x  L

9 [' L( g* w  W$ T- G1 G·保护效果0 n) {  K$ N' }1 ?  Z7 X
1 R1 a( i3 }' r( {( q+ l2 k
" k. m2 \; e' l5 {: n$ E* k
CPU运行在非安全区域时,缺省调试无法连接;可通过身份认证来使能对非安全代码的调试* x* i( s% `. H4 k. b: X( U
16.png
# J6 M1 u0 a# X& O* b- o3 [# n
0 Y2 _4 K7 C7 @* }" f

4 {2 R* Z2 F+ Z3 |7 n带身份认证的调试使能  q- N; O: a5 P! s

0 L' `7 m! Z, l2 }/ Y+ ~2 w' {; n" M
4 e1 ~2 \7 x) z5 s8 b
基于“挑战-应答”模型
4 M' j5 U) y, f+ @* [! q+ Y; f: Q1 }

, O0 c; G/ G" U7 ]* \芯片产生随机序列,合法用户持有匹配私钥对随机序列的签名,才能被芯片使用其存储在安全世界里的对应公钥验签成功
* r9 P$ F+ r$ v# R3 g4 d& ?
17.png
! i) E) q1 L  \, M7 X
18.png

0 c. Z6 z1 k2 Y( O# Y* ^! p0 B
19.png

! F4 m) r+ \8 h% _% V9 D% `' k; k" X
6 ^5 y9 y9 u% Z/ O
例程运行注意事项
6 r0 s; }6 G" r1 c& ~3 @) x
9 K& L  J- @1 u$ Y
' `9 L4 y5 ^1 t
·RDP0.5时,S代码自动关闭调试端口。使用STM32CUbeProgrammer hotplug也无法连接;IDE下载NS代码也不会成功;需要用户通过菜单打开调试端口,之后STM32Cubeprogramer才能连接成功,IDE下载也才能成功。  _/ H- F: o% r9 G: ?: @
·RDP非0时,片上Flash中如果没有可以跑到非安全状态的有效代码,调试端口不再可连
& v% [! a; j) Z0 R1 D0 C# D& `除非改变启动方式,从系统BL启动(系统BL的代码是一定可以跑到非安全状态的)
% A4 H6 v9 w- x需要确保可以从系统BL启动(选项字节中的启动控制:nSWBOOT0)' p' p6 D5 ~- p: L. A
·【Q】为何例程没有提供RDP回退的菜单?  l) U+ u7 L: J) L. |" _
  【A】TrustZone使能时,RDP回退只能由调试接口或者系统BL完成
/ m, y6 |( _, V5 U3 q$ d5 \·例程通过硬件和软件两方面一起作用,实现了对非安全代码的可控调试, S2 c5 z9 y1 w
硬件:读保护级别不为零+TZ使能\r复位时+ 运行在安全代码区域时,调试不可连接
: z# h: C$ F, D9 ]  q- @软件:安全区代码在跳转到非安全区代码之前,软件关闭调试端口2 I& X2 o, S+ C, N$ k9 o+ n
菜单【1】、【2】:测试作用,不会集成到产品中
0 r" s" C: G8 F, k4 {4 {7 V, k菜单【D】:即使通过通信端口在非安全区注入恶意代码来调用打开调试端口的功能,由于不知道签名所需要的私钥,验证无法通过,不能打开调试端口
9 i, m( q- X8 i; J2 s4 R1 o
赞 收藏 评论1 发布时间:2021-6-15 16:44

举报

1个回答
ghost110 回答时间:2021-7-5 15:16:38
加密级别能达到多少呢?
; X: M  q9 C* X. [" n& K

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版