0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Cortex-M内存保护单元来提高MCU安全性的方法

星星科技指导员 来源:嵌入式计算设计 作者:Ralph Moore 2022-10-20 17:27 次阅读

这是由四部分组成的系列文章的第一部分,介绍了独特的产品 MPU-Plus® 以及使用 Cortex-M 内存保护单元 (MPU) 实现改进的微控制器单元 (MCU) 安全性的方法。

模压传感器与模压单元

几十年来,大型操作系统在具有MMU的微处理器上使用隔离过程来实现分离和系统安全性。我们最近增强的产品 MPU-Plus 使用带有 MPU 的微控制器为 SMX 实时操作系统添加了类似的功能。这已经为Cortex-M架构完成了,并将在将来扩展到其他架构。

内存管理单元 (MMU) 与完整操作系统 (OS) 一起使用,为进程提供隔离的虚拟内存。进程是独立编译和链接的,然后由操作系统(如 Windows 和 Linux)单独加载和运行。进程到进程的隔离已经足够好了,如果一个进程被恶意软件感染或由于任何其他原因开始出现故障,操作系统通常可以将其关闭,而对其他进程几乎没有损害。因此,安全性很好。MMU的使用是经过充分研究和充分理解的。MMU使用的缺点是它通常需要高性能处理器和非常大的内存。

快速、耗电的处理器和巨大的内存与大多数嵌入式系统的要求不兼容。此外,完整的操作系统没有许多应用程序所需的实时响应时间。因此,大多数嵌入式系统使用低功耗、中等性能的微控制器单元 (MCU) 和实时操作系统 (RETOS)。与完整的操作系统系统相比,这些系统通常具有较小的内存。出于安全考虑,许多 MCU 提供内存保护单元 (MPU),这些单元无法像 MMU 那样创建虚拟地址空间。

在大多数嵌入式系统中,我们处理的是分区而不是进程。这个想法基本上是相同的 - 分区包括一个或多个任务,并为系统执行特定功能。就像进程一样,希望将分区彼此隔离,以便在一个分区被穿透或开始出现故障时,可以停止它,同时对系统其余部分的损害最小。不幸的是,这在使用 MPU 的嵌入式系统中并不像在使用 MMU 的完整操作系统系统中那样容易实现。这里最大的挑战是所有MCU软件都被编译并链接到一个可执行文件中。此外,MPU 还施加了自己的限制。MPU的安全性使用没有得到很好的研究,也没有得到充分的了解,并且涉及许多复杂的权衡,特别是因为嵌入式系统通常具有较小的存储器,中等性能的处理器,功率限制以及对确定性实时性能的需求。

对安全性的需求日益增加

如果它如此困难,为什么要打扰呢?这似乎是嵌入式系统行业在过去几十年中采用的方法。不幸的是,这还不够长,因为嵌入式系统正在快速连接到物联网IoT)中。因此,一旦被隔离,无防御的嵌入式系统就可以通过黑客高速公路(又名互联网)进行访问。这意味着麻烦。

保护目标

保护的主要目标是保护受信任的关键软件和数据免受不太受信任的非关键软件的侵害,这些软件可能会感染恶意软件或有缺陷。受信任软件的示例包括 RTOS、异常处理程序、安全软件(例如加密、身份验证、安全启动、安全更新等)和任务关键型软件。不太受信任的软件的示例是易受恶意软件攻击的代码,例如协议堆栈、设备驱动程序、SOUP 和未充分测试的代码。

第二个目标是检测入侵和错误并关闭它们,以便关键系统操作不会受到威胁,敏感数据也不会被盗。处理入侵和错误可以通过停止和重新启动渗透的任务来处理,或者可能需要停止并重新启动整个系统。

第三个目标是最大限度地减少受信任的代码量,因为仔细编写少量代码更容易。在非特权模式下运行更多代码可增加分区隔离,从而提高可靠性。

必须实施的保护程度取决于特定系统的安全和安全要求及其面临的威胁。MPU-Plus 提供一系列安全服务,可实现适合给定系统的保护级别。此外,随着系统分布范围越来越广,因此更容易受到攻击,在将来的版本中可以增加保护。MPU-Plus旨在促进逐步的保护改进。

超强快照

MPU-Plus的主要目的是增强基于SMX®实时操作系统的多任务系统的安全性。MPU-Plus 为帮助实现更好的安全性所做的主要工作是:

允许为每个任务定义不同的MPU模板;

在任务切换期间处理MPU切换;

提供 SVC API 以允许非特权代码调用特权服务;

限制哪些服务可以从非特权代码调用以及它们可以做什么;

允许分配受保护的块和消息;

在特权模式下运行SMX RTOS和系统代码,在非特权模式下运行中间件和应用程序代码;

允许任务具有特权或非特权。

作为构建安全性的平台。

MPU-Plus 有两个主要设计目标:

更轻松地转换旧代码以使用 MPU 和 SVC API。

允许开发人员专注于保护策略,而不会被 MPU 特性和其他硬件细节所困扰。

