上下文切换到安全模式(arm 信任区)的成本是多少



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

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

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

RAM:这必须被"分区"并由两种模式使用。因此,寻址只是对"分区"的偏移量。这是对的吗?

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

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

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

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

从不安全的世界迁移到安全的世界时,究竟需要发生什么?

TL-DR;最低要求是保存/恢复安全环境所需的所有 CPU 寄存器并更改 NS 位。 通常,R0-R14以及电流模式以及银行LR和SP(中止,中断等)都在此寄存器组中。 其他一切都取决于您的安全模型。


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

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

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

  • 崩溃 (2017)
  • 幽灵 (2017)
  • 超线程漏洞 (2004)

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

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

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

如果设备出现故障,则可能需要保存/恢复设备状态。 如果限制正常世界使用 FIQ 模式,则在进入正常世界时仍然需要至少清除SP_fiq和LR_fiq(并以另一种方式恢复安全值)。 其中一些寄存器很难保存/恢复,因为您必须切换模式,如果不小心,这本身就可能带来安全风险。

RAM:这必须被"分区"并由两种模式使用。因此,寻址只是对"分区"的偏移量。这是对的吗?

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

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

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


相关:

  • 如何反省正常世界
  • 信任区监控模式开关设计
  • 阻止从正常世界访问内存
  • TrustZone OS 的安全性如何?
  • 安全
  • /非安全操作系统中的信任区调度程序
  • IMX53 和信任区
  • github 上的 ARM 可信固件
  • 信任地带白皮书

最新更新