物联网安全-基于Cortex-M处理器的TrustZone技术简介
物联网安全-基于Cortex-M处理器的TrustZone技术简介Trustzone 技术介绍TrustZone的特性Register bankingTrustZone 技术可以满足的安全需求Secure/Non-Secure 安全划分功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右Smart
物联网安全-基于Cortex-M处理器的TrustZone技术简介(1)
Trustzone 技术介绍
万物互联,安全尤为重要,而设备终端是万物互联的源头,也是安全保护的源头。安全可信计算环境(TEE)从处理器MPU向微控制器MCU进行延伸,已经是大势所趋。
为了更好地提高MCU的安全性能,Arm在ARMv8-M架构中引入了TrustZone技术。ARMv8-M中的TrustZone技术是一种可选择的安全扩展,旨在为各种嵌入式系统应用提供基本的安全保障。
TrustZone技术将系统分为安全区和非安全区两部分,并通过特殊的指令实现两种区域内函数的相互访问。
TrustZone技术已经相当成熟,被广泛应用在Arm Cortex-A系列处理器上。现在TrustZone技术被扩展到了ARMv8-M 处理器中,它与Cortex-A处理器中的TrustZone并不是完全相同的,本篇参考网上一些资料和自己的开发心得介绍下基于Cortex-M处理器的TrustZone技术。
TrustZone的特性
- 允许用户将内存划分为安全和非安全区域;
- 允许在未经过身份验证时阻止调试安全代码/数据;
- NVIC、MPU、SYSTICK、内核控制寄存器等也被备份到两个区域中 ,安全代码和非安全代码可以独立访问自己的资源;
- 安全区和非安全区都有MSP和PSP堆栈指针;
- 提出了Secure Gateway的概念,非安全代码可以通过Secure Gateway访问特定的安全代码,这也是非安全代码访问安全代码的唯一方式;
- 提供了一个Stack Limit Checking(堆栈限制检查)功能,可以用于检测堆栈溢出的情况。在Cortex-M33对应的ARMv8-M架构中,每个堆栈指针都有相应的堆栈限制寄存器。
Register banking
上节提到一些有内核相关的寄存器也被备份到了安全/非安全区域中,下图展示了具体哪些通用/特殊寄存器被备份到两种内存中。
TrustZone 技术可以满足的安全需求
- Data protection:敏感数据可以存储在安全内存中,只可以被安全软件访问。只有在安全检查和授权之后,非安全软件才可以访问安全APIs。
- Firmware protection:固件可以预装载在安全区域中,防止逆向操作和恶意攻击。
- Operation protection:关键操作可以像安全固件一样,被预加载到安全内存中,并且配置适当的外设仅在安全状态下访问。通过这种方式, 可以保护操作免受来自非安全端的入侵。
- Secure boot:安全启动机制可以使用户对自己的平台充满信心,因为它始终从安全内存启动。
Secure/Non-Secure 安全划分
在Cortex-M33中,如果选配了TrustZone技术,则4G的内存空间将被划分为安全和非安全内存区域。安全内存空间又可以进一步划分为两种类型: Secure和Non-secure Callable(NSC)。
三种内存区域的特性:
- Secure:安全数据只可以被安全代码访问,安全代码只有在CPU处于安全模式时才可以被执行。
- Non-secure:非安全数据可以被安全和非安全状态访问,但非安全代码只能在CPU处于非安全状态时被执行。
- Non-secure
Callable(NSC):NSC区域作为非安全函数访问安全函数的跳板。非安全代码需要先跳转到NSC区域中,执行SG指令,然后再跳转到相应的的安全函数处执行,这也是NS代码访问S函数的唯一方式。
引入NSC存储区的原因,是为了防止其他二进制数据(例如,具有与SG指令的操作码相同的值的查找表)被用作安全状态的入口函数。
内存区域的的安全属性定义
内存区域的安全属性是由Secure Attribution Unit(SAU)和Implementation Defined Attribution Unit(IDAU) 共同决定的。
SAU的作用和IDAU是相似的,都是用于分离安全区和非安全区。两者最大的区别是SAU位于CPU内部,IDAU在CPU外部。
无论是IDAU和SAU都可以定义一块内存的安全属性,此时CPU会选择两者中较高的安全属性作为此块内存最终的安全属性,最高的安全属性是Secure,其次是Non-Secure Callable,最后是Non-secure。
IDAU
IDAU除了可以向处理器指示特定存储器地址是Secure、NSC还是Non-secure,提供存储器地址所在的区域编号之外,它还可以标记免受安全检查的内存区域,例如ROM表。
IDAU由芯片厂商设计,一般不会对IDAU进行修改。
不同的芯片厂商设计也不是相同的。
STM32 L552xx:
NXP LPC55S6x:
SAU
SAU为每个内存区域定义了一个Region Number(RN)。RN可以被TT指令用来决定目标内存的访问权限和安全属性。RN的数量可以被SAU配置为0、4或者8。
STM32 L552xx 和 NXP LPC55S6x 的RN数量是8,也就是说最多可以划8个区域。
SAU是由开发者配置的,开发者可以在IDAU配置的内存属性的基础上,用SAU去重定义内存中的一些区域的安全属性,CPU会根据IDAU和SAU的配置,决定内存的最终安全属性。
复位后,默认的SAU配置是: 所有存储空间都是安全的。
更多推荐
所有评论(0)