我希望在 Normal world 中运行一个丰富的 GNU / Linux 操作系统,并在一个小型操作系统中运行一个集成的 Monitor 安全世界。
我们必须完全避免 普通世界才能访问安全世界内存区域。
我们需要使用/激活 TrustZone 的哪些功能来满足此要求?我只想使用必要的功能来尽量减少所需的工作。
我已经阅读了很多 ARM TrustZone 文档,我知道 TZPC , TZASC ,MMU有安全扩展,但我无法弄清楚如何避免以下威胁:
什么会阻止黑客获得内核空间访问权限,停用MMU,并直接访问安全世界的物理内存区域?
也许这甚至不可想象或可行?但如果是这样的话,我猜是 TZPC 是强制性的,以防止这种情况发生,我是对的吗?或者,"简单地"使用两个 TrustZone 世界就够了吗?
答案 0 :(得分:2)
什么会阻止黑客获得内核空间访问权限,停用MMU,并直接访问安全世界的物理内存区域?
MMU根本不涉及TrustZone。所以禁用MMU什么也没做。可能的攻击是针对监控代码,安全OS 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,以便正常的世界访问权限适用。
答案 1 :(得分:1)
不受信任的代码在非安全状态下运行,因此CPU生成的任何总线事务都将被标记为非安全,因此互连的固有功能可以使事物分离。安全存储器映射和非安全存储器映射实际上是完全不同的东西,只是在大多数系统中它们被连接起来或多或少相同。
现在,“安全世界存储器”要么是一些硬连接到安全存储器映射的专用块(通常是片上SRAM),要么是一大块普通的DRAM,并且仅限安全存储通过TZPC / TZASC。无论哪种方式,它只是不存在于非安全存储器映射中,因此没有任何非安全软件可以访问它。