ATF(ARM Trusted firmware)实现原理
1、Secure world 与 Non Secure world
在Android系统中应用程序运行在Non-secure EL0,linux kernel运行在Non-secure EL1 ,TEE比如trustonic运行在Secure EL0和Secure EL1。Android和TEE的切换都必须经过EL3的monitor,在mtk平台上ATF就是一个运行在EL3上面的monitor。
Non Secure world切换到Secure world:
首先Non Secure world运行的程序需要切换到EL3,在EL3中monitor会通过设置寄存器SCR( Secure Configuration Register)的NS bit来切换到Secure world。
Non-secure world与Secure world隔离:
处于Secure state的时候PE(Preinstall Environment预安装环境)可以访问 Secure物理地址空间也可以访问Non Secure物理地址空间;处于Non-secure state的时候PE只可以访问Non Secure物理地址空间,不可以访问Secure物理地址空间。我们知道PE是通过地址来访问所有的硬件资源的。只要我们把一些硬件资源的地址区间映射到Non-secure world,另一些硬件资源(比如spi、部分dram)的地址区间映射到Secure world,就可以实现Non-secure world与Secure world的隔离了。
将地址映射到Non-secure world或者Secure world:
操作系统(android 和TEE)使用的地址都是虚拟地址,虚拟地址都是需要页表转换之后才能访问到实际的物理地址。转换的过程是由MMU来完成,TTBR是页表基地址。页表中包含多个enrty,每一个entry都是按照一定规则来填写的。每一个entry中包含下一级(页表或则目标page)的物理地址和描述符(table descriptor/Block descriptor/ Page descriptor)。虚拟地址转换为物理地址的过程就是MMU解析页表找到目标物理页的过程。
异常:
如果触发异常,程序会跳转到异常向量表去执行。Arrch64的异常类型和异常在异常向量表中的偏移见下表。整个异常向量表的大小为0x800字节,每一个entry都是0x80对齐。异常总共有4种:synchronous、IRQ、FIQ、SError。根据异常发生的exception level又分为4类:1)发生异常的exception level栈指针使用SP_EL0;2)发生异常的exception level栈指针使用SP_ELx;3)低level触发异常进入高level,而且低level使用的是64位架构;4)低level触发异常进入高level,而且低level使用的是32位架构。以linux kernel为例,kernel中收到中断将进入第2类异常入口;32位应用程序系统调用进入第3类异常入口;64位应用程序系统调用进入第4类异常入口。
与32位架构不同,64位架构的异常向量表地址不固定,在启动的时候由软件将异常向量表的地址设置到专用寄存器VBAR(Vector Base Address Register)中。除了上面的异常之外还有一种特殊的异常"复位",复位是一种最高优先级的异常,复位异常向量表存放在寄存器RVBAR_ELx 中。从异常向量表中可知不同Exception level之间是可以切换的。为此arm定义了几条用于不同EL跳转的指令。其中HVC、SMC、SVC、可以分别从低level进入EL2、EL3、EL1。这几条指令的执行将会触发同步异常(synchronous)根据具体场景进入到异常向量表种对应的entry。
前面的几条指令都是由低level进入高level,如果要返回原来的level该怎么办?比如应用程序运行在EL0,发起系统调用进入到EL1,执行完成之后如何返回EL0?
指令ERET就是为这种场景准备的,在发生异常的时候,异常的下一条指令地址将被保存在ELR寄存器中,异常返回的时候ERET将自动把ELR中的地址保存到PC中继续异常之前的程序执行。
2、TEE(Trusted Execution Environment)
TEE即可信执行环境,该环境可以保证不被常规操作系统干扰的计算,因此称为”可信”。概括来讲TEE 是一个与Rich OS并行运行的独立执行环境,为Rich OS环境提供安全服务。TEE独立于Rich OS和其上的应用,来访问硬件和软件安全资源。
1.OMTP于2006年提出一种双系统解决方案:即在同一个智能终端下,除了多媒体操作系统外再提供一个隔离的安全操作系统,这一运行在隔离的硬件之上的隔离安全操作系统用来专门处理敏感信息以保证信息的安全。该方案即TEE的前身。
2. 基于OMTP的方案,ARM公司提出了一种硬件虚拟化技术TrustZone及其相关硬件实现方案。TrustZone即是支持TEE技术的产品。作为针对消费电子设备设计的一种硬件架构,其目的是为消费电子产品构建一个安全框架来抵御各种可能的攻击。
TrustZone在概念上将SoC的硬件和软件资源划分为安全(Secure World)和非安全(Normal World)两个世界,所有需要保密的操作在安全世界执行(如指纹识别、密码处理、数据加解密、安全认证等),其余操作在非安全世界执行(如用户操作系统、各种应用程序等),安全世界和非安全世界通过一个名为Monitor Mode的模式进行转换:
3.GlobalPlatform(全球最主要的智能卡多应用管理规范的组织,简称为GP)从2011年起开始起草制定相关的TEE规范标准,并联合一些公司共同开发基于GP TEE标准的可信操作系统。因此,如今大多数基于TEE技术的Trust OS都遵循了GP的标准规范。
简单概括来讲,TEE技术理念即“当执行敏感操作或安全性比较高的行为时(例如指纹的比对,用私钥签名的支付动作等),原本处于Normal World 中的系统安全级别不足以应对,需要放到Secure World里面,为一系列敏感性操作提供高安全的执行环境”。
TEE是运行在设备中的,提供介于Rich OS和SE(智能卡)之间的安全性的框架。当前的很多安全架构还是基于Rich OS + SE的方式,其实这在方便程度和成本上都不能提供“刚刚好”的契合。因为某些小额的支付,DRM,企业VPN等,所需要的安全保护强度并不高,还不需要一个单独的SE来保护,但是又不能直接放在Rich OS中,因为后者的开放性使其很容易被攻击。所以对于这类应用,TEE则提供了合适的保护强度,并且平衡了成本和易开发性。
TEE具体用例:移动支付
在以往的场景中,用户采用移动支付方式,会产生一系列的数据,密码口令、交易内容、交易额等。设备中的恶意代码可能在用户不知道的情况下,获取用户的口令;修改交易数据,比如交易金额;又或者在用户没有确认的情况下生成交易,种种行为会造成用户的信息泄露财产损失等。
通过借助TEE技术,可以在设备中植入可信芯片,从而提供一个完全隔离的运行空间,保护敏感数据免受其它环境的恶意行为,进而增强移动设备的安全特性。
ATF实现原理
版权声明:本文为weixin_45619924原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。