当前位置:   article > 正文

Arm Trustzone与ATF安全介绍 - 一篇就够了

arm trustzone

随着时代的发展、科技的进步,安全需求的趋势也越来越明显,ARM也一直在调整和更新其新架构,很多都是和安全相关的。如下列出了一些和安全相关的架构

![image.png](https://img-
blog.csdnimg.cn/img_convert/5d3dfe2b1454a71a937bf9f6614f6431.png)

基于Trust
Zone技术,硬件被静态隔离,可预先分配硬件归属于关键应用域或非关键应用域,不需要hypervisor的支持,相关系统可以同时并行的访问硬件资源。这种方案的优点是可以消除Hypervisor引入的性能延迟,由于双系统间实现了物理隔离,多系统间相互影响小,稳定性及安全性在多系统方案中都达到最高标准,而且系统间交互通过底层模块保证,对于系统应用的开发难度较低。

Trustzone做为ARM安全架构的一部分,从 2008 年 12月 ARM 公司第一次 release Trustzone 技术白皮书。2013 年
Apple 推出了第一款搭载指纹解锁的 iPhone:iPhone 5s,用以保证指纹信息安全的 Secure Enclave 技术据分析深度定制了 ARM
trustzone 架构,印象中这大概是 Trustzone 技术第一次走进大众视线。到如今 Trustzone
技术已经成为移动安全领域的重要基础技术,你也许不了解它的技术原理,但它一直默默为你守护你的指纹信息,账户密码等各种敏感数据。
如下也列出了一张在Trustzone架构下的一张指纹的框图,这也是这些年(2015-至今)比较流行的一张软件框图。

![image.png](https://img-
blog.csdnimg.cn/img_convert/b42c6e999eed44aa1899aa6304512cf8.png)

1 . ARM Trustzone的安全扩展简介

从上文我们已经知道, ARM Trustzone不具体指一个硬件,也不是一个软件,而是一个技术架构。只有支持Trust
Zone技术的ARM核配合安全扩展组件,才能为整个系统提供芯片硬件级别的保护和隔离。在支持ARM Trustzone的SOC中,需按照ARM
Trustzone技术对各个子模块进行设计。如下便展示了一个SOC的Trustzone架构下的设计框图

![image.png](https://img-
blog.csdnimg.cn/img_convert/45ada7c540243725459907a4c5d26270.png)

Trust
Zone技术之所以能提高系统的安全性,是因为对外部资源和内存资源的硬件隔离。这些硬件隔离包括中断隔离、片上RAM和ROM的隔离、片外RAM和ROM的隔离、外围设备的硬件隔离、外部RAM和ROM的隔离等。实现硬件层面的各种隔离,需要对整个系统的硬件和处理器核做出相应的扩展。这些扩展包括:

  1. AMBA-AXI总线的扩展, 增加了标志secure读和写地址线:AWPROT[1]和ARPROT[1]
  2. processor的扩展(或者说master的扩展),在ARM Core内部增加了SCR.NS比特位,这样ARM Core发起的操作就可以被标记“是以secure身份发起的访问,还是以non-secure身份发起的访问”
  3. TZPC扩展,在AXI-TO-APB端增加了TZPC,用于配置apb controller的权限(或者叫secure controller),例如将efuse(OTP Fuse)配置成安全属性后,那么processor以non-secure发起的访问将会被拒绝,非法的访问将会返回给AXI总线一个错误。
  4. TZASC扩展,在DDRC(DMC)之上增加一个memory filter,现在一般都是使用TZC400,或由SOC厂商自己设计一个这样的IP,或叫MPU,或集成在DMC内部,它的作用一般就是配置DDR的权限。 如果配置了DDR中某块region为安全属性,那么processor以non-secure发起的访问将会被拒绝。
  5. MMU/Cache对安全扩展的支持。在软件架构的设计中,就分为: Non-secure EL0&1 Transslation Regime 和 Secure EL0&1 Transslation Regime,即normal world和secure world侧使用不同的Transslation Regime,其实就是使用不同的TTBRx_ELn寄存器,使用不同得页表。注意:在armv7上,TTBRx_EL0、TTBRx_EL1是banked by Security State,也就是说在安全世界和非安全世界各有一组这样的寄存器,所以在linux和tee中可以各自维护一张自己的内存页表。
    1. 在armv8/armv9上,TTBRx_EL0、TTBRx_EL1不再是banked了,但是world switch时会在ATF中switch cpu context, 所以从hypervisror或os的视角来看,依然还是两套不同的TTBRx_ELn寄存器,linux和tee各有各的页表。而在TLB中,又为每一个entry增加了Non-secure属性位,即标记当前翻译出的物理地址是secure还是non-secure;
    2. cache的扩展:在cache的entry中的TAG中,有一个NON-Secure Identifier标记为,表示当前缓存数据的物理地址是属于non-secure还是secure。
  6. gic对安全扩展的支持,在gicv2、gicv3的版本中,都增加了对安全扩展的支持. 以gicv3为例,将中断划分成了group0、secure group1和non-secure group1. 在软件的配置下,group0和secure group1的中断将不会target到REE(linux)中处理

