景意新
(威凯检测技术有限公司 广州 510663)
近年来,随着硬件成本进一步降低,同时新的低功耗无线电技术发展,以及专门为这些嵌入式设备设计的实时操作系统越来越完善,使得物联网(IoT)可为更广泛的开发人员所使用。IoT设备更是用于许多垂直行业,从物流到家电产业,从精准农业到养老产业,均引入了优化现有业务流程的新方法,并通过创新使产业实现了了进一步发展。IoT设备还广泛应用于关键基础设施当中,其安全保障发挥着更重要的作用。
然而,虽然IoT设备对我们的经济社会有着重大影响,但现阶段因其薄弱的安全性也存在很多隐患。例如,Mirai僵尸网络攻击事件表明,利用被入侵的IoT设备进行的大规模DDoS攻击可威胁到其他通信基础设施。更甚者,许多被入侵的IoT设备没有配备固件更新机制,被攻击后仍未安装补丁进行升级防御。这些案例凸显了在产品研发之初就将固件更新机制设计到IoT设备中的必要性。需要注意的是,如果设计不正确,固件更新本身也会成为攻击载体。例如,Zigbee蠕虫引发了一系列恶意固件更新与杂乱的无线通信相结合的连锁反应。如果开发者能够使用标准化的固件更新机制,而非自行设计固件更新机制,那么情况将得到显著改善。
本文特别关注了符合开源IoT标准的受限设备的固件更新机制。如RFC 7228中所规定的,使用微控制器(如Arm Cortex-M)在其上运行实时操作系统,如C/OS、Contiki、RIOT、FreeRTOS、mbed OS等。
与运行完整的操作系统(如Linux)的机器相比。受限IoT设备使用的是一低功耗,并配备了RAM和大小在千字节范围内的闪存。受限IoT设备因无法承受Wi-Fi的能量消耗,故而利用链路层低功耗、无线技术连接网络,如低功耗蓝牙、LoRa、IEEE 802.15.4、3GPP蜂窝IoT(NB-IoT),或如BACnet协议利用总线技术。
IoT固件升级属于软件升级的特例,包括以下三方面工作:①在低端IoT设备上进行嵌入式软件设计;②后端框架;③固件向IoT设备的网络传输。
图1 OTA固件升级流程
IoT设备上的软件必须具备支持固件更新的机制。设备需要一个引导加载程序(Bootloader),即设备启动时首先执行的逻辑,并决定启动哪个固件。
有时设备会配备多个引导加载程序,例如,ROM中的第1级引导加载程序和可更新的第2级引导加载程序。这种设计方式与安全有关,因为更新引导加载程序可能会导致设备死机。每当设备上出现一个引导加载程序,便需考虑硬件的内存布局,异常处理程序必须重新定位。
典型的固件更新程序相当简单,开发人员重新编译代码,并生成一个全新的固件镜像文件,然后将其分发到设备。IoT设备的闪存被分为多块存储区域(插槽),包含引导加载程序和固件镜像文件(含一些元数据)。新的固件存储在其中一个可用的插槽中。然后重置IoT设备,以便启动加载程序,从而可以运行新的固件镜像文件。例如MCUboot和ESPER便是运用这种方法。
从不同角度考量会产生差异化的设计。例如,人们可能会考虑软件更新的粒度,或更新所需传输的数据量。某些方法通过动态加载二进制模块,来实现部分更新,而其他方法则使用差分二进制补丁。还有一种技术是二进制压缩。使用基于组件的编程、的方法旨在通过强制执行系统模块之间的黑盒式交互,来简化系统在受限IoT设备上的动态修改和可重构。软件的部分更新也可以使用脚本取代二进制代码,如JavaScript。而另一种技术则是利用微型虚拟机,如Mate或ReLog。
虽然上文列举了不同的方法,但IoT设备软件更新通常采用一次性替换完整的固件镜像,其优势在于简单易操作。
IoT固件更新的第二个方面涉及IoT软件的后端框架和保障安全。互联网工程任务组(IETF)IoT软件更新(SUIT)工作组为IoT固件更新制定了一个简单的后端架构。有认证和完整性保护,可在不受信任的存储库上更新存储,SUIT规范还实现了对固件镜像的加密,以防止基于逆向工程的攻击。SUIT工作组遵循了已有的工作,如FOSE,它提出了使用JSON和JOSE的固件加密和签名。
更新框架(TUF)和Uptane旨在确保软件更新系统的安全性,即使是针对破坏存储库或签名密钥的攻击者。
ASSURED则是建立在TUF的基础上,通过利用更新仓库和IoT设备之间的可信中间控制器,提高对受限IoT设备的支持。
另一种方法是CHAINIAC,它使用类似区块链的机制来表明之前更新的历史,甚至没有中央控制。
IoT固件更新的第三个方面涉及通过网络软件分发。最近发表的文献中介绍了针对这一主题的各种方法,包括在多跳网络、低功耗无线网络中通过多路径优化广播更新的协议,更新网络堆栈模块直接重新配置网络,以及使用消息队列遥测传输(MQTT)协议向IoT设备群分发软件更新。6LoWPAN协议实现了从受限IoT设备到(IPv6)互联网上任何地方的端到端IP连接。IETF的可信执行环境供应 (TEEP)工作组正在将一个传输机制标准化,该机制在可信执行环境(TEE)更新受信任的应用程序,如Arm TrustZone和英特尔SGX。
近年来,针对固件升级过程涉及的各个方面,技术社群一直致力于研究开源标准,从而可以将这些标准组合,促进IoT设备固件更新机制发展。这些开源标准可分为以下几类:加密算法,固件元数据,通过网络传输更新的协议,IoT设备管理协议。
使用最先进的加密算法是保证固件更新安全性的必要条件。以往,人们的印象是在更广泛的互联网上使用的算法不能用于受限IoT设备。然而事实证明,对不同算法进行优化和选择便有机会实现。对于公钥加密,通常使用椭圆曲线加密算法(ECC),因为它的密钥与RSA加密算法相比较小。美国国家标准与技术研究院(NIST)将椭圆曲线数字签名算法(ECDSA)标准化,用于P256r1曲线,在业界较为流行。另一种基于不同曲线的签名算法——ed25519也实现了标准化。此外,评估后量子加密领域的算法的标准化工作也在开展。
IETF SUIT工作组目前正在制定描述固件更新的规范。SUIT工作组定义了一个清单,该清单提供了:①更新设备所需固件的信息;②保护端到端元数据的安全封装。
例如,以TUF/Uptane为参考,SUIT清单格式可以提供适用Uptane固件映像的兼容(自定义)元数据。相较于SUIT标准,TUF标准既不以互操作性为目标,也不指定具体的元数据格式。
SUIT 规范包括结构文件,一份信息模型说明,和一份清单规范的提案。为了达到其目的,SUIT是建立在许多提供通用构建模式的开放标准之上。特别是将简洁二进制对象表示法(CBOR)用作数据格式规范。CBOR是为了小信息量二优化的使用二进制编码的无架构格式。此外,CBOR对象签名和加密(COSE)规范用于对通过CBOR序列化的数据进行加密保护。COSE定义了多种结构,其中包括符号结构,该结构指定了如何通过使用密码签名来保护有效载荷以防止篡改。
许多协议提供了用于通过网络传输固件更新的规范。基本传输方案通过特定的低功耗介质访问控制层(MAC)技术(例如蓝牙)或特定的总线技术(例如USB)启用设备固件更新(DFU)。另一方面,为了在多跳或异构低功耗网络之间传输固件,IETF协议套件对网络堆栈进行了标准化,该网络堆栈结合了UDP上的约束应用协议(CoAP)和TCP/TLS上的CoAP。 CoAP提供了与HTTP等效的功能,但专为受限的IoT设备量身定制。6LoWPAN规范旨在为不能直接使用IPv6的网络提供适配层。为了提供通信安全性,对DTLS和TLS配置文件进行了标准化,以用于IoT部署。
最为突出的IoT设备管理开放标准是由OMA Spec-Works研制的轻量级机器对机器协议(LwM2M)。为了传输数据,LwM2M V1.1用CoAP,可使用DTLS保证安全。LwM2M 规范定义了一个简单的数据模型和几个用于远程管理 IoT 设备的 RESTful 接口。这些接口使设备能够注册到服务器、提供信息更新和获取密钥材料。大量对象和资源已经标准化,以支持常用的传感器、执行器和其他资源。标准化对象中包括固件更新对象。
由IETF开发了 CoAP 管理接口标准(CoMI)。CoMI使用 CoAP 和基于 YANG 建模语言的数据模型,旨在重用现有的 SNMP 定义的对象和资源。CoMI仍在开发中,固件更新机制尚未定义,希望将来会定义这种扩展。
开放互联基金会(OCF)对在CoAP 和TLS/DTLS之上运行的IoT设备管理协议进行标准化,以促进设备间的互联互通,其类似于LwM2M。OCF定义了一个以RESTful API建模语言(RAML) 作为数据建模语言的数据模型。在针对智能家居环境中更大的IoT设备的同时,OCF在也在考虑其他垂直行业。
IoT设备的设备管理的早期工作使用远程过程调用而不是 RESTful 设计。 例如,TR-069,即宽带论坛开发的CPE 广域网管理协议(CWMP),可为更高端的IoT设备(例如联网打印机)提供固件更新功能。宽带论坛最近发布了TR-069的继任者,称为用户服务平台 (USP)。
现成的开源操作系统(如 Linux),无法用于缺乏必要硬件资源的受限IoT设备。更甚,连接互联网的设备日益复杂,需要相当复杂的协议栈,其中包括 IPv6、UDP、DTLS和CoAP。这种情况促使IoT操作系统的发展,包括许多开源IoT操作系统,如RIOT Zephyr、Mbed OS、MyNewt或Tock。此类别中流行的商业操作系统包括μC/OS和FreeRTOS。
OTA 固件更新系统是每个IoT项目的重要组成部分,必须设计详细的结构及架构。本文介绍了受限IoT设备软件升级的三个主要工作,以及针对固件升级过程的开源标准,对于现阶段主要发展情况做出了较为详细的概括。尽管方法及架构各有不同,但其总体向着安全、便捷、高效的方向发展。此外,随着技术不断发展,IoT真正实现万物互联,在某些情况下便需要技术迁移,因此对用于创建和实施的结构化流程的管理非常重要。未来,计划研究绝大多数可用的技术,并提出可以覆盖更广泛的IoT设备和嵌入式软件项目OTA升级技术架构和机制,涵盖拓扑与技术独立性,最大限度地减少技术迁移到引发的不确定性。