ARM系列 -- 机密计算
文摘
2023-04-30 21:00
北京
今天来看一个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安全扩展的具有两个物理地址空间:
不同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的基础部件是真实可靠的。这就要求硬件需要配置标识,以验证身份。同样,硬件需要支持关键固件映像的检查,例如监视器、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 内存的添加或移除
- Realm上下文的管理,用于调度过程中的上下文保存和恢复。
- PSCI调用截获,属于功耗管理请求。RMM也向Realm提供服务,主要是证明和加密服务。
此外,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的位置:
RSI为外部服务提供了一个通道,一些Realm管理操作需要从RMM传给Realm。这些服务可以包括加密服务和证明。RSI还为从Realm虚拟机到RMM的内存管理请求提供了通道。下图显示了RSI在RMM和每个独立的Real虚拟机之间的位置:
目前Armv9-A还没有完全公开,等公开了再研究CCA的细节。