支持Trust
Zone技术的ARM核在运行时将工作状态划分为两种:安全状态和非安全状态。当处理器核处于安全状态时只能运行TEE侧的代码,且具有REE侧地址空间的访问权限。当处理器核处于非安全状态时只能运行REE侧的代码,且只能通过事先定义好的客户端接口来获取TEE侧中特定的数据和调用特定的功能。

系统通过调用安全监控模式调用(secure monitor
call,smc)指令实现ARM核的安全状态与非安全状态之间的切换。而ARM核对系统资源的访问请求是否合法,则由SoC上的安全组件通过判定ARM核发送到SoC系统总线上的访问请求中的安全状态读写信号位(Non-
secure bit,NS bit)来决定。只有当ARM核处于安全状态(NS
bit=0)时发送到系统总线上的读写操作才会被识别为安全读写操作,对应TEE侧的数据资源才能被访问。反之,当ARM核处于非安全状态(NS
bit=1)时,ARM核发送到系统总线上的读写操作请求会被作为非安全读写操作,安全组件会根据对资源的访问权限配置来决定是否响应该访问请求。这也是Trust
Zone技术能实现对系统资源硬件级别的保护和隔离的根本原因。

在ARMv8架构中使用执行等级(Execution
Level,EL)EL0~EL3来定义ARM核的运行等级,其中EL0~EL2等级分为安全态和非安全态。ARMv8架构与ARMv7架构中ARM核运行权限的对应关系如图所示。

![](https://img-
blog.csdnimg.cn/img_convert/f70d8da5b0b65ad681f5c009426342cd.webp?x-oss-
process=image/format,png)

ARMv7/v8运行权限对比

4、ARM Trustzone技术对软件带来的变化

ARM Trustzone技术对软件框架带来了变化

4.1、EL3 is AArch64:

![image.png](https://img-
blog.csdnimg.cn/img_convert/851313c0c05c7e77afc6ebd03c21f6ca.png)

4.2、EL3 is AArch32

![image.png](https://img-
blog.csdnimg.cn/img_convert/5646bf63c46f64a88e84557bb3c1755d.png)

AArch32和AArch64 secure monitor的理解:

如果secureos和monitor都是64位,secureos跑在el1, monitor跑在el3;
如果secureos和monitor都是32位,secureos和monitor都跑在EL3(secureos在svc模式、monitor在svc模式),它俩共用页表;
如果monitor是64位,secureos是32位,那么secureos跑在svc模式(el1),monitor跑在el3,他俩不共用页表

![image.png](https://img-
blog.csdnimg.cn/img_convert/20c21d8961429ae379fa371b5496c102.png)

2、ARM Trustzone的安全扩展详细解剖
2.1 AMBA-AXI对Trustzone的支持

