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