随着嵌入式系统开发人员转向创建连接的物联网设备,安全性已成为他们面临的最重要问题之一。 ARMv8-M 处理器确实支持 TrustZone,它为开发人员提供了一种新机制,帮助他们将安全软件与更通用的用户软件隔离开来。 就像使用任何新工具一样,嵌入式开发人员应该遵循一些提示,以确保他们提高系统安全性。
提示 1 — 执行安全审计以了解安全需求
在尝试使用 TrustZone 之前,开发人员必须执行安全审核并确定其系统中需要保护的内容。 这可能因应用程序而异,但可能包括:
钥匙
数据
库
应用代码
外围设备
内存位置
通讯
根据需要保护的资源,将有不同的方法来保护该资源,例如使用加密或隔离。 TrustZone 旨在帮助开发人员隔离他们的设计。
技巧 2 — 使用安全代码尽量减少对非安全内存的访问
TrustZone 将微控制器硬件分为两个区域:安全和不安全。不安全代码只能访问安全存储器以执行“公开”功能。这允许用户应用程序调用安全功能。但是尝试访问这些公开函数之外的任何内容都会导致错误。这很好,但对嵌入式开发人员来说一个潜在的问题是安全代码可以访问所有非安全内存区域。
开发人员在使用安全代码访问非安全内存时需要小心。开发人员可以使用 TT 指令来检查该区域的权限。这将防止在安全区域中意外执行不安全代码。开发人员应使用安全代码来访问安全代码,并尽量减少对非安全内存的访问。
技巧 3 — 从无银行账户的寄存器中清除秘密信息
在 TrustZone 实现中,如果处理器在非安全模式下运行,则存在不可见的安全寄存器。 但是,有一些处理器寄存器在安全模式和非安全模式之间存储和共享。 这意味着,如果执行了安全操作,并且部分数据存储在存储寄存器中,那么该过程将切换到非安全模式。 然后可以通过存储的寄存器提供安全数据。 为了防止这种情况发生,开发人员需要确保在跳回非安全执行模式之前清除所有使用的未分区寄存器。 否则,这可能成为黑客获得洞察力甚至访问安全代码区域的一种方式。
技巧 4 — 在启动时验证非安全映像
当 TrustZone 处理器启动时,会自动进入安全模式。这为开发人员提供了机会,不仅可以初始化他们的处理器,还可以安全地启动处理器。嵌入式开发人员可以验证他们的用户应用程序,并确保在跳转到不安全模式并运行用户应用程序之前一切正常。如果攻击者设法将他们自己的代码或应用程序插入内存,安全代码可以在启动时检测到这一点,并采取必要的行动来阻止使用系统的尝试。这可能会导致开发人员想知道:如果安全代码区域发生变化会发生什么?安全区域被锁定,没有特殊工具无法修改。
技巧 5 - 同时使用非安全和安全 MPU
TrustZone 的另一个非常有趣的特性是它为不安全的内存区域和安全区域提供了一个内存保护单元 (MPU)。这意味着即使在安全内存中,开发人员也可以采取额外的预防措施来保护内存。 MPU 可以设置为监视在 RTOS 中执行的安全任务或检测溢出任务堆栈的尝试。这为开发人员在如何实施其安全解决方案方面提供了相当大的灵活性。
结论
对于许多开发团队来说,为连接的设备增加安全性无疑是一项具有挑战性的工作。 TrustZone 为开发人员提供了一个额外的工具来帮助提高安全性。 就像任何工具一样,它需要正确使用才能有效。 我们已经在本文中查看了一些简单的技巧,但为了保护嵌入式系统,嵌入式开发人员还有很多工作要做。