为了支持Trust
Zone技术,控制处理器在不同状态下对硬件资源访问的权限,ARM对先进可扩展接口(Advanced eXtensible
Interface,AXI)系统总线进行了扩展。在原有AXI总线基础上对每一个读写信道增加了一个额外的控制信号位,用来表示当前的读写操作是安全操作还是非安全操作,该信号位称为安全状态位(NS
bit)或者非安全状态位(Non-Secure bit)。

·AWPROT[1]:总线写事务——低位表示安全写事务操作,高位表示非安全写事务操作。

·ARPROT[1]:总线读事务——低位表示安全读事务操作,高位表示非安全读事务操作。

当主设备通过总线发起读写操作时,从设备或者外围资源同时也需要将对应的PROT控制信号发送到总线上。总线或者从设备的解码逻辑必须能够解析该PROT控制信号,以便保证安全设备在非安全态下不被非法访问。所有的非安全主设备必须将安全状态位置成高位,这样就能够保证非安全主设备无法访问到安全从设备。如果一个非安全主设备试图访问一个安全从设备,将会在总线或者从设备上触发一个错误操作,至于该错误如何处理就依赖于从设备的处理逻辑和总线的配置。通常这种非法操作最终将产生一个SLVERR(slave
error)或者DECERR(decode error)。

2.2 AXI-to-APB桥的作用

Trust Zone同样能够保护外围设备的安全,例如中断控制、时钟、I/O设备,因此Trust-
Zone架构还能用来解决更加广泛的安全问题。比如一个安全中断控制器和安全时钟允许一个非中断的安全任务来监控系统,能够为DRM提供可靠的时钟,能够为用户提供一个安全的输入设备从而保证用户密码数据不会被恶意软件窃取。

AMBA3规范包含了一个低门数、低带宽的外设总线,被称作外设总线(Advanced Peripheral Bus,APB),APB通过AXI-to-
APB桥连接到系统总线上。而APB总线并不具有安全状态位,为实现APB外设与Trust Zone技术相兼容,APB-to-
AXI桥将负责管理APB总线上设备的安全。APB-to-AXI桥会拒绝不匹配的安全事务设置,并且不会将该事务请求发送给外设。

3.2 Processor的SCR.NS比特位

SCR_EL3.NS 表示当前processor的安全状态,NS=1表示是non-secure的,NS=0表示是Secure的

![image.png](https://img-
blog.csdnimg.cn/img_convert/a0505b126fcca6c00411386744fd4420.png)

3.3 TZC400和TZPC简介

Trust Zone地址空间控制组件(Trust Zone Address Space
Controller,TZASC)是AXI总线上的一个主设备,TZASC能够将从设备全部的地址空间分割成一系列的不同地址范围。在安全状态下,通过编程TZASC能够将这一系列分割后的地址区域设定成安全空间或者是非安全空间。被配置成安全属性的区域将会拒绝非安全的访问请求。

使用TZASC主要是将一个AXI从设备分割成几个安全设备,例如off-Soc、DRAM等。ARM的动态内存控制器(Dynamic Memory
Controller,DMC)并不支持安全和非安全分区的功能。如果将DMC接到TZASC上,就能实现DRAM支持安全区域和非安全区域访问的功能。需要注意的是,TZASC组件只支持存储映射设备对安全和非安全区域的划分与扩展,但不支持对块设备(如EMMC、NAND
flash等)的安全和非安全区域的划分与扩展。

![](https://img-
blog.csdnimg.cn/img_convert/e5ba5940697093bee7f7450e9b074eff.webp?x-oss-
process=image/format,png)

TZC400接在core和(DMC)DDR之间,相当于一个memory filter。
TZC400一般可以配置8个region(算上特殊region0,
也可以说9个),然后可以对每一个region配置权限。例如讲一块region配置成secure RW的,那么当有non-
secure的master来访问这块内存时,将会被TZC挡住。

![image.png](https://img-
blog.csdnimg.cn/img_convert/d3ce5be13f3238217dc046f4bfdf3ed3.png)

Trust Zone内存适配器组件

Trust Zone内存适配器组件(Trust Zone Memory Adapter,TZMA)允许对片上静态内存(on-SoC Static
Memory)或者片上ROM进行安全区域和非安全区域的划分。TZMA支持最大2MB空间的片上静态RAM的划分,可以将2MB空间划分成两个部分,高地址部分为非安全区域,低地址部分为安全区域,两个区域必须按照4KB进行对齐。分区的具体大小通过TZMA的输入信号R0SIZE来控制,该信号来自TZPC的输出信号TZPCR0SIZE。即通过编程TZPC可以动态地配置片上静态RAM或者ROM的大小。

![](https://img-
blog.csdnimg.cn/img_convert/e28b56ad92286029191d2edc812394f6.webp?x-oss-
process=image/format,png)

![](https://img-
blog.csdnimg.cn/img_convert/1d5b4dd02c45d21aa1380fdfc5272927.webp?x-oss-
process=image/format,png)

使用TZMA组件的链接示意

作者:姜鸿雷
链接:https://www.zhihu.com/question/484166527/answer/2719513750
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Trust Zone保护控制器组件

Trust Zone保护控制器组件(Trust Zone Protection
Controller,TZPC)是用来设定TZPCDECPORT信号和TZPCR0SIZE等相关控制信号的。这些信号用来告知APB-to-
AXI对应的外设是安全设备还是非安全设备,而TZPCR0SIZE信号用来控制TZMA对片上RAM或片上ROM安全区域大小的划分。TZPC包含三组通用寄存器TZPCDECPROT[2:0],每组通用寄存器可以产生8种TZPCDECPROT信号,也就是TZPC最多可以将24个外设设定成安全外设。TZPC组件还包含一个TZPCROSIZE寄存器,该寄存器用来为TZMA提供分区大小信息。

![](https://img-
blog.csdnimg.cn/img_convert/294b7d8b881dc0d13a4436a0977a384e.webp?x-oss-
process=image/format,png)

TZPC组件接口示意

当上电初始化时,TZPC的TZPCDECROT寄存器中的位会被清零,同时TZPCR0SIZE寄存器会被设置成0x200,表示接入到TZMA上的片上RAM或者ROM的安全区域大小为2MB。通过修改TZPC的寄存器配置的值可实现用户对资源的特定配置。

![](https://img-
blog.csdnimg.cn/img_convert/eff372ea74530b9c903674c67dba8f0b.png)

TZPC使用示例

Trust Zone中断控制器组件

在支持Trust Zone的SoC上,ARM添加了Trust Zone中断控制器(Trust Zone Interrupt
Controller,TZIC)。TZIC的作用是让处理器处于非安全态时无法捕获到安全中断。TZIC是第一级中断控制器,所有的中断源都需要接到TZIC上。TZIC根据配置来判定产生的中断类型,然后决定是将该中断信号先发送到非安全的向量中断控制器(Vector
Interrupt Controller,VIC)后以nIRQ信号发送到处理器,还是以nTZICFIQ信号直接发送到处理器。

![](https://img-
blog.csdnimg.cn/img_convert/b0ba0d26baf7d7e85ae7b170f682ac3f.webp?x-oss-
process=image/format,png)

TZIC在SoC中的使用示意

通过对TZIC的相关寄存器进行编程,可对TZIC进行配置并设定每个接入到TZIC的中断源的中断类型。TZIC具有众多寄存器,细节说明可以参考相关ARM的文档。在TZIC中用来设置中断源类型的寄存器为TZICIntSelect,如果TZICIntSelect中的某一位被设置成1,则该相应的中断源请求会被设置成快速中断请求(Fast
Interrupt
Request,FIQ)。如果某一位被设置成0,则该中断源的中断请求会被交给VIC进行处理。如果VIC的IntSelect将获取到的中断源设置成FIQ,那么该中断源会被再次反馈给TZIC进行处理。

3.4 MMU对Trustzone的支持

在支持Trust
Zone的SoC上,会对MMU进行虚拟化,使得寄存器TTBR0、TTBR1、TTBCR在安全状态和非安全状态下是相互隔离的,因此两种状态下的虚拟地址转换表是独立的。

