几乎每个嵌入式系统都需要一定程度的安全性,无论是锁定编程端口的基础知识还是保护连接设备免受黑客攻击的更复杂的东西。对于许多开发人员来说,创建安全的嵌入式系统可能会令人生畏。许多嵌入式开发人员并非来自安全背景,必须随时学习安全概念。在建立安全系统的主要要素时,有五个关键要素:
基于硬件的隔离
信任根(RoT)
安全启动解决方案
安全的引导加载程序
安全存储
今天我们来讲讲第一要素——基于硬件的隔离。
谈到安全性,应该在开发人员脑海中回荡的关键概念是安全性始于隔离。开发人员需要将他们的应用程序隔离到不同的域中,每个域都有自己的权限并且只能访问特定的内存区域。在传统的嵌入式系统中,许多应用程序的架构使得任何软件模块或组件都可以访问整个内存映射。如果黑客能够访问内存中的单个模块,他们就可以毫不费力地完全拥有该系统。
隔离背后的想法是将应用程序分解为单独的安全域。如果黑客能够访问内存中的一个区域,他们将无法访问其他内存区域。如果他们想要访问,他们必须投入更多的时间和精力来弄清楚如何突破隔离屏障。在嵌入式系统中实现隔离的最好方法是实现基于硬件的隔离,它有几种不同的形式,应该一起使用。
隔离工具 #1 – 处理器架构
首先,对于安全性至关重要的应用程序,嵌入式开发人员应该使用具有基于硬件隔离的微控制器将应用程序执行环境分成两个不同的环境; 安全和非安全环境。 安全区域处理对保护设备至关重要的外围设备、内存和功能。 非安全环境是传统的、丰富的执行环境。 在现代微控制器中,这种隔离通过两种方式实现,一种是使用赛普拉斯 PSoC 64 等多核处理器,另一种是使用 Arm 的 TrustZone 等单核隔离技术。
多核微控制器通过具有一个专用于安全处理环境和一个专用于非安全处理环境的微控制器内核来实现基于硬件的隔离。另一方面,TrustZone 只是一个在安全处理环境和非安全处理环境之间切换的单核,TrustZone 确实需要几个时钟周期来在环境之间切换,但允许开发人员使用单个内核。
单核和多核解决方案都很有趣,并且提供了第一个基于硬件的隔离层。
隔离工具 #2 – 内存保护单元 (MPU)
无论使用哪种主要隔离技术,许多安全应用程序中的第二个隔离层都是使用内存保护单元 (MPU) 进一步分解应用程序。 MPU 已成为微控制器中的常用工具,因为它们可用于安全应用并提高应用的稳健性。 事实上,许多专为安全解决方案设计的微控制器将在安全和非安全执行环境中都有 MPU。
MPU 可用于在内存映射中创建额外的边界,强制功能和任务仅在其特定进程中使用内存。如果出于某种原因这些函数试图访问其分配区域之外的内存,MPU 将检测到内存违规并引发异常。 MPU 可用于创建安全任务和分区,从而进一步隔离应用程序组件。
隔离工具 #3 – SMPU 和 PPU
帮助基于硬件的隔离的最后一个工具是 SMPU 和 PPU。有些微控制器包含额外的安全层,允许嵌入式开发人员共享内存内容。这些被称为共享内存保护单元 (SMPU)。 SMPU 可以区分处理器内的不同保护上下文,包括安全访问和非安全访问之间的差异。这些上下文对于在应用程序中开发不同级别的安全和访问非常有用。
开发人员还可以利用外围保护单元 (PPU)。 PPU 管理对不同外围模块(如 UART、SPI、USB 等)的访问。这些访问可能发生在由 SMPU 控制的不同安全上下文中,而这些安全上下文又保护运行在可能两个不同的 MPU 上下文中的上下文微控制器内的内核!(或在单个处理器内的两个硬件隔离区域内)。
在开发安全的嵌入式系统时,开发人员可以利用这些不同的机制来构建屏障并隔离代码,从而使黑客更难以访问系统。事实上,我甚至看到并听说过芯片供应商提供的未来安全产品,这些产品将允许开发人员轻松地将他们的执行环境分解为许多可以被视为执行容器的小型执行环境。在接下来的几年里,看看这些方案将变得多么复杂和强大,以及如果开发人员实施它们,他们的系统将变得多么安全,将会很有趣。
嵌入式开发人员在嵌入式系统中实现安全性的第一个要素是将他们的应用程序分解为硬件隔离的执行环境。基于硬件的隔离设置了一道屏障,使黑客更难以完全访问系统和其中包含的数据,并且更加耗时。基于硬件的隔离首先将执行环境分解为安全和非安全执行环境,然后可以通过使用 MPU、SMPU 和 PPU 进一步分解这些环境中的每一个。