ZHCAEP3 November 2024 F29H850TU , F29H859TU-Q1
在器件上建立信任根通常需要创建一个安全的执行环境,有时也称为可信执行环境 (TEE)。安全执行环境背后的基本理念是创建单独的代码执行域(或“世界”),这些域对系统资源具有不同的权限和访问权限。安全执行环境可以保护正在使用的代码和数据免受恶意软件或硬件未经授权的修改、提取或篡改。硬件安全模块 (HSM) 是安全执行环境的一个典型示例,专用于为主机微控制器或处理器提供加密服务、安全存储、信任根和身份验证。TI 的 AM26x 和 F29x 微控制器包括一个具有这些特性的内置 HSM,可为应用程序实现安全密钥和代码配置过程、安全启动、调试身份验证和加密服务。
在许多情况下,仅建立信任根还不够,因为现代应用必须处理互联环境中的潜在网络安全威胁。外部通信接口(如 CAN 总线或 UART 端口)可能容易受到攻击,而攻击的结果会损害运行这些接口的软件任务的完整性。鉴于这些威胁的不可预测性,完整的网络安全威胁评估必然包括假设存在被攻破的代码模块及其对整个系统的机密性、完整性、可用性和安全性造成的风险。因此,运行时应用程序安全性是嵌入式系统中网络安全实现的一个重要方面。
由于所需的额外处理负担(通常意味着增加延迟和降低整体控制环路性能),基于软件的运行时安全措施在实时控制系统中是不可取的。此外,基于软件的解决方案是不可改变的;被攻破的代码可能导致整个运行时安全装置失败。基于硬件的解决方案通常从某种类型的存储器保护单元 (MPU) 开始。MPU 使应用开发人员能够定义固定存储器区域,并根据启动器尝试访问每个区域的情况来配置其访问权限(读取、写入和执行)。这些启动器可以包括 CPU、DMA 和调试器。在 TI F29x 系列微控制器中,内存和外设访问保护对上下文敏感。根据每个应用程序代码模块所在的地址范围,应用程序可以分为多个代码模块。然后,属于代码模块的任何数据范围或外设都可以与其他代码模块共享,并定义了单独的读取或写入权限。这些硬件存储器保护特定于执行存取的代码模块,因此无需由管理 MPU 的软件操作系统层,从而在不影响性能的情况下保持代码和数据安全。
除了存储器访问保护之外,CPU 内部数据的安全性对于建立安全的执行环境也至关重要。入侵者可能在 CPU 执行代码时窥探 CPU,从 CPU 寄存器和共享栈内存中读取机密。处理该问题的一种方法是基于软件:操作系统层中的任务调度器负责使不同的应用程序任务或线程相互隔离。在切换到新任务时,操作系统会通过保存、清除和恢复寄存器来维护线程上下文。这种方法的主要缺点是,对实时处理应用程序非常关键的中断服务例程不能使用任务调度器直接隔离。因此,帮助隔离 CPU 内应用程序上下文的硬件特性是在嵌入式实时系统中实现运行时安全的关键。通常,这涉及到硬件处理栈指针,在“安全”和“非安全”领域之间进行区分,或多个完全隔离的栈(在 C29x 等 CPU 架构中)。通常,这种类型的 CPU 指令集包括需要跨越栈边界的门指令。门指令可以触发寄存器归零等进程,并提供一个相关的访问保护方案来指定可以写入或读取哪些存储器。在 Arm® TrustZone®-M 等架构中,通常需要 trampoline 函数或 veneer 函数来在从一个上下文转换到另一个上下文期间处理这些保护更改。
另一方面,德州仪器 (TI) C29x 主要处理硬件中的上下文切换,实时应用新的保护以更大限度地提高控制性能。
通过在 CPU 中启用对代码和数据的硬件保护,嵌入式系统设计人员能够将应用划分为安全沙盒和应用程序任务模块,每个沙盒和应用程序任务模块都有自己的私有代码、数据和外设。此外,每个任务模块还可以选择与其他任务共享存储器区域。图 5-1 展示了一个安全分区方案示例。实施此类方案通常需要实时操作系统层,但是借助硬件中的隔离式栈和上下文感知存储器访问保护,系统设计人员可以实现完全隔离,同时避免软件操作系统层附带的额外延迟。