一旦黑客获得对内核空间的访问权,有什么办法可以阻止他停用 MMU,并直接访问安全世界的物理内存区域?
MMU 根本不参与 TrustZone。所以禁用 MMU 没有任何效果。可能的攻击是针对监控代码、安全操作系统 API(对正常世界)、总线保护、引导代码或硬件。 具有安全扩展的 MMU 是为了允许安全世界代码按照正常世界访问内存并相应地进行故障。
类似于禁用 MMU 的流氓普通世界内核,DMA attack 也可用于传统的管理程序。 TrustZone 的目的是避免这些攻击。
TZASC 是安全启动代码锁定硬件的一种方式。您可以将其视为在 secure 和 normal 之间划分硬件,并提供读/写访问的可能性。
| read | write
-------------+------------------
normal super | Y/N | Y/N
normal user | Y/N | Y/N
-------------+------------------
secure super | Y/N | Y/N
secure user | Y/N | Y/N
前两行适用于所有 ARM 系统。最后两个是 TrustZone 特有的。从物理上讲,这些是总线上的信号。这些位是读/写、安全/正常(NS 标记位)和超级/用户。每个 BUS 主站将静态分配给一个世界,或者如果主站支持 TrustZone,则它可能是动态的。一个动态主示例是 CPU。对于从站,它们要么是内存(类似 I/O 的大型阵列),要么是小型控制器寄存器组。对于内存,TZASC 允许对内存进行分区。对于较小的寄存器从机,通常实现更简单的全有或全无总线访问(例如 TZPC)。 TrustZone 对系统程序员来说非常模糊,因为它可以灵活地允许不同的 SOC 设计。
也许这甚至是不可想象或不可行的?但如果是这样的话,我猜 TZPC 是强制性的以防止这种情况发生,对吗?或者,“简单地”使用两个 TrustZone 世界就足够了吗?
TZPC 是简单从属安全/正常分区的示例。用于 AMBA APB(高级外围总线)上基于寄存器的 I/O。
[本节旨在作为 TrustZone 架构灵活性的具体示例,让 SOC 实施者创建可能对某些特定应用有用的新颖设备。]
考虑一个系统,我们有一个 NAND 芯片 (NFC),但希望允许安全和正常访问,而正常世界无法访问安全数据。如果我们创建一个支持 TrustZone 的 NFC 控制器,我们可以有两组 I/O 寄存器和 DMA 数据到用户指定的缓冲区。一个寄存器库是安全的,另一个是正常的。 NFC 控制器将是一个安全的主机,NFC 芯片将是一个安全的从机。当有人访问 NFC 控制器的正常寄存器组时,假设的芯片必须检查访问是否被允许(在上述攻击中是硬件)和另一个动态主机示例。当它代表普通世界读取时,它会设置 NS 的 DMA,以便应用普通世界的访问权限。