TrustZone与Hypervisor的区别

4

我正在阅读ARM关于TrustZone的文档this document,但是有些内容不太清楚。

虚拟机监控程序(Hypervisor)提供了特殊的CPU模式,而对于TrustZone,处理器额外增加了一个 33位 :难道模式不也是特定的位设置吗?那么额外的一位如何在安全方面产生区别呢?我确实理解这个额外的位为两个独立的32位地址空间腾出位置,但除此之外我无法将它与其他信息联系起来。有人能清楚地解释TrustZone为什么比虚拟机监控程序更安全吗?

2个回答

6
一个典型的虚拟机监控器仅限于CPU。它不能防止其他DMA主设备的攻击。有关此内容,请参见维基百科 DMA Attack网页。其他攻击,例如Cold boot,需要其他机制,如 zeroizable memory来防止利用。也就是说,TrustZone不是一个完全的安全解决方案,但它是其中很大一部分。由于ARM只是一个CPU,因此控制其他BUS Masters的机制未指定。除了DMA Masters之外,其他CPU也对内存分区构成威胁。为了解决这个问题,一些辅助CPU具有TrustZone感知能力。即,它们将始终使用NS位(第33位)标记事务。
相比之下,虚拟机监控程序通常不限于两个“世界”。虚拟机监控程序可以托管任意数量的操作系统。而TrustZone仅有两个“世界”:安全和普通。尽管每个“世界”都可以有一个控制性的监督者操作系统,并具有许多独立的线程任务进程,根据操作系统的允许。 DMA攻击解释:与硬件位相比,虚拟机监控程序通常使用CPU的MMU来限制软件访问。这并不能防止其他总线主机获取内存。如果虚拟机监控程序受限制的软件可以控制一个单独的总线主机,那么它们就可以获取要保护的内存。DMA使用物理地址,绕过MMU,因此一般的虚拟机监控程序保护无效。 DMA攻击 通过使用CPU外部的东西来访问内存,从而规避了CPU保护。但是,TrustZone的保护不在CPU中,而在总线控制器中。参见: NIC301 的示例 ARM TrustZone CPU 只允许CPU支持四种模式; 安全监管员安全用户普通监管员普通用户。普通ARM CPU仅支持用户监管员分离,所有托管的操作系统都在用户模式下运行,其中典型的所有DMA外设都以监管员权限运行,该值通常被硬编码在SOC中。

更新:原始问题中未包括IOMMU。

类型 优点
TZ 总线开关,缓解主设备和外围设备的影响
HV 没有DMA缓解,单主设备(CPU)
IOMMU IOMMU是从设备缓解,需要在“world switch”时进行更新

虚拟机监视程序+IOMMU可以防范一些DMA攻击。但是,这意味着在“world switch”时必须更新IOMMU表。这将防止针对该外围设备的DMA攻击。每个需要此保护的外围设备都需要一个IOMMU。

可能存在这样的情况:普通世界设备可能会访问安全设备以执行“安全操作”。例如,请求解密数据而无需访问密钥。

“hypervisor + IOMMU”不等同于Trustzone。Trustzone是通过总线矩阵保护,包括所有外设和主控器。主控器可以处于任何世界状态;例如,在多CPU系统上,一个可以处于正常状态,另一个可以处于安全状态。这意味着计算可以在两个状态下进行。HV+IOMMU解决方案相当于抢占式多任务处理。在进入该模式时,必须切换IOMMU。再次强调,TZ的弱点在于只支持两个“worlds”。HV+IOMMU可以支持多个“guests”。

1
不加工的噪音:因此,额外的位也是总线的控制信号,因此与使用Hypervisor相比,可以使Trustzone基于解决方案无效化DMA攻击,不是吗? - user489152
是的,这是主要的区别。对于多个CPU,它还具有一个优点,即一个集中的地方来限制访问,因此更简单。使用Hypervisor做到这一点并不是不可能的;只是每个不受信任的托管操作系统必须没有可以访问关键内存的DMA外设;说起来容易做起来难。 - artless noise
谢谢你的简单明了的解释,artless noise。你有关于这个主题的在线文章吗?或者你写过任何关于这个主题的常见问题解答吗,这样我就可以参考一下了。如果没有,请写一篇吧! - user489152

2
使用Intel的IOMMU和ARM的SystemMMU可以在很大程度上规避DMA攻击。基于TrustZone和基于虚拟化监控器的系统安全的主要区别之一是,虚拟化监控器通常通过修改CPU MMU并添加外设MMU(IOMMU、SystemMMU)以页面粒度保护系统,而在TrustZone系统中,每个单独的事务(访问)都标记为安全或非安全(通过额外的总线地址线第33位),从而通常在处理器字大小级别上提供更细粒度的安全性。

“事务”大小的问题在实际情况中是正确的。但是,没有什么可以阻止某人降低IOMMU的粒度。此外,一些TrustZone元素(例如TZASC)非常类似于IOMMU,并且只分区大量内存。由于TZ将其固化到硬件中,因此它无法支持多个客户端。 - artless noise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接