存放在MMU中的每一条页表描述符都会包含一个安全状态位,用以表示被映射的内存是属于安全内存还是非安全内存。虚拟化的MMU共享转换监测缓冲区(Translation
Lookaside
Buffer,TLB),同样TLB中的每一项也会打上安全状态位标记,只不过该标记是用来表示该条转换是正常世界状态转化的还是安全世界状态转化的。

Cache也同样进行了扩展,Cache中的每一项都会按照安全状态和非安全状态打上对应的标签,在不同的状态下,处理器只能使用对应状态下的Cache。

首页,在软件架构的设计中,就分为: Non-secure EL0&1 Transslation Regime 和 Secure EL0&1
Transslation Regime,即normal world和secure world侧使用不同的Transslation
Regime,其实就是使用不同的TTBRx_ELn寄存器,使用不同得页表。具体使用哪个可以通过VMID或者TZPC卡控来指引第一级映射是使用安全还是非安全通道。
其次,在MMU使用的页表中,也有NS比特位。 Non-secure Transslation Regime 只能翻译NS=1的页表项,secure
Transslation Regime
可以翻译NS=1和NS=0的页表项,翻译出来的物理地址是安全还是非安全有NS决定,配合MRegion实现安全防护。即secure的页表可以映射non-
secure或secure的内存,而non-secure的页表只能去映射non-secure的内存,否则在转换时会发生错误

![image.png](https://img-
blog.csdnimg.cn/img_convert/37dd8e0799e0ff0c8e9538a2d3b7d3c8.png)

在Page Descriptor中(页表entry中),有NS比特位(BIT[5]),表示当前的映射的内存属于安全内存还是非安全内存:

![image.png](https://img-
blog.csdnimg.cn/img_convert/f0aed344b871b10ab172ac0f1f597250.png)

另外,SMMU中多级映射的没一级表象中还存在一个安全表象Security
table标志位,用于指定他的下一级表象存储的DDR空间是安全还是非安全DDR中。这个主要是提供给SMMU中的TCU来识别,当下一级为安全,TCU为非安全的情况下,表象地址也被配置成安全的情况下,这个时候TCU就没有办法读写这个地址,完成表象映射的动作。

3.5 cache对Trustzone的支持

如下所示,以为cortex-A78为例,L1 Data Cache TAG中
,有一个NS比特位(BIT[33]),表示当前缓存的cacheline是secure的还是non-secure的

![image.png](https://img-
blog.csdnimg.cn/img_convert/ab0ae29b125965fef4ceaea840bb56d1.png)

3.6 TLB对Trustzone的支持

如下所示,以为cortex-A78为例,L1 Data TLB entry中
,有一个NS比特位(BIT[35]),表示当前缓存的entry是secure的还是non-secure的

![image.png](https://img-
blog.csdnimg.cn/img_convert/e1da37476f9c6152ffc518c70ee7bf36.png)

3.7 gicv的安全中断

在gicv2/gicv3中,支持了安全中断,配置有如下:
(1)、Group分组(GICD_IGROUPRn) – gicv2
◾group0:安全中断,由nFIQ驱动
◾group1:非安全中断,由nIRQ驱动

(2)、Group分组(GICD_IGROUPRn)– gicv3
◾group0:安全中断
◾non-secure group1:非安全中断
◾secure group1:安全中断

作者:姜鸿雷
链接:https://www.zhihu.com/question/484166527/answer/2719513750
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

九、Trust Zone技术对资源隔离的实现

ARM处理器核的虚拟化和资源隔离是Trust Zone实现安全需求的根本。支持Trust
Zone的处理器核具有虚拟化,也即将一个物理核分成安全状态和非安全状态。当处理器处于非安全状态时,只能访问属于非安全的外设和内存,而不能访问安全的资源;当处理器处于安全态时,处理器既可以访问安全资源,也可以访问非安全的资源,只有当处理器核为安全世界状态时才可能发出PROT的安全访问信号。

十、中断源的隔离

