老板交待任务,这个星期我都在研究trust zone的东东,之前有看过代码,但没有深入了解!
好吧,这次看来我要跟它杠上了。
网上有很多资料,但很多讲得太抽象,至少对门外汉来说有些难以理解,我估计有些文单可能翻译过来的吧,有些拗口。
在介绍trust zone之前!我们来看两个字,慢慢引导大家trust zone与之前的安全方式有何不同?
好吧,太熟悉了,你有多少密码?QQ密码有没有?银行密码有没有?支付宝密码有没有?
那你怎么保证你的密码安全?
that is all,够了吗?
还记得11年的CSDN密码事件吗?我也是受害者。
事实证明,还要靠服务商!他们把我们的密码记录在disk上。服务器端上的密码一但被黑客读取,那就麻烦了。
.
系统这块--->比如各种防火墙,各种安全机制。
密码加密--->比如用各种方法加密,越复杂越好,密钥鬼长鬼长的。
其实我们知道,是软件就有漏洞,迟早被破解。
所以人们转向安全芯片的研制:
即:TPM(Trusted Platform Module)
就是把加密解密放在芯片中进行,甚至可把信息存储在芯片里。
理论上来说只有芯片才能解密。但是TPM没有办法保护运行时攻击,比如黑客在你运行进破解,直接去内存读你解密过的东西,这样TPM就形同虚设了。
那么下面的trust zone则完全不同,它从硬件角度做到安全。即受它保护的硬件,就算黑客root了你的设备也没办法访问的,只有生产者自己写的trust app才能访问。
而且secure boot技术保证了别人没办法窜改你的image。
从下面图可知:
黑客入侵系统后,通常喜欢从内存,硬盘获取信息,有些木马还能通过截取你的touch或者display内容获取信息。
这样你防不胜防,除非你不要开机。
什么是trust zone?
Trust zone 是ARM内核中新添加一种架构,从ARM A系统就已经支持。
支持这种功能的CPU会跑在两个世界,普通世界/安全世界。
android跑起后CPU跑在普通世界,运行的是普通世界的APP,当SMC系统调用触发进入安全世界时,CPU跑在安全世界,运行安全世界的APP,安全世界APP里所用到的资源,包括内存,cache,磁盘,touch,display,普通世界的app是不能够访问的,攻击者没办法拿到敏感信息
那trust zone要做到这种隔离?
其实隔离要两方面支持
硬件上:
第一:the core AXI bus:AXI总线,增加一条控制线。
第二:ARM core,可支持虚拟化核
第三:Trust zone Address Space controller:TZASC
第四:Trust zone protection controller:TZPC
软件上:
软件上就是基于第二点可虚拟化核心,加上SMC系统调用,使CPU进入安全世界,跑安全世界的APP。
基于上述一,二,三,四加上SMC调用就可以做安完全隔离了。
先谈谈AXI总线
是内存,片内静态RAM ROM,外设隔离的基础。
主要原理是:AXI总线上每个读写信道都增加了一个额外的控制信号
AWPROT[1]:总线写事务控制信号---低电平为安全写事物,高电平为非安全写事物
ARPROT[1]:总线读事物控制信号---低电平为安全读事物,高电平为非安全读事物
当设备向总线提出读写事物请求时必须将控制信号发送到总线上。总线根据这个信号和CPU当前的世界来判断能否读写。防止非安全程序/设备读写安全设备。
基于AXI总线,内存,片内静态RAM ROM是如何隔离的?
TrustZone通过两个设备来保障物理内存的安全
一个是TrustZone地址空间控制器(TZASC)
一个是TrustZone存储适配器(TZMA)
如下图:
TZASC是AXI总线的主设备,用它可以把内存地址空间划分一系列的内存空间,通过运行在安全世界的软件把部分空间配置为安全、非安全的,TZASC防止非安全事物访问安全内存空间。
使用TZASC的主要目的就是AXI的从设备分区为几个安全设备,防止非安全事物访问安全设备。ARM的DMC本身不支持创建安全,非安全区,为此需要连接到TZASC上。
注:ZASC只用来支持存储映射设备,不能用于块设备,比如NAND FLASH
TZMA是AXI总线的主设备,用它来划分片内RAM,ROM的安全区间
基于AXI总线,外设是如何隔离的?
看上图,由于APB总线没有AXI总线有trustzone安全相关的控制信号,需要APB-to-AXI桥负责,外设还是与APB连接,APB-to-AXI桥有上TZPCDECPORT信号输入,用它来决定配置外设是安全的,非安全的。APB-to-AXI桥杜绝非安全事物访问外设
TZPCDECPORT输入信号可以在SoC设计时静态地设置,也可以通过对TrustZone保护控制器(TZPC)进行编程,在程序运行时动态地设置,也就是说通过TZPC可能动态配置外设是安全的,非安全的。
另外:cache和内存为了支持trustzone安全策略,需要做些扩展。
cache的tag都增加了NS位,用于标识这一行的安全状态,NS=0这一行处于安全状态,NS=1这一行处于非安全状态。
MMU的TLB的tag增加NSTID位,功能与NS一样
现在已经了解trustzone保护内存外设的基本思想。
从上面已经知道,只有CPU安全世界才能起保护作用,那CPU如何进入安全世界的呢?
引入特殊机制--监控模式,负责不同执行环境切换。
未完----