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