您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > TrustZone调研
第一章TrustZone的硬件结构1.系统结构TrustZone硬件架构旨在提供安全框架,从而使设备能够抵御将遇到的众多特定威胁。TrustZone技术可提供允许SoC设计人员从大量可在安全环境中实现特定功能的组件中进行选择的基础结构,而不提供固定且一成不变的安全解决方案。架构的主要安全目标是支持构建可编程环境,以防止资产的机密性和完整性受到特定攻击。具备这些特性的平台可用于构建一组范围广泛的安全解决方案,而使用传统方法构建这些解决方案将费时费力。可通过以下方式确保系统安全:隔离所有SoC硬件和软件资源,使他们分别处于两个区域(用于安全子系统的安全区域以及用于存储其他所有内容的普通区域)中。支持TrustZone的AMBA3AXITM总线构造中的硬件逻辑可确保普通区域组件无法访问安全区域资源,从而在这两个区域之间构建强大边界。将敏感资源放入安全区域的设计,以及在安全的处理器内核中可靠运行软件可确保资产能够抵御众多潜在攻击,包括那些通常难以防护的攻击(例如,使用键盘或触摸屏输入密码)。通过在硬件中隔离安全敏感的外设,设计人员可限制需要通过安全评估的子系统的数目,从而在提交安全认证设备时节省成本。TrustZone硬件架构的第二个方面是在一些ARM处理器内核中实现扩展。通过这些额外增加的扩展,单个处理器内核能够以时间片的方式安全有效地同时从普通区域和安全区域实行代码。这样,便无需使用专用安全处理器内核,从而节省了芯片面积和能源,并且允许高性能安全软件与普通区域操作环境一起运行。更改当前运行的虚拟处理器后,这两个虚拟处理器通过新处理器模式(监控模式)来进行上下文切换。物理处理器用于从普通区域进入监视模式的机制受到密切控制,并且这些机制始终被视为监视模式软件的异常。要监视的项可由执行专用指令(安全监视调用(SMC)指令)的软件触发,或由硬件异常机制的子集触发。可对IRQ、FIQ、外部数据中止和外部预取中止异常进行配置,以使处理器切换到监视模式。在监视模式中执行的软件是实现定义的,但它通常保存当前区域的状态,并还原将切换到的区域位置的状态。然后,它将执行从异常返回的操作,以在已还原区域中重新启动处理过程。TrustZone硬件架构的最后一个方面是安全感知调试基础结构,它可控制对安全区域调试的访问,而不会削弱普通区域的调试可视化。1.1AMBA3AXI系统总线为了支持TrustZone技术,AXI总线上每个读写信道都增加了一个额外的控制信号:AWPROT[1]:总线写事务控制信号—低电平为安全写事物,高电平为非安全写事物。ARPROT[1]:总线读事务控制信号—低电平为安全读事物,高电平为非安全读事物。当主设备向总线提出读写事务请求时,必须将控制信号发送到总线上。总线或者从设备的解码逻辑必须能够解释这些信号,确保安全从设备不被非安全的主设备访问。如果非安全主设备访问安全从设备,则访问失败。访问失败时可能会产生一个错误信号,也可能什么也不做,这依赖于具体硬件实现。错误信号可能由从设备或者总线产生,取决于外设的硬件设计和总线配置。1.2AMBA3APB外围总线TrustZone架构一个最有用的特性就是其有保护外设安全的能力,比如:中断控制器、计时器及用户I/O设备。这使得安全环境能够解决比仅仅提供一个安全的数据处理环境更广泛的安全问题。安全中断控制器和计数器允许非中断安全任务来监控系统,安全时钟源保证了坚固的DRM,安全键盘使得用户密码输入能够得到安全保障。AMBA3规范包含了一个低门数,低带宽的外设总线,被称作高级外设总线(APB),APB通过AXI-to-APB桥连接到系统总线上。APB总线没有带对应的NS位,这使得已经存在的AMBA2APB外设与实现了TrustZone技术的系统兼容。AXI-to-APB负责管理APB外设的安全。1.3内存隔离Cachetags所携带的额外的NS位,可以看作是第33根地址线。处理器访存时,除了将内存地址发送到AXI总线上之外,还需要将AWPROT或ARPROT控制信号发送到总线上,以表明本次访存是安全事务还是非安全事务。如果当前系统处于安全状态,控制信号电平的高低取决于页表项的NSTID值。如果当前系统处于非安全状态,控制信号始终为高电平,即非安全事务。TrustZone通过两个设备来保障物理内存的安全,一个是TrustZone地址空间控制器(TZASC),另一个是TrustZone存储适配器(TZMA):1TZASC是AXI的一个主设备,用来将它的从设备的地址空间划分为一系列内存区间。通过运行在安全环境的安全软件,可以将这些区间配置为安全的或非安全的。TZASC可以拒绝非安全的总线事务访问安全内存区间。可以划分的内存区间数以及TZASCAXI接口的总线宽度取决于具体的SoC设计。使用TZASC的主要目的是用来将一个AXI从设备进行分区为几个安全设备,比如说片外DRAM。因为多连接一块DRAM芯片需要额外的引脚和印刷电路板面积,并且内存本身也是要一定费用,所有通过对内存进行分区,使它能够包含安全和非安全分区,比两个执行环境各采用一块单独的内存更经济。ARM动态内存控制器(DMC),它本身并不支持创建安全和非安全分区。为了创建安全分区,可以将DMC接到TZASC上。TZASC只用来支持存储映射设备,不能用于块设备,比如NANDFLASH。2TZMA使得可以对片上静态内存RAM或者片上ROM划分安全分区。将单独的一个大内存划分为安全区和非安全区比为每个执行环境提供一个单独的内存要经济。TZMA支持为最大2M的静态内存划分分区低地址部分为安全的分区,高地址部分为不安全的分区。安全分区和非安全分区的分界点是4KB的整数倍,分区的具体大小通过TZMA的输入信号ROSIZE控制,这个信号来自于TrustZone保护控制器(TZPC)的输出信号TZPCROSIZE。通过对TZPC编程可以动态地配置安全区大小。TZMA不能用来对动态内存进行分区,也不能用在要求几个分区的情况,这些情况可以使用TZSAC。2.处理器结构每个带TrustZone安全扩展的处理器核都有两个虚拟处理器核,每个处理器核分属不同的执行环境(安全和非安全),并引入了一个特殊的机制——监控模式,负责不同执行环境间的切换。非安全虚拟处理器能仅仅访问非安全系统资源,但安全虚拟处理器能访问所有的资源,如图2-1所示。2.1监控器和监控模式在带TrustZone安全扩展的ARM处理器的CP15协处理器中有一个安全配置寄存器(SCR),该寄存器中有一个NS位,这个NS位指明当前系统的状态,寄存器的格式如图2-2所示。如果NS为0,则当前系统处于安全态;如果NS为1,则当前系统处于非安全态。但当系统处于监控模式时,不管NS位是否为0,都可以访问安全环境的资源。这个NS位不仅影响CPU内核和内存子系统,还可以影响片内外设的工作。NS位是TrustZone对系统所做的关键扩展。系统的安全状态与系统的用户模式和特权模式无关,也就是说用户态程序也可以运行在安全态,而运行特权态程序时系统也可能处于非安全态。NS位只能被运行在安全态且处于特权模式的软件改变,系统在非安全状态时不能访问SCR寄存器。安全环境的软件在安全态下运行,普通环境软件在非安全态下运行。因此,在切换执行环境时,同时需要改变系统的安全状态。从非安全状态可以通过三种异常进入监控模式:1.执行SMC指令,SMC指令是一条特殊指令,它类似于软件中断指令(SWI),通过它来调用监控器例程;2.外部中止,包括预取指外部中止和数据外部中止,外部中止是在访问存储系统时发生但不会被MMU检测到的异常,通常发生在普通环境访问安全环境的资源时;3.中断,包括FIQ中断和IRQ中断。其中,第一种进入监控模式的方式是无条件的,后两种情况依赖于SCR寄存器的配置。与监控模式相关的SCR寄存器各个字段的定义如下:1EA,默认为0,表示发生外部中止时处理器进入中止模式,如果为1,表示发生外部中止时处理器进入监控模式;2IRQ,默认为0,表示发生IRQ中断时处理进入中止模式,如果为1,表示发生IRQ中断时处理器进入监控模式;3FIQ,默认为0,表示发生FIQ中断时处理进入中止模式,如果为1,表示发生FIQ中断时处理器进入监控模式。通过以上三种异常进入监控模式都会触发监控器的异常处理程序,监控器的具体功能,是由软件开发者定义的,但执行环境的切换都是通过监控器进行的。如果安全环境的软件在非监控模式下直接将SCR的NS位设置为1,则系统直接进入非安全状态,这使得非安全状态有了看到正在流水线的指令,以及正在寄存器中的数据的可能。如果这些指令和数据都是敏感信息的话,这将给系统带来安全威胁。因此,通常只有监控可以直接修改SCR的NS位。2.2对Cache和MMU的扩展在带TrustZone安全扩展的处理器内核中,为每个tag域增加了一个NS位,用来标识这一行的安全状态。如果NS为0,则这一行处于安全态;如果NS为1,则这一行为非安全态。不管Cache行的安全状态如何,只要没被锁住,都可以被换出到主存中,为新的缓冲数据留出存储空间。处于安全状态的Cache行把处于非安全态的Cache行换出,处于非安全态的Cache行把处于安全态的Cache行换出都是可能的。在带TrustZone安全扩展的处理器中,有两个页表基地址寄存器,不同安全状态使用不同的页表基地址寄存器,相当于有两个虚拟的MMU,每个虚拟的MMU分属不同的虚拟处理器核,这使得每个执行环境有一个本地的页表集,各个执行环境从虚地址到物理地址的转换是独立的,在切换执行环境时,不需要切换页表。在带TrustZone安全扩展的处理器的页表项中包含一个NS标位,即非安全标识符(NSTID),如果当前系统处于非安全状态,则忽略NSTID。一般安全环境的内存页表项的NSTID设置为0,属于普通环境的内存页表项的NSTID设置为1。与此相对应,TLB也作了相应的扩展,每行的tag域也增加了一个NSTID。访问内存时需要将虚拟地址和页表中的NSTID与TLB的tag域中的虚拟地址和NSTID值进行比较。在TLB中增加的NSTID用来标志这一行是对来自哪个执行环境的虚拟地址的转换,这使得两个执行环境的地址转换数据可以同时在TLB中存在,执行环境切换时不需要刷新TLB,加快了执行环境的切换速度。图2-3展示了带TrustZone安全扩展的ARM处理器访问存储器的过程。1处理器执行访存指令,硬件将虚拟地址以及NSTID给TLB,使它产生一次地址转换;2TLB将虚拟地址和NSTID与TLB各行tag域中的虚拟地址和NSTID值进行比较,如果匹配则加载与虚拟地址和NSTID对应的物理地址和NS值;如果没有找到匹配项,则由MMU查找页表,并将查找结果缓存到TLB中。如果当前系统处于非安全状态,在将MMU页表查找结果缓存到TLB中时,必须强制NS为1,如果当前系统处于安全状态,NS的值取决于NSTID的值。3Cache行的tag与来自TLB的物理地址与NS进行匹配,如果匹配成功,将从Cache行中返回数据,否则从外部存储系统中加载Cache行。2.3安全中断监控器有在没有任何执行环境的代码帮助下就能够直接捕获FIQ和IRQ的能力,这可以为安全中断源创建一个灵活的中断模型。当执行流到达监控器的时候,监控器能够将中断请求路由到相应的中断处理程序,如果和安全中断控制器结合起来就可以让安全中断源发出的中断不能被普通环境软件操作。ARM推荐使用IRQ作为普通的环境中断源,FIQ作为安全环境中断源。大多数的操作系统都采用IRQ作为中断源,所以采用FIQ作为安全中断源意味着对普通环境操作系统的改动最少。如果中断发生在相应的执行环境,则不需要进行执行环境的切换,否则陷入到监控器中,由监控器切换执行环境。一般情况下,执行监控器代码的时候应该关中断。为了防止普通环境的恶意软件屏蔽掉安全环境的中断,在CP15协处理器中包含了一个配置寄存器,能够用来阻止普通环境软件修改CPSR的F位(FIQmask)和A位(extern
本文标题:TrustZone调研
链接地址:https://www.777doc.com/doc-6056473 .html