4

语境

我希望在Normal 世界中运行丰富的GNU/Linux操作系统,在Secure 世界中运行带有集成监视器的小型操作系统。

要求

我们必须绝对避开普通世界才能访问安全世界内存区域。

问题

我们需要使用/激活TrustZone的哪些功能来满足此要求?我只想使用必要的功能来最小化所需的工作。

细节

我已经阅读了很多ARM TrustZone文档,我知道带有安全扩展的TZPCTZASC、 MMU ,但我不知道如何避免以下威胁:

一旦黑客获得了对内核空间的访问权,什么会阻止他停用 MMU,并直接访问安全世界的物理内存区域?

也许这甚至是不可想象或不可行的?但如果是这样的话,我猜TZPC是强制性的以防止这种情况发生,对吗?或者,“简单地”使用两个TrustZone世界就足够了吗?

4

2 回答 2

2

一旦黑客获得了内核空间的访问权,什么会阻止他去激活 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,以便应用普通世界的访问权限。

于 2015-09-08T13:37:44.993 回答
1

不受信任的代码在非安全状态下运行,因此 CPU 生成的任何总线事务都将被标记为不安全,因此互连的固有功能将事物分开。安全内存映射和非安全内存映射实际上是完全不同的东西,只是在大多数系统中它们被连接起来或多或少相同。

现在,“安全世界内存”要么是硬连接到安全内存映射的一些专用块(通常是片上 SRAM),要么是一块通用 DRAM,通过 TZPC 雕刻出来并仅用于安全/TZASC。无论哪种方式,它根本不存在于非安全内存映射中,因此非安全软件无法访问它。

于 2015-09-08T13:39:57.040 回答