背景
SpacemiT
在數(shù)字化浪潮洶涌澎湃的當(dāng)下,計(jì)算機(jī)已深度融入人們生活的各個(gè)方面,成為社會運(yùn)轉(zhuǎn)不可或缺的 “中樞神經(jīng)”。
從清晨喚醒我們的智能設(shè)備,到工作中處理的海量數(shù)據(jù),再到夜晚休閑時(shí)暢享的娛樂內(nèi)容,計(jì)算機(jī)的身影無處不在, 它串聯(lián)起生活的方方面面,已然成為信息交互、數(shù)據(jù)存儲與處理的核心載體。
然而,計(jì)算機(jī)技術(shù)迅猛發(fā)展的同時(shí),安全問題也如影隨形。
網(wǎng)絡(luò)空間并非一片凈土,惡意軟件如同隱匿在黑暗中的幽靈,隨時(shí)可能入侵計(jì)算機(jī),竊取保密信息;黑客們則像狡黠的盜賊,利用系統(tǒng)漏洞,肆意破壞、非法獲取數(shù)據(jù)。這些安全威脅,嚴(yán)重?cái)_亂了我們的數(shù)字生活秩序。
“The more connected we get, the more vulnerable we become.”(我們的聯(lián)系越緊密,就越容易受到攻擊)。
軟件攻擊
SpacemiT
如今,許多底層軟件(如操作系統(tǒng))都是用 C 或 C++ 等非內(nèi)存安全的編程語言編寫的,這使得這類軟件容易受到軟件的攻擊,攻擊者往往會利用這些漏洞來達(dá)到非法的目的,諸如系統(tǒng)提權(quán)、隱私竊取等。先簡單介紹一下軟件常用的幾種攻擊手段:
Buffer Overflow
ret2libc/ret2text
Return Oriented Programming / Jump Oriented Programming
Buffer Overflow 攻擊
對于底層操作系統(tǒng)而言, buffer overflow和memory corruption是漏洞的主要來源,因?yàn)椴僮飨到y(tǒng)主要是通過C/C++來實(shí)現(xiàn)的, 而C/C++并非內(nèi)存安全的編程語言。
圖片來自:https://www.cvedetails.com/vulnerabilities-by-types.php
Buffer Overflow(緩沖區(qū)溢出)是一種常見且危害嚴(yán)重的計(jì)算機(jī)安全漏洞的利用方式。在程序運(yùn)行過程中,當(dāng)向緩沖區(qū)寫入的數(shù)據(jù)量超過其預(yù)先分配的容量時(shí),就會發(fā)生緩沖區(qū)溢出。
當(dāng)函數(shù)返回地址被覆蓋時(shí),攻擊者可以將其修改為惡意代碼(shellcode)的地址或者程序中其他關(guān)鍵函數(shù)的地址, 這使得攻擊者能夠以與被攻擊程序相同的權(quán)限執(zhí)行惡意操作,可能導(dǎo)致系統(tǒng)敏感信息泄露、系統(tǒng)被完全控制等嚴(yán)重后果。
為了防范 Buffer Overflow 攻擊,現(xiàn)代操作系統(tǒng)和編譯器采用了多種技術(shù)。如引入了棧金絲雀(Stack Canary)機(jī)制,在函數(shù)返回地址和局部變量之間放置一個(gè)特定值(canary 值),在函數(shù)返回前驗(yàn)證該值是否被修改,若被修改則說明可能發(fā)生了緩沖區(qū)溢出攻擊,程序會立即終止運(yùn)行,從而防止攻擊者進(jìn)一步篡改返回地址。
同時(shí),非可執(zhí)行(NX)內(nèi)存技術(shù),也稱為 W⊕X(Write XOR eXecute)或數(shù)據(jù)執(zhí)行預(yù)防(DEP),為每個(gè)內(nèi)存頁面分配一個(gè) NX 位,標(biāo)記其為可讀可執(zhí)行或不可執(zhí)行但可寫,防止攻擊者在數(shù)據(jù)區(qū)域(如棧)上執(zhí)行惡意代碼,有效抵御了傳統(tǒng)基于棧的代碼注入攻擊。
ret2libc/ret2text 攻擊
在存在緩沖區(qū)溢出漏洞的情況下,當(dāng) Data Execution Prevention (DEP) 等機(jī)制禁止在數(shù)據(jù)區(qū)(如棧)執(zhí)行代碼時(shí),ret2libc 攻擊應(yīng)運(yùn)而生。
由于攻擊者無法直接執(zhí)行放置在棧上的 shellcode,于是轉(zhuǎn)向利用程序中已有的庫函數(shù)來達(dá)到惡意目的。
ret2text 攻擊則是在程序未開啟 Position-independent Code (PIE) 時(shí),利用程序自身代碼段中固定的地址來執(zhí)行惡意操作。
在未開啟 PIE 的情況下,程序自身某些關(guān)鍵代碼段的地址在每次運(yùn)行時(shí)是固定的,攻擊者通過溢出漏洞覆蓋函數(shù)返回地址,使其跳轉(zhuǎn)到程序自身代碼段中可利用的指令序列處。
這些攻擊技術(shù)的出現(xiàn)促使安全研究人員不斷研發(fā)新的防御策略,如強(qiáng)化內(nèi)存保護(hù)機(jī)制、增強(qiáng)程序的地址隨機(jī)化(ASLR)程度等,以應(yīng)對不斷變化的安全威脅,保障計(jì)算機(jī)系統(tǒng)的安全穩(wěn)定運(yùn)行。
然而,攻擊者也在不斷發(fā)展新的攻擊手段來繞過這些防御機(jī)制,如代碼重用攻擊(CRAs)中的 Return Oriented Programming(ROP)等技術(shù),使得計(jì)算機(jī)安全防御面臨持續(xù)的挑戰(zhàn)。
ROP/JOP 攻擊
ROP(Return-Oriented Programming,返回導(dǎo)向編程)和 JOP(Jump-Oriented Programming,跳轉(zhuǎn)導(dǎo)向編程)是兩種先進(jìn)且具有強(qiáng)大危害性的代碼重用攻擊技術(shù)。
ROP 攻擊基于程序中已有的代碼片段(gadgets)來構(gòu)建攻擊鏈。這些 gadgets 通常是位于程序的.text 段等可執(zhí)行區(qū)域內(nèi),以 ret 指令結(jié)尾的短指令序列。在存在緩沖區(qū)溢出等漏洞的情況下,攻擊者通過精心構(gòu)造輸入數(shù)據(jù),將一系列 gadget 地址和對應(yīng)的參數(shù)填充到棧上。
Example of ROP attack
ROP 攻擊的優(yōu)勢在于能夠繞過諸如 DEP(Data Execution Prevention)等內(nèi)存保護(hù)機(jī)制,因?yàn)樗玫氖浅绦蜃陨砗戏ǖ拇a片段,而不是注入新的可執(zhí)行代碼。JOP 攻擊與 ROP 類似,但它的 gadgets 是以間接分支(如 jmp 或 call 等)指令結(jié)尾,而不是 ret 指令。
JOP 攻擊構(gòu)建在一個(gè) dispatch table(調(diào)度表)之上,該表存儲著各種 gadgets 的地址和相關(guān)數(shù)據(jù)。攻擊者通過控制程序的執(zhí)行流程,使 CPU 寄存器(通常是一個(gè)用作虛擬程序計(jì)數(shù)器的寄存器)指向 dispatch table 中的不同 gadgets 地址,從而實(shí)現(xiàn)連續(xù)的 gadget 調(diào)用。
ROP 和 JOP 攻擊的出現(xiàn),促使安全研究人員不斷探索新的防御技術(shù),如更嚴(yán)格的控制流完整性檢查、硬件輔助的安全機(jī)制等,以應(yīng)對這些復(fù)雜的攻擊手段,保護(hù)計(jì)算機(jī)系統(tǒng)的安全。
RISC-V Control Flow Integrity (CFI)
基于代碼重用攻擊(CRAs)不需要在受攻擊的程序中引入新代碼, CRAs基于通過覆蓋函數(shù)指針和返回地址來轉(zhuǎn)移應(yīng)用程序的控制流。RISC-V 提供了影子棧(Shadow Stack, Zicfiss)和Landing Pads(Zicfilp) ISA 擴(kuò)展(統(tǒng)稱CFI擴(kuò)展),通過該擴(kuò)展來保護(hù)程序的控制流完整性。
具體來說,為了保護(hù)后向邊緣(backward-edges),RISC-V定義一個(gè)影子堆棧來存儲每個(gè)特權(quán)級別的返回地址, 主要用來防護(hù)ROP攻擊;為了保護(hù)前向邊緣(forward-edges), RISC-V設(shè)計(jì)了一種基于標(biāo)簽的指令著陸方法(Landing Pads),主要用來防御JOP攻擊。
影子棧Zicfiss 擴(kuò)展引入了影子棧來強(qiáng)制執(zhí)行后向邊緣控制流的完整性。影子堆棧是第二個(gè)堆棧,用于將返回地址的影子副本存儲在鏈接寄存器(RA)中。
當(dāng)啟用 Zicfiss 后,每個(gè)需要返回地址完整性的函數(shù)(通常是非葉子函數(shù))在進(jìn)入函數(shù)(序言)時(shí)將鏈接寄存器值存儲到常規(guī)堆棧,并將鏈接寄存器值的影子副本存儲到影子堆棧。當(dāng)此類函數(shù)返回(結(jié)尾)時(shí),該函數(shù)從普通堆棧加載RA,從影子堆棧加載RA的影子副本,然后比較常規(guī)堆棧中的RA值和影子堆棧中的RA值。兩個(gè)值不匹配表示return address被破壞,并觸發(fā)軟件異常。
Ladding pads旨在為使用間接調(diào)用和跳轉(zhuǎn)執(zhí)行的控制執(zhí)行提供完整性(前向邊緣保護(hù))。當(dāng) Zicfilp 處于活動狀態(tài)時(shí),hart 會跟蹤預(yù)期Ladding pads 的狀態(tài)(ELP),該狀態(tài)由 indirect_call 或 indirect_jump 更新,要求是否在分支目標(biāo)處存在ladding pads指令。如果目標(biāo)處的指令不是ladding pad指令,則會引發(fā)軟件異常。
function_entry: lpad # loading pad check addi sp,sp,-8 # push link register x1 sd x1,(sp) # on regular stack sspush x1 # push link register x1 on shadow stack : ld x1,(sp) # pop link register x1 from regular stack addi sp,sp,8 sspopchk x1 # fault if x1 not equal to shadow return address ret
RISC-V CFI (Shadow Stack and Ladding Pads)Example
Trusted Execution
Environment (TEE)
SpacemiT
對于各類軟件攻擊,硬件以及操作系統(tǒng)提供了多種緩解和防御手段, 但是由于軟件問題導(dǎo)致的軟件漏洞數(shù)量每年仍然呈上升趨勢。
圖片來自:https://www.cvedetails.com/
盡管軟硬件安全工程師付出很多的努力去修復(fù)漏洞,但是絕大多數(shù)底層基礎(chǔ)軟件都是用內(nèi)存不安全的語言(如 C 和 C++)編寫的,這很容易引入內(nèi)存漏洞,從而使軟件遭受代碼重用攻擊(CRAs),像緩沖區(qū)溢出、Return-Oriented Programming(ROP)和 Jump-Oriented Programming(JOP)等攻擊手段頻繁出現(xiàn)。
傳統(tǒng)的安全機(jī)制在應(yīng)對這些復(fù)雜攻擊時(shí)往往存在局限性,難以全面保障系統(tǒng)的安全,這也導(dǎo)致計(jì)算機(jī)操作系統(tǒng)每年呈現(xiàn)的缺陷和漏洞每年都在呈上升趨勢。
新的攻擊手段層出不窮,黑客們不斷尋找著系統(tǒng)的薄弱環(huán)節(jié),試圖突破安全防線,獲取非法利益或達(dá)成惡意目的。這就如同一場永不停歇的攻防博弈,正應(yīng)了那句 “道高一尺,魔高一丈”。
與其像一個(gè)補(bǔ)鍋匠一樣拆東墻補(bǔ)西墻,有沒有一種更加徹底的方法來杜絕絕大部分的軟件攻擊呢?
比如,把應(yīng)用程序放到一個(gè)與主系統(tǒng)隔離的環(huán)境里,主系統(tǒng)的軟件(包括特權(quán)軟件)、DMA外設(shè)都無法獲取該環(huán)境里軟件的執(zhí)行狀態(tài)、數(shù)據(jù),從而就算再厲害的黑客也無法通過普通的軟件手段來獲取內(nèi)部信息。
這是一個(gè)非常樸實(shí)的想法,而且早就有人這么做了,這便是TEE(Trusted Execution Enviromnent)技術(shù)。
The approaches of IoT TEE
Intel 的SGX
(Software Guard Extenstion)
Intel Software Guard Extensions(Intel SGX)是英特爾推出的一項(xiàng)基于硬件的可信執(zhí)行環(huán)境(TEE)技術(shù),旨在為應(yīng)用程序提供更高級別的安全性,尤其是保護(hù)應(yīng)用程序代碼和數(shù)據(jù)的機(jī)密性與完整性。
這個(gè)隔離的區(qū)域, Intel 稱之為Enclave, 它是應(yīng)用程序地址空間內(nèi)一個(gè)受保護(hù)的區(qū)域,由 CPU 提供硬件層面的安全隔離。Encalve中的代碼和數(shù)據(jù)在內(nèi)存中加密存儲,只有Enclave內(nèi)的代碼才能夠訪問,即使操作系統(tǒng)內(nèi)核、虛擬機(jī)監(jiān)視器或其他特權(quán)軟件也無法窺探或篡改Enclave的內(nèi)容。
Intel SGX Enclave示意圖
TEE(Tusted Execution Environment)可信執(zhí)行環(huán)境能夠?yàn)槊舾袛?shù)據(jù)和關(guān)鍵應(yīng)用程序提供一個(gè)隔離且受保護(hù)的運(yùn)行空間。它確保在這個(gè)環(huán)境中執(zhí)行的代碼和處理的數(shù)據(jù)不會被外部惡意軟件或未經(jīng)授權(quán)的實(shí)體所干擾或竊取。在物聯(lián)網(wǎng)領(lǐng)域,眾多設(shè)備收集和傳輸大量敏感數(shù)據(jù),如醫(yī)療設(shè)備中的患者健康數(shù)據(jù)、工業(yè)控制系統(tǒng)中的關(guān)鍵生產(chǎn)數(shù)據(jù)等,TEE 可以為這些設(shè)備提供安全的執(zhí)行環(huán)境,確保數(shù)據(jù)在設(shè)備端的處理過程中的安全性,防止數(shù)據(jù)泄露和惡意控制;在云計(jì)算環(huán)境中,不同用戶的應(yīng)用程序和數(shù)據(jù)在共享的硬件資源上運(yùn)行,TEE 能夠隔離用戶的工作負(fù)載,保證每個(gè)用戶的隱私和數(shù)據(jù)安全,防止云服務(wù)提供商或其他租戶的非法訪問。
Trusted Execution Environment: What It is, and What It is Not [2] 這篇論文對 TEE做了詳細(xì)定義:可信執(zhí)行環(huán)境 (TEE) 是在分離內(nèi)核上運(yùn)行的防篡改處理環(huán)境。它保證執(zhí)行代碼的真實(shí)性、運(yùn)行時(shí)狀態(tài)(例如 CPU 寄存器、內(nèi)存和敏感 I/O)的完整性以及存儲在持久內(nèi)存中的代碼、數(shù)據(jù)和運(yùn)行時(shí)狀態(tài)的機(jī)密性。此外,它還應(yīng)能夠提供遠(yuǎn)程認(rèn)證,以證明其對第三方的可信度。TEE 的內(nèi)容不是靜態(tài)的,它可以安全地更新。TEE 技術(shù)主要用于抵御軟件攻擊以及部分非侵入式物理攻擊。
An Overview of TEE Building Blocks
TEE主要包含以下幾個(gè)方面:
安全啟動
在啟動時(shí),TEE 安全啟動從信任根開始,信任根是預(yù)先內(nèi)置在硬件中的高度可信組件,如可信平臺模塊(TPM)中的密鑰或固化在芯片中的根證書。啟動過程是一個(gè)鏈?zhǔn)津?yàn)證過程,從引導(dǎo)加載程序開始,每加載一個(gè)軟件組件,都會依據(jù)前一個(gè)已驗(yàn)證的組件來驗(yàn)證其完整性和真實(shí)性。例如,引導(dǎo)加載程序會驗(yàn)證內(nèi)核的數(shù)字簽名,確保內(nèi)核未被篡改,內(nèi)核加載后又會驗(yàn)證系統(tǒng)服務(wù)和驅(qū)動程序等的合法性。這種鏈?zhǔn)津?yàn)證確保了整個(gè)啟動鏈條的可信性,只有經(jīng)過授權(quán)和未被篡改的軟件才能在 TEE 中加載和執(zhí)行。
在啟動階段阻止惡意軟件的加載和執(zhí)行,避免系統(tǒng)在啟動過程中就被惡意軟件入侵,從而保護(hù)系統(tǒng)的安全性和穩(wěn)定性。
保障數(shù)據(jù)安全:確保 TEE 在啟動時(shí)加載的是可信的數(shù)據(jù)處理和存儲模塊,防止敏感數(shù)據(jù)在系統(tǒng)啟動階段就面臨被竊取或篡改的風(fēng)險(xiǎn)。
支持遠(yuǎn)程證明:安全啟動過程中對軟件組件的驗(yàn)證信息可用于遠(yuǎn)程證明,向遠(yuǎn)程服務(wù)器或其他設(shè)備證明本地 TEE 的可信狀態(tài),使得遠(yuǎn)程實(shí)體可以放心與本地設(shè)備進(jìn)行交互。
安全啟動需要依賴硬件信任根(HW RoT), 主要包含ROM、eFuse以及HW Crypto Engine。ROM用來運(yùn)行啟動代碼,因?yàn)镽OM不可修改,所以ROM的功能是固化的;eFuse主要用來存儲密鑰(HUK等)以及軟硬件相關(guān)的配置,安全eFuse需要做到敏感數(shù)據(jù)特別是密鑰信息不允許被導(dǎo)出;密碼學(xué)引擎(Crypto Engine)需要提供密鑰管理、密鑰存儲、密鑰派生等功能,需要確保密鑰信息不能被CPU所獲取。基于HW RoT的密碼學(xué)使用方法大致如下圖所示:
The Usage of HW RoT during Secure Boot
安全調(diào)度
安全調(diào)度確保TEE與系統(tǒng)其余部分之間的“平衡”和“高效”的協(xié)同運(yùn)作。實(shí)際上,它需要確保在TEE中運(yùn)行的任務(wù)不會影響主操作系統(tǒng)的正常響應(yīng)。如OP-TEE提出了一種安全調(diào)度策略,它把OP-TEE的線程設(shè)計(jì)為主操作系統(tǒng)線程的“延伸”,OP-TEE不再需要提供調(diào)度器而完全依賴主操作系統(tǒng)的調(diào)度,它可以減少對主操作系統(tǒng)調(diào)度的影響。
環(huán)境間通信
環(huán)境間通信定義了允許TEE 與系統(tǒng)其余部分通信的接口。通信接口應(yīng)滿足三個(gè)關(guān)鍵屬性:可靠性(內(nèi)存/時(shí)間隔離)、最小開銷(不必要的數(shù)據(jù)復(fù)制和上下文切換)和通信結(jié)構(gòu)的保護(hù)。較為常見的通信接口模型如:GlobalPlatform TEE Client API。
安全存儲
安全存儲是指保證存儲數(shù)據(jù)的機(jī)密性、完整性和新鮮度(即防止重放攻擊)的存儲,并且只有授權(quán)實(shí)體才能訪問數(shù)據(jù) 。實(shí)現(xiàn)安全存儲的一種常見方法是加密(sealed)存儲。加密存儲基于三個(gè)組件:
僅可由 TEE 訪問的完整性保護(hù)密鑰;
加密機(jī)制,例如經(jīng)過身份驗(yàn)證的加密算法;
數(shù)據(jù)回滾保護(hù)機(jī)制,例如重放保護(hù)內(nèi)存塊 (RPMB)。
可信 I/O
可信I/O確保TEE 與外圍設(shè)備(例如鍵盤或指紋)之間通信的真實(shí)性和機(jī)密性,因此,輸入和輸出數(shù)據(jù)不會被惡意應(yīng)用程序嗅探或篡改。更準(zhǔn)確地說,可信 I/O 需要防范以下四類攻擊:屏幕捕獲攻擊、鍵盤記錄攻擊、覆蓋攻擊和網(wǎng)絡(luò)釣魚攻擊。Trust UI的可信路徑可在 TEE 內(nèi)實(shí)現(xiàn)更廣泛的功能,它允許用戶直接與 TEE 內(nèi)運(yùn)行的應(yīng)用程序交互。
前面介紹了TEE的通用模型,接下來我們來簡單了解一下Arm基于TrustZone實(shí)現(xiàn)的TEE架構(gòu)。為什么要先了解Arm TrustZone的實(shí)現(xiàn)原理,是因?yàn)镽ISC-V在嵌入式上的安全架構(gòu)與Arm有很多相似之處,TrustZone作為嵌入式安全的先行者,已經(jīng)有比較好的群眾基礎(chǔ),通過了解TrustZone能讓用戶更好地理解RISC-V的安全機(jī)制。
TrustZone-based TEE
Arm TrustZone 技術(shù)可以看作是一種特殊的虛擬化,具有對內(nèi)存、I/O 和中斷虛擬化的硬件支持 。這種虛擬化使 Arm 內(nèi)核能夠提供兩個(gè)虛擬內(nèi)核 (VCPU) 的抽象:安全 VCPU 和非安全 VCPU。
Secure monitor被視為一個(gè)最小的虛擬機(jī)管理程序,其主要作用是控制兩個(gè)虛擬內(nèi)核之間的上下文管理和調(diào)度。我們可以從操作系統(tǒng)管理應(yīng)用程序(進(jìn)程)的視角來看TrustZone的輕量級虛擬化。從操作系統(tǒng)視角,每個(gè)應(yīng)用程序都完全獨(dú)占他的用戶空間,不同的應(yīng)用程序之間相互獨(dú)立,即使在單個(gè)物理核的情況下,應(yīng)用程序在操作系統(tǒng)的管理下能夠“并發(fā)”運(yùn)行(單核的情況下,并不是真正意義上的同時(shí)運(yùn)行)。
TrustZone 的物理世界虛擬化的本質(zhì)也是一樣,我們把"虛擬世界“看成應(yīng)用程序的用戶空間,secure monitor看成是操作系統(tǒng)內(nèi)核, 虛擬世界(安全世界和非安全世界)在secure monitor的管理下”并行“運(yùn)行。在單核情況下,這并不是真正意義上的并發(fā)運(yùn)行,而是一種對CPU物理資源的分時(shí)復(fù)用。
當(dāng)然,因?yàn)槭且粋€(gè)物理核,也就是硬件資源是多個(gè)vcpu(其實(shí)就2個(gè),安全和非全vcpu)共享的,那么在世界切換的時(shí)候,除了做一些額外的上下文切換的工作以外,比如cpu上下文(通用寄存器、系統(tǒng)寄存器等)切換,還需要做一些清理的工作,主要是清理cache和TLB,這會帶來一定的性能損耗,所以TrustZone在cachline和tlb的entry上額外增加了NS bit(這個(gè)下面會詳細(xì)介紹)來標(biāo)注cacheline和tlb的安全屬性,不同屬性之前的cacheline和tlb entry不會相互打架,相當(dāng)于內(nèi)部做了一層隔離。
于是, trustzone enxtension的軟件整體架構(gòu)如下:
Armv8 Software Architecture with TrustZone Extension
雖然1個(gè)物理核被虛擬出了2個(gè)vcpu(可以理解為相比2個(gè)物理核,TrustZone虛擬化技術(shù)節(jié)省了物理核資源), 但是不同vcpu訪問資源是如何做到對資源訪問(比如ddr)的保護(hù)的?
首先,TrustZone 技術(shù)在AMBA總線上擴(kuò)展了 NS(Non-Secure,非安全)位,它作為一個(gè)標(biāo)識位,用于在總線事務(wù)中標(biāo)明該事務(wù)是屬于安全域還是非安全域,這也是TrustZone技術(shù)的核心思想(將資源劃分成安全世界和非安全世界)。
在整個(gè)系統(tǒng)中,NS bit 就是一個(gè) “安全標(biāo)簽”,當(dāng)總線上的事務(wù)攜帶 NS bit 信息時(shí),系統(tǒng)的各個(gè)組件(如總線仲裁器、內(nèi)存filter、從設(shè)備等)可以根據(jù)這個(gè)位來判斷是否允許該事務(wù)的進(jìn)行,從而實(shí)現(xiàn)了安全與非安全區(qū)域的隔離和數(shù)據(jù)訪問控制。
接下來就要說TrustZone的TZASC(Trustzone Address Space Controller) IP了,也就是上面說的內(nèi)存filter。TZASC是 ARM TrustZone 技術(shù)的關(guān)鍵組件,主要用于管理和保護(hù)系統(tǒng)(包括CPU和DMA設(shè)備)對內(nèi)存的訪問:
TZASC 通過檢測總線事務(wù)的安全狀態(tài)位來確定當(dāng)前的傳輸事務(wù)是安全事務(wù)還是非安全事務(wù)。當(dāng)處理器處于安全狀態(tài)時(shí),會發(fā)出安全訪問事務(wù)(NS=0),允許訪問安全世界的內(nèi)存區(qū)域;處于非安全狀態(tài)時(shí),則會發(fā)出非安全訪問事務(wù)(NS=1), 只允許訪問非安全區(qū)域,限制對安全世界內(nèi)存的訪問。
內(nèi)存屬性配置:系統(tǒng)開發(fā)者可以通過配置 TZASC 的配置寄存器,為不同的內(nèi)存區(qū)域設(shè)置安全屬性,包括安全 / 非安全屬性、可讀寫權(quán)限等。這些配置信息被 TZASC 用于在內(nèi)存訪問時(shí)進(jìn)行實(shí)時(shí)檢查和控制。
TZASC IP是用來保護(hù)DDR內(nèi)存的,也就是所有的master設(shè)備(包括CPU和DMA設(shè)備)對內(nèi)存的訪問都會經(jīng)過TZASC的保護(hù),那除了DDR以外的地址空間呢?
TrustZone系統(tǒng)中,DDR以外的地址空間都需要額外的安全I(xiàn)P來進(jìn)行訪問控制,主要包括ROM、SRAM和外設(shè)的MMIO。TrustZone提供了TZMA(TrustZone Memory Adaptor)IP對ROM或SRAM進(jìn)行訪問控制(可以簡單理解TZMA是個(gè)輕量級的TZASC), 同時(shí)TrustZone也提供了AXI2APB橋 以及TZPC (TrustZone Protection Controller) IP對MMIO的訪問進(jìn)行權(quán)限管控。
以上便是實(shí)現(xiàn)TrustZone方案需要提供的幾個(gè)核心的安全I(xiàn)P。當(dāng)然,除了上述公共的安全I(xiàn)P以外,SoC在設(shè)計(jì)外設(shè)時(shí)然需要考量基于NS bit的訪問控制,比如對于DMA設(shè)備,需要考慮該DMA設(shè)備是安全設(shè)備還是非安全設(shè)備,帶來的影響就是該DMA設(shè)備在發(fā)出讀寫訪問時(shí)需要攜帶NS信號以表明當(dāng)前訪問時(shí)安全訪問(NS=0)還是非安全訪問(NS=1),這需要在SoC設(shè)計(jì)時(shí)就靜態(tài)綁定。
當(dāng)然Arm也提供了一種更加靈活通用的方式來綁定DMA設(shè)備的安全屬性,那就是在DMA設(shè)備后面再掛一個(gè)SMMU, 因?yàn)镾MMU可以通過軟件編程頁表的方式動態(tài)地修改DMA的訪問屬性。這種方式的優(yōu)點(diǎn)是DMA設(shè)備集成時(shí)不需要額外的改動,并且靈活性高;缺點(diǎn)就是需要集成SMMU,會增加額外的硅面積。
以上便是Arm TrustZone的核心內(nèi)容,總結(jié)一下就是, TrustZone將資源劃分成安全世界和非安全世界,并通過NS bit來標(biāo)注資源的安全屬性,最后通過slave側(cè)(劃重點(diǎn), 關(guān)注和后面的RISC-V做對比)的安全I(xiàn)P(如TZASC, TZMA, AXI2APB bridge等)基于NS屬性對地址空間的訪問進(jìn)行訪問控制。當(dāng)然,有些事務(wù)很可能是不會到達(dá)slave側(cè)的安全I(xiàn)P的(如cpu cache hit的情況),這就需要事務(wù)的發(fā)起者(如 cpu)需要在內(nèi)部實(shí)現(xiàn)訪問的隔離,比如在cache中增加NS屬性。
接下來我們來看一下RISC-V的安全架構(gòu)。
RISC-V PMP/ePMP based TEE
RISC-V在特權(quán)架構(gòu)上和Arm v8/9架構(gòu)有非常相似之處, RISC-V特權(quán)級架構(gòu)如下:
用戶態(tài)(U 態(tài)):運(yùn)行一般的用戶應(yīng)用程序,具有最低的特權(quán)級別,只能訪問有限的指令和資源,對硬件的直接訪問受到嚴(yán)格限制,以防止用戶程序?qū)ο到y(tǒng)造成破壞。
內(nèi)核態(tài)(S 態(tài)和 H 態(tài)):S 態(tài)用于操作系統(tǒng)的內(nèi)核或監(jiān)督程序。H 態(tài)則用于 Hypervisor,負(fù)責(zé)虛擬機(jī)的運(yùn)行和管理。
機(jī)器模式(M 態(tài)):具有最高的特權(quán)級別,可執(zhí)行M態(tài)特權(quán)級指令,運(yùn)行特權(quán)級固件(如OpenSBI), 提供特權(quán)級服務(wù),類似Arm v8/v9的EL3或者Root 態(tài)。
前面我們已經(jīng)了解了TrustZone的實(shí)現(xiàn)原理,TrustZone Extension在特權(quán)架構(gòu)上增加了EL3,用于運(yùn)行特權(quán)固件(如TF-A), 而RISC-V 在誕生之初就擁有比S/H態(tài)更高的特權(quán)級模式M態(tài),所以RISC-V 也完全可以像TrustZone一樣實(shí)現(xiàn)物理核(Hart)的虛擬化。
不同的是,TrustZone只能虛擬出2個(gè)世界,而RISC-V則沒有這方面的限制,RISC-V可以在特權(quán)固件(OpenSBI)的管理下,能更像創(chuàng)建進(jìn)程一樣創(chuàng)建出任意多的虛擬”世界“(數(shù)量依賴與系統(tǒng)資源)。
每一個(gè)”世界“RISC-V通常稱之為Domain, vCPU(這里借用CPU虛擬化中的虛擬CPU的概念,本質(zhì)上是一樣的)是物理CPU在每個(gè)Domain中運(yùn)行時(shí)的抽象,本質(zhì)上是一個(gè)物理CPU在不同Domain之間分時(shí)運(yùn)行,而安全固件(增加了Domain管理功能的特權(quán)固件)則提供了Domain之間的上下文管理和切換。
我們?nèi)匀豢梢园凑绽斫獠僮飨到y(tǒng)管理應(yīng)用程序或者Hypervisor管理虛擬機(jī)的方式來理解安全固件對Domain的管理,于是RSIC-V可以實(shí)現(xiàn)如下的軟件整體架構(gòu):
RISC-V Generic Software Architecture with TEE Enabled
上圖展示RISC-V"虛擬"出多個(gè)Domain來實(shí)現(xiàn)TEE架構(gòu)的軟件參考模型,但最關(guān)鍵的是RISC-V如何解決不同Domain之間的隔離問題。所謂隔離,從技術(shù)上看就是如何實(shí)現(xiàn)權(quán)限管理和訪問控制。我們?nèi)匀煌ㄟ^用戶態(tài)和內(nèi)核態(tài)的隔離來舉例,因?yàn)橛脩魬B(tài)和內(nèi)核態(tài)的隔離大家都比較熟悉,而且不同CPU架構(gòu)之間都大同小異。
用戶態(tài)和內(nèi)核態(tài)的隔離是通過內(nèi)存管理單元(MMU)來實(shí)現(xiàn)的。MMU 的主要功能是將虛擬地址轉(zhuǎn)換為物理地址,并對訪問進(jìn)行權(quán)限檢查。在操作系統(tǒng)中,用戶態(tài)和內(nèi)核態(tài)運(yùn)行在不同的虛擬地址空間,操作系統(tǒng)內(nèi)核可以通過管理MMU 頁表來控制不同特權(quán)下對物理內(nèi)存的訪問權(quán)限,從而實(shí)現(xiàn)兩者的隔離。
用戶態(tài)頁表:用戶態(tài)程序使用的頁表只包含用戶程序可以訪問的物理內(nèi)存區(qū)域的映射。這些區(qū)域通常是用戶程序的代碼、數(shù)據(jù)和棧等。用戶態(tài)頁表中的映射項(xiàng)會設(shè)置相應(yīng)的訪問權(quán)限,一般只允許用戶態(tài)程序進(jìn)行讀、寫和執(zhí)行操作,并且不允許訪問內(nèi)核空間的物理內(nèi)存。
內(nèi)核態(tài)頁表:內(nèi)核態(tài)使用的頁表包含了整個(gè)系統(tǒng)的物理內(nèi)存映射,不僅包括用戶程序的內(nèi)存區(qū)域,還包括內(nèi)核代碼、內(nèi)核數(shù)據(jù)結(jié)構(gòu)和設(shè)備內(nèi)存等。內(nèi)核態(tài)頁表中的映射項(xiàng)權(quán)限設(shè)置更為靈活,內(nèi)核可以根據(jù)需要進(jìn)行各種操作,如對硬件設(shè)備的直接訪問等。
每個(gè)應(yīng)用程序都有自己獨(dú)立的頁表,每個(gè)頁表包含了應(yīng)用程序完整的用戶空間。當(dāng)操作系統(tǒng)從一個(gè)應(yīng)用程序切換到另一個(gè)應(yīng)用程序時(shí),操作系統(tǒng)主要做的其中一個(gè)事兒就是進(jìn)行頁表切換。
應(yīng)用程序地址空間是通過MMU來管理的,那RSIC-V domain的地址空間是通過什么來管理的呢?這就是RISC-V架構(gòu)特有的物理內(nèi)存保護(hù)(PMP)模塊。
RISC-V PMP (Physical Memory Protection)
RISC-V 物理內(nèi)存保護(hù)(Physical Memory Protection,PMP)是 RISC-V 特權(quán)架構(gòu)的重要組成部分,在硬件層面提供靈活且細(xì)粒度的內(nèi)存訪問控制。它允許操作系統(tǒng)或監(jiān)督程序依據(jù)實(shí)際需求,對不同物理內(nèi)存區(qū)域設(shè)置各異的訪問權(quán)限,以此防止低特權(quán)級(U, H/S)程序進(jìn)行非法的內(nèi)存訪問操作,增強(qiáng)系統(tǒng)安全性和穩(wěn)定性。簡單地講, PMP是一個(gè)輕量級的MPU, 它基于實(shí)地址(MMU是虛地址)模式對低特權(quán)等級的程序提供地址空間訪問的權(quán)限管理, 而M模式并不受PMP的影響(除非把PMP的表項(xiàng)鎖住,具體細(xì)節(jié)不展開介紹)。
PMP只允許M模式下的特權(quán)固件對它進(jìn)行編程(MMU是受S態(tài)的Kernel管理),M態(tài)固件可以像操作系統(tǒng)內(nèi)核維護(hù)MMU頁表一樣來維護(hù)PMP的表項(xiàng),從而實(shí)現(xiàn)不同Domain之間訪問權(quán)限的切換(類似MMU頁表切換)。基于PMP實(shí)現(xiàn)多個(gè)Domain訪問隔離的機(jī)制如下圖所示:
RISC-V Memory Isolations Using PMP Swapping
RISC-V SUM (Supervisor User Memory)
在早期的操作系統(tǒng)內(nèi)存管理機(jī)制中,用戶空間和內(nèi)核空間雖然在概念上有所區(qū)分,但在實(shí)際的內(nèi)存使用和訪問控制方面存在一定的漏洞。用戶程序可以在用戶空間分配內(nèi)存,并且這些內(nèi)存可以被標(biāo)記為可執(zhí)行。
攻擊者利用這一特性,通過精心構(gòu)造的攻擊代碼,將惡意代碼注入到用戶空間的可執(zhí)行內(nèi)存中。當(dāng)系統(tǒng)因某些操作進(jìn)入內(nèi)核模式后,攻擊者可以誘導(dǎo)內(nèi)核跳轉(zhuǎn)到這些惡意代碼所在的用戶空間內(nèi)存區(qū)域并執(zhí)行,從而實(shí)現(xiàn)提權(quán)攻擊,獲取系統(tǒng)的最高權(quán)限,進(jìn)而控制整個(gè)系統(tǒng)。這種攻擊方式嚴(yán)重威脅到系統(tǒng)的安全性和穩(wěn)定性。
同時(shí),僅僅禁止內(nèi)核模式下執(zhí)行用戶空間代碼已經(jīng)不足以保障系統(tǒng)的安全。在一些情況下,即使內(nèi)核不執(zhí)行用戶空間的代碼,但如果可以隨意訪問用戶空間的內(nèi)存,仍然可能被攻擊者利用。例如,攻擊者可以通過操縱用戶空間的內(nèi)存數(shù)據(jù),誘導(dǎo)內(nèi)核在訪問這些數(shù)據(jù)時(shí)執(zhí)行不安全的操作,從而繞過其他安全機(jī)制。
為了抵御這種類型的攻擊,SMEP(Supervisor Mode Execution Protection)和 SMAP(Supervisor Mode Access Prevention)機(jī)制應(yīng)運(yùn)而生。SMEP 的核心思想是在內(nèi)核模式下禁止執(zhí)行用戶空間的代碼。當(dāng)內(nèi)核嘗試執(zhí)行位于用戶空間的指令時(shí),SMEP 會觸發(fā)異常,阻止惡意代碼的執(zhí)行,從而大大增強(qiáng)了系統(tǒng)對提權(quán)攻擊的抵抗能力;SMAP 進(jìn)一步限制了內(nèi)核模式下對用戶空間內(nèi)存的訪問,當(dāng)內(nèi)核嘗試在沒有明確授權(quán)的情況下訪問用戶空間的內(nèi)存時(shí),SMAP 會觸發(fā)異常,阻止這種不安全的訪問操作,從而進(jìn)一步增強(qiáng)了系統(tǒng)的安全性。
RISC-V SUM(Supervisor User Memory) bit 是 RISC-V 架構(gòu)中用于增強(qiáng)內(nèi)存訪問控制安全性的一種機(jī)制,內(nèi)核態(tài)程序?qū)τ脩魬B(tài)內(nèi)存的訪問會受到嚴(yán)格限制。當(dāng)SUM=0時(shí),內(nèi)核態(tài)只能訪問自身的內(nèi)存區(qū)域,而無法直接訪問用戶態(tài)的內(nèi)存。這就確保了用戶態(tài)內(nèi)存數(shù)據(jù)的隔離性和安全性,防止內(nèi)核態(tài)代碼意外或惡意地訪問用戶態(tài)數(shù)據(jù),即使內(nèi)核態(tài)具有較高的特權(quán)級別, 從而為系統(tǒng)提供SMAP保護(hù)能力。
RISC-V ePMP (Enhanced Physical Memory Protection)
前面說到PMP主要作用于U、S/H等特權(quán)級,而M態(tài)是不受PMP約束的(Lock模式這種特殊場景我們暫且不討論),過高的權(quán)限往往會帶來安全上隱患。RISC-V ePMP (Enhanced Physical Memory Protection)增強(qiáng)型物理內(nèi)存保護(hù)是對傳統(tǒng) RISC-V PMP(Physical Memory Protection,物理內(nèi)存保護(hù))機(jī)制的擴(kuò)展和增強(qiáng),旨在提供更強(qiáng)大、更靈活的內(nèi)存訪問控制, 提供對M模式SMEP和SMAP的保護(hù)能力。
RISC-V ePMP SMEP/SMAP Protection
RISC-V I/O Physical Memory Protection
上一章節(jié)介紹了RISC-V基于PMP/ePMP的物理地址空間訪問的保護(hù)機(jī)制, 但PMP/ePMP是RISC-V特權(quán)架構(gòu)的一部分,是用來約束CPU對物理內(nèi)存、MMIO的訪問權(quán)限的,但RISC-V又是如何對DMA master設(shè)備進(jìn)行訪問控制的呢?這就要說到RISC-V IOPMP(Input/Output Physical Memory Protection)這個(gè)RISC-V Non-ISA 擴(kuò)展了。
IOPMP 和PMP/ePMPl類似,本質(zhì)上是一種物理內(nèi)存保護(hù)機(jī)制,只不過它聚焦于 DMA設(shè)備的訪問控制。相比與PMP,IOPMP的實(shí)現(xiàn)會更加復(fù)雜,因?yàn)樗枰剂客瑫r(shí)來自不同設(shè)備的訪問請求,同時(shí)也還要做到低時(shí)延。IOPMP也提供了類似PMP的訪問權(quán)限配置表,能夠允許安全固件配置針對不同設(shè)備對物理地址空間的訪問設(shè)置特定的訪問權(quán)限,確保I/O設(shè)備只允許訪問授權(quán)的物理地址空間。
RISC-V IOPMP Reference Model
IOPMP也不僅僅用來保護(hù)DMA外設(shè)的物理地址空間訪問,它也可以作用于CPU。這種情況下, IOPMP往往會部署在slave側(cè),但由于RISC-V系統(tǒng)里的RV CPU已經(jīng)有PMP/ePMP保護(hù)了, 所以一般會將IOPMP對RV CPU的訪問配置成直通方式(Bypass)。部署在slave側(cè)的IOPMP就和Arm上的TZASC IP非常相似了,差別在于TZASC是基于NS信號來進(jìn)行訪問控制,而IOPMP是基于Source ID (或者叫Reqester ID), 也就是TZASC是把設(shè)備分成Group(安全和非安全), 而IOPMP則可以為每個(gè)設(shè)備單獨(dú)配置權(quán)限,提供了更加細(xì)粒度的權(quán)限管控。
以上便是RISC-V 架構(gòu)實(shí)現(xiàn)可惜執(zhí)行環(huán)境所提供的核心組件。我們再簡單對比一下RISC-V 安全架構(gòu)和Arm TrustZone的差別。
TrustZone的核心思想是將資源劃分成安全"世界"和非安全”世界“,并通過NS位進(jìn)行標(biāo)記,資源的訪問控制主要集中在slave側(cè)的安全I(xiàn)P,只能采用slave端防護(hù)策略,不同的slave(如內(nèi)存控制器、ROM/SRAM控制器、MMIO等)采用不同的安全I(xiàn)P(TZASC、TZMA、TZPC、AXI2APB Bridge等), 安全I(xiàn)P基于NS信號進(jìn)行權(quán)限管控。
而RISC-V在架構(gòu)上并沒有2個(gè)”世界“的限制,理論上可以虛擬出任意數(shù)目的Domain, Domain隔離所提供的安全I(xiàn)P(也就是PMP和IOPMP)都是基于地址空間的權(quán)限管控(TrustZone是基于NS信號),管控策略更加靈活。
其中PMP采用master端(核內(nèi))防護(hù)策略,而IOPMP既可采用master端防護(hù)策略也可以采用slave端防護(hù)策略,甚至采用混合方式的防護(hù)策略,IOPMP部署方式可以靈活多樣,并且不需要像TrustZone那樣,不同的slave設(shè)備采用不同的安全I(xiàn)P,RISC-V完全可以采用同一個(gè)IOPMP IP(但允許不同的配置,比如entry表項(xiàng)的數(shù)目)。但總的來說,RISC-V和Arm在實(shí)現(xiàn)TEE隔離機(jī)制上是殊途同歸。
進(jìn)迭時(shí)空 V100 TEE 擴(kuò)展
進(jìn)迭時(shí)空 V100 AI CPU原型除了實(shí)現(xiàn)了上述基于RISC-V架構(gòu)的TEE 標(biāo)準(zhǔn)組件(PMP/ePMP、IOPMP)以外,還實(shí)現(xiàn)了基于HSM(Hardware Security Module)的硬件信任根(HW RoT), 并基于此信任根實(shí)現(xiàn)了整個(gè)AI CPU系統(tǒng)的安全啟動、安全調(diào)試,旨在構(gòu)建和提供完整的TEE軟硬件系統(tǒng)和TEE解決方案。
HSM(Hardware Security Module)
V100 AI CPU集成了HSM硬件安全模塊,旨在提供密碼與安全功能。HSM能夠?qū)崿F(xiàn)密鑰管理(密鑰的生成、存儲和處理)、安全啟動、數(shù)據(jù)加密解密等一系列密碼相關(guān)的功能,以及提供物理防護(hù)、安全傳感器等安全保障機(jī)制,能夠隔離外部惡意軟件的攻擊。HSM可以用于構(gòu)建、驗(yàn)證可靠的軟件,以保護(hù)在軟件加載并初次訪問之前的安全啟動。HSM包含有加密/解密硬件加速功能, 和軟件解決方案相比能夠有效降低CPU負(fù)載并提高密碼學(xué)運(yùn)算的安全性。
根密鑰作為整個(gè)硬件信任根(HW RoT)的基礎(chǔ),其密鑰的安全性是整個(gè)安全子系統(tǒng)的核心考量。本方案使用HSM作為系統(tǒng)的RoT,密鑰存儲在OTP中,需要保證其機(jī)密性和完整性,同時(shí)需要嚴(yán)格管理密鑰的訪問和使用權(quán)限。加密后的密鑰及其屬性、CRC校驗(yàn)碼均存儲在OTP中,HSM硬件自動讀取并校驗(yàn)CRC后,通過專用的SKE解密模塊對密鑰進(jìn)行解密,并存儲在KMU中以供后續(xù)使用。
HSM Key Management Overview
安全啟動
安全啟動主要提供以下功能:
安全啟動機(jī)制
信任根RoT: OTP加密存儲芯片唯一密鑰(HUK), 支持客戶根秘鑰
信任鏈CoT: 通過ROT逐級驗(yàn)簽, 實(shí)現(xiàn)信任鏈傳遞
安全啟動組件
HSM: 國密二級認(rèn)證安全島, 提供秘鑰的安全存儲、派生和使用、國際(RSA/ECC/AES/DES/SHA等)、國密(SM2/3/4等)密碼算法引擎
RMU子系統(tǒng): 從BootROM到Bootloader到Firmware的安全啟動
ROM安全啟動流程
使用根公鑰(Root Public Key)對Cerfiticates進(jìn)行驗(yàn)簽, 用HUK對加密密鑰進(jìn)行解密
參數(shù)段驗(yàn)簽并傳遞參數(shù)
下一跳代碼鏡像解密
下一條代碼鏡像驗(yàn)簽
傳遞Certfiticates并跳轉(zhuǎn)到下一跳啟動固件(FSBL)
ROM安全啟動信任鏈
安全調(diào)試
當(dāng)芯片/設(shè)備進(jìn)入產(chǎn)品階段, 也就是安全功能被激活之后,調(diào)試功能將會被關(guān)閉或者授權(quán)開啟。HSM支持安全調(diào)試授權(quán)認(rèn)證,只有通過認(rèn)證之后,調(diào)試才允許被開啟。安全調(diào)試的授權(quán)認(rèn)證支持非對稱或?qū)ΨQ算法。
安全調(diào)試的授權(quán)認(rèn)證流程如下:
主機(jī)通過 UART 或郵箱向 eHSM 發(fā)送調(diào)試請求
HSM 向主機(jī)發(fā)送challenge(UID + 隨機(jī)數(shù))
主機(jī)使用調(diào)試密鑰對challenge進(jìn)行簽名,并發(fā)返回給HSM(a) 非對稱:使用 hsm/ap 調(diào)試密鑰的相應(yīng)私鑰進(jìn)行簽名(b) 對稱:使用 hsm/ap 調(diào)試密鑰計(jì)算 CMAC 值
HSM 使用 hsm/ap 調(diào)試密鑰驗(yàn)證其簽名
如果驗(yàn)證通過,HSM啟用 hsm/ap 調(diào)試端口。
基于HSM實(shí)現(xiàn)AI CPU安全調(diào)試
TEE 軟件架構(gòu)
OP-TEE(Open Portable Trusted Execution Environment)是一個(gè)開源的可信執(zhí)行環(huán)境(TEE)軟件實(shí)現(xiàn)框架,它利用 ARM TrustZone 等硬件隔離技術(shù)(OP-TEE 早期專門為TrustZone設(shè)計(jì)實(shí)現(xiàn),目前也已經(jīng)支持RISC-V架構(gòu)),將設(shè)備的運(yùn)行環(huán)境分為安全世界(Secure World)和普通世界(Normal World)。
普通世界運(yùn)行主操作系統(tǒng),如 Linux、Android 等;安全世界則用于運(yùn)行 OP-TEE 及執(zhí)行敏感任務(wù),確保安全世界中的應(yīng)用程序和數(shù)據(jù)不受普通世界的干擾。OP-TEE支持 GlobalPlatform TEE 國際標(biāo)準(zhǔn),保證與其他遵循同一標(biāo)準(zhǔn)的應(yīng)用和服務(wù)能無縫協(xié)作,提高了其通用性和互操作性, 相比其他的TEE OS,OP-TEE目前支持幾十種SoC板級,具有更好的軟件生態(tài)。
而 OP-TEE Virtualization 是指 OP-TEE 具備對虛擬機(jī)場景的支持,允許TEE世界在不創(chuàng)建多個(gè)虛擬機(jī)運(yùn)行多個(gè)TEE OS的情況下,使一個(gè) OP-TEE 實(shí)例就能夠服務(wù)于多個(gè)REE虛擬機(jī)各自的可信應(yīng)用(TA)。進(jìn)迭V100 支持CPU虛擬化,目前采用OP-TEE作為TEE OS,既能滿足平臺虛擬化的要求,也能很好地融入OP-TEE的軟件生態(tài),降低用戶開發(fā)和學(xué)習(xí)成本。
基于OP-TEE 實(shí)現(xiàn)虛擬機(jī)場景的TEE整體軟件框架
RISC-V機(jī)密計(jì)算
"機(jī)密計(jì)算"是一個(gè)商業(yè)用語,它旨在解決云計(jì)算場景下的可信計(jì)算問題。云服務(wù)提供商(CSP)主要提供云計(jì)算服務(wù),也就是向用戶出租算力,他們通常需要維護(hù)一組服務(wù)器作為專用或分時(shí)資源出租給用戶。
為了實(shí)現(xiàn)算力分配和管理的靈活性,租用給用戶的服務(wù)器通常通過虛擬機(jī)(VM)來呈現(xiàn),CSP利用虛擬化技術(shù)將物理服務(wù)器”切割“成細(xì)粒度的虛擬機(jī),這些虛擬機(jī)的資源可以通過Hypervisor(虛擬機(jī)管理器)靈活分配,并且虛擬機(jī)(VM)之間相互隔離,最終物理服務(wù)器的算力以虛擬機(jī)的方式呈現(xiàn)給用戶,CSP通過虛擬化技術(shù)實(shí)現(xiàn)了算力的”池化“,并且能做到算力的靈活分配和管理,提高了算力的利用率。
從虛擬化技術(shù)來看,Hypervisor需要被VM完全的信任,就像操作系統(tǒng)上運(yùn)行的應(yīng)用程序需要完全地信任操作系統(tǒng)內(nèi)核一樣。由于Hypervisor可以任意地訪問VM資源,而且Hypervisor的控制權(quán)是掌握在CSP手里,那就意味著CSP 必須被信任可以完全訪問客戶的 VM。然而,在傳統(tǒng)的云計(jì)算場景下,租戶和CSP之間存在如下的信任問題:
云租戶的工作負(fù)載(特別是包含客戶敏感數(shù)據(jù)的負(fù)載)可能被CSP訪問到
云租戶的敏感信息可能被泄露給其他租戶(由于軟件問題、錯誤配置或者其他漏洞);
云服務(wù)商和租戶可能有相互沖突的商業(yè)目的, 例如,Amazon 為多家零售公司提供云服務(wù),同時(shí)通過其在線市場與他們競爭
云服務(wù)商可能與租戶的商業(yè)目標(biāo)、國家安全目標(biāo)和隱私法規(guī)相沖突的法規(guī)下運(yùn)作
所以,為了實(shí)現(xiàn)真正的機(jī)密計(jì)算,使客戶能夠部署對隱私敏感的工作負(fù)載,機(jī)密計(jì)算的首要任務(wù)是要解決云租戶和CSP(云提供商)之間的信任問題。
實(shí)現(xiàn)云計(jì)算場景的機(jī)密計(jì)算,同樣可以采用TEE技術(shù)。相比于IoT TEE是將可信應(yīng)用部署到TEE環(huán)境,機(jī)密計(jì)算技術(shù)需要實(shí)現(xiàn)的是將可信虛擬機(jī)(或者叫機(jī)密虛擬機(jī))部署到TEE環(huán)境。
Deploying VM to TEE environment in Server Scenario
在云模型中,我們考慮以下參與者:
云服務(wù)提供商 (CSP) 運(yùn)營所有基礎(chǔ)設(shè)施,對所有機(jī)器具有物理訪問權(quán)限,并控制除可信固件之外的所有平臺軟件。
云客戶部署可能敏感的工作負(fù)載,以便在 CSP 托管的虛擬機(jī)中執(zhí)行。
Silicon Provider 是提供硬件和可信固件組件的可信實(shí)體。
Adversary 旨在破壞客戶工作負(fù)載的機(jī)密性、完整性和有限程度的可用性。
下圖是云場景機(jī)密計(jì)算的通用參考架構(gòu),主要說明了基于 VM 的機(jī)密計(jì)算中的常見組件。
普通 VM 之間可以通過共享內(nèi)存相互通信 。
普通 VM 與虛擬機(jī)管理程序通信 。
安全 VM 通常不允許由虛擬機(jī)管理程序訪問,而是由新的安全軟件層管理。該軟件層還可以監(jiān)督其他虛擬化功能,例如處理 hypercall 和中斷 。請注意,可能需要修改 VM 操作系統(tǒng) (OS) 以支持在此新環(huán)境中執(zhí)行。
最后,需要提供新的安全機(jī)制保護(hù)安全內(nèi)存區(qū)域,防止虛擬機(jī)管理程序直接訪問 。
The Reference Model of Deploying Secure VM to TEE environment
RISC-V Confidential Virtual Machine Extension (CoVE)
上述參考架構(gòu)需要解決的核心問題是解決REE和TEE之間的隔離問題。那RISC-V是否可以仍然利用PMP/IOPMP隔離組件實(shí)現(xiàn)TEE機(jī)密執(zhí)行環(huán)境呢?答案是不可以,原因是目前的PMP/IOPMP不符合虛擬機(jī)管理的用戶場景。
前面介紹的IoT TEE的執(zhí)行環(huán)境的資源通常是靜態(tài)分配的,這些資源主要包括物理內(nèi)存、MMIO以及外設(shè)等, 由于資源是靜態(tài)分配,內(nèi)存管理可以不依賴與操作系統(tǒng)按頁方式的頁式存儲管理,直接將安全內(nèi)存通過PMP靜態(tài)隔離,不納入操作系統(tǒng)管理。
TrustZone也是類似的方式,所以Arm也稱TrustZone為Static TrustZone (Armv9 CCA架構(gòu)也叫做Dynamic TrustZone)。
但是,虛擬化場景下的物理資源(物理內(nèi)存、MMIO等)并不是靜態(tài)劃分的,而是統(tǒng)一納入Hypervisor管理。由于Hypervisor (如Linux作為Type2 hypervisor) 通常通過MMU來實(shí)現(xiàn)頁式存儲管理,這意味著內(nèi)存管理的顆粒度至少需要達(dá)到按頁的力度(如4KB每頁)。
同時(shí),虛擬機(jī)資源的管理包括虛擬機(jī)的創(chuàng)建、銷毀都是Hypervisor負(fù)責(zé)的,那么通過PMP去實(shí)現(xiàn)內(nèi)存隔離的顆粒度也要滿足按頁的要求,這是PMP/ePMP無法滿足的,PMP/ePMP基于region的管理方式無法做到像MMU那樣的顆粒度和靈活度。
于是, RISC-V為了滿足機(jī)密計(jì)算的物理地址空間的隔離要求,實(shí)現(xiàn)了page顆粒度的物理內(nèi)存保護(hù),也就是Page-based PMP和Paged-based IOPMP, RISC-V稱之為SMMTT(Supervisor Domain Access Protection)擴(kuò)展。
它主要用于支持多租戶安全場景下的Supervisor Domain隔離,涵蓋機(jī)密計(jì)算、可信平臺服務(wù)、故障隔離等領(lǐng)域。smmtt通過對Supervisor Domain內(nèi)存的有效管理和訪問控制,實(shí)現(xiàn)不同安全域之間的隔離與保護(hù), 限制Hypervisor對機(jī)密虛擬機(jī)內(nèi)存的非法訪問。
在機(jī)密計(jì)算場景中,smmtt 確保一個(gè)租戶無法非法訪問其他租戶的內(nèi)存空間, 能防止不同租戶的機(jī)密數(shù)據(jù)相互泄露,增強(qiáng)了系統(tǒng)的安全性和穩(wěn)定性。
RISC-V SMMTT定義了通過硬件保證的可信計(jì)算基(TCB) 保護(hù)使用中數(shù)據(jù)的機(jī)密性和完整性以抵御軟件和硬件攻擊的機(jī)制。同時(shí), RISC-V 也定義了機(jī)密計(jì)算架構(gòu)的軟件規(guī)范,CoVE和CoVE-IO。
RISC-V CoVE和CoVE-IO,定義了基于 RISC-V 應(yīng)用處理器平臺上可擴(kuò)展的可信執(zhí)行環(huán)境的威脅模型、參考架構(gòu)和ABI接口規(guī)范,以支持機(jī)密計(jì)算場景。
CoVE的ABI規(guī)范主要定義了TCB 和非 TCB 組件之間的 ABI 的非 ISA 規(guī)范,此 ABI 使 OS/VMM 軟件能夠管理機(jī)密工作負(fù)載,同時(shí)將 OS/VMM 軟件、固件、開發(fā)人員和系統(tǒng)操作員置于 TCB 之外,并且也定義了 TCB 和工作負(fù)載組件之間的 ABI(例如 TEE VM)的相關(guān)非 ISA 規(guī)范。
RISC-V 機(jī)密計(jì)算參考架構(gòu)如下:
RISC-V TEE Reference Model in Server Scenario
以上便是RISC-V 架構(gòu)機(jī)密計(jì)算的主要輪廓。總結(jié)一下就是,RISC-V重新定義了基于頁表管理的物理地址保護(hù)組件(SMMTT, IOMTT包含在SMMTT規(guī)范中), 旨在滿足機(jī)密虛擬機(jī)場景的隔離要求。同時(shí), RISC-V也定義了機(jī)密計(jì)算可信執(zhí)行環(huán)境的威脅模型、參考架構(gòu)和ABI接口規(guī)范,以支持機(jī)密計(jì)算場景。
RISC-V TEE-IO (CoVE-IO)
但有的小伙伴可能會問,那RISC-V在機(jī)密計(jì)算場景下是如何管理安全外設(shè)(TEE-IO)的,因?yàn)闄C(jī)密虛擬機(jī)(租戶)往往需要將設(shè)備直通到虛擬機(jī)以提高I/O吞吐,而服務(wù)器下的I/O設(shè)備通常是PCIe設(shè)備,這些設(shè)備通常是可動態(tài)插拔的,機(jī)密虛機(jī)管理器是如何識別動態(tài)可插拔設(shè)備的安全性的呢?
早期的時(shí)候,設(shè)備的I/O虛擬化是基于軟件來實(shí)現(xiàn)的,也就是I/O設(shè)備不會直通到機(jī)密虛擬機(jī),因?yàn)楫?dāng)時(shí)還沒有完整的規(guī)范來定義TEE-IO設(shè)備,于是所有的IO設(shè)備被當(dāng)作Non TEE-IO掛在非安全Domain, 不受信任的虛擬機(jī)管理程序(VMM)使用由他管理的共享IO(不受信任)和半虛擬化設(shè)備接口將虛擬設(shè)備呈現(xiàn)給機(jī)密虛擬機(jī),機(jī)密虛擬機(jī)使用VirtIO的方式訪問虛擬設(shè)備, 比如Intel TDX 1.0就是這么干的。
基于軟件的 IO 模型很慢,因?yàn)?CVM和設(shè)備之間的通信是通過共享內(nèi)存(不受信任)完成的,這需要機(jī)密虛擬機(jī)在TEE domain內(nèi)運(yùn)行的應(yīng)用程序的私有緩沖區(qū)和設(shè)備使用的共享 IO 緩沖區(qū)之間來回復(fù)制和加密/解密數(shù)據(jù)。
因?yàn)楣蚕鞩O緩沖區(qū)是不受信任的,這就需要機(jī)密虛擬機(jī)在生產(chǎn)數(shù)據(jù)的時(shí)候?qū)?shù)據(jù)先加密之后Copy到共享緩沖區(qū);而在消費(fèi)數(shù)據(jù)的時(shí)候則需要先將數(shù)據(jù)解密之后再將數(shù)據(jù)Copy到CVM私有緩沖區(qū)。對于某些 IO 用例,例如網(wǎng)絡(luò)和存儲,這種IO方式與 通過IOMMU 實(shí)現(xiàn)設(shè)備直通的低延遲和高吞吐量相比,這種方法存在性能開銷問題。除了性能開銷之外,加密數(shù)據(jù)保護(hù)還不允許 TEE domain將計(jì)算卸載到傳統(tǒng)的 GPU 或 FPGA 加速器上。
IO Transactions with IO Virtualizations (VirtIO) in Server Scenario
TEE-IO 旨在從兩個(gè)方面改進(jìn) TEE 的 IO 虛擬化:
功能:TEE domain和設(shè)備無需使用共享緩沖區(qū)來存儲私有數(shù)據(jù),包括與設(shè)備建立安全傳輸級會話(通常使用專有協(xié)議來調(diào)整特定設(shè)備的數(shù)據(jù)處理和轉(zhuǎn)換需求)。
性能:消除在共享設(shè)備緩沖區(qū)和私有 TEE domain內(nèi)存之間來回復(fù)制加密或復(fù)制解密數(shù)據(jù)所需的額外資源和工作,從而大大提高工作負(fù)載性能(就帶寬和延遲而言)。
簡單來說,就是TEE-IO能夠建立IO設(shè)備和機(jī)密虛擬機(jī)之間的信任關(guān)系,從而將IO設(shè)備直通到機(jī)密虛擬機(jī)。
IO Transactions with IO Virtualizations (Passthrough) in Server Scenario
RISC-V 機(jī)密計(jì)算為了實(shí)現(xiàn)高性能I/O 操作,可信執(zhí)行環(huán)境虛擬機(jī) (TVM) 必須擴(kuò)展其信任邊界,包含分配TEE-I/O 設(shè)備的功能。如果沒有這種能力,TVM 就不得不使用半虛擬化 I/O,使用非機(jī)密內(nèi)存區(qū)域,這會因上面提到的內(nèi)存副本拷貝和加解密而影響性能,并且無法將密集計(jì)算卸載到加速卡。同時(shí)RISC-V CoVE-IO TG定義了 ABI 擴(kuò)展,為機(jī)密 VM 分配的設(shè)備提供對機(jī)密內(nèi)存以及 MMIO 和消息信號中斷 (MSI) 的安全直接訪問,從而消除對半虛擬化 I/O 的依賴。
RISC-V TEE-IO 依賴于以下擴(kuò)展和行業(yè)框架:
CPU:smmtt擴(kuò)展, 提供機(jī)密計(jì)算隔離環(huán)境
傳輸:使用 PCIe selective IDE 流進(jìn)行端到端數(shù)據(jù)保護(hù)
設(shè)備:允許 TEE domain 使用 SPDM、IDE 和 TDISP 等功能、行業(yè)協(xié)議將TEE 和 TCB擴(kuò)展到他們選擇信任的 TEE-IO 設(shè)備
RISC-V完整的TEE-IO軟硬件框架如下圖所示:
The Overview of RISC-V TEE-IO Architecture
結(jié)束語
我們既要銘記計(jì)算機(jī)之父圖靈“機(jī)器也許有一天能像人類一樣思考”的遠(yuǎn)見,也要直面愛德華·斯諾登(Edward Snowden)“隱私已死”的警示。正如著名的網(wǎng)絡(luò)安全專家 Bruce Schneier 所言:“Security is a process, not a product.”(安全是一個(gè)過程,而非一種產(chǎn)品), 唯有將安全的基因融入技術(shù)的每一處脈絡(luò), 方能在數(shù)字洪流中筑起可信的方舟。
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7663瀏覽量
90829 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7152瀏覽量
125621 -
RISC-V
+關(guān)注
關(guān)注
46文章
2573瀏覽量
48855
發(fā)布評論請先 登錄
什么是RISC-V
淺析RISC-V領(lǐng)先ARM的優(yōu)勢
risc-v的發(fā)展歷史
RISC-V MCU技術(shù)
為什么選擇RISC-V?
玄鐵VirtualZone:基于RISC-V架構(gòu)的安全擴(kuò)展
布局 RISC-V 領(lǐng)域,中國聯(lián)通加入中國 RISC-V 產(chǎn)業(yè)聯(lián)盟
目前RISC-V都支持哪些開發(fā)環(huán)境?
RISC-V規(guī)范的演進(jìn) RISC-V何時(shí)爆發(fā)?
RISC-V學(xué)習(xí)筆記【1】RISC-V概述
RISC-V芯片有哪些優(yōu)勢 淺談RISC-V安全性的未來
關(guān)于RISC-V你需要知道的大事兒

RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ)
加入全球 RISC-V Advocate 行列,共筑 RISC-V 的未來 !

評論