arm trustzone
Posted _9_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arm trustzone相关的知识,希望对你有一定的参考价值。
arm的trustzone并不涉及到具体的crypto算法,只是实现:
1) 敏感信息的安全存储;
2) 控制bus和debug的安全访问,保证信息不被泄露;
trustzone是system_level的实现,涉及到软硬件,硬件方面包括:
1) ARM processor;
2) Bus fabric;
3) system peripheral IP;
硬件devices被attacked的几种方式:
1) Hack attack,通过植入病毒和木马,来执行一些非法的软件。
2) Shake attack,attackers可以物理访问到device,并且可以实现一些主动的动作,force pins,
利用JTAG,BIST,IO boundary scan,reprogrammming memory device。
3) Lab attack,attackes可以通过实验室设备,实验device,在silicon的metal layer加探针等操作。
危险性极大。
目前硬件中常用的几种security 实现方式:
1) 外加hardware security module,像SIM card这样。并不通用,而且成本高。
2) 在内部加入自己的hardware security module,security与normal world之间的数据交换复杂,因为没有形成
一个系统的解决方案。
3) software virtualization,任何带mmu的processor都可以实现,security通过hypervisor来实现,
但是对于DMA和GPU这样的master,没有解决方案。
trustzone的硬件architecture:主要分为system achitecture,processor architecture,debug architecture
1) system achitecture:主要是指,bus中已经包含security signal,memory也可以通过增加一根security的信号,来物理上将
硬件bus系统隔绝为两个world。
2) Processor architecture:
arm-a9之后的processor都直接支持secure,两个virtual processor,之间切换,只能通过
指令SMC(Secure Monitor Call),或其他的一些exception,IRQ,FIQ,external Data Abort,external Prefetch Abort
当前的processor处在secure还是non-secure,通过coprocessor,CP15中的寄存器SCR(Secure Config Reg)来表示,
其中有一个NSbit,当processor处在monitor状态时,该状态位无效。
mmu,支持secure扩展,可以看做是两个virtual mmu,其中的TLB(Translation Lookaside Buffers),可以同时包含secure和
non-secure,在切换时,也不需要切换。
cache,加入secure特性的扩展后,world switch时,不需要再进行cache flush,任何non-lockdown的cache line都可以被evict,
与security属性无关,也就是说,secure的cache line可以被evict,为non-secure cache line加载。
interrupt,secure的interrupt,的很多控制寄存器,如mask,enable,clear,必须是由security world来访问。
推荐实现,IRQ应用在normal world,FIQ应用在secure world,monitor状态下,所有的irq被mask掉。
exception vector,支持TZ的proceesor的有三组exception vector tables,分别是normal world,secure world,
Monitor mode。各个基地址,可以通过CP15中的VBAR(Vector Base Address Register)
Multiprocessor system,主要分为SMP(Symmetric Multi-processor),AMP(Asymmetric Multi-processor),主要影响
在于软件,AMP结构中,软件调度更加复杂,
3) Debug architecture:可以分为processor debug components和system debug components。
processor debug:针对secure和privilege加入了更多的enable控制信号,
Secure privilege invasive debug(JTAG),SPIDEN signal
Secure privilege non-invasive debug(trace),SPNIDEN signal
Secure user invasive debug,SUIDEN signal
Secure user non-invasive debug,SUNIDEN signal
secure debug只有在确认安全的环境下,才能打开
global的enable信号:
global invasive debug mode,DEGEN
global non-invasive debug mode,NIDEN
对于multiprocessor debug control,每个cluster中的每个processor都有这些control signal。
armv7之后,每个processor内部都有PMU(performance Monitor Unit),内部counter记录processor执行
指令中的各个状态,如cache line evictions等,可以通过CP15的设置,来防止被non-secure非法看到
system debug:通过arm的coresight来保证,
arm提供的支持TrustZone的hardware的IP;
1) TrustZone Protection Controller(TZPC),主要实现对各个peripheral的secure的动态权限设置。再通过bus发送过来的状态,来
判断,该笔操作是否合法。
2) TZASC(TrustZone Address Space Controller),典型应用是将区分同一个AXI slave,比如chip外的DRAM,只挂载一个,
但是我们可以将其地址空间分为一半secure,一半non-secure
3) 其他的常用组建,Cache Controller,DMA Controller,interconnect,GIC
TrustZone Software achitecture:软件的实现方式比较灵活,最复杂的是在Secure World单独运行自己的OS(AMP结构),
最简单的是在Secure World,中使用一个标准的lib(SMP结构)。
在一个secure system中,boot是信任链的最底层,是最重要的一部分,TrustZone要求,boot都是开始自Secure World。
secure boot之后,需要加cryptographic checks对bootload进行检查,算法一般选择RSA-PSS,公钥和golden签名也都保存在
device中,boot的时候,进行验证。
在进行secure world的切换时,从secure到non-secure,可以直接修改CPSR寄存器,直接进行world的切换,
如果processor中带有NEON,VFP这样的coprocessor reg,进行context-switching,可以选择Lazy context switch,
AARCH64架构中的secure结构:
在软件应用中,secure和normal的interaction:
在软件切换过程中,有一个问题时,secure world的执行,可能会打断normal world的interrupt,
所以,一般要求secure world使用FIQ。
在armv7的AARCH32架构中,secure model与AARCH64是不同的,secure os执行在EL3,所以为了AARCH3和AARCH64能够保持统一,
需要secure os在secure状态下,和non-secure状态下的TTBR1_EL1不同,
以上是关于arm trustzone的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )
Android 逆向ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )