超低功耗MCU的安全固件更新注意事项

描述

现场固件更新是基于微控制器(基于 MCU)的应用中越来越受欢迎的功能。这些更新可以将新的固件映像下载到设备的内存中,从而为产品制造商提供一种有效的方式来为已经部署在现场的产品提供服务和支持。物联网 (IoT) 时代正在推动嵌入式世界的连接性增加,这使其成为当今连接产品最重要的功能之一,只要它们是安全的。

物联网开发人员在部署固件更新机制时通常会考虑更快的上市时间和更低的产品维护成本,因为该功能允许他们分阶段推出功能、启用/禁用现场设备上的特性或功能、修复固件错误后产品已发布,减少对昂贵技术支持的需求,并实现更好的整体最终用户体验。但是,如果没有适当的安全措施,此功能可能会被滥用,成功利用的后果可能是灾难性的,从知识产权 (IP) 盗窃和产品克隆一直到对已部署系统的未经授权控制。例如,

固件更新及其漏洞

图 1 显示了一个典型的固件更新过程。这些步骤包括:

产品制造商在受信任的环境中创建初始固件映像并将其加载到设备中。

该产品与初始固件一起部署到现场。

当需要更新固件时,产品制造商会创建一个新的固件映像。

制造商通过不受信任的通信渠道将新固件映像直接发送给最终用户/技术人员或产品。

新固件被加载到现场的设备上。

在“传输”阶段,当新固件通过不受信任的通信通道传输时,或在“固件加载”阶段,当新固件被下载到现场设备上时,潜在的安全威胁是显而易见的。

正在下载到设备的新固件映像对应于产品制造商的 IP 和目标资产。对该资产的威胁包括:

将固件二进制映像逆向工程为汇编或更高级别的工程语言,以分析其功能和内容。

产品克隆,将来自产品制造商的固件映像加载到未经授权的设备上。

更改产品制造商分发的固件。

将未经授权的固件映像加载到设备上,这可能对应于产品制造商提供的具有已知错误或未经授权方创建的代码的较旧固件版本,或不适合特定设备的固件(固件降级)。

中断固件更新过程,使得固件仅部分更新,导致设备无法服务。

显然,上述威胁可能对产品制造商、服务提供商和最终用户造成灾难性后果,因此表明嵌入式设计人员迫切需要考虑采取措施提高固件更新机制的整体安全性。

设计工程师的安全固件更新注意事项

图 2 显示了网络连接系统的示例表示。在这种情况下,新固件映像从产品制造商(例如,新功能推出或固件错误修复)或服务提供商(例如,启用/禁用产品中的功能或服务)传输到最后局域网或广域网 (LAN/WAN) 上的节点,并且可能涉及来自最终用户应用程序的身份验证(例如,通过移动设备和 Web 应用程序)以执行固件更新。

 

嵌入式

【图2 | 安全固件更新包括由用于网络通信的接口协议规定的安全措施,以及确保固件映像在数据进入网络之前得到保护的应用程序级安全性。]

为物联网系统设计固件更新功能的嵌入式系统工程师不仅需要了解需要保护的资产和潜在威胁,还需要了解其系统的功能和限制,尤其是与成本、性能或功耗有关的系统受约束的系统。作为起点,必须考虑一种有效的安全解决方案,该解决方案将密码算法和协议级措施的正确组合结合在一起。

加密算法提供了一种保护内容隐私的方法,同时确保其真实性和完整性。并非所有加密算法都是相同的,但它们基于四个加密原语,这些原语处理机密性、完整性和真实性 (CIA) 三元组的一个或多个组件。这些原语是:

加密和解密:加密是将数据(明文)转换为随机且无意义的东西(密文)的过程,而解密则执行相反的工作。这些原语提供机密性和真实性,并用于防止固件的逆向工程。

单向函数:诸如哈希之类的函数是一种数学算法,在一个方向上很容易计算,但在另一个方向上却很难。它们用于获取数字“指纹”,以确保固件在传输到现场之前的完整性。

