一旦黑客获得了内核空间的访问权,什么会阻止他去激活 MMU,并直接访问安全世界的物理内存区域?
MMU 根本不参与 TrustZone。所以禁用 MMU 没有任何效果。可能的攻击是针对监控代码、安全操作系统 API(对正常世界)、总线保护、引导代码或硬件。具有安全扩展的MMU是为了允许安全世界代码按照正常世界访问内存并相应地出错。
与禁用 MMU 的流氓正常世界内核类似,DMA 攻击也可用于传统的管理程序。TrustZone 的目的是避免这些攻击。
TZASC是安全引导代码锁定硬件的一种方式。您可以将其视为在安全和正常之间对硬件进行分区,并具有读/写访问的可能性。
| 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,以便应用普通世界的访问权限。