【 NXP LPC55 】 LPC55S69 SDK TrustZone 設定

1. 介紹

1.1 什麼是 TrustZone ?
近年來,物聯網 (IoT) 已成為嵌入式系統開發人員的熱門話題。物聯網系統產品變得更加複雜,需要更好的解決方案來保障系統安全。 ARM® TrustZone® 技術是一種單晶片系統 ( SoC ) 和 CPU 系統範圍的安全方法。
TrustZone® for ARMv8-M 安全擴展針對超低功耗嵌入式應用進行了最佳化。支援多個軟體安全域,將安全記憶體和 I/O 的存取權限制為僅受信任的軟體。

1.2 NXP LPC55S69
TrustZone® 是 Cortex M23 和 Cortex M33 中可用的技術。 TrustZone® 提供了實現分離和存取控制的方法,以隔離受信任的軟體和資源,減少關鍵組件的受攻擊面。LPC55S66 和 LPC55S69 已將核心 0 實現為 Cortex-M33,並啟用了完整的 TEE 和 TrustZone® 來支援。 LPC55S69 第二個 Cortex-M33(核心 1),它不使用 TZ 實現安全環境。隔離只是基礎。安全防護是建構數層保護層,增加硬體和軟體以增加更多保護層。

1.3 使用 memory map 定義 Security
ARMv8-M 上 TrustZone 的基本概念是將微控制器上的“不可信”部分與“可信”部分分開。 LPC55Sxx 的獨特之處在於 NXP IDAU(Implementation specific Device Attribution Unit)實現 ARM TrustZone for core0 使用位址 bit 28 將位址空間劃分為潛在的安全區域和非安全區域。位址 bit 28 未在 memory access hardware 中解碼,此每個物理位置出現在二個位置。 其他硬體決定了對任何位址允許哪種存取(包括non-secure callable )。



圖. 1.1 TrustZone 和系統通用位址

2. Trusted Execution Environment 工具
在 TEE ( Trusted Execution Environment ) 工具中,您可以配置記憶體區域、bus masters 和 peripherals 的安全性策略,以隔離和保護應用程式的敏感區域。您可以在應用程式中設置應用程式不同部分的安全性策略。 Security Access Configuration 及其子視圖,於 Memory Attribution Map、Access Overview 及 Domains Overview views 中查看這些策略。使用 User Memory Regions view 創建記憶體區域及其 security level 的快速概覽。
2.1 Attribution Units 
ARMv8-M實現的 TrustZone 由 Security Attribution unit (SAU)和 Implementation Defined Attribution Unit(IDAU)組成。 SAU 和 IDAU 的組合從 CPU0 向特定位址分配特定的 security attribute(S、NS 或 NSC)。根據 CPU0 的 security status 和由 IDAU 和 SAU 的 security attribute設定的結果,secure AHB Controller 將從 CPU0 進行的存取與特定的檢查器進行比較,該檢查器標記記憶體和 peripherals 的各種存取策略。所有位址都是 secure 的或 non-secure。ARMV8M內部的 Security Attribution unit(SAU)與 MPU 一起工作。LPC55S6x 和 LPC55S1x 支援 8 個 SAU 區域。


圖 2.1 Security Attribution 邏輯

2.2 Device Attribution Unit
LPC55S6x 實現了一個簡單的 Attribution unit,將整個記憶體位址劃分為 Secure 或 Non-secure 區域。所有 peripherals 和記憶體在兩個位置都有別名。
• Address 0x0000_0000 to 0x1FFF_FFFF – Non-secure ( always )(  Addresses 0x0000_0000 to 0x1FFF_FFFF 為 NS )
• Address 0x2000_0000 to 0xFFFF_FFFF
– Non-secure 如果 HADDR[28] = 0
– Secure 如果 HADDR[28] = 1

