ARM Trustzone 技术(二) ARMv7-A Processor modes & registers 的安全扩展

ARM 引入 Trustzone 技术,最重要的改动就是 CPU 架构的调整。ARM trustzone security whitepaper 中对 Processor 的介绍是基于 ARMv7,我做的第一个 Trustzone 的软件方案也是基于 ARMv7 架构的 Cortex-A7,所以就从 ARMv7-A 开始介绍吧。为了支持 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-and-non-secure-worlds.png

也就是说 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 的示意图:


switching between secure and normal worlds.png

以 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 指令(reture 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 如下:


arm register set.png

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 configuration register

    BitsNameFunction
    [0]NS bit0: secure;
    1:non-secure
    [1]IRQ0: IRQ 异常触发 CPU 进入 IRQ mode;
    1: IRQ 异常触发 CPU 进入 MON mode
    [2]FIQ0: FIQ 异常触发 CPU 进入 FIQ mode;
    1: FIQ 异常触发 CPU 进入 MON mode
    [3]EA0: external abort 异常触发 CPU 进入 ABT mode;
    1: external abort 异常触发 CPU 进入 MON mode
    [4]FW0: non-secure mode 下 CPSR 的 F bit 不可写;
    1: non-secure mode 下 CPSR 的 F bit 可写
    [5]AW0: non-secure mode 下 CPSR 的 A bit 不可写;
    1: non-secure mode 下 CPSR 的 A bit 可写
    [6:31]reserved-
  • MVBAR

    BitsNameFunction
    [5:31]Monitor Vector Base AddressMonitor mode 异常向量表的基地址
    [0:4]Reserved-

以上寄存器只能在 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!

附上系列链接:
ARM Trustzone 技术(一) 综述
ARM Trustzone 技术(二) ARMv7-A Processor modes & registers 的安全扩展
ARM Trustzone 技术 (三)ARMv7-A Exceptions & Interrupts Handling 的安全扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值