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

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

3天内不再提示

识别嵌入式Linux设备的安全固件更新机制和开源选项

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

扫码添加小助手

加入工程师交流群

物联网IoT)的快速增长引发了数十亿联网无线嵌入式设备的出现。从医疗设备到水箱传感器、智能恒温器、智能路灯、水监测器等,物联网的应用范围比以往任何时候都要广。

可能出现什么问题?

这些设备中的大多数在设计上都不是恶意攻击的目标。嵌入式系统传统上被认为是稳定的产品,但实施成本高昂,投资回报率(ROI)计划在相当长的生命周期内进行。一旦发货,它们很少需要更新。开发更新并在该领域实际应用它们的需求和成本随着智能手机操作系统(OS)如Android的爆发而变得普遍。

突然之间,恶意黑客现在将所有这些易受攻击的连接设备作为潜在目标,这些设备在不充分的,过时的操作系统和Linux内核上运行,这些操作系统和Linux内核具有尚未修补的已知漏洞,并且可以远程利用!

这不是一个非常有吸引力的前景。

安全更新:嵌入式与服务器

如今,一类新的现场软件更新正在出现,这种更新受到安全问题的推动,但也允许工程师添加新功能和修复错误。

对于嵌入式设备,固件更新机制不仅必须安全,而且必须可靠,因为它要么更新成功,要么无法恢复到可恢复状态。软件更新绝不应该破坏设备,并且应该能够在无人值守的情况下发生。大多数更新还必须保留以前的设备状态,尽管在某些情况下,恢复设备可能涉及重置为默认状态。

还有原子性问题。Linux服务器世界习惯于执行基于包的更新,一切似乎都很好。但嵌入式设备不是服务器。

服务器通常位于受控环境中,可能是安全的,并且具有有保证的电源和网络连接。它还驻留在受监视的可访问位置,因此即使不希望用户进行恢复,也可以进行用户干预。

Linux 服务器通常依赖于包管理,通常是基于 rpm 的(已修改的黄色狗更新程序或 YUM)或基于 deb 的 (apt),具有执行非原子增量更新的依赖关系解析。更新由软件包版本更新驱动,每个更新都有一组复杂的安装前/安装后脚本,这些脚本可能会使系统处于未定义甚至非工作状态。

不幸的是,嵌入式设备可能无法访问,可能大部分时间都处于低功耗模式,使用寿命非常长,并且可能遭受可能中断固件更新的电源或网络中断。

最终,基于包管理器的更新不是原子的,因此很难测试和支持它们。这通常会导致丢失对设备上固件实际状态的跟踪,以及可怕的“我上次在此设备上更新了什么?”问题。这不适用于期望始终一致执行的嵌入式系统。

图像更新

更新嵌入式设备的传统且未经验证的最佳方法是执行整个映像更新。在裸机设备中,这将是包含所有设备固件的整个映像。在嵌入式Linux设备中,这通常转换为分区更新,因此分区方案是一个重要的考虑因素,因为它会影响可以执行的软件更新类型。

嵌入式 Linux 设备通常会将媒体划分为可以单独更新的不同分区:

引导加载程序分区: 很少(如果有的话)更新,在现场更新嵌入式设备的引导加载程序将导致设备最终变砖。因此,经过深思熟虑的更新机制会尽可能避免这种情况。

引导/内核分区: Linux 内核和相关工件(如设备树和 initramfs 映像)通常出于安全性而不是功能原因而发生。通常不需要更新。

根文件系统分区: 存储操作系统文件的位置通常是只读不可变的。这也很少更新,但如果应用程序依赖于此处的库,则可能会更频繁地发生这种情况。

用户分区: 用户应用程序和持久性数据的存储位置是最常需要更新的分区。

基本上,映像固件更新的范围可以从整个系统(即内核、根和用户分区)到其中一些分区。

有两种类型的映像更新是可能的:对称的和不对称的。

对称: 对称更新需要正在更新的分区映像的双重副本,以便可以在另一个正在运行时更新一个分区映像。这通常需要两个引导/内核分区、两个根文件系统以及两个用户分区。然后,引导加载程序跟踪给定引导要使用的分区。对称更新具有最短的停机时间,通常只有重新启动时间,并允许取消更新。

非 对称: 非对称更新使用通常从内存运行的恢复操作系统,具有 Linux 内核和初始化映像。这减少了所需的分区数,因为恢复模式仅存在于一个额外的分区中,并且可以更新任何其他分区。如果更新失败,可以重试恢复。非对称更新在更新时具有更长的停机时间,并且不允许用户取消。

用户空间更新程序应用程序

通常,更新由用户空间应用程序执行,该应用程序提取软件更新包,应用它,并将更新通知引导加载程序。它还需要允许进行安装后操作。然后,引导加载程序启动硬件监视程序并尝试引导。如果引导成功,则硬件看门狗被停用;如果不是,则触发它,并且引导加载程序会再次尝试引导。经过多次尝试后,它要么交换回已知良好的分区,要么进入恢复模式。

一个重要的考虑因素是用户空间更新固件必须可通过固件更新过程进行更新。另一个风险是,可能会更新到固件更新机制损坏的可启动系统。不幸的是,有必要回退到引导加载程序或其他恢复机制来更新固件。

某些系统使用引导加载程序来执行更新。这有一些严重的缺点。如果必须更新固件更新代码(例如,由于分区更改),则需要更新引导加载程序,这是非常危险的。引导加载程序在它支持的驱动程序、工具、库和网络协议的数量上也非常有限,因此更新发生在资源有限的环境中。

基于签名映像的开源软件更新有两个主要选项,同时支持对称和非对称更新:

瑞典语更新(在 GPLv2 许可证下) – 在 Yocto 中通过元更新层支持瑞典语更新(但仅限于对称更新)。它还包含一个猫鼬Web服务器,Suricatta守护进程,用于将更新从具有REST客户端的远程服务器拉取到Eclipse HawkBit [2](一种后端解决方案,用于将软件更新部署到终端设备)。它目前仅适用于 U-Boot 引导加载程序。

劳克 ,在 LGPLv2.1 许可证下 – RAUC 在约克托中通过元 ptx 层受支持,并支持 Grub 或裸盒引导加载程序。

远程映像更新

固件更新过程必须能够从本地源(例如,闪存、USB、μSDUART)进行远程更新,也可以远程更新通常称为无线 (OTA) 更新。OTA 更新使用远程服务器将更新推送到设备上运行的客户端。

开源远程 OTA 固件更新的一些选项包括:

Mender.io ,在 Apache 2 许可证下 – Mender.io 同时用于客户端和服务器。它在约克托中通过元修正层得到支持。服务器可以充当部署服务器和生成项目管理器,但也包含设备管理控制台。

数字国际远程管理器 ,在 MPLv2 许可证下 –Digi远程管理器具有专有的基于云的服务器和开源客户端。它在约克托中通过元数字层得到支持。服务器可以充当部署服务器、生成项目管理器,还包含具有设备报告和监视功能的设备管理控制台。

Eclipse HawkBit ,在日食公共许可证下 – Eclipse HawkBit 是一个 Eclipse 公共许可证服务器,它还充当部署服务器、构建工件管理器和设备管理器,具有设备报告和监视功能。

完整映像更新通常存在大尺寸的问题,这对于带宽不自由或不宽的资源受限应用程序(如蜂窝)来说可能是个问题。差异映像固件更新是解决此问题的良好折衷方案,因为实际上只传输以前版本中的增量。

容器化更新

容器化应用程序的使用简化了软件更新用例,因为应用程序可以单独更新。

容器更新建立在不可变分发(可能是只读文件系统)上,其中应用程序仅存在于可由容器增量升级的容器中。

使用基于容器的固件更新的开源项目的一些示例如下:

Resin.io – Resin.io 是基于 Docker 的,具有专有的 OTA 更新服务器和 Apache 2 许可客户端。它通过元树脂层在Yocto中支撑。

Ubuntu “Snappy” Core–Ubuntu Core 是一个基于 Ubuntu 的最小操作系统,它提供了足够的功能来更新具有增量的类似容器的应用程序。

还有一些新的操作系统设计用于托管Docker应用程序,这些应用程序最终可能会在嵌入式空间中使用,例如CoreOS [8](在arm64上)和原子计划(基于Fedora / CentOS / RHEL的操作系统,使用rpm-ostree(基于lipbostree)而不是rpm)。

增量二进制原子操作系统更新

最后,嵌入式市场即将到来的趋势是增量的每文件原子更新,可以根据需要快速部署或回滚,同时保持完整的部署历史记录。

一些开源示例项目:

libOSTree– libOSTree 由一个定义为“操作系统二进制文件的 Git”的库和命令行工具组成。它使用类似 git 的对象来存储和部署操作系统增量,每个增量都有一个持久数据的副本。Yocto有一个元更新程序层可以利用它。它也用于操作系统,如项目原子。

swupd – swupd最初是 ClearLinux 的一部分,由英特尔赞助。它与 libOSTree 非常相似,在约克托中通过元-swupd 层支持。

缩小选项范围

随着物联网设备的出现,固件更新不仅仅是一件好事,而且是新产品开发所需的功能。需要尽早考虑固件更新策略的选择,因为它会影响未来的产品设计决策。与所有早期决策一样,错误的选择会给开发时间带来沉重的负担。

上市时间紧迫的项目可能会倾向于更传统的、久经考验的全映像固件更新策略。其中包括通过Yocto项目的元更新层提供的一个,以及企业就绪的OTA更新解决方案,如Digi国际的远程管理器。

然而,处于前沿的项目可以通过容器化应用程序设计扩展整个系统固件更新方法,该设计允许应用程序与系统更新隔离。

审核编辑:郭婷

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

    关注

    5212

    文章

    20746

    浏览量

    338448
  • Linux
    +关注

    关注

    88

    文章

    11850

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何成为一名高薪嵌入式工程师?

    学习FreeRTOS、RT-Thread等实时操作系统的任务调度、信号量、消息队列、内存管理等机制。 实践多任务协同、低功耗设计、实时性优化等场景。 ✅嵌入式Linux开发 系统移植:交叉
    发表于 04-09 09:03

    MAX32558:嵌入式安全的卓越之选

    MAX32558:嵌入式安全的卓越之选 在当今数字化时代,数据安全至关重要。嵌入式设备需要强大的安全
    的头像 发表于 03-26 16:40 177次阅读

    DeepCover® MAX32555:打造安全可靠的嵌入式设备

    DeepCover® MAX32555:打造安全可靠的嵌入式设备 在当今数字化时代,数据安全愈发重要,尤其是在涉及敏感信息的设备中。Deep
    的头像 发表于 03-26 16:40 288次阅读

    嵌入式系统安全设计原则

    随着物联网、工业控制和智能设备的普及,嵌入式系统的安全问题越来越突出。一个小小的漏洞,就可能导致设备被入侵、数据泄露,甚至对人身安全产生威胁
    的头像 发表于 01-19 09:06 553次阅读
    <b class='flag-5'>嵌入式</b>系统<b class='flag-5'>安全</b>设计原则

    保姆级教程!RK3588 Linux6.1 固件签名完整实现方案(不含rootfs)

          在嵌入式 Linux 开发中,固件签名是保障设备安全的关键环节 —— 它能有效防止恶意固件
    的头像 发表于 01-14 17:21 2428次阅读
    保姆级教程!RK3588 <b class='flag-5'>Linux</b>6.1 <b class='flag-5'>固件</b>签名完整实现方案(不含rootfs)

    如何在Zynq UltraScale+ MPSoC平台上通过JTAG启动嵌入式Linux镜像

    在之前文章中,我们介绍了如何使用 XSCT 工具通过 JTAG 在 Zynq SoC 上启动嵌入式 Linux 镜像(从 JTAG 启动 Zynq-7000 嵌入式 Linux:使用
    的头像 发表于 01-13 11:45 5245次阅读

    什么是嵌入式应用开发?

    系统中,用于控制、监测或通信等特定用途。与一般计算机系统不同,嵌入式系统通常具有较小的存储容量、处理能力和功耗,且需要满足特定的实时性、可靠性和安全性要求‌。 应用领域 嵌入式系统广泛应用于各种
    发表于 01-12 16:13

    arm嵌入式主板优缺点

    了Windows CE系统或者Linux系统,因此对于很多客户来说,原先采用了X86的平台,目前要调整到ARM上来,必须对软件平台进行重新编译和调整,而且还要熟悉一下ARM的嵌入式平台工作机制,因此会增加
    发表于 01-08 07:08

    从小白到大牛:Linux嵌入式系统开发的完整指南

    Linux 混合编程)。例如,在嵌入式设备上部署图像识别模型,需掌握交叉编译 AI 框架、优化模型体积与运行速度。​ 工程化能力提升:实际项目中需关注代码规范、版本控制(Git)
    发表于 12-16 10:42

    开源 | 60余套STM32单片机、嵌入式Linux、物联网、人工智能项目(开发板+教程+源码)

    私信免费领取!60余套综合项目案例STM32单片机、嵌入式、物联网、人工智能智能车/机器狗/小智AI/家居/农业/安防等多领域项目文档+项目源码,全开源高校教学、学生毕设、创新竞赛、项目练手01
    的头像 发表于 12-04 11:42 1063次阅读
    <b class='flag-5'>开源</b> | 60余套STM32单片机、<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>、物联网、人工智能项目(开发板+教程+源码)

    嵌入式实时操作系统的特点

    操作系统具备高效的中断处理机制,能够快速响应和处理系统的中断事件。 资源管理:实时嵌入式操作系统提供有效的资源管理机制,包括内存管理、设备驱动程序、文件系统和网络协议等,以支持
    发表于 11-13 06:30

    嵌入式需要掌握哪些核心技能?

    /网络设备)、中断底半部处理,适用于高端嵌入式设备。 企业需求:RTOS是60%岗位的核心要求,Linux开发需求随项目复杂度增长。 4)通信协议与接口 基础协议:UART、SPI、
    发表于 10-21 16:25

    2025嵌入式行业现状如何?

    关键型与非关键型系统隔离需求。 2.4 边缘计算与云协同 边缘设备能力提升:嵌入式Linux系统网关支持Matter协议,实时处理温湿度、光照等数据,通过本地AI模型实现节能优化。 低功耗设计:恩智浦
    发表于 08-25 11:34

    Linux嵌入式和单片机嵌入式的区别?

    Linux嵌入式与单片机嵌入式在多个方面存在显著的区别,以下是详细的比较和归纳: 一、基本概念 1. Linux嵌入式: 定义:将
    发表于 06-20 09:46

    物联网工程师为什么要学Linux

    物联网工程师需要掌握Linux的主要原因可以从技术生态、开发需求、行业应用及就业竞争力四个角度来分析: 一、技术生态与行业适配性 1)嵌入式开发的主流平台 物联网设备往往基于嵌入式
    发表于 05-26 10:32