2.3 SAU
在 SAU 子視窗中,您可以啟用和配置 SAU(Security Attribution unit)。啟用後,您可以設置 SAU 記憶體區域,指定它們的起始和大小或結束地址,並指定它們的 security level。
停用時,SAU 會自動將整個記憶體空間設置為 secure severity level。當啟用但未設置記憶體區域時,它還會將整個記憶體空間設置為 secure 的 security level。
SAU 允許 8 個記憶體區域,並允許使用者覆蓋 IDAU 的固定 Map,以定義 Non-secure 區域。預設情況下,所有記憶體都設置為安全。至少應使用一個 ASU descriptor 確保 IDAU 有效。如果 IDAU 或 SAU 標記一個區域,則該區域是 Secure 的。NSC 區域可以定義在 IDAU 的 NS 區域中。
您可以在二個 security level 之間進行選擇:

• NS - Non-secure
• NSC - Non-secure callable 


圖 2.2 SAU/IDAU 設定

2.4 User Memory Regions view 
在 User Memory Regions view 中,您可以建立和維護記憶體區域及其 security level 的進階配置。您可以建立區域、命名它們、指定它們的地址、大小、security level,並提供描述。然後,您可以在 Problems view 的幫助下修復設定中的任何錯誤。

 

圖. 2.3 User Memory Regions view 

2.5 Memory Configuration Editor
Memory Configuration Editor 可通過 MCU 設定對話框存取,該對話框位於 Project Properties -> C/C++ Build -> MCU settings 並列出了所選 MCU 的記憶體細節,並且在預設情況下將顯示記憶體區域已由 MCUXpresso IDE 本身定義(透過自行安裝或 SDK 部分支援 )。Program 和 vector table 在 0x1000'0000 處載入,而 'veneer' table 則在 0x1000'fe00 載入


圖. 2.4 Memory configuration editor


2.6 Memory Protection Checkers ( MPC )
MPC用於所有 memory devices、on-chip Flash和SRAM。記憶體區塊每個 “ sector ” 都有一個檢查器設定,通常,記憶體被劃分為32個 sector。例如,128KB記憶體的 granularity 為每個 sector 4KB。MPC(Memory Protection Controller)使用 Secure 和 Non-secure 別名的概念,控制 Secure 和 Non-secure 別名中每個 memory page 的存取,以實現令其 Secure 或 Non-secure。 所有規則都在 Secure Control register bank 中設定。
使用者必須具有最高級別的 “ Secure Privileged ” 才能設定規則。


圖 2.5 MPC
2.7 TrustZone 設定
Secure project 在每次 RESET 後都會設定 TrustZone。
Trustzone 檔案 tzm_config.c 包含一個 function BOARD_InitTrustZone,用於設定完整的 TrustZone 環境。包括 SAU、MPU、AHB secure controller 和 System Control Block 中的一些 TrustZone 相關 registers。從系統初始化和跳入 main 之前的功能為 SystemInitHook function。
在LPC55S69 SDK TrustZone範例 " Hello world "
 
SAU configuration :

AHB MPC :
Secure Flash – 0x00000000 to 0x0000FFFF – 64 kB
Secure RAM0 – 0x20000000 to 0x20007FFF – 32 kB

2.8 再一個範例
① Secure Flash : PROGRAM FLASH address : "0x10000000" size = 0x0003FC00
② Non-Secure Flash :  PROGRAM FLASH address "0x00040000" size = 0x00032000
③ Secure RAM: address "0x30000000" size = 0x00008000
④ Non-Secure RAM : address "0x20008000" size = 0x00029000

SAU configuration : 

AHB MPC :
Secure Flash – 0x00000000 to 0x0003FFFF – 256 kB
Secure RAM0 – 0x20000000 to 0x20007FFF – 32 kB

3. 參考資料 :

1) AN12278 LPC55S00 Security Solutions for IoT 
2) Configuring S/NS Memory in an Armv8-M System
3) Hands-on_2_LPC55S69 Secure Lab Instructions 
6) User Guide for MCUXpresso Config Tools (Desktop) https://www.nxp.com/docs/en/user-guide/GSMCUXCTUG.pdf
7) UM11126 LPC55S6x User manual Rev. 2.1 — 16 July 2020 User manual https://www.mouser.com/pdfDocs/NXP_LPC55S6x_UM.pdf

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論