作者:Bhargavi Nisarga,Luis Reynoso
现场固件更新是基于微控制器(基于MCU)的应用中越来越受欢迎的功能。这些更新使新的固件映像能够下载到设备的内存中,为产品制造商提供了一种有效的方式,可以为已经在现场部署的产品提供服务和支持。物联网(IoT)时代正在推动嵌入式世界连接性的提高,使其成为当今互联产品最关键的功能之一,只要它们是安全的。
在部署固件更新机制时,物联网开发人员通常考虑缩短上市时间并降低产品维护成本,因为该功能允许他们分阶段推出功能,在现场设备上启用/禁用特性或功能,在产品发布后修复固件错误,减少对昂贵技术支持的需求,并实现更好的整体最终用户体验。但是,如果没有适当的安全措施,则此功能可能会被滥用,并且成功利用的后果可能是灾难性的,从知识产权(IP)盗窃和产品克隆一直到对部署系统的未经授权的控制。例如,成功利用不支持在医院药物泵中验证新固件映像的真实性的固件更新机制,可能会导致黑客篡改交付给患者的药物剂量。
固件更新及其漏洞
图1显示了一个典型的固件更新过程。这些步骤包括:
产品制造商在受信任的环境中创建初始固件映像并将其加载到设备中。
产品与初始固件一起部署到现场。
当需要固件更新时,产品制造商会创建新的固件映像。
制造商将新的固件映像直接通过不受信任的通信通道发送给最终用户/技术人员或产品。
新固件将加载到现场的设备上。
潜在的安全威胁在“传输”阶段通过不受信任的通信通道传输时,或者在“固件加载”阶段,当新固件下载到现场的设备上时,潜在的安全威胁是显而易见的。
正在下载到设备的新固件映像对应于产品制造商的 IP 和目标资产。对此资产的威胁包括:
将固件二进制映像反向工程成汇编或更高级别的工程语言,以分析其功能和内容。
产品克隆,其中将产品制造商的固件映像加载到未经授权的设备上。
更改产品制造商分发的固件。
将未经授权的固件映像加载到设备上,该映像可能对应于产品制造商提供的具有已知错误或由未经授权方创建的代码的较旧固件版本,或者不适用于特定设备的固件(固件降级)。
中断固件更新过程,使固件仅部分更新,从而导致设备无法提供服务。
很明显,上述威胁可能会对产品制造商、服务提供商和最终用户造成灾难性后果,因此表明嵌入式设计人员迫切需要采取措施来提高固件更新机制的整体安全性。
设计工程师的安全固件更新注意事项
图 2 显示了网络连接系统的示例表示形式。在这种情况下,新的固件映像从产品制造商(例如,新功能推出或固件错误修复)或服务提供商(例如,启用/禁用产品中的功能或服务)传输到本地或广域网(LAN /WAN)上的终端节点,并且可能涉及来自最终用户应用程序的身份验证(例如, 通过移动设备和Web应用程序)执行固件更新。
[图2 |安全固件更新包括由用于网络通信的接口协议规定的安全措施,以及确保在数据进入网络之前保护固件映像的应用程序级安全性。
为物联网系统设计固件更新功能的嵌入式系统工程师不仅需要了解需要保护的资产和潜在威胁,还需要了解其系统的功能和局限性,特别是当它们与受限系统的成本、性能或功耗有关时。作为起点,必须考虑结合加密算法和协议级措施的正确组合的有效安全解决方案。
加密算法提供了一种保护内容隐私的方法,同时确保其真实性和完整性。并非所有加密算法都是相同的,但它们基于四个加密基元,这些原语处理机密性、完整性和真实性 (CIA) 三元组的一个或多个组件。这些基元是:
加密和解密:加密是将数据(明文)转换为随机和无意义(密文)的过程,而解密则执行相反的工作。这些基元提供机密性和真实性,并用于防止固件的逆向工程。
单向功能:诸如哈希之类的函数是数学算法,在一个方向上很容易计算,但在另一个方向上很难计算。它们用于获取数字“指纹”,以确保固件在传输到现场之前的完整性。
数字签名:用于检测消息在签名后是否被更改,从而不仅提供完整性,还提供身份验证。这些使用公钥加密来生成只能使用制造商的公钥正确解密的签名。
消息身份验证代码: 与数字签名类似,只是它使用对称密钥来加密和解密制造商生成的哈希。如果接收方解密的哈希值与为消息计算的哈希值匹配,则该消息有效。通过这种方式,MAC提供了真实性和完整性。
影响加密算法选择的一些因素包括性能要求、系统的安全需求、内存占用、能耗以及安全社区(如美国国家标准与技术研究院 (NIST) 等组织)对算法的可靠性和接受度。
除了加密算法之外,还应考虑针对固件降级等威胁的协议级措施。如前所述,固件降级是一种攻击,其中较旧的有缺陷的固件映像(加密或未加密)被重新发送到设备以将其恢复到易受攻击的状态。对固件和密钥进行版本检查可以确保在更新期间仅对新版本进行编程。
攻击者还可以使用多种方法(断电、物理连接故障、传输过程中的位翻转等)中断固件更新过程。这可能导致设备执行不完整或无效的固件映像,使其无用或处于受损状态。为了解决这种情况,固件更新机制需要确保不执行不完整或损坏的映像,如有必要,应将系统还原为以前使用的有效映像。
用于连接的嵌入式系统的加密引导加载程序
固件更新通常由设备引导加载程序处理。引导加载程序是驻留在设备内存上的一段代码,能够重新编程应用程序内存空间。但是,查找或创建具有网络连接系统所需安全性的嵌入式引导加载程序可能具有挑战性。例如,系统可能需要能够更新加密密钥,因此加密功能和引导加载程序协议应支持在固件更新过程中升级密钥和提高网络安全性。引导加载程序协议还应适应验证固件更新版本和数据包跟踪,以检查是否接收了特定固件更新映像的所有数据包。
如前所述,加密算法的选择至关重要,因为它不仅设置了系统的安全级别,还会影响其性能、内存占用和功耗。考虑到这一点,AES-CCM代表了嵌入式引导加载程序的最佳解决方案。AES-CCM 是一个基于两个加密基元构建的加密引导加载程序(加密引导加载程序):用于加密的 AES 计数器模式 (AES-CTR) 和用于完整性和真实性验证的密码块链接消息身份验证代码 (CBC-MAC)。由于 AES-CCM 提供的低开销,它在提高安全性与低内存占用量、高吞吐量和高效功耗之间实现了完美平衡(图 3)。
[图3|AES-CCM 算法用于加密固件数据,例如固件版本号、数据包编号和数据包总数。该信息与对称数据加密密钥一起输入算法,以加密数据并生成加密的MAC标签,该标签代表德州仪器的Crypto-Bootloader核心命令的一部分。
选择实现引导加载程序的MCU也不容忽视。设计人员应考虑具有硬件加密引擎、存储器保护单元(MPU)、低功耗外设和存储器技术等功能的MCU,这些器件允许快速读/写周期以提高吞吐量。德州仪器 (TI) 的 MSP430FR5969 MCU 就是此类 MCU 的一个例子,它集成了 AES-256 协处理器以加速加密算法,MPU 和 MPU-IP 封装 (MPU-IPE) 模块可增强对内存区域的保护和封装,以及高达 64 KB 的 FRAM 内存,可实现高性能和超低功耗。在 MSP430FR5969 设备上实现的加密引导加载程序解决方案封装了此处概述的大多数安全功能和注意事项。
保护物联网的固件
总之,越来越多的网络嵌入式产品正在产生潜在的高级安全威胁,使现场固件更新更容易受到远程攻击和利用。因此,嵌入式设计人员必须考虑通过提供适当安全级别的解决方案来保护其固件更新机制,同时平衡物联网产品的成本、功耗和性能限制。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !