如果黑客获取了内核空间的访问权限,有什么能够阻止他禁用MMU并直接访问安全世界的物理内存区域吗?
MMU与TrustZone无关。因此,禁用MMU没有任何作用。可能的攻击对象是监视器代码、安全OS 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标记位)和超级/用户。每个总线主控将静态地分配到一个世界,如果主控具有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,以便应用正常世界访问权限。