在原来的ARM芯片中,使用VIC来对外部中断源进行控制和管理,支持Trust
Zone后,ARM提出了TZIC组件,在芯片设计时,该组件作为一级中断源控制器,控制所有的外部中断源,通过编程TZIC组件的相关寄存器来设定哪个中断源为安全中断源FIQ,而未被设定的中断源将会被传递给VIC进行处理。一般情况下VIC会将接收到的中断源设定成普通中断请求(Interrupt
Request,IRQ),如果在VIC中将接收到的中断源设定成FIQ,则该中断源会被反馈给TZIC组件,TZIC组件会将安全中断源送到安全世界状态中进行处理。

十一、片上RAM和片上ROM的隔离

芯片内部存在小容量的RAM或者ROM,以供芯片上电时运行芯片ROM或者存放芯片自身相关的数据。Trust
Zone架构对该部分也进行了隔离操作。隔离操作通过使用TZMA和TZPC组件来实现。

TZMA用来将片上RAM或者ROM划分成安全区域和非安全区域,安全区域的大小则由接入的TZPCR0SIZE信号来决定。而TZPCR0SIZE的值可以通过编程TZPC组件中的TZPCR0SIZE寄存器来实现。

当处理器核访问片上RAM或者ROM时,TZMA会判定访问请求的PROT信号是安全操作还是非安全操作,如果处理器发出的请求为非安全请求而该请求又尝试去访问安全区域时,TZMA就会认为该请求为非法请求。这样就能实现片上RAM和ROM的隔离,达到非安全态的处理器核无法访问片上安全区域的RAM和ROM。

十二、片外DRAM的隔离

一个完整的系统必然会有片外RAM,对片外RAM的隔离是通过TZASC组件实现的,ARM本身的DMC可以将DRAM分割成不同的区域,这些区域是没有安全和非安全分类。将DMC与TZASC相连后再挂到总线上,通过对TZASC组件进行编程可以将DRAM划分成安全区域和非安全区域。当主设备访问DRAM时,除需要提供物理地址之外,还会发送PROT信号。TZASC组件首先会判定主设备需要访问的DARM地址是属于安全区域还是非安全区域,然后再结合接收到的PROT信号来判定该次访问是否有效。如果PROT信号为非安全访问操作,且访问的DRAM地址属于安全区域,则TZASC就不会响应这次访问操作,这样就能实现DRAM中安全区域和非安全区域的隔离。

十三、外围设备的隔离

其他外围设备都会挂载到APB总线上,然后通过AXI-to-APB桥连接到AXI总线上,AXI-to-
APB结合TZPC组件的TZPCDECROT的值及访问请求的PROT信号来判定该访问是否有效。当处理器需要访问外围设备时,会将地址和PROT信号发送到AXI总线上。

AXI-to-
APB桥会对接收到的请求进行解析,获取需要访问的所需外围设备,然后通过查询TZPCDECROT的值来判断外设的安全类型,再根据PROT信号就能判定该请求的安全类型。如果该请求是非安全请求,但需要访问的外围设备属于安全设备,则AXI-
to-APB会判定该访问无效。通过对TZPC中的TZPCDECROT寄存器进行编程能够设置外设的安全类型,从而做到外设在硬件层面的隔离。

4、思考:通过MMU/TLB/Cache对安全内存攻击的可能性

在安全架构的设计时,我们在Core和DDR之间增加了一个TZC做为memory filter,数据流为:Core —> TZC---->DDR,
这种架构下,core以非安全身份发起的对安全内存的读写,将会被TZC挡住。

![image.png](https://img-
blog.csdnimg.cn/img_convert/f934729133dd5cbc01b3c75d3db90cce.png)

但是这都是在理想的情况下,事实上Core发起对内存的读写,未必经过TZC未必到DDR,有可能到cache阶段就完成了,即数据流变成了Core —>
MMU(TLB+Addtress
Translation)---->Cache,那么这种情况下,没有TZC的事了,你也许会说MMU/Cache中都有NS比特,但是你真的理解这里NS比特的用法吗?
如果core以非安全身份对安全内存发起的读写时,我强制将MMU页表中的安全属性标记位强制改成NS=0,会如何呢?

