国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用Cortex-M MPU提高MCU安全性的方法

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Ralph Moore ? 2022-06-10 07:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這是四部分系列文章的第四部分,介紹了獨特的產品 MPU?Plus? 和使用 Cortex-M 內存保護單元 (MPU) 來提高微控制器單元 (MCU) 安全性的方法。第 3 部分介紹了分區問題,包括堆使用、函數調用 API、中斷、父子任務和任務本地存儲。 第 2 部分 介紹了分區、安全啟動、MPU 控制和系統調用。 第 1 部分介紹了一些介紹性概念:MMU 與 MPU、對安全性、保護目標、MPU-Plus 快照、Cortex-v7M 和 v8M 以及 MPU 操作的日益增長的需求。

動態區域

如前所述,創建靜態區域是一個耗時、乏味且容易出錯的過程。下面討論的動態數據區域有助于減輕部分負擔。

動態數據區域

以下函數允許在初始化期間或從 ptask 動態創建數據區域:

u8* mp_RegionGetHeapR(rp, sz, sn, attr, name, u32 hn);

u8* mp_RegionGetPoolR(rp, pool, sn, attr, name);

BOOLEAN mp_RegionMakeR(rp, bp, sz, sn, attr, name);

其中 rp 是指向創建區域的指針,sz 是區域大小,sn 是槽號,attr 是屬性,name 是區域的可選名稱,hn 是堆號,pool 是塊池句柄,并且bp 是一個塊指針。以上可用于分別從堆、塊池或靜態塊(例如 stat_blk[100])創建數據區域。

通常 rp 指向動態保護區域數組 dpr[n] 中的一個條目。然后,動態區域的 MPA 模板槽設置如下:

mpa_tmplt_t2a[sn] = MP_DYN_RGN(dpr[n]);

其中 MP_DYN_RGN() 加載 dpr[n] 的地址并在模板槽中設置動態區域標志。

這些函數通常應在任務開始運行之前的系統初始化期間調用。但是,它們也可以被 ptasks 調用,它們正在創建和初始化其他任務。

動態數據區域可用于存儲靜態數組和結構的混合,它們可以在任務之間共享。盡管它們不能用于全局變量,但它們確實節省了在代碼中定義部分、在鏈接器命令文件中定義塊以及在模板中定義靜態區域的復雜性。因此,它們更簡單,使用起來更不容易出錯。鑒于 sz 可能是 sizeof() 的總和,它們在開發過程中也可能更加靈活。

受保護的數據塊

以下受保護的塊函數允許從 utasks 或 ptasks創建受保護的數據塊,并在運行時釋放它們:

u8* smx_PBlockGetHeap(sz, sn, attr, name, hn);

u8* smx_PBlockGetPool(pool, sn, attr, name);

BOOLEAN smx_PBlockMake(bp, sz, sn, attr, name);

BOOLEAN smx_PBlockRelHeap(bp, sn, hn);

BOOLEAN smx_PBlockRelPool(bp, sn, pool, clrsz);

其中參數與動態區域的參數相同,除了釋放函數,bp 是其中一個 Get 函數返回的塊指針,clrsz 指定在第一個字的空閑塊鏈接之后要清除多少字節堵塞。基本上,塊是從堆或池中獲得的,或者是由靜態塊制成的。為其創建一個區域并將其加載到當前任務的 MPU[sn] 和 MPA[sn] 中。堆可以是任何堆,包括主堆。這是安全的,因為如果黑客侵入任務,MPU 會阻止他訪問受保護塊之外的堆內存。

動態分配的塊可用于緩沖區、工作區、消息(見下文)或結構。如果一個任務被寫成它的所有靜態變量都在一個結構中,例如:

u8* 副總裁;

vp-》var1 = vp-》var2 + vp-》var3;

然后可以使用動態塊來存儲其靜態變量。上面的 vp 是 BlockGet() 函數返回的塊指針。(注意 vp 是一個自動變量,因此存儲在任務堆棧中,而不是結構中)。如果一個函數不是這樣寫的,轉換它并不困難——只需在每個靜態變量引用前插入“vp-》”,定義一個VP結構,變量名作為字段,定義vp作為指向副總裁。

受保護數據塊和動態數據區域的區別在于,受保護數據塊可以在任務運行時被任務獲取,而動態數據區域是在初始化過程中創建的,并且指向它的指針被加載到任務的模板中。 受保護數據塊對于 utasks 創建臨時緩沖區和受保護消息特別有用,如下所述。

使用動態區域

