一旦黑客获得了对内核空间的访问权限,什么才能阻止他停用 MMU 并直接访问安全世界的物理内存区域?
MMU 与 TrustZone 完全无关。因此禁用 MMU 没有任何作用。可能的攻击针对的是监控代码、安全操作系统 API(对于正常世界)、总线保护、启动代码或硬件。这具有安全扩展的 MMU是允许安全世界代码按照正常世界访问内存并相应地出错。
与禁用 MMU 的流氓正常世界内核类似,DMA攻击 https://en.wikipedia.org/wiki/DMA_attack也可以用在传统的管理程序。 TrustZone 的目的就是避免这些攻击。
The TZASC是安全启动代码锁定硬件的一种方法。您可以将其视为在之间划分硬件secure and 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 系统。最后两项具体针对信任区。从物理上讲,这些是总线上的信号。这些位是读/写、安全/正常(NS标记位)和超级/用户。每个总线主机将静态分配到一个世界,或者如果主机是 TrustZone 感知的,则它可能是动态的。 CPU 就是一个动态主站示例。对于从机来说,它们要么是存储器(类似 I/O 的大型阵列),要么是小型控制器寄存器组。为了memory,TZASC 允许对内存进行分区。对于较小的寄存器从机,通常会实现更简单的全有或全无总线访问(例如 TZPC)。 TrustZone 对于系统程序员来说非常模糊,因为它可以灵活地允许不同的 SOC 设计。
也许这根本无法想象或不可行?但如果是这样的话,我猜 TZPC 是强制性的,可以防止这种情况发生,对吗?或者,“简单地”使用两个 TrustZone 世界就足够了吗?
TZPC是简单从属安全/正常分区的示例。用于 AMBA APB(高级外设总线)上基于寄存器的 I/O。
[本节旨在作为 TrustZone 架构灵活性的具体示例,让 SOC 实施者创建可能对某些特定应用有用的新颖设备。]
考虑一个系统,其中我们有一个 NAND 芯片 (NFC),但希望允许安全和正常访问,而正常世界无法访问安全数据。如果我们创建一个 TrustZone 感知 NFC 控制器,我们可以拥有两组 I/O 寄存器和 DMA 数据到用户指定的缓冲区。一个寄存器组是安全的,另一个是正常的。 NFC 控制器将是安全主设备,而 NFC 芯片将是安全从设备。当有人访问 NFC 控制器正常寄存器组时,假设的芯片必须检查是否允许访问(即hardware在上面的攻击中)以及动态主控的另一个例子。当它代表正常世界读取时,它会使用 DMANS设置以便应用正常的世界访问权限。