我只是在TrustZone上阅读ARM 的这份文档,有些事情我不清楚。
事实上,Hypervisor提供了一种特殊的 CPU 模式,而对于TrustZone,处理器带有一个额外的第 33 位:模式不也是一个特定的位设置吗?那么,额外的一点如何在安全性方面产生所有这些差异。我确实理解额外的位为两个单独的 32 位地址间距让路,但除此之外,我无法将两个和两个放在一起。有人可以清楚地解释为什么TrustZone比 Hypervisor 更安全吗?
我只是在TrustZone上阅读ARM 的这份文档,有些事情我不清楚。
事实上,Hypervisor提供了一种特殊的 CPU 模式,而对于TrustZone,处理器带有一个额外的第 33 位:模式不也是一个特定的位设置吗?那么,额外的一点如何在安全性方面产生所有这些差异。我确实理解额外的位为两个单独的 32 位地址间距让路,但除此之外,我无法将两个和两个放在一起。有人可以清楚地解释为什么TrustZone比 Hypervisor 更安全吗?
典型的Hypervisor仅限于 CPU。它不能防止其他DMA 主机。有关更多信息,请参阅 Wikipedia DMA Attack网页。其他攻击,例如冷启动,需要其他机制(例如可归零内存)来防止利用。也就是说,TrustZone不是一个全面的安全解决方案,而是其中的重要组成部分。由于 ARM 只是一个 CPU,因此未指定控制其他BUS Master的机制。除了DMA Master之外,备用 CPU 也对内存分区构成威胁。为了解决这个问题,一些辅助 CPU 是TrustZone意识到的。即,他们将始终使用NS位(第33位)标记交易。
相比之下,Hypervisor很少局限于两个世界。 管理程序托管任意数量的操作系统。 TrustZone只有两个世界;安全和正常。尽管每个世界都可以有一个控制主管OS,但在 OS 允许的情况下,它具有许多单独的线程、任务或进程。
DMA 攻击解释:与硬件位相比,Hypervisor通常使用 CPU 的MMU来限制软件访问。这不会阻止其他 BUS Masters 访问内存。如果 Hypervisor 受限软件可以控制单独的 BUS 主控器,那么它们可以获取要保护的内存。DMA 使用物理地址并绕过 MMU 等一般Hypervisor保护。
DMA 攻击通过使用 CPU 外部的东西来访问内存来绕过 CPU 保护。使用TrustZone,保护不在CPU 中,而是在 BUS 控制器中。请参阅:NIC301示例 ARM TrustZone CPU 仅允许 CPU 支持四种模式;安全管理员、安全用户、普通管理员和普通用户。普通 ARM CPU 仅支持用户和主管分离,所有托管操作系统的管理程序在用户中运行模式; 通常,所有 DMA 外设都以管理员权限运行,并且该值通常在 SOC 中硬编码。
更新:原始问题不包括 IOMMU。
类型 | 优点 |
---|---|
太极 | 总线开关,减轻主设备和外围设备的影响 |
高压 | 无 DMA 缓解,单主 (CPU) |
国际移民组织 | IOMMU 是一种从属缓解措施,需要更新“世界切换” |
Hypervisor + IOMMU 可以完成一些针对 DMA 攻击的保护。但是,这意味着在“世界切换”上必须更新 IOMMU 表。这将防止针对该外设的 DMA 攻击。每个需要这种保护的外围设备都需要一个 IOMMU。
在某些情况下,“普通世界”设备可能会访问安全设备以执行“安全操作”。例如,在不访问密钥的情况下请求解密数据。
hypervisor + IOMMU不等同于信任区。Trustzone 受总线矩阵保护,包括所有外设和主设备。大师可以处于任一世界状态;即,在多 CPU 系统上,一个可以正常,另一个可以安全。这意味着计算可以在两者上进行。HV+IOMMU 方案相当于抢占式多任务。系统进入该模式时,必须切换 IOMMU。
同样,TZ 的弱点是仅支持两个“世界”。HV+IOMMU 可以支持多个“客人”。
在 Intel 上使用 IOMMU 和在 ARM 上使用 SystemMMU 的 DMA 攻击至少可以在国外规避。基于 TrustZone 和基于管理程序的系统安全性之间的主要区别之一是管理程序通常通过修改 CPU MMU 和添加外围 MMU(IOMMU、SystemMMU)以页面粒度保护系统
而在基于 trustZone 的系统中,每个单一事务(访问)都被标记为安全或非安全(通过额外的总线地址线第 33 位),因此通常在处理器字大小级别提供更细粒度的安全性。