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

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

3天内不再提示

嵌入式系统上的软件从何而来

星星科技指导员 来源:嵌入式计算设计 作者:RUSSELL DOTY 2022-11-11 15:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

您的嵌入式系统上的软件从何而来?你能证明吗?您能安全地在现场更新系统吗?密码学提供了验证软件和数据完整性和来源的工具。有一个关于用户如何验证软件来源的过程,软件是否在传输过程中被篡改,以及安装后是否被修改。

军事系统受到许多攻击,包括对向系统提供软件的软件供应链的攻击。为了确保防范这些攻击,管理人员应该问三个问题:软件组件的来源是什么?软件是否被篡改或修改?他们能证明吗?

密码学通过软件签名和哈希来解决此问题,它们协同工作以验证源和文件。软件签名使用公钥/私钥对来验证软件的来源。使用私钥对软件进行签名,然后使用该公钥验证软件是否已使用该特定私钥进行签名。签名者和软件是否可以信任是单独的讨论;软件签名验证软件的来源,以及签名后是否未被篡改。

哈希是一种处理任意长度的文件或数据集并生成该文件唯一的固定长度校验和的技术。对文件的任何更改都会产生一个全新的校验和 - 例如,更改 10 GB 文件中的一位将产生不同的校验和。流行的(虽然有些弱)sha1 哈希产生 40 个字符的校验和,而更安全的 sha256 哈希产生 64 个字符的校验和。使用文件及其校验和,您可以验证文件是否未以任何方式损坏或篡改。哈希运行速度很快,即使在大文件上也是如此,使其成为文件验证的有效工具。

这些技术可以应用于任何文件。文件是否包含源代码、可执行映像、数据或其他文件并不重要;可以使用任何文件或数据集。

源头可以控制吗?

所有软件的起点都是源代码,源代码通常由多个人在一段时间内编写和修改,并作为产品的多个版本和更新发布。代码分布在数百或数千个文件中,并且不断变化。有效的代码管理使用版本控制的代码存储库,例如 git1。git 存储库是一个补丁数据库,每个补丁都有一个唯一的标识符。在 git 中,这个唯一标识符是补丁内容的哈希值——结果是每个补丁都由其内容标识。对修补程序内容的任何更改都会立即可见,因为修补程序不再与其标识符匹配。

git 补丁包括有关应用它的上一个补丁的信息以及提交补丁的人员的身份。与区块链类似,git 补丁包含基于加密的一组后台指针,使某人无法在不被发现的情况下更改历史记录。补丁也可以使用前面描述的技术进行签名,从而验证谁制作了补丁。此技术在任何需要验证贡献的环境中都是有用的工具。

版本控制的软件存储库是任何安全软件供应链的基础,因为它提供了软件所有更改的历史记录以及更改者。它还提供了构建特定版本的软件包的可靠方法。

建立可验证的出处

使用来自已知和可信来源的软件对于维护嵌入式系统的完整性非常重要。但是你怎么知道一个可安装的软件实际上来自已知的源代码呢?

源代码存储库与 Jenkins2 等自动化构建系统相结合,使用户能够从一组已知的源文件构建可执行映像。生成映像后,生成系统可以对其进行签名和哈希处理。这使用户既知道软件的来源,又知道生产软件的确切版本。例行版本使用测试密钥签名,而生产版本使用发布密钥签名,需要特殊授权和批准,并且通常在单独的安全系统上签名。这使用户能够确定软件的来源以及它是否是正式版本。

组成一个软件的所有文件都合并到一个包中,用于分发、安装和更新。Linux 中使用的打包系统是 rpm3。rpm 是单个文件,其中包含多个文件的压缩存档以及用于安装、配置、更新和删除其关联应用程序的命令。rpm 文件还包括存档中所有文件的清单,包括它们的名称、版本号和校验和。此清单信息包含在 rpm 数据库中,该数据库维护系统上安装的所有基于 rpm 的软件的信息。

软件通常包含第三方组件。当这些第三方组件包含在 rpm 中时,rpm 元数据和校验和可确保这是供应商包含的软件。应签署第三方组件以确保其完整性;如果它们只是从其他供应商传递,则应由其他供应商签名。

通常,rpm 包本身是经过签名的。创建和签署 rpm 包的工具包含在 Linux 中,每个开发软件的人都应该使用,包括内部开发人员。默认情况下,rpm 安装程序会在允许安装之前检查软件包是否使用已知密钥进行签名。尝试安装未签名的软件或使用未知密钥签名的软件将失败,除非它们被覆盖。rpm 安装程序还会检查软件包的完整性:如果软件包的内容已被修改,无论是通过数据损坏还是恶意篡改,安装都将失败。

操作系统供应商将在操作系统 (OS) 中包含其公钥。此添加使用户能够确保软件包、更新和安全勘误表实际上来自操作系统供应商,并且未被任何外部方篡改。

用户必须将每个已批准供应商的软件密钥添加到系统中。根据特定的安全要求,用户可能需要采取措施来确保供应商密钥的有效性,尤其是在从镜像或其他中间源(如系统集成商)下载软件时。密钥应直接从供应商网站获取。有些人甚至随身携带来自已知来源的密钥的硬拷贝列表。

此外,签名的 rpm 包允许通过邮件使用不安全的传输,例如互联网或 CD-ROM,因为 rpm 工具可以验证 rpm 的来源以及它是否已损坏或篡改。

安装后的使用寿命

在安装之前和安装期间检查软件是一个良好的开端,但在安装完成后继续维护非常重要。可以做些什么来验证正在运行的系统?

rpm 的一个强大功能是它允许用户验证正在运行的系统上文件的完整性。rpm 数据库包括每个 rpm 中包含的所有文件的校验和。系统实用程序使用户能够计算系统上每个文件的校验和,将其与rpm数据库进行比较,并识别已更改的任何文件。rpm 数据库是一种快速有效的方法。实现此目的的另一种方法是返回到已签名的 rpm 包并直接从 rpm 使用校验和。虽然这种方式较慢并且需要访问原始安装文件,但它非常安全。

主要的 Linux 发行版使用这些技术来确保它们从已知来源安装和运行未经修改的软件。了解系统上安装的所有软件的来源以及是否已更改至关重要。这些知识是在现场部署和更新系统时建立和维护系统完整性的有力起点。

审核编辑:郭婷

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

    关注

    5186

    文章

    20155

    浏览量

    328966
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32嵌入式软件开发的必备知识

    设计的原则和方法,能够设计出高效、可维护的软件系统。 了解嵌入式系统的实时性要求,能够设计出满足实时性要求的软件
    发表于 11-28 07:48

    嵌入式和FPGA的区别

    嵌入式系统与FPGA的核心差异:软件定义功能VS硬件可重构。嵌入式适合通用计算,开发门槛低;FPGA凭借并行处理实现纳秒级响应,但成本高、开发难。二者融合的SoC器件正成为未来趋势,平
    发表于 11-19 06:55

    嵌入式系统的定义和应用领域

    应用系统在功能、可靠性、成本、体积和功耗等方面的严格要求的专用计算机系统。 那么,嵌入式系统具体应用在哪些领域呢?事实,它们的应用非常
    发表于 11-17 06:49

    RT-Thread 2025嵌入式软件大赛重磅来袭

    顶尖芯片厂商,以及电子发烧友等合作伙伴,为开发者提供展示编程能力与创新思维的顶级舞台。参赛者将基于主流嵌入式平台,实现高效、智能、可靠的软件方案,探索嵌入式系统在A
    的头像 发表于 09-20 10:06 1295次阅读
    RT-Thread 2025<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>大赛重磅来袭

    新一代嵌入式开发平台 AMD嵌入式软件和工具2025.1版现已推出

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。 2025.1 版嵌入式
    的头像 发表于 08-20 09:15 3635次阅读

    AMD 2025.1版嵌入式软件和工具的新增功能

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。
    的头像 发表于 08-15 15:32 1040次阅读

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

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

    运行在嵌入式系统的emApps

    在当今快节奏的嵌入式系统世界中,灵活性和适应性是嵌入式系统实现的关键。SEGGER推出了其最新创新:Embedded apps(emApps)应用,类似于手机上的应用程序,可以运行在
    的头像 发表于 06-18 09:53 622次阅读
    运行在<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b><b class='flag-5'>上</b>的emApps

    飞凌嵌入式ElfBoard ELF 1板卡-Uboot

    上节中讲到U-Boot是BootLoader的一种,U-Boot全称为Universal Boot Loader,即通用的BootLoader,所谓通用就是指它适用于多种嵌入式平台,包括不同CPU
    发表于 05-22 10:44

    嵌入式软件行业增长驱动因素

    嵌入式软件在物联网应用中至关重要,因为它管理设备操作、控制传感器、支持连接并确保数据安全。例如,在智能家居中,恒温器、安全摄像头和灯光等设备使用嵌入式系统独立运行,并通过云平台或本地网
    的头像 发表于 05-09 11:26 668次阅读

    嵌入式开发:高门槛的系统性工程与 996 的行业困局

    嵌入式开发的门槛,往往被培训机构和表象所掩盖。许多人误以为 “用 C 语言写个跑在 ARM 的程序” 就是嵌入式,实则连皮毛都未触及。真正的嵌入式开发是硬件与
    的头像 发表于 04-09 11:06 682次阅读
    <b class='flag-5'>嵌入式</b>开发:高门槛的<b class='flag-5'>系统</b>性工程与 996 的行业困局

    Python在嵌入式系统中的应用场景

    你想把你的职业生涯提升到一个新的水平?Python在嵌入式系统中正在成为一股不可缺少的新力量。尽管传统嵌入式开发更多地依赖于C和C++语言,Python的优势在于其简洁的语法、丰富的
    的头像 发表于 03-19 14:10 1200次阅读

    嵌入式系统开发圣经【干货】

    内容包括:嵌入式系统的介绍、嵌入式SoC硬件系统概论、嵌入式系统软件开发。适用于产品主管、
    发表于 03-12 13:58

    嵌入式机器学习的应用特性与软件开发环境

    设备和智能传感器),这些设备通常具有有限的计算能力、存储空间和功耗。本文将您介绍嵌入式机器学习的应用特性,以及常见的机器学习开发软件与开发环境。 嵌入式机器学习的应用特性与优势 由于
    的头像 发表于 01-25 17:05 1215次阅读
    <b class='flag-5'>嵌入式</b>机器学习的应用特性与<b class='flag-5'>软件</b>开发环境

    新手怎么学嵌入式?

    。但面对这个复杂的领域,很多人可能会感到迷茫,不知从何处入手。别担心,本文将为你提供一些入门学习嵌入式技术的建议。 新手入门学习嵌入式技术的途径 1. 了解基础知识 首先,要对嵌入式
    发表于 12-12 10:51