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

审核编辑:郭婷

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

    关注

    5082

    文章

    19115

    浏览量

    304923
  • 代码
    +关注

    关注

    30

    文章

    4782

    浏览量

    68546
收藏 人收藏

    评论

    相关推荐

    新手怎么学嵌入式?

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

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    系统开发与硬件关系的几个关键点: 硬件依赖性 :嵌入式系统软件必须能够在特定的硬件运行,这包括处理器、内存、输入/输出接口等。
    的头像 发表于 12-09 09:38 240次阅读

    【「嵌入式Hypervisor:架构、原理与应用」阅读体验】+ Hypervisor应用场景调研

    Hypervisor有两个类型:I型和II型,其中I型直接运行在硬件设备,II型运行在一个操作系统,该操作系统运行在硬件设备,也就是下
    发表于 10-14 11:21

    嵌入式系统的未来趋势有哪些?

    嵌入式系统是指将我们的操作系统和功能软件集成于计算机硬件系统之中,形成一个专用的计算机系统。那么
    发表于 09-12 15:42

    人工智能从何而来

    当大家都在讨论人工智能的时候,有一个问题似乎很少有人关注,即:人工智能从何而来
    的头像 发表于 09-06 09:27 613次阅读

    嵌入式软件开发与AI整合

    嵌入式软件开发与AI整合是当前技术发展的重要趋势之一。随着人工智能技术的快速发展,嵌入式系统越来越多地集成了AI算法,以实现更复杂的智能功能。以下是关于
    的头像 发表于 07-31 09:25 701次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发与AI整合

    嵌入式系统怎么学?

    系统设计与调试:需要掌握嵌入式系统的设计方法和调试技术,包括硬件设计、软件设计、电路调试等,以确保系统的稳定性和可靠性。 随着技术的不断进
    发表于 07-02 10:10

    嵌入式系统是啥

    嵌入式系统(System On Chip,SOC)是一种高度集成化的系统,它将微处理器、内存、接口和其他必要的硬件组件集成到一块芯片
    的头像 发表于 03-28 15:36 552次阅读

    嵌入式可编程片系统是什么

    嵌入式可编程片系统(Embedded Programmable System-on-Chip,或简称EPSoC)是一种特殊的嵌入式系统,它
    的头像 发表于 03-28 15:33 561次阅读

    嵌入式系统和ARM哪个更好

    嵌入式系统和ARM各有其优势,难以直接比较哪个更好,因为它们在不同的应用场景和需求下都有各自的价值。
    的头像 发表于 03-28 15:14 516次阅读

    嵌入式系统是什么意思

    嵌入式系统(Embedded System On Chip)是一种在一块芯片上集成很多功能模块的复杂系统。它通常包括微处理器内核、RAM、各种接口(如USB、IEEE1394、Bl
    的头像 发表于 03-28 15:14 554次阅读

    嵌入式系统是什么

    嵌入式系统(Embedded System On Chip,简称SoC)是一种集成度极高的复杂系统,它在一个芯片上集成了微处理器内核、RAM、USB、IEEE1394、Blueto
    的头像 发表于 03-28 14:55 603次阅读

    嵌入式软件设计的原则分享

    嵌入式软件开发如果具有更好的阅读性、扩展性以及维护性,就需要考虑很多因素。今天给大家分享几个嵌入式软件设计的原则。
    发表于 02-25 10:54 683次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>设计的原则分享

    嵌入式软件开发和软件开发的区别

    之间的区别。 硬件环境和资源限制: 嵌入式系统通常运行在资源有限的嵌入式设备,如单片机、嵌入式开发板或微控制器等。这些设备通常具有有限的处
    的头像 发表于 01-22 15:27 2278次阅读

    聊聊嵌入式软件分层

    今天以控制LED闪烁为例,聊聊嵌入式软件分层
    的头像 发表于 12-28 09:22 673次阅读