![image.png](https://img-
blog.csdnimg.cn/img_convert/c5b85ae5196c7b09fd055ba1f987eb8b.png)

事实上我们只要理清原理、理清数据流 ,就不会问上面那么S13的问题了。 下面来开始剖析:

假设一个安全core 读取了一个安全物理内存0x2000_0000数据(虚拟地址可能是0x_xxxx_xxxx),那么将产生一下行为:

在读写之前,势必做好了MMU map,如物理地址0x2000_0000 MAP成了0x_xxxx_xxxx地址, 此时Page
Descriptor中的atrribute中的NS=0
TLB缓存该翻译,即TLB的entry中包含: 0x2000_0000、0x_xxxx_xxxx、NS=0
安全内存0x2000_0000数据将会被缓存到cache中,entry中的TAG包含0x2000_0000、NS=0
同时,我有一个非安全core
发起读写虚拟地址0x_yyyy_yyyy,我自行修改该页表,让0x_yyyy_yyyy强制映射到安全物理内存0x2000_0000,此时有两种配置:
(1)、0x_yyyy_yyyy—0x2000_0000, NS=0
(2)、0x_yyyy_yyyy—0x2000_0000, NS=1
我们分别看下这两种配置,是否能读到安全内存:
针对(1),非安全的core发起访问,发现TLB中的条目是0x_yyyy_yyyy—0x2000_0000,
NS=0,自然不会被命中,然后使用Address Translation转换,MMU发现非安全的Core要来访问安全属性NS=0 将会被直接拒绝掉。
针对(2),非安全的core发起访问,由于NS=1,TLB可能会被命中,即能翻译出0x2000_0000物理地址来,即使没有被命中,在经过Address
Translation转换,由于NS=1,此时也是可以正确转换出正确的0x2000_0000物理地址。
然后接着会去cache中查询这个地址,但是此时cache的entry中的NS=0,所以cache不会被命中,接下来就要走TZC流程了,很显然,你一个非安全的core想访问安全的内存,TZC将会挡住你。

综上所述:安全就是安全,不要再瞎想漏洞了。

5. ATF ARM可信固件

ARM可信任固件(ARM Trusted
Firmware,ATF)是由ARM官方提供的底层固件,该固件统一了ARM底层接口标准,如电源状态控制接口(Power Status Control
Interface,PSCI)、安全启动需求(Trusted Board Boot
Requirements,TBBR)、安全世界状态(SWS)与正常世界状态(NWS)切换的安全监控模式调用(secure monitor
call,smc)操作等。ATF旨在将ARM底层的操作统一使代码能够重用和便于移植。

ATF的源代码共分为bl1、bl2、bl31、bl32、bl33部分,其中bl1、bl2、bl31部分属于固定的固件,bl32和bl33分别用于加载TEEOS和REE侧的镜像。整个加载过程可配置成安全启动的方式,每一个镜像文件在被加载之前都会验证镜像文件的电子签名是否合法。

ATF主要完成的功能如下:

  1. ·初始化安全世界状态运行环境、异常向量、控制寄存器、中断控制器、配置平台的中断。
  2. ·初始化ARM通用中断控制器(General Interrupt Controller,GIC)2.0版本和3.0版本的驱动初始化。
  3. ·执行ARM系统IP的标准初始化操作以及安全扩展组件的基本配置。
  4. ·安全监控模式调用(Secure Monitor Call,smc)请求的逻辑处理代码(Monitor模式/EL3)。
  5. ·实现可信板级引导功能,对引导过程中加载的镜像文件进行电子签名检查。
  6. ·支持自有固件的引导,开发者可根据具体需求将自有固件添加到ATF的引导流程中。

5.2 ATF与TEE的关系

为规范和简化Trust Zone
OS的集成,在ARMv8架构中,ARM引入ATF作为底层固件并开放了源码,用于完成系统中BootLoader、Linux内核、TEEOS的加载和启动以及正常世界状态和安全世界状态的切换。