使用動態數據區域、受保護數據塊或 TLS 來替換 task_data 靜態區域需要將所有任務全局變量重新定義為一個或多個結構中的字段。如果結構名稱很短,這不會明顯使代碼復雜化。例如,這里有一些來自 eheap 的代碼:

hvp[hn]-》errno = EH_OK;

bsmap = hvp[hn]-》bsmap;

csbin = hvp[hn]-》csbin;

為了支持多個堆,有必要將離散的全局變量更改為結構數組 hvp[hn]。在這種情況下,hvp[hn]-》 被粘貼到代碼中每個全局變量名的開頭。Cortex-M 架構允許訪問結構的速度與離散全局變量一樣快或更快——函數中的一條 LDM 指令加載結構基地址,然后通過恒定偏移量訪問字段。編譯器可能無法對函數使用的所有離散全局變量執行此操作,因此訪問它們可能會更慢。使用結構還允許將一起使用的字段分組在一起,如果處理器具有指令緩存,則可以提高性能。通過使用 sizeof() 確定指針偏移量,可以自動處理多個結構和數組。

受保護的消息

smx 消息由鏈接到數據塊的消息控制塊 (MCB) 組成。smx_MsgMake() 函數可用于將受保護的數據塊變成受保護的消息,并且當前任務成為消息所有者。消息被發送到消息交換并從消息交換接收。在消息交換中,消息的 MCB 與交換的控制塊鏈接到等待消息的隊列中。

圖 11 說明了在任務之間傳輸受保護的消息。TaskA 顯示為綠色,TaskB 顯示為藍色。黃色代表 pcode 和 pdata,它們受任一任務的保護。如圖所示,TaskA 在 slot sn 中獲取一個 pdata 塊,將其制成消息,加載它,然后將其發送到 Xchg。作為發送操作的一部分,MPU 和 TaskA 的 MPA 中的 slot sn 被清除。請注意,其他消息正在 Xchg 處等待,并且 MCBi 位于消息隊列的頂部。TaskB 在插槽 sx 中接收它。請注意,rbar 和 rasr 是從 MCBi 獲得的,用于在插槽 sx 中為消息的 pdata 塊創建區域。TaskB 驗證消息,該消息依賴于應用程序,可能包括對數據進行范圍和一致性檢查。然后它處理 pdata,取消消息,

smx 中添加了兩個受保護的消息函數:

MCB_PTR smx_PMsgReceive(xp, bpp, sn, timeout);

BOOLEAN smx_PMsgSend(mp, xp, sn, pri, rp);

其中 xp 是交換指針,bpp 是指向消息塊指針的指針,sn 是 MPU/MPA 槽號,timeout 以刻度為單位,mp 是消息指針,pri 是消息優先級,rp 是回復指針(例如到交易所發送回復消息。)

如圖 11 所示,當一個受保護的消息被發送時,它在 MPU 和當前任務的 MPA 中的 slot sn 被清除。因此,即使發送任務保留了指向消息塊的指針(例如 bpp),它也無法訪問消息塊。這阻止了在另一個分區中的接收任務驗證消息后更改消息的黑客技術。在消息被另一個分區中的接收任務更新后,它還會阻止讀取消息。

在交換器中,消息塊區域信息存儲在消息的 MCB 中,交換器是消息的所有者。當消息被接收任務接收時,其消息塊區域信息被加載到 MPU 和接收者 MPA 的指定槽 sx 中,接收任務成為消息所有者。(sx 不必與發送任務使用的插槽相同。)

現在,接收任務可以讀取和修改消息,并可能將其發送到另一個交換器。因此,可以創建一條消息,加載數據,傳遞給一個任務以檢查數據并對其進行加密,然后傳遞給第三個任務以通過網絡發送它。請注意,發送任務和接收任務之間是完全隔離的。當然,發件人可以發送某種破壞性消息。因此,接收者必須在接受消息之前執行驗證。這種安全級別是特定于應用程序的。

分區門戶

正如第 3 部分中所討論的,分區門戶可以將客戶端分區與服務器分區隔離開來,并且是實現 100% 分區隔離所必需的,這對于實現強大的安全性至關重要。它們建立在上述受 smx 保護的消息之上。受保護的消息滿足 Arm PSA Secure IPC 要求(參見第 1 部分中的參考資料 3),無需進行消息復制。因此,與普通函數調用 API 相比,引入門戶可能不會顯著降低性能。

如圖 12 所示,分區門戶由交易所組成,標記為 XI 和 XO — 每個方向一個。添加到客戶端分區的代碼(由虛線右側的區域表示)將函數調用及其參數轉換為發送到 XI 交換的消息。然后,客戶端任務在 XO 交換處等待回復消息。

