TrustZone技术在物理上可以把一个ARM处理器核分时复用为两个不同的处理器,在处理器的非安全部分运行的是标准的Linux系统,而在另外一侧运行的是安全强相关的功能。而由于ARM TrustZone的硬件隔离作用,其相互之间的交互只能通过机器指令SMC来使能切换,而实际的切换过程由ARM提供的TrustFirmware BL31 来提供 。
在硬件外部设备划分的过程中,一般情况下IRQ交由非安全侧处理,而ARM特有的FIQ则交由安全侧去处理,其具体哪些硬件和内存能够被安全侧和非安全侧访问可以通过硬件寄存器的配置来进行。
当需要由比如Linux向安全侧的OS传递请求等数据时,其本质是通过一块物理内存映射到非安全侧和安全侧来达成数据共享的作用的。而此部分内存也是整个TrustZone技术暴露在外的最大攻击面,由于数据交互的特有需求,所以这种在非安全侧和安全侧传递数据的内存是一定能够被两边访问的,作为信息传递的媒介,其和操作系统的用户态程序和内核态功能进行交互的内存十分相似,而我们能够拿来保护 用户态和内核态数据交互的内存保护方法也大部分都能够直接应用在保护 非安全侧和安全侧系统之间内存交互之上。
在早期的TrustZone应用中,在安全侧的处理逻辑大部分只是简单的函数调用,例如非安全侧将要加密的数据发送到安全侧,安全侧通过函数调用同步的完成加密或者解密的流程,并把结果返回给安全侧。这种实现相当的简单高效,能够处理很多简单的应用场景,但是其同时也存在很多问题:
1. 不利于扩展&#x