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

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

3天内不再提示

实现改进微控制器单元安全性的方法

星星科技指导员 ? 来源:嵌入式计算设计 ? 作者:Ralph Moore ? 2022-10-20 17:19 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

这是由四部分组成的系列文章的第四部分,介绍了独特的产品 MPU-Plus? 以及使用 Cortex-M 内存保护单元 (MPU) 实现改进的微控制器单元 (MCU) 安全性的方法。第 3 部分介绍了分区问题,包括堆使用、函数调用 API、中断、父任务和子任务以及任务本地存储。第 2 部分介绍了分区、安全启动、MPU 控制和系统调用。 第 1 部分介绍了一些介绍性概念:MMU 与 MPU、对安全性的需求不断增加、保护目标、MPU Plus 快照、Cortex-v7M 和 v8M 以及 MPU 操作。

动态区域

如前所述,创建静态区域是一个耗时、繁琐且容易出错的过程。下面讨论的动态数据区域有助于减轻一些负担。

动态数据区域

以下函数允许在初始化期间或从 ptask 动态创建数据区域:

u8* mp_RegionGetHeapR(rp, sz, sn, attr, name, u32 hn);

u8* mp_RegionGetPoolR(rp, pool, sn, attr, 名称);

布尔mp_RegionMakeR(rp, bp, sz, sn, attr, name);

其中 rp 是指向所创建区域的指针,sz 是区域大小,sn 是插槽号,attr 是属性,名称是区域的可选名称,hn 是堆编号,池是块池句柄,bp 是块指针。上述内容可用于分别从堆、块池或静态块(例如stat_blk[100])创建数据区域。

通常 rp 指向动态保护区域数组 dpr[n] 中的条目。然后,按如下方式设置动态区域的 MPA 模板槽:

mpa_tmplt_t2a=MP_DYN_RGN;

其中 MP_DYN_RGN() 加载 dpr[n] 的地址,并在模板槽中设置动态区域标志。

这些函数通常应在任务开始运行之前在系统初始化期间调用。但是,它们也可以由 ptask 调用,这些 ptask 正在创建和初始化其他任务。

动态数据区域可用于存储静态数组和结构的混合,并且可以在任务之间共享它们。尽管它们不能用于全局变量,但它们确实节省了在代码中定义节、在链接器命令文件中定义块以及在模板中定义静态区域的复杂性。因此,它们更简单,更不容易出错。鉴于 sz 很可能是大小 () 的总和,它们在开发过程中也可能更灵活。

受保护的数据块

以下受保护的块函数允许从 utask 或 ptask 创建受保护的数据块,并在运行时释放它们:

u8* smx_PBlockGetHeap(sz, sn, attr, name, hn);

u8* smx_PBlockGetPool(pool, sn, attr, name);

BOOLEAN smx_PBlockMake(bp, sz, sn, attr, name);

BOOLEAN smx_PBlockRelHeap(bp, sn, hn);

BOOLEAN smx_PBlockRelPool(bp, sn, pool, clrsz);

其中参数与动态区域的参数相同,不同之处在于对于发布函数,bp 是其中一个 Get 函数返回的块指针,clrsz 指定在块的第一个字中的可用块链接之后要清除多少字节。基本上,块是从堆或池中获取的,或者由静态块制成的。为它创建一个区域,并将其加载到当前任务的 MPU[sn] 和 MPA[sn] 中。堆可以是任何堆,包括主堆。这是安全的,因为如果黑客渗透到任务中,MPU 会阻止他访问受保护块之外的堆内存。

动态分配的块可用于缓冲区、工作区、消息(见下文)或结构。如果任务的编写使得其所有静态变量都在结构中,例如:

u8* VP;

vp-》var1 = vp-》var2 + vp-》var3;

然后可以使用动态块来存储其静态变量。在上面,vp 是块Get()函数返回的块指针。(请注意,vp 是一个 auto 变量,因此存储在任务堆栈中,而不是结构中)。如果一个函数不是以这种方式编写的,那么转换它并不困难 - 只需在每个静态变量引用之前插入“vp-》”,定义一个VP结构,将变量名称作为字段,并将vp定义为指向VP的指针。

受保护的数据块和动态数据区域之间的区别在于,受保护的数据块可以在任务运行时获取,而动态数据区域是在初始化期间创建的,并且指向它的指针加载到任务的模板中。受保护的数据块对于用于创建临时缓冲区和受保护消息的 utask 特别有用,如下所述。

使用动态区域