在添加到服務器端的代碼中的服務器任務(由虛線左側的區域表示)正在 XI 交換處等待消息。當它收到一條消息時,它會使用消息中的參數將其轉換為函數調用。然后它將來自函數調用的返回信息放入它發送到 XO 交換器的消息中。客戶端任務從 XO 交換接收消息,并將信息返回給客戶端分區中的調用者。

顯然,將分區之間的函數調用接口轉換為分區門戶需要做很多工作。但是,結果是強大的分區隔離。當然,這會降低性能。數據緩沖區在消息中傳遞。如果正在修改現有代碼,則可能需要將數據從緩沖區復制到消息,反之亦然。如果正在創建新代碼,則可以將其設計為在無復制模式下處理消息。在后一種情況下,性能影響可能很小。

請注意,大型基于 MMU 的系統中也存在數據復制問題。事實上,在這種情況下,由于虛擬地址空間,不存在無復制解決方案。因此,在基于 MPU 的系統中通過門戶進行的分區間通信可??能比基于 MMU 的系統中的進程間通信更有效。這有利于較小的分區,每個分區做的工作較少,因此系統安全性可能更好。擁有更小的分區也使冗余路徑更加實用——例如,兩條獨立的路徑可以將可疑活動報告回總部。

調試支持

啟用安全功能后,調試代碼更具挑戰性。出于這個原因,SecureSMX 允許在早期代碼開發和調試期間覆蓋大多數安全功能,以幫助加快這些階段。可以在后期調試期間重新啟用安全功能,通過檢測堆棧和緩沖區溢出以及其他問題,它們實際上變得有用。此外,建議在發展過頭之前開始解決安全問題。

smxAware? 包括許多與安全相關的功能,可幫助調試基于 MPU-Plus 的軟件。它顯示當前 MPU 和所有任務 MPA,以及命名區域。圖形內存映射概覽顯示內存條中的 MPU 區域。顯示了開始和結束地址以及排除的子區域。在所有顯示中,都會標記對齊和重疊等錯誤。有關更多信息,請參閱:

smxAware 用戶指南, Marty Cochran 和 David Moore,Micro Digital Inc.

結論

軟件工程已經失去了天真——我們現在正在為一個充滿敵意的世界進行設計。實現完美的安全性是不可能的,但它可以是相當不錯的。毫無疑問,即使是你能設計的最好的安全措施,一個堅定的黑客也會發現一些弱點。因此,有必要分析所有代碼與可能的威脅。

在某些情況下,一段代碼可能設計和實現都很糟糕,因此很容易受到攻擊,以至于重新編寫它是一個絕望的提議。在這種情況下,使用本文中描述的方法將代碼保持原樣并將其放入完全隔離的 umode 分區中可能更具成本效益。然后有必要設計一種策略來處理不可避免的闖入并實施必要的代碼來處理它。在此過程中,可能會發現一些潛在的錯誤。

如果升級遺留代碼以提高現有產品的安全性,或者如果使用遺留代碼開發新產品,主要工作通常是重組遺留代碼。所需的重新編碼量可能很小,這取決于代碼的結構如何。當然,新代碼的結構應該從一開始就保證安全。

