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