基于硬件的加密技術(shù)與安全存儲提供了實(shí)現(xiàn)安全物聯(lián)網(wǎng)設(shè)計所需的基礎(chǔ)。安全引導(dǎo)和安全固件空中下載 (FOTA) 更新使用這一基礎(chǔ)來建立軟件執(zhí)行的信任根。盡管如此,物聯(lián)網(wǎng) (IoT) 設(shè)備仍需要得到持續(xù)的保護(hù),以防止在運(yùn)行時環(huán)境中執(zhí)行的軟件應(yīng)用程序和系統(tǒng)代碼在訪問安全資源時,軟件有意或無意地破壞這些資源。
本文介紹了開發(fā)人員如何利用 NXP Semiconductors、STMicroelectronics 等公司提供的處理器中集成的安全機(jī)制,以更有效地方式防止系統(tǒng)在軟件執(zhí)行過程中受到威脅。
運(yùn)行時軟件如何遭到破壞
如本系列前面幾部分所述,密碼、安全密鑰存儲以及安全引導(dǎo)和固件更新為物聯(lián)網(wǎng)安全提供了必要的構(gòu)件。盡管這些功能是物聯(lián)網(wǎng)設(shè)備整體安全的關(guān)鍵因素,但對于專門破壞互連系統(tǒng)中運(yùn)行時軟件的攻擊,仍是一種不完全的解決方案。理想情況下,由于受信任環(huán)境是在通過安全引導(dǎo)創(chuàng)建的信任根基礎(chǔ)上所建立,因此試圖穿透這些機(jī)制所提供的防線將會失敗。實(shí)際上,使用這些強(qiáng)大的安全功能所構(gòu)建的系統(tǒng)可能會因在系統(tǒng)中注入一段腐化代碼或惡意軟件的攻擊而被劫持,而且曾經(jīng)發(fā)生的攻擊都是采用這種方式。
黑客可以使用各種各樣的方法來利用系統(tǒng)某一部分中的安全漏洞攻擊其他部分。例如,緩沖區(qū)溢出攻擊可利用軟件應(yīng)用允許大型輸入數(shù)據(jù)流寫入到預(yù)期緩沖區(qū)外。如果溢出數(shù)據(jù)包含代碼,則處理器可以在之后執(zhí)行這些代碼,從而為黑客提供進(jìn)一步攻擊的入口。通過使用這些方法和其他方法,黑客會逐漸擴(kuò)大滲透到系統(tǒng)的更廣泛部分。
在任何系統(tǒng)軟件堆棧層中,任何軟件組件都可能存在漏洞。隨著開發(fā)人員致力于創(chuàng)建功能更豐富的系統(tǒng),對更多軟件組件的需求增加了這些系統(tǒng)遭受更多漏洞攻擊的幾率。同時,軟件中存在的各種漏洞會持續(xù)增加。例如,權(quán)威的通用漏洞披露 (CVE?) 列表顯示,2020 年第一季度公開披露的網(wǎng)絡(luò)安全漏洞同比增長 15%。
多層保護(hù)可保護(hù)關(guān)鍵軟件
緩和威脅是黑帽黑客與白帽安全專家之間的持久戰(zhàn)。雖然威脅將不斷出現(xiàn),但開發(fā)人員可以利用各種方法來隔離典型應(yīng)用程序中要求的多個不同軟件進(jìn)程,來大幅加強(qiáng)設(shè)計的安全性。多年來,安全系統(tǒng)一直建立在分層保護(hù)方法的基礎(chǔ)上。在這種經(jīng)典方法中,同心保護(hù)環(huán)可提高系統(tǒng)中的隔離級別。在最外層運(yùn)行的應(yīng)用程序受到限制,無法訪問內(nèi)層的設(shè)備驅(qū)動程序和系統(tǒng)服務(wù),而內(nèi)層也會受到限制,無法訪問最內(nèi)層的軟件內(nèi)核(圖 1)。
?
?
圖 1:安全軟件系統(tǒng)以保護(hù)環(huán)的形式保護(hù)應(yīng)用程序、驅(qū)動程序和操作系統(tǒng)內(nèi)核,逐漸提供了更大的保護(hù)力度。(圖片來源:維基百科)
從 80286 開始的 Intel x86 設(shè)備現(xiàn)在可從 Rochester Electronics 獲取,它們支持四個保護(hù)層,并且指定使用選擇器寄存器,包括一個兩位請求特權(quán)級 (RPL) 字段。通過各種用于在運(yùn)行時隔離用戶進(jìn)程的機(jī)制,Arm? TrustZone 等現(xiàn)代處理器架構(gòu)大幅擴(kuò)展了安全功能。開發(fā)人員可以在許多嵌入式系統(tǒng)處理器中找到這種分層保護(hù)功能,其中包括:
Microchip Technology 的 SAM L11 微控制器系列(基于 Arm Cortex?-M23)
Nordic Semiconductor 的 nRF9160 無線片上系統(tǒng) (SoC)(基于 Arm Cortex-M33)
Nuvoton Technology 的 M2351 微控制器(基于 Arm Cortex-M23)
NXP Semiconductors 的 LPC55 微控制器(基于 Arm Cortex-M33)
Silicon Labs 的 EFR32BG21 無線 SoC 系列(基于 Arm Cortex-M33)
STMicroelectronics 的 STM32L5 微控制器系列(基于 Arm Cortex-M33)
Arm TrustZone for Cortex-M 為 NXP 的 LPC55S69JBD100K 和 STMicroelectronics 的 STM32L552VET6 等 Arm Cortex-M 嵌入式系統(tǒng)處理器帶來了增強(qiáng)的安全功能。TrustZone for Cortex-A 為 NXP 的 i.MX 8M Mini MIMX8MM6DVTLZAA 和 STMicroelectronics 的 STM32MP157AAC3T 等基于 Arm Cortex-A 的應(yīng)用處理器提供了類似的功能。
對于每個 Arm 系列,TrustZone 提供的機(jī)制可支持安全引導(dǎo)和安全代碼、數(shù)據(jù)和存儲器以及其他安全功能。TrustZone for Cortex-M 處理器旨在支持嵌入式系統(tǒng)的低延遲要求,具有性能增強(qiáng),包括快速安全中斷和基于硬件的快速安全狀態(tài)轉(zhuǎn)換。本文說明了 TrustZone for Cortex-M 處理器,并重點(diǎn)介紹了代表此類別的一對處理器:NXP 的 LPC55S69JBD100K 和 STMicroelectronics 的 STM32L552VET6。
處理器工作模式實(shí)現(xiàn)了擴(kuò)展保護(hù)
作為 TrustZone 架構(gòu)的核心,處理器可以在多種工作模式下運(yùn)行,以支持軟件進(jìn)程和系統(tǒng)資源的隔離。處理器的“安全”和“非安全”模式提供了一種將受信任的進(jìn)程與不受信任的進(jìn)程隔離的方法。處理器的“處理程序”和“線程”模式提供了單獨(dú)的保護(hù)機(jī)制,在隔離進(jìn)程和資源方面提供了更高的精細(xì)度。
在 TrustZone 架構(gòu)中,以處理程序模式運(yùn)行的處理器會使軟件始終以特權(quán)模式運(yùn)行。因此,建議使用此模式來運(yùn)行實(shí)時操作系統(tǒng) (RTOS) 等軟件,或訪問引導(dǎo)映像、安全密鑰以及其他對系統(tǒng)操作至關(guān)重要的資源。在線程模式下,軟件以非特權(quán)模式運(yùn)行,但是特權(quán)進(jìn)程可以更改在此模式下運(yùn)行的軟件的特權(quán)級別。線程模式通??捎糜谶\(yùn)行應(yīng)用程序代碼。
在組合使用時,安全/非安全與處理程序/線程模式可提供與早期支持保護(hù)環(huán)的系統(tǒng)同類的分層保護(hù)功能。例如,使用 STMicroelectronics 的 STM32L552VET6,開發(fā)人員可以將具有完全特權(quán)的受信任代碼與具有最小特權(quán)的不受信任代碼隔離開(圖 2)。
?
?
圖 2:STMicroelectronics 的 STM32L552VET6 等 TrustZone 處理器提供了各種處理器模式的組合,能夠讓開發(fā)人員隔離引導(dǎo)映像等受信任系統(tǒng)軟件與第三方射頻 (RF) 通訊棧等不受信任應(yīng)用程序代碼。(圖片來源:Digi-Key,原始資料來源于 STMicroelectronics)
這些處理器中集成的隔離機(jī)制限制了每個處理器訪問程序數(shù)據(jù)存儲器不同區(qū)域的能力。例如,當(dāng) NXP LPC55S6x 內(nèi)核處于安全狀態(tài)時,盡管仍可訪問非安全數(shù)據(jù)存儲器,但卻無法訪問非安全程序存儲器。另一方面,當(dāng) LPC55S6x 內(nèi)核以非安全狀態(tài)運(yùn)行時,則只能訪問非安全程序存儲器和數(shù)據(jù)存儲器(圖 3)。
?
?
圖 3:NXP 的 LPC55S6x 器件等處理器可確保內(nèi)核在安全狀態(tài)(S 狀態(tài))下運(yùn)行以讀取安全程序存儲器(綠色),或在非安全狀態(tài)(NS 狀態(tài))下運(yùn)行以讀取非安全程序存儲器(紅色)。(圖片來源:NXP Semiconductors)
當(dāng)在安全狀態(tài)下運(yùn)行以執(zhí)行受信任軟件時,這些處理器無法從非安全程序存儲器中獲取指令。相反,當(dāng)在非安全狀態(tài)下運(yùn)行以執(zhí)行不受信任的軟件(例如應(yīng)用程序代碼)時,這些處理器將無法訪問位于安全區(qū)域中的代碼或數(shù)據(jù)。盡管如此,應(yīng)用程序代碼通常需要能夠執(zhí)行安全庫中的受信任代碼。通過定義非安全可調(diào)用 (NSC) 存儲器區(qū)域以提供受允許的安全庫入口點(diǎn),TrustZone 處理器能夠讓開發(fā)人員達(dá)到此要求(圖 4)。
?
?
圖 4:非安全可調(diào)用區(qū)域提供了從非安全到安全存儲器區(qū)域的安全入口點(diǎn),允許非安全應(yīng)用程序執(zhí)行安全庫中的函數(shù)。(圖片來源:STMicroelectronics)
存儲器別名可增強(qiáng)安全性
NXP 的 LPC55S69JBD100K 和 STMicroelectronics 的 STM32L552VET6 等 TrustZone 處理器通過將物理程序存儲器別名化為安全和非安全存儲器空間,來管理執(zhí)行。例如,STMicroelectronics 的 STM32L552VET6 兩次將閃存和 SRAM 中的代碼別名化,一次別名化為非安全地址范圍(0x0800_0000 至 0x0BFF_FFFF),再次別名化為安全地址范圍(0x0C00_0000 至 0x0FFF_FFFF)。同樣,NXP 的 LPC55S69JBD100K 將物理程序存儲器別名化為從 0x0000_0000 開始的非安全空間,以及從 0x1000_0000 開始的安全空間。這些處理器中的每一個都對其他存儲器類型和外設(shè)使用類似的方法,將它們兩次別名化為安全和非安全區(qū)域。
當(dāng)處理器需要訪問某個存儲器位置時,能否訪問該位置由兩個硬件單元生成的安全屬性確定:
實(shí)現(xiàn)定義屬性單元 (IDAU) 是處理器核心外部的固定硬件單元,提供由制造商定義的存儲器映射的固定安全狀態(tài)。
安全屬性單元 (SAU) 是集成在處理器核心中的可編程單元,可用于定義多達(dá)八個存儲器區(qū)域的安全狀態(tài)。
在系統(tǒng)初始化期間,在安全模式下運(yùn)行的配置例程通過設(shè)置幾個 SAU 寄存器來定義每個區(qū)域的安全狀態(tài);這些寄存器包括:
SAU 區(qū)域編號寄存器 (SAU_RNR),用于選擇一個區(qū)域以進(jìn)一步進(jìn)行操作
SAU 區(qū)域基地址寄存器 (SAU_RBAR),用于定義區(qū)域的起始地址
SAU 區(qū)域限制地址寄存器 (SAU_RLAR),用于定義區(qū)域的范圍
在 STM32L5 系列的 STM32Cube MCU 軟件包中,STMicroelectronics 提供了多個模板文件,這些文件演示了如何使用包含 SAU 配置在內(nèi)的處理器功能。如清單 1 所示,開發(fā)人員可以使用宏 (SAU_INIT_REGION(n)) 為每個配置參數(shù)定義這些區(qū)域。該宏能夠設(shè)置 SAU 結(jié)構(gòu)中的寄存器值,而這些值會在配置設(shè)置寫入器件時使用。
副本
/*
// 《e》Initialize SAU Region 0
// 《i》 Setup SAU Region 0 memory attributes
*/
#define SAU_INIT_REGION0 1
/*
// 《o》Start Address 《0-0xFFFFFFE0》
*/
#define SAU_INIT_START0 0x0C03E000 /* start address of SAU region 0 */
/*
// 《o》End Address 《0x1F-0xFFFFFFFF》
*/
#define SAU_INIT_END0 0x0C03FFFF /* end address of SAU region 0 */
/*
// 《o》Region is
// 《0=》Non-Secure
// 《1=》Secure, Non-Secure Callable
*/
#define SAU_INIT_NSC0 1
/*
// 《/e》
*/
/*
// 《e》Initialize SAU Region 1
// 《i》 Setup SAU Region 1 memory attributes
*/
#define SAU_INIT_REGION1 1
/*
// 《o》Start Address 《0-0xFFFFFFE0》
*/
#define SAU_INIT_START1 0x08040000 /* start address of SAU region 1 */
/*
// 《o》End Address 《0x1F-0xFFFFFFFF》
*/
#define SAU_INIT_END1 0x0807FFFF /* end address of SAU region 1 */
/*
// 《o》Region is
// 《0=》Non-Secure
// 《1=》Secure, Non-Secure Callable
*/
#define SAU_INIT_NSC1 0
/*
// 《/e》
*/
。
。
。
**
\brief Setup a SAU Region
\details Writes the region information contained in SAU_Region to the
registers SAU_RNR, SAU_RBAR, and SAU_RLAR
*/
__STATIC_INLINE void TZ_SAU_Setup (void)
{
#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)
#if defined (SAU_INIT_REGION0) && (SAU_INIT_REGION0 == 1U)
SAU_INIT_REGION(0);
#endif
。
。
。
#define SAU_INIT_REGION(n) \
SAU-》RNR = (n & SAU_RNR_REGION_Msk); \
SAU-》RBAR = (SAU_INIT_START##n & SAU_RBAR_BADDR_Msk); \
SAU-》RLAR = (SAU_INIT_END##n & SAU_RLAR_LADDR_Msk) | \
?。ǎ⊿AU_INIT_NSC##n 《《 SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk) | 1U
清單 1:此代碼段包含在 STMicroelectronics 的 STM32L5 系列 STM32Cube MCU 軟件包內(nèi)的模板中,向開發(fā)人員展示如何定義存儲器區(qū)域及其相關(guān)的安全狀態(tài)。(代碼來源:STMicroelectronics)
IDAU 和 SAU 共同確定存儲器位置是否可訪問,并返回兩者中最高的安全級別。由于處理器使用與其安全/非安全工作狀態(tài)相對應(yīng)的存儲器別名,IDAU 與 SAU 的組合生成的安全屬性可確保僅訪問具有匹配安全級別的區(qū)域(圖 5)。
??
圖 5:在 NXP LPC55S69JBD100K 中,IDAU 和 SAU 組合起來為每個存儲器別名生成一個安全屬性,從而有效地刪除不允許在各自區(qū)域外運(yùn)行的代碼。(圖片來源:NXP Semiconductors)
例如,當(dāng) NXP 的 LPC55S69JBD100K 在安全模式下運(yùn)行時,由 IDAU 和 SAU 生成的安全屬性將阻止訪問物理存儲器塊的安全別名中包含的非安全應(yīng)用程序,從而有效地從安全別名中消除該非安全代碼。相反,當(dāng)處理器在非安全模式下運(yùn)行時,IDAU 和 SAU 安全屬性將有效地從產(chǎn)生的非安全別名中清除安全應(yīng)用程序。
設(shè)置權(quán)限和訪問控制
盡管 IDAU 和 SAU 直接強(qiáng)制安全和非安全訪問限制,但它們與安全和非安全存儲器保護(hù)單元 (MPU) 共同確定與目標(biāo)資源關(guān)聯(lián)的訪問權(quán)限(圖 6)。
??
圖 6:在圖中所示的 NXP LPC55S69JBD100K 等 TrustZone 處理器中,由 SAU 和 IDAU 生成的安全屬性與安全和非安全 MPU 管理的設(shè)置組合在一起,來提供權(quán)限級別和安全級別。(圖片來源:NXP Semiconductors)
MPU 內(nèi)置在這些處理器中,可提供對存儲器資源的精細(xì)訪問控制。例如,在 STMicroelectronics 的 STM32L552VET6 中,MPU 支持多種訪問權(quán)限。在處理器以特權(quán)處理程序模式或非特權(quán)線程模式運(yùn)行時,這些訪問權(quán)限會有所不同(表 1)。
?
?
表 1:STMicroelectronics 的 STM32L552VET6 允許開發(fā)人員使用其 MPU 來定義在特權(quán)模式和非特權(quán)模式下具有不同操作方式的不同訪問級別。(表格來源:STMicroelectronics)
在這些屬性中,Execute Never (XN) 屬性能夠讓開發(fā)人員確保處理器永遠(yuǎn)不會嘗試從關(guān)聯(lián)的存儲器區(qū)域執(zhí)行代碼,從而提供了另一個級別的運(yùn)行時保護(hù)。例如,在直接從閃存運(yùn)行代碼的系統(tǒng)中,開發(fā)人員可以為未使用的 SRAM 區(qū)域設(shè)置 XN 屬性,以消除系統(tǒng)遭到劫持的任何可能性,即使惡意代碼在這些區(qū)域成功注入攻擊。
將保護(hù)擴(kuò)展到更多外設(shè)和存儲器
這些處理器的 IDAU、SAU 和 MPU 功能提供了靈活的基礎(chǔ),以保護(hù)系統(tǒng)軟件和應(yīng)用程序的運(yùn)行時執(zhí)行,但是這些功能僅限于處理器本身。像 NXP LPC55S69JBD100K 和 STMicroelectronics STM32L552VET6 這樣的處理器可通過各種方法,將安全和特權(quán)功能擴(kuò)展到其他存儲器系統(tǒng)和接口。
對于 STM32L552VET6,STMicroelectronics 用自己的全局 TrustZone 控制器 (GTZC) 對原生 TrustZone 機(jī)制進(jìn)行了補(bǔ)充。這種全局 TrustZone 控制器旨在保護(hù)外設(shè)、嵌入式 SRAM 和外部存儲器(圖 7)。
??
圖 7:STMicroelectronics 的 STM32L552VET6 處理器集成了全局 TrustZone 控制器 (GTZC),可將安全保護(hù)擴(kuò)展至原生 TrustZone 框架中未包含的外設(shè)和存儲器。(圖片來源:STMicroelectronics)
在 NXP LPC55S69JBD100K 中,特權(quán)屬性 (HPRIV) 和安全屬性 (HNONSEC) 跨越內(nèi)部高級高性能總線 (AHB) 矩陣,傳遞到存儲器保護(hù)校驗(yàn)器 (MPC)、外設(shè)保護(hù)校驗(yàn)器 (PPC) 和其他總線主控器的主安全包裝器 (MSW)(圖 8)。
??
圖 8:在 NXP LPC55S69JBD100K 中,特權(quán)和安全級別會傳遞至其他硬件單元,而硬件單元可將這些屬性應(yīng)用于涉及存儲器、外設(shè)和其他總線主控器的操作。(圖片來源:NXP Semiconductors)
雖然了解軟件隔離和系統(tǒng)保護(hù)的底層機(jī)制很重要,但開發(fā)人員可以利用開發(fā)支持在自己的設(shè)計中快速應(yīng)用這些功能。
STMicroelectronics 提供了 STM32L552E-EV、STM32L562E-DK 和 NUCLEO-L552ZE-Q 評估板作為快速原型開發(fā)平臺,用于構(gòu)建基于其 STM32L5 處理器的應(yīng)用。該公司的 STM32CubeIDE 集成開發(fā)環(huán)境 (IDE) 提供了綜合的軟件編程環(huán)境,并且其 STM32CubeProgrammer 提供了圖形用戶界面 (GUI) 和命令行界面 (CLI) 版本,用于對內(nèi)部和外部存儲器進(jìn)行編程。例如,使用此工具,開發(fā)人員可以定義閃存中的安全區(qū)域(圖 9)。
??
圖 9:STMicroelectronics 的 STM32CubeProgrammer 提供了一種簡單的方法來定義閃存中的安全區(qū)域。(圖片來源:STMicroelectronics)
為了快速開發(fā)基于 NXP 的 LPC55S69 處理器的系統(tǒng),開發(fā)人員可以在 NXP 的 LPC55S69-EVK 評估板上構(gòu)建設(shè)計。對于系統(tǒng)配置和軟件編程,NXP MCUXpresso IDE 提供了一個綜合性平臺,可用于創(chuàng)建基于 NXP LPC55S69 處理器的應(yīng)用。
結(jié)語
物聯(lián)網(wǎng)安全依賴于密碼學(xué)和安全存儲等基本安全機(jī)制,以及在基于硬件安全機(jī)制的信任根上構(gòu)建應(yīng)用的功能。盡管這些都是確保安全的必需條件,但很少能夠足以應(yīng)對那些利用系統(tǒng)運(yùn)行時環(huán)境中漏洞的持續(xù)威脅。通過利用越來越多的處理器中提供的分層保護(hù)機(jī)制,開發(fā)人員可以構(gòu)建安全的物聯(lián)網(wǎng)設(shè)備,更好地緩解這些威脅并減少或消除它們對物聯(lián)網(wǎng)應(yīng)用的影響。
評論
查看更多