MIPS-VZ與ARMv8-M CMSE安全大比拼
概述
ARMv8-M安全特性擴(kuò)展(CMSE)是基于Trust-zone(TZ)技術(shù)。類似于其他基于TZ的系統(tǒng),他們都存在一個(gè)安全的空間和一個(gè)不安全的空間。這意味著所有受保護(hù)的代碼必須相互信任,因?yàn)樗鼈兊膱?zhí)行會(huì)共享同一段同屬安全區(qū)域的地址空間。
MIPS-VZ采用的是基于硬件的CPU虛擬化技術(shù),可以實(shí)現(xiàn)多個(gè)執(zhí)行域,每個(gè)域都是獨(dú)立的且是彼此間受保護(hù)的。這樣就有一個(gè)好處,即受保護(hù)的代碼不需要信任其他代碼,因?yàn)樗鼈兌紦碛兴接袌?zhí)行域。MIPS-VZ架構(gòu)最多支持255個(gè)獨(dú)立的域,某些特定的CPU可能實(shí)現(xiàn)較少數(shù)目的域。
執(zhí)行模式
ARMv8-M CMSE和MIPS-VZ增加了新的執(zhí)行模式來區(qū)分對(duì)待不同的代碼,對(duì)于絕對(duì)信任的代碼則賦予更多權(quán)限,對(duì)于其他非信任代碼則使用較低的執(zhí)行權(quán)限。
ARMv8-M在NonSecure-Handler和NonSecure-Thread(較低信任度)狀態(tài)的基礎(chǔ)上增加了Secure-Handler和Secure-Thread(較高信任度)執(zhí)行模式。
與之相似的是MIPS-VZ在Guest-Kernel和Guest-User(信任度最低)模式的基礎(chǔ)上增加了Root-Kernel(信任度最高)和Root-User執(zhí)行模式。
對(duì)于ARMv8-M CMSE和MIPS-VZ模型我們可以等價(jià)來看:MIPS架構(gòu)同樣設(shè)置了一個(gè)安全域,除此之外還提供多個(gè)“正常(Normal)”執(zhí)行域,各個(gè)域彼此相互隔離。
內(nèi)存管理
ARMv8-M CMSE采用兩個(gè)模塊來解決內(nèi)存訪問問題,即SAU(Security Attribute Unit,安全屬性單元)和MPU(Memory ProtecTIon Unit,內(nèi)存保護(hù)單元),分別作為安全分區(qū)和非安全分區(qū)。SAU解決了安全/非安全模式下內(nèi)存訪問問題,然后MPU單元負(fù)責(zé)各自安全模式訪問特權(quán)級(jí)問題。
MIPS-VZ采用MMU(Memory Management Unit,存儲(chǔ)器管理單元),并有兩種配置方式:
1對(duì)于大型系統(tǒng)采用二級(jí)TLB設(shè)置。a.Guest TLB用于Guest OS(訪客模式)b.Root TLB用于Root-Kernel模式(管理員模式)。這是典型的虛擬化執(zhí)行模型,對(duì)于訪客提供訪客模式的系統(tǒng),從操作系統(tǒng)(OS)級(jí)別提供了訪問隔離。
2對(duì)于小型系統(tǒng)采用二級(jí)MMUa.訪客分區(qū)可以是全TLB或者是Fixed-Mapping-TranslaTIon(固定映射轉(zhuǎn)換,F(xiàn)MT)單元。b.對(duì)于Root分區(qū)則采用精簡的TLB,不支持物理地址尋址,稱為RPU(Root ProtecTIon Unit,根保護(hù)單元)。對(duì)于RPU的管理類似于TLB,在初始化任何Guest(非信任級(jí))訪問前采用安全程序?qū)PU單元進(jìn)行配置。對(duì)于異常則不是通過handler(處理程序句柄)來處理,而是采用分頁請(qǐng)求(demand-paging),盡管handler也能進(jìn)行類似的操作。
Guset MMU采用FMT模式時(shí),Root MMU采用RPU模式,這樣就可以提供了應(yīng)用級(jí)的隔離功能。也就是說,訪客模式下的應(yīng)用程序/代碼執(zhí)行全部在普通特權(quán)級(jí)情況下執(zhí)行??烧J(rèn)為這是一個(gè)更靜態(tài)或受約束的運(yùn)行環(huán)境。舉個(gè)例子,OEM廠商生產(chǎn)和提供的芯片時(shí)往往預(yù)先燒寫了一些自己專用程序,這些程序可以在訪客模式或者Root模式下執(zhí)行且能保持隔離。除此之外VAR(value added reseller,增值分銷商)也會(huì)向芯片內(nèi)燒寫自己的專用程序或者第三方程序,它們的運(yùn)行環(huán)境也在訪客模式下也保持了彼此的隔離。
MIPS-VZ MMU是基于CAM實(shí)現(xiàn)的,而ARMv8-M SAU/MPU是基于基地址綁定(即地址比較器)實(shí)現(xiàn)的。與基于比較器實(shí)現(xiàn)的MMU表項(xiàng)相比,基于CAM實(shí)現(xiàn)的MMU表擁有更小的硅片(Die)面積。因此,MIPS虛擬化方案是一種全面可擴(kuò)展的解決方案,可以實(shí)現(xiàn)從應(yīng)用級(jí)到操作系統(tǒng)級(jí)的隔離。
不同安全分區(qū)的程序調(diào)用
ARMv8-M CMSE增加了這樣一個(gè)功能,即非安全程序(Non-Secure Code)可以調(diào)用安全分區(qū)內(nèi)特定的程序但無需使用安全監(jiān)控程序調(diào)用(Secure Monitor Call),這就避免了安全監(jiān)控程序調(diào)用在不同狀態(tài)下保存/恢復(fù)操作所帶來的開銷。
實(shí)現(xiàn)方式:a)使用SG(安全網(wǎng)關(guān))指令申請(qǐng)一個(gè)安全分區(qū)地址空間的合法接入點(diǎn)。b)SAU的使用指明運(yùn)行時(shí)被調(diào)用的程序可以駐留在某個(gè)非安全模式(Non-Secure-World)分區(qū)內(nèi),這樣的分區(qū)統(tǒng)一被稱為NSC(Non-Secure-Callable,非安全可調(diào)用)分區(qū)。c)如果允許的話,SG指令后面緊跟著跳轉(zhuǎn)至在安全內(nèi)存空間的安全函數(shù)。
對(duì)于MIPS-VZ,同樣的功能是通過在多個(gè)訪客/域之間分享程序調(diào)用實(shí)現(xiàn)的。通過配置MMU的Root分區(qū)來創(chuàng)建分頁,使指定的訪客(Gusets)可以共享這部分分頁空間。為了保護(hù)代碼我們可以設(shè)置程序?yàn)閮H允許執(zhí)行屬性(既不允許讀操作也不允許寫操作)。Root MMU會(huì)根據(jù)Write-Inhibit, Execute-Only和Read-Inhibit屬性設(shè)置進(jìn)行權(quán)限審查。
MIPS-VZ方案在執(zhí)行速度和延遲表現(xiàn)更佳,因?yàn)樗恍枰猄G指令和相關(guān)的緊跟在SG指令后面的跳轉(zhuǎn)指令,避免了這部分開銷。