天天看點

stm32 在指定rom位址 數組_STM32的存儲與執行保護

點選連結觀看視訊課程:

電堂科技​c.51diantang.com

STM32安全特性概覽
stm32 在指定rom位址 數組_STM32的存儲與執行保護
從産品系列來看
stm32 在指定rom位址 數組_STM32的存儲與執行保護
STM32 UID

出廠前由STM32燒寫在晶片的系統Flash部分,提供STM32晶片的唯一标志号

  • Wafer位置,X坐标值BCD編碼@2位元組
  • Wafer位置,Y坐标值BCD編碼@2位元組
  • Lot編号低位址,ASCII編碼 @2位元組
  • Wafer編号 @1位元組
  • Lot編号高位址,ASCII編碼 @4位元組
常見用途:
  • 通過某種算法生成該晶片所在産品的序列号
  • 密鑰派生
從産品系列來看UID
stm32 在指定rom位址 數組_STM32的存儲與執行保護
STM32 Flash寫保護
  • 保護片上Flash指定區域的内容不被意外地修改,也不能被擦除
  • 常見用途:WRP+RDP2,鎖定一段片上Flash區域成為ROM
  • 通過選項位元組使能保護和撤除保護
stm32 在指定rom位址 數組_STM32的存儲與執行保護
從産品系列來看WRP
stm32 在指定rom位址 數組_STM32的存儲與執行保護
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
stm32 在指定rom位址 數組_STM32的存儲與執行保護
STM32讀保護RDP

在不同保護級别下,可以實作對誰的,什麼保護(什麼條件下的什麼行為)

stm32 在指定rom位址 數組_STM32的存儲與執行保護
stm32 在指定rom位址 數組_STM32的存儲與執行保護
stm32 在指定rom位址 數組_STM32的存儲與執行保護
RDP級别轉化
stm32 在指定rom位址 數組_STM32的存儲與執行保護
RDP級别1

能做什麼:

  • 從使用者Flash啟動,對所有保護對象的操作不受任何限制(除非媒體本身的屬性限制)
  • 允許調試器連接配接,讀、修改選項位元組
  • 被調試器連接配接,但是核心複位
  • 被調試器hotplug連接配接,讀取SRAM1和外設寄存器目前值

不能做什麼:

  • 被調試器連接配接/從SRAM啟動/從系統Flash啟動,看不到使用者Flash、備份域、受保護SRAM的内容
  • 從SRAM啟動的代碼不能通過DMA讀出使用者Flash的内容
RDP級别2

選項位元組被鎖死,任何代碼都無法再修改它

  • 選項位元組的配置永久生效:讀保護、啟動位址、PCROP……
  • 寫保護+RDP2

調試接口再也無法連接配接

  • 失效分析受影響

隻能從使用者Flash啟動,仍可做使用者Flash的固件更新

從産品系列來看RDP
stm32 在指定rom位址 數組_STM32的存儲與執行保護
STM32唯一啟動入口UBE
stm32 在指定rom位址 數組_STM32的存儲與執行保護
G0/G4的UBE控制位
stm32 在指定rom位址 數組_STM32的存儲與執行保護

STM32安全使用者存儲區/G0,G4

安全使用者閃存,用于配合UBE,做安全啟動。

  • 用于隔離使用者代碼和敏感代碼:secure開關打開後,這段區域不可見,直到下次複位
  • (secure開關打開之前)執行敏感代碼時,可關閉調試通路

安全使用者閃存是使用者Flash的一部分。

  • 起始位址固定在0x0800 0000
  • 大小可配置,[email protected]_SECR(和UBE的使能控制在同一寄存器)。大小為0時,表示沒有安全使用者閃存;隻能在RDP0時修改該位域;大小粒度,和Flash page相同:2KB/4KB。

secure開關,使用者軟體置位後,隻能由系統複位清零。

stm32 在指定rom位址 數組_STM32的存儲與執行保護
從産品系列來看UBE+安全使用者存儲區
stm32 在指定rom位址 數組_STM32的存儲與執行保護
STM32內建的MPU
stm32 在指定rom位址 數組_STM32的存儲與執行保護
MPU常見用法和相關設計資源

MPU常見用法:

  • OS或者敏感代碼設定成特權級别的代碼才能通路,防止不可靠的非特權級别使用者代碼因為軟體漏洞,而污染了敏感代碼
  • 把DMA控制寄存器所在區域設定成隻能特權級别代碼通路,防止非特權級别的使用者代碼操作DMA來避開MPU的限制
  • 把RAM區域設定成XN,以免緩沖區溢出造成的攻擊
  • 任務切換之前,把其他任務的資料區設定成不能通路,以免造成互相污染

相關設計:

  • AN4838 STM32上的MPU
  • PM0056,PM0223,PM0214,PM0253 Cortex-M3/M0+/M4/M7 核心程式設計手冊
從産品系列來看MPU
stm32 在指定rom位址 數組_STM32的存儲與執行保護
STM32防火牆Firewall
stm32 在指定rom位址 數組_STM32的存儲與執行保護
防火牆的運作時保護
stm32 在指定rom位址 數組_STM32的存儲與執行保護
防火牆常見用法

防火牆注意事項:

  • 進入防火牆執行前,最好關閉中斷(如果ISR在牆外),否則中斷發送時會立刻産生複位,或者在ISR執行完傳回時複位,取決于FPA
  • 通過寄存器操作激活防火牆功能,知道下一次系統複位,防火牆狀态才能再次回到IDLE
  • PC從固定的入口進入,才能open防火牆;此狀态下是可以調試的

相關設計資源

  • AN4730使用L0和L4的防火牆來安全通路敏感代碼和資料
  • STM32CubeL4 Nucleo-L496/L476 example/FIREWALL
從産品系列來看Firewall
stm32 在指定rom位址 數組_STM32的存儲與執行保護
STM32L5引入新的安全特性

TrustZone,從ARM Cortex-M33核心,擴充到STM32L5整個系統

  • 新的系統架構,啟動模式
  • 新的程式設計模型
  • 新的安全規劃思路
  • 新的生态系統

OTFDEC

  • 對存儲在外部OSPI Flash的資料和指令,取指和取資料,與實時解密同時進行
  • 該功能僅在TZ使能時可用
STM32的入侵檢測 Tamper
stm32 在指定rom位址 數組_STM32的存儲與執行保護
從産品系列來看tamper
stm32 在指定rom位址 數組_STM32的存儲與執行保護

http://weixin.qq.com/r/ey4gONXE7IiTrZFb93tp (二維碼自動識别)

繼續閱讀