使用动态数据区域、受保护的数据块或 TLS 替换task_data静态区域需要将所有任务全局变量重新定义为一个或多个结构中的字段。如果结构名称非常短,这不会明显使代码复杂化。例如,下面是来自电子堆的一些代码:

》EH_OK;

bsmap = hvp[hn]-》地图;

csbin = hvp[hn]-》

为了支持多个堆,有必要将离散全局变量更改为一组结构 hvp[hn]。在本例中,hvp[hn]-》粘贴到代码中每个全局变量名称的开头。Cortex-M 架构允许以与离散全局变量一样快或更快的速度访问结构 – 函数中的一条 LDM 指令加载结构基址,然后通过常量偏移访问字段。编译器可能无法对函数使用的所有离散全局变量执行此操作,因此访问它们的速度可能会较慢。使用结构还允许将一起使用的字段组合在一起,如果处理器具有指令缓存,则可以提高性能。通过使用 sizeof() 来确定指针偏移量,可以自动处理多个结构和数组。

受保护的邮件

smx 消息由链接到数据块的消息控制块 (MCB) 组成。smx_MsgMake() 函数可用于将受保护的数据块转换为受保护的邮件,当前任务将成为邮件所有者。消息发送到消息交换,并从消息交换接收。在消息交换时,消息的 MCB 链接到交换的控制块,进入等待消息队列。

图 11 说明了在任务之间传输受保护的邮件。任务 A 显示为绿色,任务 B 显示为蓝色。黄色表示 p 代码和 pdata,它们受任一任务的影响。如图所示,TaskA 在槽 sn 中获取一个 pdata 块,将其制作成一条消息,加载它,然后将其发送到 Xchg。作为发送操作的一部分,MPU 和任务 A 的 MPA 中的插槽 sn 将被清除。请注意,其他消息正在 Xchg 等待,而 MCBi 位于消息队列的顶部。任务 B 在插槽 sx 中接收它。请注意,rbar 和 rasr 是从 MCBi 获取的,用于在插槽 sx 中为消息的 pdata 块创建区域。TaskB 验证消息,该消息与应用程序相关,可能包括对数据执行范围和一致性检查。然后,它处理 pdata,取消生成消息,将插槽 sx 中的 pdata 块释放回其堆或池,并清除 MPU 和 TaskB 的 MPA 中的插槽 sx。

smx 中添加了两个受保护的邮件函数:

MCB_PTR smx_PMsgReceive(xp, bpp, sn, 超时);

布尔smx_PMsgSend(mp, xp, sn, pri, rp);

其中 xp 是交换指针,bpp 是指向消息块指针的指针,sn 是 MPU/MPA 插槽号,超时以刻度为单位,mp 是消息指针,pri 是消息优先级,rp 是回复指针(例如,发送到交换发送回复消息。)

如图 11 所示,当发送受保护的消息时,MPU 和当前任务的 MPA 中的插槽 sn 将被清除。因此,即使发送任务保留了指向消息块(例如 bpp)的指针,它也无法访问消息块。这挫败了在另一个分区中的接收任务验证消息后更改消息的黑客技术。它还会阻止在另一个分区中的接收任务更新消息后读取消息。