ATF将整个启动过程划分成不同的启动阶段,由BLx来表示。例如,TEEOS的加载是由ATF中的bl32来完成的,安全世界状态和正常世界状态之间的切换是由bl31来完成的。在加载完TEEOS之后,TEEOS需要返回一个处理函数的接口结构体变量给bl31。当在REE侧触发安全监控模式调用指令时,bl31通过查询该结构体变量就可知需要将安全监控模式调用指令请求发送给TEE中的那个接口并完成正常世界状态到安全世界状态的切换。

ARMv8架构之后ARM提供了ATF,BootLoader、TEE镜像文件、Linux内核镜像文件、recovery镜像文件都是由ATF来进行引导和加载而不是由ChipRom来完成的。ChipRom只会去验证ATF中bl1的合法性,后续引导过程同样也是按照链式验签的方式进行,符合TBBR规范。

![](https://img-
blog.csdnimg.cn/img_convert/1ebb4fc35d1ee3f01f00ba5d32086ae9.webp?x-oss-
process=image/format,png)

ARMv8的Secure Boot流程

在ARMv8架构中,如果系统需要支持TEE,则几乎都必须使用由ARM提供的ATF作为底层固件。

6. ARM V9 CCA机密计算

Arm CCA建立在Armv8-A中已经广泛使用的隔离技术之上。Arm
CCA提供额外的安全架构,即使在使用中也能保护数据和代码,并能够更好地控制谁可以访问数据和算法。这项在Armv9-A中引入的技术将通过降低与共享数据相关的风险并帮助开发人员实施强大的隐私控制来帮助释放数据的真正力量和潜力。

Arm CCA引入了两项新功能:支持Realms和动态Trust Zone。

a、机密计算Realms

Arm机密计算架构引入了Realm Management Extension(RME),该扩展支持称为Realm的新型可证明隔离环境。该环境建立在Trust
Zone
Normal和Secure世界上,增加两个额外的世界,每个世界都有自己的安全状态和专用的物理地址空间。RME还允许在运行时在世界之间移动内存,而新硬件会检查每个内存访问,阻止那些世界之间的隔离边界不允许的访问。

RME保护主流计算工作负载,例如虚拟机或容器免受特权软件和硬件代理的影响,包括hypervisor程序、普通世界内核甚至Trust Zone应用程序。

非常适合保护在公共云环境和主机操作系统的安全性和完整性难以审核或保证的任何平台中运行的工作负载。

数据和代码不受任何平台服务和其他执行环境的影响:

  • 管理软件,包括创建Realm的任何管理程序或内核
  • The host OS
  • Other Realms
  • Devices not trusted by the Realm
  • Realm受到Trust Zone代码的保护

![](https://img-
blog.csdnimg.cn/img_convert/b0158dc7300aa3f40cb93ddfbb3d40f8.png)

Realms、Normal和Secure世界之间的关系

b、动态Trust zone技术

除了支持Realm之外,Realm Management Extension还允许在Normal和Secure世界之间按需移动内存。这允许Trust
Zone使用的内存量根据给定用例动态扩展。我们称之为Arm动态Trust Zone技术。

Trust Zone动态内存更有效地利用宝贵的DRAM提高了使用Trust Zone进行内存密集型操作的灵活性例如媒体解码、内容保护和机器学习模型的保护。

7. 安全调试

安全系统还控制调试供应的可用性。 您可以通过完整的 JTAG 调试和跟踪控制为正常和安全软件世界配置单独的硬件,这样就不会泄露有关受信任系统的信息。
您可以通过安全外围设备控制硬件配置选项,也可以硬连线并使用以下信号控制它们:

安全特权侵入式调试启用 (SPIDEN):JTAG 调试。
安全特权非侵入式调试启用 (SPNIDEN):跟踪和性能监视器

学习计划安排


我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!

如果你对网络安全入门感兴趣,那么你需要的话可以

点击这里

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/695255
推荐阅读
相关标签