本文作者:玄翦 本文源自:晶片開放社群(OCC)
導語
随着網際網路和物聯網的快速發展,全球聯網裝置數量高速增長,“萬物互聯”成為全球網絡未來發展的重要方向。但移動平台業務繁榮的同時也催生了多樣化的安全問題,目前應用普遍存在被破解、資料被竊取篡改等安全風險,對金融資料安全、個人隐私資料保護、業務資料完整性等造成極大的威脅。
為了解決智能裝置、物聯網裝置所面臨的安全威脅,終端晶片通常需要提供可信執行環境(Trusted Execution Environment,TEE),確定晶片内的系統程式、終端參數、安全資料和使用者資料不被篡改或非法擷取。可信執行環境目前在移動、支付、DRM、汽車、無人機、物聯網等應用領域已基本經成為标配。目前較為成熟的處理器可信執行環境技術主要有ARM的TrustZone、Intel的SGX以及AMD的SEV等。
本文主要描述基于RISC-V架構的玄鐵C系列處理器的安全擴充,該擴充主要基于RISC-V架構提供的PMP保護機制和多層特權模型,虛拟出多個互相隔離的可執行域(Zone),進而實作了RISC-V架構上的可信執行環境(TEE),并保護Zone内的軟硬體資訊,包括軟體、記憶體、外設、I/O等免受其他Zone的非法通路。處理器資源包括Cache、中斷、記憶體、代碼執行等經過隔離之後,處理器将分時地運作在不同的Zone内,配合SoC其他的保護機制如IOPMP,共同建構一個基于軟硬體協同工作的安全系統。
RISC-V架構的安全拓展能力
目前傳統的RISC-V處理器并沒有提供類似ARM TrustZone的隔離技術。RISC-V處理器整體運作在REE(Rich Execution Environment)環境,如Figure 1所示。
但實際上,RISC-V技術提供了有兩種具備安全擴充能力的屬性:實體記憶體保護(PMP)和機器特權模式(M-mode)。PMP實體位址保護技術可以把處理器的通路空間劃分出任意大小的實體記憶體區域,不同的區域可以授予不同的通路權限,PMP功能可以将多個S模式的環境互相分離,我們将在下面的章節詳細闡述。ARM也定義了僅支援Cortex-M體系結中的PMP(ARM稱之為MPU)。第二種功能是機器模式,作為超級使用者特權模式的安全監視層(類似ARM上的Monitor模式)。M模式可用于管理多個S模式環境的執行,并能攔截來自任何S/U模式環境的中斷和異常。有了PMP和M-mode, 這就意味着:S-mode模式環境可以互相隔離以及S-Mode模式環境可以通過更高層的特權來管理。
玄鐵C系列處理器的安全拓展
雖然RISC-V架構的處理器具備實體記憶體保護、多層權限模型、記憶體管理單元等技術來支援可信執行環境功能的實作,但處理器仍然需要支援其他安全規範才能建立完全可用的安全執行環境。為了滿足TEE(Trusted Execution Environment)的隔離要求,玄鐵C系列處理器在RISC-V架構基礎上進行了安全擴充。 該系列處理器在軟體的協調下可以虛拟出多個執行域(Zone),每個Zone增加了域辨別,也就是Zone ID,整體架構如Figure 2所示。每個Zone可以獨立地運作各自的作業系統以及基于該作業系統的應用程式。作業系統運作在超級使用者特權模式,應用程式運作在普通使用者特權模式。處理器根據需要在不同的Zone裡切換運作。當處理器切換到某一Zone運作時,他将實時占用整個實體核,并且處理器的域辨別也将同時被更新成相應執行域的辨別。Zone的切換由運作在最高模式(機器模式)下的可信固件(TF)來完成。
Zone之間通路隔離通過PMP(Physical Memory Protection)實時切換來實作,PMP是RISC-V特權ISA的一部分,用于隔離機器模式和超級使用者模式/普通使用者模式之間的實體位址通路,玄鐵處理器的L1/L2 Cache同時也受PMP保護。
Physical Memory Protection (PMP)
RISC-V架構提供了一種PMP實體記憶體保護機制,用于隔離M模式與S/U模式下的記憶體通路。隻有M模式才有權限配置PMP。PMP包含幾組(通常是8到16個)位址寄存器以及相應的配置寄存器,這些配置寄存器可以授予或拒絕S/U模式的讀、寫和執行權限。PMP同時也能保護記憶體映射I/O (MMIO),M模式可信固件可以通過配置PMP來限制處理器對外設I/O的通路。
當硬體線程從一個Zone切換到另一個Zone時,PMP配置同時也需要切換。M模式可信固件需要先儲存目前Zone的PMP配置,然後載入下一個即将切換的Zone的PMP配置,完成對記憶體和記憶體映射I/O (MMIO)通路權限的切換。
當多個Zone需要共享記憶體時,可以将需要共同通路的記憶體區域的通路權限同時授予給多個Zone,也就是将該塊記憶體的允許通路權限寫到每個Zone的PMP配置表裡,PMP表會在Zone切換時由可信固件進行更新。Figure 3是一個典型的多個Zone的PMP配置圖, SHM區域是Zone間允許共同通路的共享記憶體區域。
機器模式可以通過PMP的鎖定功能将機器模式的通路限制在有限的區域内,比如隻允許機器模式通路、執行劃分給可信固件的記憶體區域,以減少受到對機器模式攻擊的影響,也就是Supervisor Memory Access Prevention(SMAP)和Supervisor Memory Execution Prevention(SMEP),進而增加對關鍵資訊的保護。
IOPMP
RISC-V架構提供了一種PMP實體記憶體保護機制,用于保護RISC-V處理器在不同特權模式下的對記憶體和MMIO的通路。
總線上的其他主裝置同樣需要對記憶體的通路進行保護,也就是外設需要增加IOPMP。IOPMP可以像PMP一樣定義通路權限,他會檢查從總線或者主裝置過來的讀、寫傳輸是否符合權限通路規則,隻有合法的讀、寫請求才能進一步傳輸到目标裝置上。通常有3種方法來連接配接IOPMP:
- 請求端連接配接IOPMP
在每個主裝置和總線之間增加一個IOPMP,類似RISC-V的PMP。不同的主裝置需要分别新增一個IOPMP,IOPMP之間互相獨立。這種設計較為簡單,也提供了靈活性,但IOPMP不能在主裝置之間共享。如下圖所示:
- 目标端連接配接IOPMP
目标端的IOPMP需要對不同主裝置發來的傳輸進行區分,這就需要每個主裝置的通路請求都要附帶額外的Master ID。如下圖所示:
- 請求端和目标端級聯IOPMP
在複雜的SoC系統中,往往存在IOPMP級聯的使用情況。典型的場景就是RISC-Cores自身帶有PMP,處理器并不需要目标端的IOPMP再次對他的通路進行過濾。通用的處理方法是,在IOPMP的表項裡取消對CPU通路的限制,但缺點是這會占用IOPMP表項,也會影響效率。為了提高IOPMP級聯下的通路效率,IOPMP需要提供一種機制來直通部分主裝置的通路,比如提供可配置的以直通模式通路的主裝置清單。
下圖是玄鐵處理器采用PMP、IOPMP來建構安全SoC的系統參考框圖:
總結
本文詳細介紹了RISC-V架構在實作TEE可信執行環境上所有具備的安全能力。平頭哥玄鐵處理器在RISC-V架構的實體記憶體保護、多層權限模型、記憶體管理單元等技術的基礎上,對部分安全特性進行了擴充,實作了基于Zone管理的可信執行環境。該技術方案不需要虛拟化的支援,隻需要在支援U、S 和 M 三種特權模式的情況下,并在可信固件的管理下,實作了具備多個可信執行環境的能力。
當不同Zone之間需要切換時,運作在機器模式的可信固件需要對Zone的上下文進行儲存和切換。雖然看起來這會帶來開銷,但像ARM TrustZone的虛拟化技術同樣需要對世界進行切換,這部分切換的工作同樣被隐藏在Monitor的可信固件中。不同的是,ARM TrustZone隻虛拟出了2個世界,而玄鐵RISC-V處理器在安全擴充之後,最多允許同時支援16個Zone,這為以後的軟體安全方案提供了更多的可能。