在交换时,消息块区域信息存储在消息的 MCB 中,并且交换是消息的所有者。当接收任务接收到消息时,其消息块区域信息被加载到 MPU 和接收方 MPA 的指定槽 sx 中,接收任务成为消息所有者。(sx 不必与发送任务使用的插槽相同。

现在,接收任务可以读取和修改消息,并可能将其发送到另一个交换。因此,可以创建一条消息,加载数据,传递给任务以检查数据并对其进行加密,然后传递给第三个任务以通过网络发送它。请注意,发送任务和接收任务之间存在完全隔离。当然,发件人可以发送某种破坏性消息。因此,接收方必须在接受消息之前执行验证。此安全级别是特定于应用程序的。

分区门户

如 第 3 部分 所述,分区入口支持将客户机分区与服务器分区隔离,并且是实现 100% 分区隔离所必需的,这对于实现强安全性至关重要。它们建立在上述受 smx 保护的邮件之上。受保护的邮件满足 Arm PSA 安全 IPC 要求(请参阅第 1 部分中的参考文献 3),而无需复制邮件。因此,引入门户与普通函数调用 API 可能不会明显降低性能。

如图 12 所示,分区入口由标记为 XI 和 XO 的交换组成 — 每个方向一个。添加到客户机分区的代码(由虚线右侧的区域表示)将函数调用及其参数转换为发送到 XI 交换的消息。然后,客户端任务在 XO 交换处等待回复消息。

在添加到服务器端的代码中(由虚线左侧的区域表示)中的服务器任务正在 XI 交换处等待消息。当它收到消息时,它会使用消息中的参数将其转换为函数调用。然后,它将来自函数调用的返回信息放入发送到 XO 交换的消息中。客户端任务从 XO 交换接收消息,并将信息返回给客户端分区中的调用方。

显然,要将分区之间的函数调用接口转换为分区门户,需要做很多工作。但是,结果是强分区隔离。当然,这会降低性能。数据缓冲区在消息中传递。如果正在修改现有代码,则可能需要将数据从缓冲区复制到消息,反之亦然。如果要创建新代码,则可以将其设计为在无复制模式下处理消息。在后一种情况下,性能影响可能很小。

请注意,数据复制问题也存在于基于 MMU 的大型系统中。实际上,在这种情况下,由于虚拟地址空间,不存在无复制解决方案。因此,在基于 MPU 的系统中,通过入口进行的分区间通信可能比基于 MMU 的系统中的进程间通信更有效。这有利于较小的分区,每个分区执行较少的工作,因此系统安全性可能更好。较小的分区也使冗余路径更实用 - 例如,两个独立的路径将可疑活动报告回总部。

调试支持

启用安全功能时,调试代码更具挑战性。因此,SecureSMX 允许在早期代码开发和调试期间覆盖大多数安全功能,以帮助加快这些阶段。可以在后期调试期间重新启用安全功能,通过检测堆栈和缓冲区溢出以及其他问题,它们实际上会变得很有帮助。此外,建议在开发走得太远之前开始解决安全问题。

smx软件?包括许多与安全相关的功能,以帮助调试基于MPU Plus的软件。它显示当前 MPU 和所有任务 MPA,以及命名区域。图形化的内存映射概述在内存条中显示 MPU 区域。将显示开始地址和结束地址以及排除的子区域。在所有显示器中,都会标记对齐和重叠等错误。有关详细信息,请参阅:

smxAware用户指南,由马蒂·科克伦和大卫·摩尔,微数码公司。

结论

软件工程已经失去了它的天真 - 我们现在正在为一个充满敌意的世界设计。不可能实现完美的安全性,但它可以非常好。毫无疑问,一个坚定的黑客会发现一些弱点,即使是你能设计出的最好的安全性。因此,有必要分析所有代码与可能的威胁。

在某些情况下,代码体的设计和实现可能非常糟糕,因此非常脆弱,以至于重新设计它是一个毫无希望的命题。在这种情况下,使用本文中介绍的方法将代码保持原样并将其放入完全隔离的 umode 分区中可能更具成本效益。然后,有必要设计一个策略来处理不可避免的闯入,并实现必要的代码来处理它。在此过程中,可能会发现一些潜在的错误。

如果升级旧代码以提高现有产品的安全性,或者使用旧代码开发新产品,则主要工作通常是重构旧代码。所需的重新编码量可能很小,具体取决于代码开始时的结构。当然,新代码应该从一开始就为安全而设计。

安全性为产品开发增加了另一个维度。不仅要考虑如何实现功能,还要考虑黑客如何访问该功能以造成损害或窃取私人数据。MMF在调试过程中很烦人,但它们证明了硬件安全机制确实有效!MPU-Plus的目标是提供一条路径,在不造成过度痛苦的情况下实现良好的安全性。

审核编辑:郭婷

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

    关注

    48

    文章

    7967

    浏览量

    156113
  • mcu
    mcu
    +关注

    关注

    146

    文章

    18031

    浏览量

    369321
  • MPU
    MPU
    +关注

    关注

    0

    文章

    420

    浏览量

    50041
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何在MCXN947微控制器上配置安全启动和生命周期

    本文档旨在介绍如何在MCXN947微控制器上配置安全启动和生命周期,以确保产品在量产阶段的安全性,防止代码被窃取和篡改,并且能够安全地升级更新固件。通过本应用笔记,开发者可以更好地理解
    的头像 发表于 06-26 09:49 ?1294次阅读
    如何在MCXN947<b class='flag-5'>微控制器</b>上配置<b class='flag-5'>安全</b>启动和生命周期

    MAXQ1741用于磁卡读卡的DeepCover安全微控制器技术手册

    DeepCover 嵌入式安全方案采用多重先进的物理安全机制保护敏感数据,提供最高等级的密钥存储安全保护。 DeepCover安全微控制器
    的头像 发表于 05-15 09:48 ?305次阅读
    MAXQ1741用于磁卡读卡<b class='flag-5'>器</b>的DeepCover<b class='flag-5'>安全</b><b class='flag-5'>微控制器</b>技术手册

    MAX32670高可靠、超低功耗微控制器技术手册

    在Darwin家族中,MAX32670是一款超低功耗、高性价比、高可靠的32位微控制器,在实现复杂的传感处理设计的同时不会影响电池寿命。器件集成了高度灵活性的多功能电源管理
    的头像 发表于 05-08 11:48 ?380次阅读
    MAX32670高可靠<b class='flag-5'>性</b>、超低功耗<b class='flag-5'>微控制器</b>技术手册

    儒卓力推出基于英飞凌微控制器的AI控制系统

    的进一步开发,并将其整合到面向应用的演示中。最新成果是基于英飞凌PSOC Edge E84微控制器开发的AI控制系统,集成RAB3雷达手势识别与关键词识别功能。该微控制器支持在边缘端进行神经网络本地化计算,大幅提升系统响应速度、
    的头像 发表于 04-09 10:21 ?604次阅读

    在STM32微控制器实现数据加密的方法

    在STM32微控制器实现数据加密,可以通过多种方法和技术来确保数据的安全性。以下是一些常见的方法和步骤: · 使用内置加密库: · · S
    发表于 03-07 07:30

    STM32H753IIT6 一款32位微控制器MCU/MSP430F5325IPNR一款16位MCU

    ?MSP430F5325IPNR?是一款16位低功耗微控制器,属于MSP430系列。该微控制器具有以下主要特点和功能: 1、低功耗设计?:MSP430F5325IPNR采用低功耗设计,适合对能耗敏感
    发表于 02-21 14:59

    意法半导体与HighTec合作提升汽车软件安全性

    合作的核心在于整合了HighTec的ISO 26262 ASIL D认证Rust编译与意法半导体的Stellar系列28nm微控制器。Stellar系列微控制器是意法半导体的首款通过同一安全
    的头像 发表于 02-18 09:52 ?567次阅读

    如何实现 HTTP 协议的安全性

    协议的安全性,可以采取以下几种方法: 1. 使用HTTPS HTTPS(安全超文本传输协议)是HTTP的安全版本,它在HTTP的基础上通过SSL/TLS协议提供了数据加密、数据完整
    的头像 发表于 12-30 09:22 ?1001次阅读

    FPGA 与微控制器优缺点比较

    在现代电子设计领域,FPGA和微控制器(MCU)是两种常用的计算平台。它们各自具有独特的优势和局限性,适用于不同的应用场景。 性能 FPGA FPGA是一种可编程的硬件,由大量的逻辑单元、触发
    的头像 发表于 12-02 09:58 ?1259次阅读

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

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

    STM32WB0系列无线微控制器满足低功耗蓝牙应用需求

    蓝牙技术作为应用最为广泛的2.4GHz短距离通信技术,对无线微控制器芯片的集成度、功耗、性能、安全性等有较高要求。STM32WB0系列,是兼具高性价比和低功耗的无线微控制器,可充分满足无线蓝牙应用对芯片的要求。
    的头像 发表于 10-12 11:03 ?1182次阅读
    STM32WB0系列无线<b class='flag-5'>微控制器</b>满足低功耗蓝牙应用需求

    ESP32 微控制器系列指南

    Systems 创建了功能强大且价格实惠的片上系统 (SoC) 设备,将 Wi-Fi、蓝牙和中央处理单元 (CPU) 集成到一个微控制器封装中,使这些 SoC 成为理想的选择适用于嵌入式控制器和物联网项目
    的头像 发表于 10-02 18:21 ?5130次阅读
    ESP32 <b class='flag-5'>微控制器</b>系列指南

    什么是微控制器/它的关键组成部分有哪些?

    微控制器
    芯广场
    发布于 :2024年09月18日 15:02:33

    微控制器内部的存储有哪些

    微控制器(MCU)内部的存储微控制器系统的重要组成部分,它负责存储程序代码、数据以及控制逻辑等信息。这些存储类型多样,各具特点,共同支
    的头像 发表于 08-22 10:41 ?1531次阅读

    微控制器的结构和应用

    微控制器(Microcontroller Unit,简称MCU)作为嵌入式系统的核心部件,其原理和应用在现代科技发展中占据了举足轻重的地位。本文将从微控制器的原理、基本结构、工作原理、性能特点以及广泛的应用领域等方面进行详细阐述,旨在全面介绍
    的头像 发表于 08-22 10:40 ?2699次阅读