栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 前沿技术 > 物联网 > 嵌入式开发

ARM系列之ARM Trustzone 技术浅析(二)——— ARMv7-A Processor modes & registers 的安全扩展

ARM系列之ARM Trustzone 技术浅析(二)——— ARMv7-A Processor modes & registers 的安全扩展

ARM系列之ARM Trustzone 技术浅析(二)
  • Processor modes
  • Registers

ARM 引入 Trustzone 技术,最重要的改动就是 CPU 架构的调整。ARM trustzone security whitepaper 中对 Processor 的介绍是基于 ARMv7。为了支持 Trustzone,CPU 架构的调整包括了很多部分,翻开 Cortex-A7 Technical Reference Manual 关于 Security Extensions 的介绍零散分布在各个章节。我觉得比较重要的有:Processor modes & registers;Exception & Interrupt handling;MMU;Cache。本文介绍 Processor modes & registers 相关的 security extensions。

Processor modes

ARMv6 之前的 Processor 有 6 种 privilege mode:FIQ,IRQ,Supervisor(SVC),Abort(ABT),Undefined(UND),System(SYS),以及一种 non-privilege mode:User(USR)。引入 Trustzone 之后,CPU core 被虚拟出 secure state 和 non-secure state,那么很自然就需要一个能够切换两种 state 的开关,由此在 7 种 CPU mode 之外,新增了 monitor(MON)mode,如下图所示:
也就是说 secure world 和 normal world 的切换需要CPU 先进入 monitor mode。与 userspace 通过 svc 指令可以从 USR mode 切换到 SVC mode 类似,ARM 也提供了一条可以进入 monitor mode 的软中断指令: smc。需要说明的是 monitor mode 也是一种 secure state,下图是通过 monitor mode 切换 secure 和 normal world 的示意图:

以 userspace application 进程需要访问某安全资源举例,简要说明一下切换流程:

  1. App 通过 syscall svc 指令进入Kernel space OS(SVC mode);
  2. Kernel space OS 通过 smc 指令进入 monitor mode;
  3. 运行在 Monitor mode 的代码首先保存 Non-secure 状态下的 CPU contexts,如 lr,sp,spsr
    等等,然后将 CPU NS bit 置为 0,表示进入 secure state,通过 rfe 指令(return from
    exception)进入 secure OS;
  4. secure OS 叫起 secure application 处理完相应的安全资源访问请求之后,发送 smc 指令,再次回到 monitor mode;
  5. 运行在 Monitor mode 的代码同样首先保存 secure 状态下的 CPU contexts,如 lr,sp,spsr
    等等,然后将 CPU NS bit 置为 1,表示进入 non-secure state,然后恢复 Non-secure state下的
    CPU contexts,通过 rfe 指令(reture from exception)重新回到 non-secure OS;

tips:由于 monitor mode 也是一种 secure state,所以 monitor mode 部分的代码一般会跟 secure OS 和 App 的 binary 打包在一起,很少会有独立的 binary。

除了 smc 指令触发的software exception 会进入 monitor mode,也可以配置某些硬件中断触发进入 monitor mode,如 FIQ,IRQ,external data abort,external prefetch abort。都可以通过配置 system register 来决定哪些 hardware exception 可以触发 cpu 陷入 monitor mode。这部分会留在 exception handling 和 GIC 的章节介绍,接下来先介绍一下 security extension 相关的寄存器。

Registers

首先介绍一下 banked registers 的概念。我们最熟悉的 32位 CPU 寄存器就是通用寄存器 R0 - R15。其中 R13 - R15 有特殊含义,分别表示 sp,lr 和 pc。在不同的 CPU mode 下,sp,lr 的值是不同的,在切换 cpu mode 前后必须保存和恢复 sp 和 lr 的信息,才能保证代码的正常运行,所有这些名字相同但根据cpu mode 不同值不同的寄存器就是 banked register,也可以理解为常说的 cpu contexts。常用的 banked registers 如下:
HYP mode 是 ARM 为虚拟化扩展引入的 Hypervisor mode,与 Trustzone 无关,不再细说。

另外还有一类寄存器为 CP15 协处理器,主要用于系统配置,例如配置异常向量表,开关MMU 等等,一般 OS 初始化的代码都会首先配置这些寄存器。CP15 寄存器的读写有特定指令,在 32位 OS 中一般使用 mrc 指令读,mcr指令写,根据读写不同的寄存器有规定读写语句格式如下:

MRC p15, Op1, Rt, CRn, CRm, Op2 ; //read a CP15 register into an ARM register
MCR p15, Op1, Rt, CRn, CRm, Op2 ; //write a CP15 register from an ARM register

下面简单介绍一下与 security extension 相关两个重要的寄存器:

以上寄存器只能在 secure state 下才能修改。

tips: SCR 的 ns bit 虽然 secure OS 也能修改,但一般只会在 CPU 处于 monitor mode 才会修改。这是因为一旦 ns bit 置为 1,系统就会立马切换到 non-secure,此时 pipeline 中缓存的 secure state 下运行的指令,以及 data register 中保存的 secure data 会变成 non-secure 可见,会影响安全性。所以硬件虽然支持 secure OS 修改 ns bit,但软件上通常并不会在 secure OS 中直接操作 ns bit!

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/852663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号