4

我试图了解在 arm 中在受信任(安全)和非安全模式之间来回切换的成本。

从非安全世界转移到安全世界时究竟需要发生什么?我知道需要设置 ns 位(基于一些特殊指令?),需要刷新和更新页表(?),刷新和更新处理器缓存。还有什么需要发生的吗?

处理器缓存:它们是分段和共享的缓存,还是每个模式都使用整个缓存?这决定了交换机的成本。

RAM:这必须是“分区的”并由两种模式使用。所以寻址只是“分区”的一个偏移量。这是正确的吗?

从用户空间到内核模式切换或进程到用户空间中的进程切换有什么不同?

从非安全模式到安全模式的转变是否会使其比常规进程上下文切换更昂贵?

有没有文章可以解释到底发生了什么?

编辑:根据下面的回复,我希望了解当进程在 arm 处理器上从非安全模式切换到安全模式(信任区域)时究竟会发生什么。

4

1 回答 1

2

从非安全世界转移到安全世界时究竟需要发生什么?

TL-DR; 最低限度是保存/恢复安全世界所需的所有 CPU 寄存器并更改 NS 位。通常,R0-R14 以及当前模式,以及分组的 LR 和 SP(中止、中断等)都在该寄存器组中。其他一切都取决于您的安全模型。


首先,TrustZone 中可以使用许多不同的模型;TrustZone 是一种工具,而非解决方案。最基本的模型是一个带有 API 的库,其中存储了一些安全数据(即解密密钥)以供外部源处理(从“正常世界”空间下载一些 DRM)。我想你不是这个意思。

操作系统可以是可抢占的和不可抢占的。如果您在两个世界中都有两个操作系统,那么如何放弃控制、共享资源和保护安全资产都将在世界切换中发挥作用。

在许多情况下,缓存和 TLB 是全局感知的。设备也可以是世界感知的,并且设计的目的是将上下文内置到设备中。这并不是说某些系统可能会以某种方式泄露信息。

如果您真的担心这种类型的攻击,将安全世界内存标记为需要保护的非缓存可能是合适的。在许多 ARM 系统中,L1/L2 和 TLB 缓存在世界之间是统一的,可以提供侧通道攻击。

许多 ARM 设备上实施的 TrustZone 带有一个 GIC,它可以在安全世界中运行 FIQ,并且在正常世界中可以防止 FIQ 的屏蔽。许多 GIC 功能在世界之间存储,允许两个操作系统在没有“上下文切换”信息的情况下使用它。即,NS 位将根据 NS 位的状态自动更改访问的 GIC 特征(因此它具有存储在设备中的上下文)。许多其他供应商特定的设备被设计成这种方式。

如果两个世界都使用 NEON/VFP,那么您还需要在世界切换上保存/恢复这些寄存器。对于抢占,您可能需要挂接到 OS 安全调度程序以允许正常世界中断以抢占安全世界主线(显然这取决于您要保护的资产;如果您允许这样做,则安全主线具有DOS 向量)。

如果设备出现故障,则您可能需要保存/恢复设备状态。如果普通世界被限制使用FIQ模式,那么在进入普通世界时至少还需要清除SP_fiq和LR_fiq(反之恢复安全值)。其中一些寄存器很难保存/恢复,因为您必须切换模式,如果不小心,这本身就是一个安全风险。

RAM:这必须是“分区的”并由两种模式使用。所以寻址只是“分区”的一个偏移量。这是正确的吗?

安全启动将根据“NS 位”对内存进行分区。物理内存是否可见取决于分区管理器设备逻辑,分区管理器设备逻辑通常可以在启动时锁定。即,如果不可见,它就像任何不存在的内存一样是总线错误。NS 位旁边没有“开关”。

从非安全模式到安全模式的转变是否会使其比常规进程上下文切换更昂贵?

是的,普通开关仅用于“模式”。一个适用于所有 ARM 模式的世界,因此必须切换所有分组寄存器。根据系统,TLB 和缓存通常不需要切换。


有关的:

于 2018-01-07T21:30:43.657 回答