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