今天來看一個ARM中的新東西,機密計算架構(Confidential Compute Architecture,CCA)。CCA是ARM公司在2021年發布的,屬于Armv9-A的關鍵架構之一。有了機密計算,ARM稱將進入下一個安全處理的時代。
廢話不多說,直接進入正題。在Armv8-A中,劃分了四個異常等級,其中EL3始終是安全狀態,其它三個異常等級又分為安全狀態和非安全狀態。前面文章中重復了多次下圖。
隨著系統的不斷發展,這種架構出現一個問題,就是Hypervisor被賦予了太多的信任。一些系統資源,比如內存,是在特權軟件(Hypervisor)的管理之下,也就是說,特權軟件有訪問應用程序或虛擬機內存的權限,即使是在安全狀態。一旦特權軟件被攻擊或被惡意篡改,那么機密數據就會被盜取。設想一個場景,你租用了云服務平臺的資源,把重要信息放在了上面,此時如果云服務供應商有能力(并不是一定會)訪問你的機密信息,就問你擔不擔心?
當前的發展也正是如此,計算從終端向服務端轉移,并呈現為分布式。如何確保這些計算基礎設施是可以信賴的,如何保障放在基礎設施的數據的安全性和隱私性?
CCA要解決的就是這么一個事情。在CCA下,雖然特權軟件負責管理系統資源,但是特權軟件對某些資源的訪問依然會被阻止。這就像你家孩子的ipad,你可以限制使用時間,但是你不能訪問,因為孩子自己設置了密碼。
對于機密計算,ARM是這么說的,“Confidential Computing is the protection of data in use, by performing computation within a trustworthy hardware-backed secure environment. This protection shields code and data from observation or modification by privileged software and hardware agent. Any application or Operating System executing in a Confidential Computing environment can expect to execute in isolation from the rest of the system. Any data generated or consumed by the isolated execution cannot be observed by any other actor executing on that platform without explicit permission.”
CCA限制了虛擬機訪問其中使用的代碼,寄存器狀態和數據的權限。這種隔離是通過創建受保護的虛擬機執行空間來實現的,該空間稱為機密領域(Realm),為了不混淆,后文就用Realm表達了。CCA是一個硬件和軟件相結合的架構。
Realm可以由Normal world的主機動態分配。主機可以分配和管理資源配置。主機還可以管理調度Realm虛擬機。然而,主機不可以監控或修改Realm執行的指令。在主機控制下,Realm可以被創建并被銷毀。通過主機請求,可以增加或移除頁面,這與Hypervisor管理任何其它非機密虛擬機的操作方式類似。
World是由PE(Processing Element)的安全狀態和物理地址(PA)空間組成。PE執行時的安全狀態會決定PE能訪問哪種物理地址空間。在安全狀態下,PE可以訪問安全和非安全的物理地址空間,但是在非安全的狀態下,它只能訪問非安全的物理地址空間。Normal world一般用來指非安全的狀態和非安全的物理地址空間的組合,即non-secure。
CCA引入了兩個額外的World,分別是Realm world和Root world:
- Root world引入了Root安全狀態和Root物理地址空間。當PE運行在EL3時,處于Root安全狀態。Root PA與Secure PA是分開的。這是與Armv8-A TrustZone的主要區別,EL3代碼之前是沒有私有地址空間的,而是使用的Secure PA。Secure PA仍然用于S_EL2/1/0。
- Realm world與TrustZone的Secure world類似。Realm world包括Realm安全狀態和 Realm物理地址。Realm狀態代碼可以在R_EL2,R_EL1和R_EL0上執行。在Realm world中運行的控制固件可以訪問Normal world中的內存,支持共享緩沖。
PE復位以后進入Root world。Root world執行可行啟動,并可以切換到其它world。Realm world為虛擬機提供了一個與Normal world和Secure world隔離的執行環境。虛擬機需要Normal world中主機的控制。為能全面控制Realm創建和執行,CCA系統將提供:
- Realm Management Extension(RME):這是底層架構所要求的硬件擴展。RME是CCA的硬件架構
- Realm Management Monitor(RMM):這屬于固件軟件的一部分,用于按照Normal world 主機的請求來管理Realm的創建和執行。RMM是CCA的軟件架構
Realm虛擬機與可信操作系統(Trusted OS)或可信應用程序不同。Realm虛擬機是通過Normal world主機控制的。在創建和內存配置等方面,Realm虛擬機就像任何其它虛擬機一樣被主機所控制。Realm虛擬機執行和可信操作系統執行之間的區別在于Realm并沒有啟用任何物理中斷。所有Realm中斷都通過Hypervisor來進行虛擬化,然后通過傳給RMM的命令來傳送信號給Realm。這就意味著受到破壞的Hypervisor會阻止Realm虛擬機的執行,這樣一來,并不能保證Realm的執行。
Realm執行和內存訪問由負責控制的主機軟件進行初始化,例如Hypervisor。Realm并不一定要通過主機驗證。Realm可以繞過任何信任鏈,因為它可以使用RME初始化證明(attestation)。Realm能完全獨立于控制軟件。當Realm被主機初始化后,主機無法看見它的數據或數據內存。Realm和可信操作系統的主要區別在于Secure執行和Realm執行兩者設計目的不同。可信應用程序是應用于平臺的特定服務,這些服務通常由芯片供應商或者和原始設備制造商(OEM)提供,這些往往都是系統開發的參與者。而Realm執行的目的是允許一般開發者在系統上執行代碼時,無需涉及與計算系統開發者之間復雜的商業關系。
可信體現在機密性(Confidentiality)、完整性(Integrity)和真實性(Authenticity):
- 機密性,CCA環境的代碼數據或狀態不會被同一設備上運行的其它軟件所監視,即使這個軟件具有更高的特權
- 完整性,CCA環境的代碼數據或狀態無法被同一設備上運行的其它軟件所修改,即使這個軟件具有更高的特權
- 真實性,代碼或數據可被運行在同一設備上的其它軟件修改,但任何改動都能被識別
可信應用程序和可信操作系統為系統提供機密性、完整性和真實性。Realm執行可為系統提供機密性和完整性。
如前面所說,要支持CCA,需要從硬件架構和軟件架構兩方面入手。
在硬件方面,RME提供隔離機制,對內存管理,執行和Realm上下文和數據隔離進行控制。下圖中,隔離的Realm虛擬機在Normal world由Hypervisor生成并控制,但物理執行則在Realm world。Realm虛擬機的執行通過Hypervisor命令初始化,這些命令被傳達到Monitor,然后通過Monitor推送到RMM。
TrustZone安全擴展的具有兩個物理地址空間:
- Non-Secure物理地址空間
- Secure物理地址空間
RME增加了兩個物理地址空間:
- Realm物理地址空間
- Root物理地址空間
不同world的物理地址空間訪問由硬件強制執行,如下表。Root狀態可訪問所有物理地址空間。Root狀態允許內存在non-secure PA,Secure PA和Realm PA之間轉換。為確保這些針對所有world的隔離規則被強制執行,物理內存訪問控制由MMU強制執行。此一過程稱為“粒度保護檢查(Granule Protection Check,GPC)“。
粒度保護表(Granule Protection Table,GPT)描述了每個內存粒度的PAS分配信息。EL3中的Monitor可以動態更新GPT,支持物理內存在各個world間移動。任何違規訪問都會導致一種新的故障(fault),稱為“粒度保護故障(Granule Protection Fault,GPF)“。GPC的使能、GPT的內容和GPF的路由都受Root狀態的控制。
下圖顯示了虛擬地址到物理地址鏈中GPC的全部階段和位置。圖中,TTD是指地址轉換表描述符(Translation Table Descriptor),而GPTD指的是Granule Protection Table Descriptor:
Realm內運行的代碼將管理機密數據或運行機密算法。因此,這些代碼需要確保正在運行真正的CCA平臺。這些代碼還需要知道自己已經被正確地加載,沒有遭到篡改。此外,這些代碼還需要知道整個平臺或Realm并不處于可能導致機密泄露的調試狀態。建立這種信任的過程被稱為證明(Attestation)。
證明分成兩個關鍵部分:
- 平臺的證明
- Realm初始化狀態的證明
在平臺證明中,需要證明芯片和固件這些構成Realm的基礎部件是真實可靠的。這就要求硬件需要配置標識,以驗證身份。同樣,硬件需要支持關鍵固件映像的檢查,例如監視器、RMM和平臺中任何能影響安全性的控制器的固件。
為支持Realm虛擬機的隔離執行,需要實現一個Hypervisor和Realm虛擬機之間的通訊棧。RMM負責管理通信和上下文切換。但是RMM并不作策略決定,如將要運行哪種 Realm或給Realm分配多少內存。這些依然是由主機Hypervisor發出的命令。
RMM直接與Monitor對接,后者又與Secure world和Normal world對接。在EL3上運行的Monitor具有平臺特有的代碼,這些必須服務于系統的所有可信功能。RMM響應特定的接口,并將具有完全定義的功能來管理來自主機和監視器的請求。
SMC指令允許RMM、Hypervisor和SPM(Secure Partition Manager)將控制權交給Monitor將控制器交給 Monitor,支持在所有EL2軟件和Monitor之間實現的通道。下圖說明了Monitor和各個 world的不同控制軟件間的通道:
RMM是Realm world固件,用來管理Realm虛擬機的執行以及它們與Hypervisor的交互。RMM在Realm world的EL2運行,也就是R_EL2。
RMM在CCA系統中有兩個職責,一是為主機提供服務,使主機能夠管理Realm;二是RME直接向Realm提供服務。
主機服務可分為策略(Policy)和機制(Mechanics)兩方面。對于策略功能,RMM 對下列情況擁有決策權:
- 何時創建或銷毀Realm
- 何時為Realm增加或移除內存
- 何時調度Realm
RMM通過提供下列功能來支持主機的策略:
- 提供Realm頁表操作服務,用于創建或銷毀Realm,以及Realm 內存的添加或移除
- Realm上下文的管理,用于調度過程中的上下文保存和恢復。
- 中斷支持
- PSCI調用截獲,屬于功耗管理請求。RMM也向Realm提供服務,主要是證明和加密服務。
此外,RMM還支持以下針對Realm的安全性原語:
- RMM驗證主機的請求是否正確
- RMM實現Realm彼此間的隔離
RMM規范定義了兩個通信通道,允許所有功能在Normal world主機和Realm虛擬機之間進行請求和控制。從主機到RMM的通信信道被稱為Realm管理接口(Realm Management Interface,RMI)。RMM和Realm虛擬機之間信道稱為Realm服務接口(Realm Service Interface,RSI)。
RMI允許Hypervisor向RMM發出命令來管理Realm。RMI利用主機Hypervisor的 SMC調用來請求RMM的管理控制。RMI支持對Realm管理的控制,包括Realm的創建、填充、執行和銷毀。下圖顯示了在Normal world主機和RMM之間實現RMI的位置:
目前Armv9-A還沒有完全公開,等公開了再研究CCA的細節。
評論
查看更多