玄鐵 RISC-V 軟硬件技術(shù)深度解讀系列,將從 AI、高性能計(jì)算、安全和邊緣計(jì)算等多個(gè)方向,全面介紹玄鐵 RISC-V 軟硬件技術(shù)實(shí)現(xiàn)。本周我們將帶來 RISC-V 安全機(jī)制相關(guān)技術(shù)分享。
趙思齊
阿里巴巴達(dá)摩院 高級(jí)技術(shù)專家
RVI Technical Steering Committee(TSC) 成員,擔(dān)任 Memory Tagging TG 的 Vice Chair、Unified Discovery TG 的 Chair 及 Scalar Efficiency SIG 的 Vice Chair,RISC-V IOMMU Spec 貢獻(xiàn)者。
引言
“I have witnessed their capacity for courage,
and though we are worlds apart,
like us, there's more to them than meets the eye.
……”
“我親眼見證了他們的勇敢無畏,
盡管我們來自不同的世界,
跟我們一樣,他們遠(yuǎn)不是表面所看到的那樣。
……”
2007年上映的電影《變形金剛》片尾,擎天柱面對(duì)宇宙繁星發(fā)出了這么一番獨(dú)白。之所以引用這段話是因?yàn)槔锩孢@句“ more than meets the eye ”,在某種程度上可以用來描述現(xiàn)實(shí)世界的方方面面,包括本文想要探討的安全問題。“ More than meets the eye ”想要表達(dá)的意思很簡(jiǎn)單:“事物并不是看上去那樣”,筆者同樣也認(rèn)為,不是只有能看得到的事情才會(huì)發(fā)生,看不見的事情,也在發(fā)生。
什么看不見的事情正在發(fā)生?
比如對(duì)暴露在公網(wǎng)上的計(jì)算機(jī)端口無時(shí)無刻都在進(jìn)行的端口掃描、弱密碼登錄試探,偶爾登上頭條的加密貨幣交易所被攻破的新聞,對(duì)各種服務(wù)平臺(tái)的用戶信息的搜集、交叉引用,對(duì)各種互聯(lián)網(wǎng)平臺(tái)的數(shù)據(jù)庫的整體竊取、倒賣,如此等等。
計(jì)算機(jī)系統(tǒng)的安全問題一直存在,悄無聲息,普羅大眾無從知曉又無所適從。如果你將自家的某臺(tái)電腦暴露在公網(wǎng)上,查看下系統(tǒng) log,那么大概率你會(huì)發(fā)現(xiàn)時(shí)不時(shí)會(huì)有那么幾條連續(xù)不斷的失敗登錄請(qǐng)求。對(duì),你被攻擊了。筆者印象里曾經(jīng)有安全研究人員做過實(shí)驗(yàn),將一臺(tái)沒有安裝任何防護(hù)軟件的電腦直接暴露在公網(wǎng)上,從放上去開始到這臺(tái)電腦被成功入侵的平均時(shí)間只有幾十分鐘。
所有這些簡(jiǎn)單的現(xiàn)象表明,安全問題是真實(shí)存在的。世界并不是所有人想象的、希望的和認(rèn)為的那么遵守規(guī)矩和法則,陽光普照的世界總會(huì)有陰暗的地方。
“There's more than meets the eye.”
01 系統(tǒng)安全機(jī)制
既然有了問題,那么不得不防。計(jì)算機(jī)安全這個(gè)話題涉及的范圍甚廣,本文的篇幅內(nèi)無法面面俱到。本文希望基于 RISC-V 架構(gòu),介紹 RISC-V 架構(gòu)面向安全問題所做的針對(duì)性設(shè)計(jì)。這些設(shè)計(jì)是在系統(tǒng)架構(gòu)設(shè)計(jì)內(nèi)面對(duì)一部分特定安全問題作出的應(yīng)對(duì),并不能解決所有的安全問題;完整的安全架構(gòu)通常需要縱深防御,defence-in-depth,需要系統(tǒng)全面的共同抵御。本文將主要介紹 RISC-V 內(nèi)相比其他架構(gòu)更為獨(dú)特的設(shè)計(jì),一些基礎(chǔ)的安全保護(hù)功能比如特權(quán)級(jí)和 MMU 這里不做贅述。
此處需要特別指出的是中文的“安全”有兩個(gè)相關(guān)的英文詞匯。英文文獻(xiàn)內(nèi)有兩個(gè)概念 Safety 和 Security,通常翻譯成中文都是“安全”。但是兩者的含義不同,前者指在自然發(fā)生的錯(cuò)誤、事故情況下,保證正確的功能性。后者指在人為惡意制造的錯(cuò)誤、事故前提下,保證正確的功能性;后者對(duì)系統(tǒng)設(shè)計(jì)的要求更高,可以通過 ECC 碼的例子來區(qū)分兩者。ECC 碼是一種 Safety 機(jī)制但不是 Security 機(jī)制,因?yàn)樗梢灶A(yù)防自然發(fā)生的比如宇宙射線引起的數(shù)據(jù)錯(cuò)誤,但是無法預(yù)防人為制造 ECC 碼,使系統(tǒng)采用被篡改但是同時(shí)被 ECC 覆蓋的數(shù)據(jù)的攻擊。
本文將介紹 RISC-V 架構(gòu)的針對(duì)性安全功能,將主要圍繞如下三個(gè)關(guān)鍵的安全問題展開:
1. 針對(duì)固件的代碼和數(shù)據(jù)的隔離:確保系統(tǒng)內(nèi)的固件代碼和數(shù)據(jù)具有嚴(yán)格的訪問權(quán)限,防止未經(jīng)授權(quán)的訪問或篡改。
2. Return-Oriented Programming (ROP)攻擊:通過防御機(jī)制抑制此類基于控制流劫持的攻擊手段,提升系統(tǒng)的抗攻擊能力。
3. 機(jī)密計(jì)算:提供硬件支持的隔離與保護(hù)技術(shù),保障敏感數(shù)據(jù)和計(jì)算過程的隱私與安全。
第一個(gè)問題之所以存在,更多源于 RISC-V 架構(gòu)本身的設(shè)計(jì)。RISC-V 的 M 模式雖然擁有更高的特權(quán)等級(jí),但由于缺少 MMU(內(nèi)存管理單元)的支持,如何保護(hù) M 模式自身的代碼和數(shù)據(jù)便成了一個(gè)亟待解決的難題。為應(yīng)對(duì)此挑戰(zhàn),RISC-V 引入了 PMP(物理內(nèi)存保護(hù))機(jī)制,并進(jìn)一步擴(kuò)展為 EPMP(擴(kuò)展物理內(nèi)存保護(hù)),以實(shí)現(xiàn)對(duì) M 模式資源的有效保護(hù)。
討論第二個(gè)問題前,有必要先介紹更多的背景。ROP 之所以流行,源于一種早期流行攻擊方式被硬件引入的不可執(zhí)行頁機(jī)制所抑制。更早期的黑客面對(duì)的世界更簡(jiǎn)單,通常只需要構(gòu)造一些指令,并通過漏洞將這些指令的二進(jìn)制寫到被攻擊機(jī)器的某個(gè)地址,再設(shè)法通過 jump 指令跳轉(zhuǎn)到這些代碼執(zhí)行,從而達(dá)到能夠執(zhí)行任意指令的目的。
為了防御此類攻擊,DEP(Data Execution Prevention,數(shù)據(jù)執(zhí)行預(yù)防)和“ W XOR X ”的頁映射策略被引入。這些機(jī)制的核心思想是將數(shù)據(jù)存儲(chǔ)的內(nèi)存頁標(biāo)記為不可執(zhí)行,從而使得寫入的數(shù)據(jù)無法被 CPU 直接執(zhí)行。這一防御策略大幅降低了傳統(tǒng)代碼注入攻擊的成功率。
但是后來的黑客找到了不注入代碼的攻擊方法 —— 代碼復(fù)用攻擊(code reuse attack)。這種攻擊僅僅利用被攻擊的機(jī)器上已有的代碼,通過精心設(shè)計(jì)的跳轉(zhuǎn)方法,將這些已有的代碼塊串起來以完成攻擊意圖。其中,ROP 是這類攻擊中最著名的一種。ROP 攻擊通過在棧上注入的一連串返回地址,跳轉(zhuǎn)到預(yù)先選定的代碼片段(稱為“ Gadget ”)中。每段 Gadget 通常以 ‘return’ 指令結(jié)束,執(zhí)行完成后,return 指令會(huì)從棧上取出下一段的地址并跳轉(zhuǎn)。如此一來,攻擊者能夠靈活地串聯(lián)多個(gè) gadget,實(shí)現(xiàn)復(fù)雜的攻擊行為。
為了抵御 ROP 攻擊,需要在代碼執(zhí)行過程中提供的保證被稱作“控制流完整性” (Control Flow Integrity, CFI)。也就是說,代碼真正執(zhí)行的控制流要符合某種事先規(guī)定好的控制流,而不能任意跳轉(zhuǎn)。需要特別注意的是,理論上完美的控制流完整性需要的代價(jià)相當(dāng)昂貴,現(xiàn)有硬件架構(gòu)內(nèi)的CFI機(jī)制都是對(duì)完美 CFI 的一種近似實(shí)現(xiàn)。
針對(duì) ROP 攻擊,RISC-V 架構(gòu)提出了影子棧(Shadow Stack)擴(kuò)展,作為一種專門設(shè)計(jì)的 CFI 防御機(jī)制。
第三個(gè)問題是云服務(wù)的流行,特別是公有云的流行帶來的。在公有云的架構(gòu)中,云服務(wù)商對(duì)所有租戶的虛擬機(jī)具有完全的訪問權(quán)限。這里的權(quán)限指的是技術(shù)上可能的權(quán)限,法規(guī)上可能禁止這些訪問,但是在技術(shù)上依舊是可行的。既然在技術(shù)上可行,那么租戶的數(shù)據(jù)依舊可能被無意的訪問到。雖然云服務(wù)商并沒有主觀去訪問這些數(shù)據(jù)的意圖,但事故總會(huì)發(fā)生。這對(duì)處理敏感數(shù)據(jù)的業(yè)務(wù),比如政務(wù)、財(cái)務(wù)、醫(yī)療等,始終是一種擔(dān)憂。
機(jī)密計(jì)算旨在解決這個(gè)問題。機(jī)密計(jì)算提供一系列的硬件擴(kuò)展,將本來存在于低特權(quán)級(jí)的租戶數(shù)據(jù)進(jìn)行隔離或者加密,使得云服務(wù)商無法觸碰到租戶的敏感數(shù)據(jù)。租戶不再需要同時(shí)信任云服務(wù)商和云硬件提供商,而只需要信任后者,從而顯著提升數(shù)據(jù)的安全性。
RISC-V 為機(jī)密計(jì)算提供了多項(xiàng)關(guān)鍵擴(kuò)展,包括:
- CoVE(Confidential VM Extension,機(jī)密虛擬機(jī)擴(kuò)展)
- MTT(Memory Tracking Table,內(nèi)存跟蹤表,暫定名)擴(kuò)展
- IO-MTT(Input/Output Memory Tracking Table,輸入輸出內(nèi)存跟蹤表,暫定名)擴(kuò)展
這些擴(kuò)展共同為 RISC-V 架構(gòu)的機(jī)密計(jì)算定義了明確的 ABI(應(yīng)用二進(jìn)制接口)和硬件基礎(chǔ)。
需要特別指出的是,機(jī)密計(jì)算的概念和常見的源自 Arm 的 TEE 概念所面對(duì)的使用場(chǎng)景和系統(tǒng)設(shè)計(jì)完全不同。兩者關(guān)系類似蘋果和梨,不能直接對(duì)比。有 TEE 背景的讀者需要先忘記已有的經(jīng)驗(yàn),重新理解。
02 RISC-V 的安全機(jī)制
在介紹完 RISC-V 的安全系統(tǒng)后,我們進(jìn)一步探討 RISC-V 安全機(jī)制的實(shí)現(xiàn)。針對(duì)上述三個(gè)問題,RISC-V 是如何解決這些問題的,以提供安全基座。以下將介紹 RISC-V 架構(gòu)中用到的不同安全機(jī)制。
1. 對(duì)來自 CPU 的數(shù)據(jù)訪問進(jìn)行授權(quán):PMP 和 ePMP
1.1 物理內(nèi)存保護(hù)(PMP,Physical Memory Protection)
PMP 機(jī)制使用訪問權(quán)限(讀取、寫入、執(zhí)行)來限制對(duì)物理內(nèi)存區(qū)域的訪問。這種機(jī)制允許對(duì)小至4字節(jié)的區(qū)域進(jìn)行細(xì)粒度的訪問控制。通過這種方式,PMP 能夠提供更加安全和精確的內(nèi)存保護(hù),防止未授權(quán)的訪問或操作,確保系統(tǒng)的穩(wěn)定性和安全性。
PMP 檢查在指令獲取、數(shù)據(jù)訪問以及頁表訪問時(shí)對(duì)運(yùn)行在 S 模式或 U 模式下的軟件強(qiáng)制執(zhí)行。此外 PMP 還提供可選功能,可以擴(kuò)展到對(duì) M 模式的內(nèi)存訪問進(jìn)行監(jiān)控。
PMP 的配置是通過 PMP CSR 寄存器來實(shí)現(xiàn)的,這些寄存器保存了區(qū)域的地址、大小、允許的權(quán)限(讀取、寫入、執(zhí)行),以及一個(gè)鎖定位(lock bit)。鎖定位可以用來禁止對(duì)該 PMP 配置進(jìn)行進(jìn)一步的更改,一旦設(shè)置了鎖定位,相應(yīng)的 PMP 規(guī)則就不能再被修改,直到系統(tǒng)復(fù)位或者該鎖定位被清除。這種機(jī)制提供了靈活且強(qiáng)大的內(nèi)存保護(hù)能力,確保不同特權(quán)級(jí)別的代碼只能按照預(yù)設(shè)的安全策略訪問特定的內(nèi)存區(qū)域。
1.2 增強(qiáng)型物理內(nèi)存保護(hù)(ePMP,Enhanced Physical Memory Protection)
通過 PMP 無法實(shí)現(xiàn)僅對(duì)非機(jī)器模式強(qiáng)制執(zhí)行規(guī)則,而同時(shí)禁止對(duì)機(jī)器模式訪問內(nèi)存區(qū)域的規(guī)定。即只能擁有對(duì)所有模式都生效的鎖定規(guī)則,或者只對(duì)非機(jī)器模式生效、而被機(jī)器模式忽略的規(guī)則。因此,對(duì)于任何沒有用鎖定規(guī)則保護(hù)的物理內(nèi)存區(qū)域,機(jī)器模式具有無限訪問權(quán)限,包括執(zhí)行能力。為了彌補(bǔ)這一差距,Smepmp 標(biāo)準(zhǔn)(Smepmp 是 ePMP 在 RISC-V 規(guī)范中被分配的專有名稱)于 2021 年得到 RVI 批準(zhǔn)。
ePMP 引入了一種覆蓋 PMP 規(guī)則鎖定機(jī)制的方法。可以在 PMP 重置后進(jìn)行鎖定,并且可以通過設(shè)置 ePMP CSR 中的一個(gè)位來阻止鎖定(以確定 PMP 的行為)。此外,ePMP 引入了一種機(jī)制,可以僅對(duì) M 模式或僅對(duì) S/U 模式強(qiáng)制執(zhí)行 PMP 規(guī)則。ePMP 允許建立增強(qiáng)的 PMP 規(guī)則,防止 M 模式訪問來自 S/U 模式代碼的資源。這一機(jī)制有效減少了在 M 模式代碼中出現(xiàn)特權(quán)升級(jí)漏洞可能帶來的攻擊。類似的機(jī)制在 x86 架構(gòu)內(nèi)被稱作 SMEP(Supervisor Mode Execution Protection)和 SMAP(Supervisor Mode Access Prevention),通過設(shè)置 CR4 控制寄存器完成。不同的是 x86 上的這兩種機(jī)制是針對(duì)內(nèi)核態(tài)的保護(hù)設(shè)置的。從安全設(shè)計(jì)的角度來看,這些機(jī)制的相同點(diǎn)是都可能存在類似的漏洞,利用高特權(quán)級(jí)的代碼來幫助低特權(quán)級(jí)的攻擊者訪問到攻擊者本不應(yīng)該訪問到的數(shù)據(jù)或者代碼。只是具體的特權(quán)態(tài)不同。一組可能的 ePMP 規(guī)則可以包括:
- 一個(gè)內(nèi)存區(qū)域,僅在 M 模式下可訪問(可讀和可執(zhí)行),用于固件代碼。
一個(gè)內(nèi)存區(qū)域,僅在 M 模式下可訪問(可讀和可寫),用于固件數(shù)據(jù)。
- 一個(gè)內(nèi)存區(qū)域,在 S/U 模式下可訪問(可讀、可寫和可執(zhí)行),用于操作系統(tǒng)在 S 模式下的進(jìn)一步資源管理。然后,操作系統(tǒng)可以使用 MMU(內(nèi)存管理單元)來進(jìn)一步限制對(duì)此內(nèi)存區(qū)域的訪問。
2. 防護(hù)來自外設(shè)的 DMA 攻擊:IOMMURISC-V 的 MMU 通過定義一組頁表來映射虛擬地址到物理內(nèi)存中的地址,從而連接 CPU 到系統(tǒng)內(nèi)存。IOMMU 擴(kuò)展提供了相應(yīng)的機(jī)制,用于將 DMA 設(shè)備連接到系統(tǒng)內(nèi)存。IOMMU 的加入可以有效防止利用設(shè)備 DMA 發(fā)起的對(duì)非授權(quán)數(shù)據(jù)的訪問,比如著名的利用早期蘋果電腦上具有 DMA 能力的火線(Firewire 或者 IEEE1394)外設(shè)進(jìn)行攻擊的案例。這類攻擊被簡(jiǎn)單的稱作 DMA Attack。3. 防護(hù) ROP 攻擊:影子棧擴(kuò)展(Shadow Stack Extension)
影子棧擴(kuò)展引入了一種新的頁面類型,即影子棧(Shadow Stack,SS)頁面。這種頁面不能通過普通的加載/存儲(chǔ)指令訪問,而是指定了兩條指令 —— sspush 和 sspop:
sspush: 將值壓入影子棧。
- sspop: 從影子棧彈出最后壓入的值。
軟件可以利用這一機(jī)制將返回地址推入影子棧,并在函數(shù)返回時(shí)讀回該值并與正常棧上的值進(jìn)行比較。這使得能夠識(shí)別棧上可能被篡改的返回地址。
除了 sspush 和 sspop 之外,規(guī)范還指定了 ssamoswap 指令,用于在監(jiān)督模式下交換當(dāng)前的影子棧指針,以支持上下文切換。
4.S模式物理內(nèi)存保護(hù)(SPMP)SPMP 機(jī)制與 ePMP 機(jī)制類似,但允許 S 模式管理 U 模式對(duì)物理內(nèi)存的訪問限制。這在沒有 MMU 的情景中特別有用,其中需要隔離 S 模式代碼和 U 模式代碼。
5. 機(jī)密計(jì)算相關(guān)的擴(kuò)展
5.1 監(jiān)督域訪問保護(hù)(Smmtt)
Smmtt 擴(kuò)展定義了多個(gè)擴(kuò)展,以有效管理多租戶系統(tǒng)中的多個(gè)監(jiān)督域。根域安全管理器(RDSM)可以利用 PMP、ePMP 和/或 IO-PMP 來隔離不同監(jiān)督域之間的物理內(nèi)存。Smmtt 還支持基于 RISC-V 虛擬化擴(kuò)展的虛擬化監(jiān)督域。
Smmtt 的各個(gè)子擴(kuò)展分別是:
- Smsdid:用于切換 hart 正在運(yùn)行的活動(dòng)監(jiān)督域的擴(kuò)展。
- Smmpt:用于設(shè)置與監(jiān)督域相關(guān)聯(lián)的訪問權(quán)限的擴(kuò)展。
- IO-MPT:指定由 IOMMU 和與該監(jiān)督域關(guān)聯(lián)的設(shè)備執(zhí)行的內(nèi)存訪問控制機(jī)制的擴(kuò)展。
- Smsdia:?jiǎn)⒂?IMSIC 中斷文件或 APLIC 域分配給監(jiān)督域的擴(kuò)展。
- Smsdedbg:指定監(jiān)督域調(diào)試設(shè)置的擴(kuò)展。
- Smsdetrc:指定監(jiān)督域跟蹤設(shè)置的擴(kuò)展。
- Smsqosid:指定監(jiān)督域 QoS 設(shè)置的擴(kuò)展。
5.2 AP-TEE / CoVE
RISC-V 機(jī)密虛擬機(jī)擴(kuò)展(CoVE)是一個(gè)非 ISA 擴(kuò)展,它定義了 RISC-V 的抽象可信執(zhí)行環(huán)境(TEE)架構(gòu),包括相關(guān)的軟件組件及其職責(zé)。此外,還指定了 SBI 擴(kuò)展,允許多個(gè)軟件組件之間進(jìn)行交互。
CoVE 的關(guān)鍵組件是 TEE 安全管理器(TSM),其在 HS 模式下運(yùn)行,并管理 S 和 U 模式中的可信代碼(即可信虛擬機(jī)或 TVM)。TVM 可以使用 COVG-ABI 與 TSM 交互。第二個(gè)接口,COVEH-ABI,允許非可信主機(jī)操作系統(tǒng)與 TSM 交互。這兩個(gè)接口都是基于 RISC-V SBI 規(guī)范構(gòu)建的。由于 TSM 在 HS 模式下運(yùn)行,因此需要在 M 模式下有一個(gè) TSM 驅(qū)動(dòng)程序來委托請(qǐng)求給 TSM。
CoVE 并不定義一個(gè)嚴(yán)格的架構(gòu),而是足夠靈活,可以擴(kuò)展到從簡(jiǎn)單的嵌入式系統(tǒng)到多租戶數(shù)據(jù)中心解決方案。這意味著,無論解決方案如何,所有與安全相關(guān)的 SBI 調(diào)用都已經(jīng)由支持 CoVE 的組件指定并支持。
測(cè)量(提供表示 TVM 狀態(tài)的哈希值)和(遠(yuǎn)程)證明是可信應(yīng)用程序的常見用例。因此,CoVE 也定義了實(shí)現(xiàn)這些用例的 ABIs。
結(jié)語
RISC-V 通過引入多層次、多維度的安全機(jī)制,為計(jì)算服務(wù)提供了強(qiáng)有力的安全保障。從基礎(chǔ)的物理內(nèi)存保護(hù)(如 ePMP 和 SPMP )到針對(duì)多租戶環(huán)境的監(jiān)督域訪問保護(hù)(Smmtt),再到支持可信執(zhí)行環(huán)境的 CoVE 擴(kuò)展,這些機(jī)制體現(xiàn)了 RISC-V 架構(gòu)在性能與安全性上的深度融合與靈活性。無論是在嵌入式設(shè)備還是云端數(shù)據(jù)中心,這些安全特性均可因地制宜地部署,滿足多樣化的應(yīng)用需求,為構(gòu)建更安全的計(jì)算生態(tài)打下堅(jiān)實(shí)基礎(chǔ)。
正如我們?cè)谟钪娣毙侵袑ふ掖鸢福琑ISC-V 的安全設(shè)計(jì)也提醒我們,看不見的威脅正在發(fā)生,而只有 “more than meets the eye” 的技術(shù)創(chuàng)新,才能讓計(jì)算的世界更加安全與可靠。
-
安全機(jī)制
+關(guān)注
關(guān)注
0文章
21瀏覽量
10267 -
架構(gòu)設(shè)計(jì)
+關(guān)注
關(guān)注
0文章
32瀏覽量
6961 -
RISC-V
+關(guān)注
關(guān)注
45文章
2300瀏覽量
46254
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論