数字签名:用于检测消息在签名后是否被更改,从而不仅提供完整性,还提供身份验证。这些使用公钥加密来生成只能使用制造商的公钥正确解密的签名。

消息验证码 (MAC):类似于数字签名,只是它使用对称密钥来加密和解密制造商生成的哈希。如果接收方解密的哈希值与为该消息计算的哈希值匹配,则该消息是有效的。通过这种方式,MAC 提供了真实性和完整性。

影响密码算法选择的一些因素包括性能要求、系统的安全需求、内存占用、能源消耗以及安全社区(例如美国国家标准与技术研究院(National Institute of Standards and Technology)等组织对算法的可靠性和接受程度。 NIST))。

除了加密算法之外,还应考虑针对固件降级等威胁的协议级措施。如前所述,固件降级是一种攻击,其中将旧的有缺陷的固件映像(加密或未加密)重新发送到设备以将其恢复到易受攻击的状态。固件和密钥的版本检查可以确保在更新期间仅对新版本进行编程。

攻击者还可以使用多种方法(断电、物理连接故障、传输过程中的位翻转等)中断固件更新过程。这可能导致设备执行不完整或无效的固件映像,使其无用或处于受损状态。为了解决这种情况,固件更新机制需要确保不执行不完整或损坏的映像,并在必要时将系统恢复为有效的、以前使用过的映像。

用于连接嵌入式系统的加密引导加载程序

固件更新通常由设备引导加载程序处理。引导加载程序是驻留在设备内存中的一段代码,能够对应用程序内存空间进行重新编程。然而,寻找或创建具有网络连接系统所需安全性的嵌入式引导加载程序可能具有挑战性。例如,系统可能需要更新加密密钥的能力,因此加密功能和引导加载程序协议应支持在固件更新过程中升级密钥并提高网络安全性。引导加载程序协议还应支持验证固件更新版本和数据包跟踪,以检查是否接收到特定固件更新映像的所有数据包。

如前所述,加密算法的选择至关重要,因为它不仅设置系统的安全级别,而且还影响其性能、内存占用和功耗。考虑到这一点,AES-CCM 代表了嵌入式引导加载程序的最佳解决方案。AES-CCM 是一种基于两个加密原语的加密引导加载程序 (Crypto-Bootloader):用于加密的 AES 计数器模式 (AES-CTR) 和用于完整性和真实性验证的密码块链接消息验证码 (CBC-MAC)。由于 AES-CCM 提供的低开销,它在提高安全性和低内存占用、高吞吐量和高效功耗之间提供了完美平衡(图 3)。

 

嵌入式

【图3 | AES-CCM 算法用于加密固件数据,例如固件版本号、数据包编号和数据包总数。此信息与对称数据加密密钥一起输入算法,以加密数据并生成加密 MAC 标签,该标签代表德州仪器 Crypto-Bootloader 核心命令的一部分。]

选择实现引导加载程序的 MCU 也不容忽视。设计人员应考虑具有硬件加密引擎、内存保护单元 (MPU)、低功耗外设和内存技术等功能的 MCU,这些技术允许快速读/写周期以提高吞吐量。德州仪器 (Texas Instruments)的MSP430FR5969 MCU就是此类 MCU 的一个示例,它集成了 AES-256 协处理器以加速加密算法、MPU 和 MPU-IP 封装 (MPU-IPE) 模块,以增强对存储器区域的保护和封装,如以及高达 64 KB 的 FRAM 内存,可实现高性能和超低功耗。在 MSP430FR5969 器件上实施的 Crypto-Bootloader 解决方案封装了此处概述的大部分安全功能和注意事项。

保护物联网固件

总之,越来越多的网络嵌入式产品正在创造潜在的高级安全威胁,使现场固件更新更容易受到远程攻击和利用。因此,嵌入式设计人员必须考虑通过提供适当安全级别的解决方案来保护其固件更新机制,同时平衡物联网产品的成本、功耗和性能限制。

作者:Bhargavi Nisarga ,Luis Reynoso

审核编辑:郭婷

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分