域控軟體安全隔離關鍵技術剖析:MCU域 VS SOC域

经纬恒润發表於2024-04-11

安全隔離的需求

功能安全開發中,軟體階段由軟體V模型左邊的軟體安全需求SSR開始。SSR是從技術安全需求TSR中提取出軟體的功能安全需求,大多數情況下具有不同的ASIL等級。

圖1 功能安全軟體開發V模型

隨後,軟體安全需求會被分配到軟體架構中的軟體元件中。不同ASIL等級的軟體安全需求被分配到軟體元件過後,帶來了級聯失效的問題。若放任不同ASIL等級軟體元件在一個系統中執行,可能會存在低ASIL等級軟體元件失效從而引發高ASIL等級軟體元件失效的風險。

ISO26262 對軟體元件之間的互動進行了分析並提出了免於干擾(Freedom from Interference)的需求,安全隔離則旨在隔離軟體系統中安全相關與安全無關的軟體元件,以及不同ASIL等級的軟體元件。


軟體記憶體基礎

首先讓我們來了解記憶體的基本知識。RAM與ROM是ECU中常見的儲存器型別,它們在資料儲存和訪問方面扮演著重要的角色。

RAM (Random Access Memory)是一種臨時儲存器,用於儲存計算機正在執行的程式和資料。它具有快速的讀寫速度和隨機訪問的特點。

ROM (Read-Only Memory)是一種只讀儲存器,用於儲存固定的程式指令和資料。ROM中的資料在計算機斷電時不會丟失,因此被稱為非易失性儲存器。

然而在軟體視角中,軟體被編譯後會被分為不同的段進行存放。具體分段方式可能根據架構有細微區別在,以Tc3xx系列晶片為例,包含以下幾段:

(1)已初始化的資料段

(2)未初始化的資料段

(3)只讀資料段

(4)程式碼段

(5)task棧區

(6)啟動棧區

(7)CSA區

這些段被編譯器分配到實體記憶體中,可能由不同的儲存器來存放。每當程式需要使用某處資料或者載入某處的指令時,會根據地址來取出所需的資料或是指令進行運算,再將運算結果寫入某處實體記憶體中。

在這個過程中,安全隔離的目標是阻止安全無關的軟體元件寫入安全相關的軟體元件使用的記憶體區域;低ASIL等級的軟體元件寫入高ASIL等級的軟體元件所使用的記憶體區域。


MCU 上的安全隔離模組

MCU 上的安全隔離通常藉助記憶體分割槽機制和記憶體保護單元MPU完成。經典AUTOSAR架構中,允許對軟體進行記憶體分割槽(Partition),藉助記憶體對映(memory map)將軟體元件的程式碼和資料劃分到指定的區域內。這種方式雖然能有效地將不同ASIL等級的變數和程式碼分佈到不同的地址範圍中,但無法杜絕指標越界、陣列越界導致跨區域訪問的風險。

MPU (memory protection unit)記憶體保護單元是一種按記憶體區域提供保護和隔離的硬體原件,與記憶體分割槽配合使用可以阻止不同軟體分割槽的軟體元件之間相互訪問,從而達到記憶體隔離的效果。

以Tc3xx系列晶片為例,MPU可以按照保護範圍分為兩種,一種為系統級的SMPU(System Memory Protection Unit),另一種為核心級的CMPU(Core Memory Protection Unit)。

系統級的SMPU

SMPU 有時候也被稱為Bus MPU,表示其工作在晶片匯流排上。其保護原理如圖2所示,匯流排上所有主機對於記憶體的訪問都會經過SMPU,當主機擁有所請求記憶體地址的對應訪問許可權(讀/寫)時,才能允許訪問。

Tc3xx 中的Bus MPU可以維護8個地址保護區域(每個保護區域範圍由兩個暫存器控制),每個保護區域都記錄了64個匯流排主機的許可權。當主機訪問記憶體區域時,首先尋找對應的區域,再根據主機TAG ID檢查主機是否擁有對應的許可權,檢查透過後才能進行讀寫訪問,否則會觸發系統定義的故障。

SMPU 通常用於多核系統和使用DMA裝置的系統,其保護範圍有限,且不能覆蓋所有的記憶體區域。

圖2 SMPU保護原理

核心級的CMPU