实施良好的保护策略已经够困难的了。细节层面的过度复杂化不仅令人沮丧,还可能导致采用不太理想的系统保护。

Cortex-v7M

Cortex-v7M 处理器架构于 2005 年推出,适用于中型嵌入式系统。从那时起,半导体行业开发了数千种不同的Cortex-v7M微控制器单元(MCU)。它们用于设备制造商开发的数以万计的产品中;迄今为止,已经出货了数十亿个芯片。它是迄今为止占主导地位的MCU架构(70%的市场份额),因此也是我们支持的架构。

Cortex-v7M体系结构提供以下安全功能:

特权模式。

主管呼叫 (SVC) 指令。

内存保护单元。

第一种是通过三种处理器操作模式实现的:

处理程序模式:ISR、错误处理程序、SVC 处理程序和 PendSV 处理程序的特权模式。只能通过中断或异常进入此模式。

特权线程模式:特权任务在此模式下运行。它只能通过设置 CONTROL.nPRIV = 0 从处理程序模式输入。

非特权线程模式:非特权任务在此模式下运行。可以通过设置 CONTROL.nPRIV = 1 从上述两种模式中的任何一种模式输入它。

为了减少接下来讨论中的冗长,我们使用以下缩写术语:前两种模式统称为pmode,第三种模式称为umode。p 前缀可以解释为特权或受保护;u 前缀可以解释为非特权或用户。在 pmode 中运行的代码和任务称为 p 代码和 ptask;在 umode 中运行的代码和任务称为 ucode 和 utasks

Cortex-M架构的关键方面是,只能通过中断或异常输入 pmode。SVC N 指令会导致此类异常。它可以从带有 8 位参数 N 的 umode 执行。这允许从 umode 进行系统调用,其中 N 指定要调用的函数。被调用的函数在 pmode 中执行。SVC 也可以从模数执行。

MPU 为 M 区域提供 M 插槽。每个区域都有起始地址、大小和访问参数,例如只读 (RO)、读/写 (RW)、从不读取 (XN) 等。如果 MPU 中的至少一个区域不允许内存访问,则会生成内存管理故障 (MMF)。MMF 是导致 MMF 处理程序运行的异常,该处理程序通常会停止有问题的任务并确定要执行的操作以进行恢复。

pYYBAGNRFJmAbLd5AAGVwh-Ud1g045.png

