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

安全隔離的需求

        功能安全開發中,軟件階段由軟件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)的開發集成,控制器覆蓋動力域、底盤域、智駕域和車身域等。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章