核心級的CMPU則是每個CPU核心獨有的,提供應用級別的隔離。經典AUTOSAR中,軟體元件被組織成OSA(OS Application)。OSA內部存在共享資源,OSA之間則需要考慮記憶體隔離。

CMPU 保護原理如圖3所示,CMPU隔離物件為CPU中執行的軟體。CMPU也會預先劃分保護區域,這通常也是記憶體分割槽的結果。對於這些記憶體區域,每一個在核心中執行的OSA可能都具有不同的許可權。當上下文切換時,MPU的保護範圍也會動態切換,以適配不同的OSA。

同CMPU一樣,只有擁有對應記憶體區域訪問許可權的OSA,才能成功完成訪問,否則會觸發系統定義的故障。CMPU通常擁有更多的保護區域,且能覆蓋所有的記憶體空間。在這基礎上,CMPU還支援保護集的預設,使CPU進行上下文切換時,更快地切換地址空間地MPU保護許可權。一般來說,CMPU的應用更為廣泛,在一些不那麼複雜的系統中甚至只用CMPU就足以完成記憶體隔離的需求。

圖3 CMPU隔離原理


SOC 上的安全隔離

相比MCU,SOC擁有更強大的效能,可以執行一些複雜作業系統(比如linux)。這種情況下,基於地址範圍進行保護的MPU就顯得“力不從心”了。程序是作業系統進行資源分配的基本單位,一些應用程式可能由多個程序組成,在某些場景中(比如座艙域)還需要虛擬機器來執行不同的作業系統。

因此,我們把SOC上的記憶體隔離場景劃分為兩個層級:程序級隔離、應用程式級隔離和作業系統級隔離。 本文主要介紹程序級隔離。

MMU (Memory Management Unit)是SOC中常見的硬體,用於提供程序級別的記憶體分配和隔離。程序在執行時,作業系統會使程序認為自己獨佔整個定址空間(32位機器定址空間為4GB),並使用連續的實體地址進行操作。但實際上,這個記憶體空間要麼尚未分配,要麼部分存在於磁碟中。並且其使用的虛擬地址會由MMU進行翻譯,對應到分散的實體地址中。

MMU 的工作原理如圖4所示。記憶體空間被劃分為若干頁面(Page),每個頁面佔用4KB記憶體。程序使用的連續虛擬頁面被MMU翻譯到具體的分散的物理頁面中。

MMU 最主要的功能其實是將虛擬頁翻譯到物理頁。那為什麼MMU可以實現程序級隔離呢?

因為MMU的翻譯是基於頁表進行的,頁表記錄了程序虛擬頁到物理頁的對映。作業系統為不同的程序分配的不同的頁表起始地址,儲存在對應暫存器中。當MMU翻譯地址時,根據頁表起始地址加偏移量定位到具體的頁表項,進而完成地址翻譯。不難看出,這種機制使得程序擁有天然隔離的零散的地址空間。


圖4 MMU工作原理


安全隔離小結

安全隔離的底層原理是避免軟體對記憶體的不合理訪問,以滿足功能安全要求。硬體層面上,有MPU、MMU這樣的硬體進行程式記憶體空間的保護和約束;軟體層面上,容器化技術和虛擬化技術也能幫助使用者制定更靈活的隔離策略。但並不是說實現了這些安全隔離機制就等於完全滿足了安全隔離需求,還需要結合軟體和系統的正確設計來共同達成目標。

經緯恆潤功能安全團隊成立於2008年,系國內較早從事功能安全技術研究的團隊。作為功能安全、預期功能安全國家標準委員會成員,經緯恆潤的研發流程、生產流程已透過功能安全開發過程認證,功能安全開發過程達到ASIL-D,相關產品已成功服務於近百家國內外整車及零部件企業。

經緯恆潤功能安全軟體團隊可提供功能安全軟體開發技術諮詢服務,包括功能安全軟體階段流程/產品諮詢、L2監控演算法開發整合和L3安全機制(安全通訊、隔離、監控、執行和晶片AOU)的開發整合,控制器覆蓋動力域、底盤域、智駕域和車身域等。

未來,經緯恆潤將緊跟行業發展趨勢和市場需求,結合自身汽車電子產品研發和國內外諮詢實踐,一如既往地堅持自主創新道路,為智慧汽車安全保駕護航。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/31535135/viewspace-3012244/,如需轉載,請註明出處,否則將追究法律責任。

相關文章