图 1 显示了一个只有 4 个插槽的示例 MPU。(大多数 MPU 有 8 个插槽,有些有 16 个插槽。存储在 MPU[0] 中的区域是任务代码的 RO 区域。MPU[1] 区域是代码的 RO 区域,与其他任务通用。存储在 MPU[2] 中的区域是用于数据的 RW 和 XN 区域。最后一个区域是任务堆栈,也是 RW 和 XN。下面显示了可选的任务本地存储 (TLS),它可以是任务堆栈区域的一部分,可用于本地任务数据。由于仅提供了指向 TLS 的指针,因此数据必须是结构或数组。它具有与任务堆栈相同的属性。此任务无法访问内存的白色区域。

v7 MPU 的一个严重缺点是区域大小必须是 2 的幂,并且区域必须在其大小边界上对齐。这一要求可能是v7 MPU使用率低的主要原因,但可以克服。实际上,MPU的最大缺点是插槽不足。几乎所有的 Cortex-M 处理器都有带有八个插槽的 MPU。当一个人开始为实际分区创建区域时,八个是不够的 - 12个可能刚刚好。一些处理器有16个插槽;强烈建议将这些用于新设计。我们同时支持 8 个和 16 个插槽 MPU,但我们的重点是前者,因为它们是迄今为止最常见的。

尽管 Cortex-v7M MPU 具有显著的局限性,使其难以使用,但它是 Cortex-v7M 处理器可用的硬件内存保护的唯一手段,硬件保护是唯一有效防止黑客攻击的保护措施。因此,重要的是要找到有效使用它的方法,以实现现代嵌入式系统所需的可靠性,安全性和安全性。

Cortex-v8M

Cortex-v8M 架构是在几年前宣布的。迄今为止,使用它的处理器很少。v8 MPU 将区域大小和对齐要求大大降低到 32 字节的倍数。这对于内存有限的嵌入式系统很有帮助。但是,MPU 插槽的数量在 v8 体系结构中保持不变。希望半导体供应商能够选择16个而不是8个插槽,至少在非安全状态下是这样。我们将很快支持 v8 MPU。

Cortex-v8M 体系结构还提供了一个名为 TrustZone 的新功能,该功能允许安全和非安全状态。信任区安全状态适用于密钥和其他私有数据的存储。但是,在安全状态下运行代码可能不值得额外的代码复杂性和调试难度。阿姆说不然,所以我们得看看。此外,我们预计大多数设备制造商都需要一个同时适用于 v7 和 v8 处理器的安全解决方案。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17129

    浏览量

    351006
  • 操作系统
    +关注

    关注

    37

    文章

    6808

    浏览量

    123285
  • 微处理器
    +关注

    关注

    11

    文章

    2259

    浏览量

    82405
收藏 人收藏

    评论

    相关推荐

    电池的安全性测试项目有哪些?

    选择更加安全可靠的电池产品,也能提高对电池安全性的信任。在电池技术日益进步的今天,安全性测试仍将是确保电池产品质量和用户安全的重要保障。
    的头像 发表于 12-06 09:55 283次阅读
    电池的<b class='flag-5'>安全性</b>测试项目有哪些?

    如何使用Ozone分析Cortex-M异常

    Ozone可以帮助用户快速分析和查找导致CPU故障的软件bug。本文解释如何使用Ozone的调试功能,深入了解Cortex-M架构上的这些错误。
    的头像 发表于 11-29 11:14 677次阅读
    如何使用Ozone分析<b class='flag-5'>Cortex-M</b>异常

    在电气安装中通过负载箱实现最大效率和安全性

    在电气安装中,负载箱是一种常用的设备,主要用于模拟实际的电力负载,以便进行各种电气设备的测试和调试。通过负载箱,可以实现最大效率和安全性,从而提高电气设备的运行性能和使用寿命。 负载箱可以实现最大
    发表于 11-20 15:24

    云计算安全性如何保障

    云计算的安全性是一个复杂而多维的问题,涉及多个层面和多种技术手段。为了保障云计算的安全性,需要采取一系列综合措施,以下是具体的保障方法: 一、数据加密 数据加密是保护云计算
    的头像 发表于 10-24 09:14 253次阅读

    在跨境电商中,如何确保网络节点的安全性和合规

    在跨境电商中,确保网络节点的安全性和合规是至关重要的。以下是一些关键措施: 1、数据保护:加强数据保护提高安全性的重要方面。这包括确保所
    的头像 发表于 09-25 13:45 398次阅读

    请问DM平台访问安全性如何控制?

    DM平台访问安全性如何控制?
    发表于 07-25 06:10

    蓝牙模块的安全性与隐私保护

    据传输过程中的安全性问题,分析隐私保护方面的挑战和解决方案,并介绍一些提高蓝牙模块安全性和隐私保护的先进技术。 蓝牙模块在数据传输过程中的
    的头像 发表于 06-14 16:06 538次阅读

    能否建议通过内存映射提高aur性能?

    我们使用英飞凌 Aurix TC364 作为平台。 我们试图通过将 ISR 映射到不同的内存单元提高 ISR 函数的性能,具体方法是使用 #pragma section code
    发表于 05-29 07:39

    STM32H750使能内存保护后DMA异常的原因?怎么解决?

    STM32H750 在使能内存保护后启用cache 导致SPI+DMA传输不准确,具体就是调用HAL_SPI_TransmitReceive_DMA 这个函数,读到的数据全是0,但是拿逻辑分析仪看上面显示的数据是正确的。
    发表于 05-24 07:53

    M8_5芯插座安全性好吗

      德索工程师说道从设计和结构方面来看,M8_5芯插座通常采用高强度、耐用的材料制造,这有助于抵抗外部环境中的物理冲击和机械应力。此外,其结构设计往往注重稳定性和可靠,确保在长期使用过程中不易出现松动或损坏的情况。这种设计思路在很大程度上
    的头像 发表于 04-15 14:12 267次阅读
    <b class='flag-5'>M</b>8_5芯插座<b class='flag-5'>安全性</b>好吗

    DC电源模块的安全性能评估与测试方法

    电压稳定性、输入电流范围、输入电流保护等方面的测试。测试方法可以是逐步增加输入电压或输入电流,观察模块的工作状态和保护功能。 2. 输出安全性测试:包括输出电压范围、输出电压稳定性、输
    的头像 发表于 03-08 11:15 690次阅读
    DC电源模块的<b class='flag-5'>安全性</b>能评估与测试<b class='flag-5'>方法</b>

    STM32H750在使能内存保护后启用cache导致SPI+DMA传输不准确怎么解决?

    STM32H750在使能内存保护后启用cache 导致SPI+DMA传输不准确,具体就是调用HAL_SPI_TransmitReceive_DMA 这个函数,读到的数据全是0,但是拿逻辑分析仪看上面显示的数据是正确的。
    发表于 03-07 06:12

    Cortex-M85内核单片机如何快速上手

    2022年4月,Arm推出了全新的MCU级内核Cortex-M85。截止目前(2024年2月),Cortex-M85是最新、最强的Cortex-M内核。
    发表于 02-29 09:35 741次阅读
    <b class='flag-5'>Cortex-M</b>85内核单片机如何快速上手

    ARM®Cortex®-M23 32位MCU数据表

    电子发烧友网站提供《ARM®Cortex®-M23 32位MCU数据表.pdf》资料免费下载
    发表于 02-22 14:32 0次下载
    ARM®<b class='flag-5'>Cortex</b>®-<b class='flag-5'>M</b>23 32位<b class='flag-5'>MCU</b>数据表

    请问mbed物联网操作系统会成为cortex-m中的android吗?

    mbed 物联网操作系统会成为cortex-m中的android吗?
    发表于 01-17 07:14