安全性為產品開發增加了另一個維度。不僅要考慮如何實現功能,還要考慮黑客如何訪問該功能以造成損害或竊取私人數據。MMF 在調試過程中很煩人,但它們證明了硬件安全機制確實有效!MPU-Plus 的目標是提供一條既能實現良好安全性又不會過度痛苦的路徑。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    8381

    瀏覽量

    164607
  • MPU
    MPU
    +關注

    關注

    0

    文章

    455

    瀏覽量

    51350
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    新唐科技推出基于Arm Cortex-M55內核的NuMicro M5531系列微控制器

    在工業自動化、智能物聯與邊緣計算飛速演進的當下,市場對微控制器(MCU)的性能、功耗、安全性及擴展性提出了更高要求。新唐科技深耕MCU領域多年,依托深厚技術積淀與精準市場洞察,推出基于Arm
    的頭像 發表于 02-01 13:58 ?971次閱讀
    新唐科技推出基于Arm <b class='flag-5'>Cortex-M</b>55內核的NuMicro <b class='flag-5'>M</b>5531系列微控制器

    Cortex-M0和Cortex-M0+的區別

    咱們芯源MCU主要是Cortex-M0+處理器,那么Cortex-M0+比Cortex-M0處理器強在哪里呢?下面針對2者的關鍵特性對比進行簡單區別,如下: 1、處理器流水線 Cor
    發表于 01-22 06:23

    最小化ARM Cortex-M CPU功耗的方法與技巧分享

    的ARM Cortex-M類的MCU中指令緩沖的運行方法也有不同。采用簡單指令緩沖的MCU, 相比之下,采用64x128位分支緩沖器的ARM MCU
    發表于 01-21 06:19

    Cortex-M0 處理器介紹

    Cortex-M0 處理器簡介ARM公司的Cortex-M0應用于各種微控制器(MCU)中,并可讓研發工程師以8位的價位創造32位的的效能,并將傳統的8位和16位的處理器升級到更高效、更低
    發表于 01-16 08:04

    M0 到 M3丨笙泉32 位 MCU:高效能、安全性與多元應用兼具

    笙泉科技憑借在8051平臺深厚的技術基礎,已成功導入Arm? Cortex?-M0 / M0+ 與 M3 核心,并推出具備高效能與高安全性
    的頭像 發表于 12-29 16:56 ?619次閱讀
    從 <b class='flag-5'>M</b>0 到 <b class='flag-5'>M</b>3丨笙泉32 位 <b class='flag-5'>MCU</b>:高效能、<b class='flag-5'>安全性</b>與多元應用兼具

    請問CW32L052C8T6這種安全性低功耗MCU安全固件部分怎么實現?

    請問,CW32L052C8T6這種安全性低功耗MCU安全固件部分怎么實現?
    發表于 12-05 07:19

    Cortex-M產品的特色

    安全性和穩定性。 時鐘和電源管理單元:Cortex-M處理器內置了豐富的時鐘和電源管理功能,可提供靈活的功耗管理和時鐘控制。 外設接口:支持多種外設接口,如UART、SPI、I2C等,以便
    發表于 11-26 07:22

    Cortex-M內核中的精確延時的方法

    使用 CYCCNT寄存器來測量執行某個任務所花的周期數,這也可以用作時間基準相關的目的(操作系統中統計 CPU使用率可以用到它)。” Cortex-M中的DWT它有一個32位的寄存器叫CYCCNT
    發表于 11-21 07:51

    Cortex-M級別的轉換

    一、 簡述 Cortex-M 里面有特權級別的概念,不同級別可以設定不同的權限,如何轉換特權級別基本是本章的內容。 二、操作模式 ARM M 核操作模式有兩個: 線程(Thread)模式:在復位時或
    發表于 11-19 07:32

    瑞薩電子RA8M2 MCU的架構解析與應用場景

    隨著嵌入式系統對性能、安全性與連接能力的要求不斷提升,傳統單核MCU已難以滿足新一代工業與智能應用的需求。Arm Cortex-M85 RA8系列于2025年10月推出RA8M2和RA
    的頭像 發表于 10-31 15:32 ?5113次閱讀

    瑞薩電子RA4L1 MCU為低功耗設備提高安全性

    隨著自動化和IoT成為我們日常生活的一部分,高級安全性在低功耗設備中變得更加重要,以確保建筑物安全、阻止入侵者進入家中并保護用戶免受任何數據修改或泄漏。
    的頭像 發表于 09-23 10:39 ?1872次閱讀
    瑞薩電子RA4L1 <b class='flag-5'>MCU</b>為低功耗設備<b class='flag-5'>提高安全性</b>

    有哪些技術可以提高邊緣計算設備的安全性

    邊緣計算設備的安全性面臨分布式部署、資源受限(算力 / 存儲 / 帶寬)、網絡環境復雜(多無線連接)、物理接觸易被篡改等獨特挑戰,因此其安全技術需在 “安全性” 與 “輕量化適配” 之間平衡。以下從
    的頭像 發表于 09-05 15:44 ?1493次閱讀
    有哪些技術可以<b class='flag-5'>提高</b>邊緣計算設備的<b class='flag-5'>安全性</b>?

    請問NuMicro? Cortex-M? 系列芯片是否支持 I2C 監視器功能?

    NuMicro? Cortex-M? 系列芯片是否支持 I2C 監視器功能?
    發表于 08-21 06:04

    請問DM平臺訪問安全性如何控制?

    DM平臺訪問安全性如何控制?
    發表于 08-06 06:01

    Cortex-M MCU應用程序移植到RV32 MCU中的問題解析

    開源架構處理器RISC-V,在嵌入式系統中得到了越來越多的應用,近年多家處理器廠商發布了RV32架構MCU。2019年4月,SiFive發布了Freedom E310;2020年2月,兆易創新
    的頭像 發表于 06-27 14:31 ?1987次閱讀
    <b class='flag-5'>Cortex-M</b> <b class='flag-5'>MCU</b>應用程序移植到RV32 <b class='flag-5'>MCU</b>中的問題解析