TrustZone系统测试(Test Target)指令

Test Target指令设计的主要目的是允许软件获取某个内存地址所属的安全属性(Secure Attribute)。

Test Target(TT)指令可以查询内存地址的安全属性和访问权限。

Test Target Unprivileged(TTT) 可以查询非特权模式下内存地址的安全属性和访问权限。

Test Target Alternate Domain(TTA)和Test Target Alternate Domain Unprivileged(TTAT)可以查询Non-Secure模式下内存地址的安全属性和访问权限。这些指令只能在Secure状态下执行,Non-Secure下属于未定义指令。

当执行这个指令的时候,实际上是返回Secure Attribute Unit(SAU)和Implementation Defined Attribute Unit(IDAU)模块在某个地址的配置信息。

SAU和IDAU中定义的每个内存区域,都会对应一个Region Number,Region Number由SAU和IDAU产生,软件可以根据Region Number确定相邻的内存是不是也有相同的安全属性。

对于每个内存地址,TT指令会返回Secure Attribute,Region Number和MPU的Region Number。通过在一个内存区域的首地址和尾地址运行TT命令,如果返回的Region Number相同,软件就能快速的确定地址范围,比如下图就是确定一个数组或者结构体是不是完整的放在Non-Secure区域。

确定数据结构是不是在一个Non-Secure Region

注意:ARMv8-M中MPU,SAU,IDAU中Region不允许重叠。

通过这种机制,运行在Secure模式的Secure APIs函数可以确定Non-Secure中引用的指针参数是否合理,防止Non-Secure API通过指针的方式获取到Secure中的敏感数据。

ARMv8-M的TrustZone还有一个栈大小检查的功能。这个功能可以检测软件是否异常的使用了大量的栈空间,对于栈空间的异常使用可能引发安全问题或者系统错误。在ARMv8-M中,所有的栈指针都有一个栈大小限制寄存器,但是Non-Secure下则没有,Non-Secure程序可以使用MPU来实现堆栈的保护。

相关文章

发表新评论