本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
移植Amazon IoT over-the-air (OTA) 更新库
在 FFreeRTOS O over-the-air S OS OS OS OS OS OS OS OS OS OS O
-
将固件映像部署到单个设备、一组设备或整个机群。
-
将固件添加到群组、重置或重新配置设备时,将固件部署到设备。
-
在将新固件部署到设备后,验证其真实性和完整性。
-
监控部署进度。
-
调试失败的部署。
-
使用 Amazon IoT 的代码签名对固件进行数字签名。
有关更多信息,请参阅 FreeRTOS 用户指南中的 FreeRTOS 无线更新以及 Amazon IoTOver-the-air 更新文档
您可以使用 OTA 更新库将 OTA 功能集成到您的 FreeRTOS 应用程序中。有关更多信息,请参阅 FreeRTOS 用户指南中的 FreeRTOS OT A 更新库。
FreeRTOS 设备必须对其收到的 OTA 固件映像强制执行加密代码签名验证。我们建议采用下列算法:
-
椭圆曲线数字签名算法 (ECDSA)
-
NIST P256 曲线
-
SHA-256 哈希
先决条件
-
完成中的说明设置工作空间和项目以进行移植。
-
创建网络传输接口端口。
有关信息,请参阅 移植网络传输接口。
-
集成 CorMTTOS OS OS 请参阅 F reeRTOS 用户指南中的 CoreMQTT 库。
-
创建可以支持 OTA 更新的引导加载程序。
平台移植
您必须提供 OTA 便携式抽象层 (PAL) 的实现才能将 OTA 库移植到新设备。PAL API 在 ota_platform_interface.h
函数名称 |
描述 |
---|---|
|
停止 OS OTOS OS O |
|
创建一个文件来存储接收到的数据块。 |
|
关闭指定的文件。如果您使用实现加密保护的存储,这可能会对文件进行身份验证。 |
|
按照指定偏移量将数据块写入指定文件。成功后,该函数返回写入的字节数。否则,该函数将返回负错误代码。区块大小将始终是二的乘方,并将对齐。有关更多信息,请参阅 OTOS OTOS OS OTO |
|
激活或启动新的固件映像。对于某些端口,如果以编程方式同步重置设备,则此函数将不会返回。 |
|
执行平台所需的任何操作来接受或拒绝最新的 OTA 固件映像(或包)。要实现此功能,请参阅您的主板(平台)详细信息和架构的文档。 |
|
获取 OTA 更新映像的状态。 |
如果您的设备已内置相应支持,实施此表中的函数。
函数名称 |
描述 |
---|---|
|
验证指定文件的签名。 |
|
从文件系统读取指定的签署人证书并将其返回给调用方。 |
|
重置设备。 |
注意
确保您有支持 OTA 更新的引导加载程序。有关创建Amazon IoT设备引导加载程序的说明,请参阅IoT 设备引导加载程序。
E2E 和 PAL 测试
运行 OTA PAL 和 E2E 测试。
E2E 测试
OTA 端到端 (E2E) 测试用于验证设备的 OTA 功能并从现实中模拟场景。该测试将包括错误处理。
先决条件
要移此测试,您需要以下内容:
一个集成了Amazon OTA 库的项目。有关更多信息,请访问 OTA 库移植指南
。 使用 OTA 库移植演示应用程序,与之交互Amazon IoT Core以执行 OTA 更新。请参阅移植 OTA 演示应用程序。
设置 IDT工具。这将运行 OTA E2E 主机应用程序来构建、刷新和监控具有不同配置的设备,并验证 OTA 库集成。
移植 OTA 演示应用程序
OTA E2E 测试必须有 OTA 演示应用程序来验证 OTA 库集成。演示应用程序必须具有执行 OTA 固件更新的能力。你可以在 FreeRTOS GitHub 存储库中找到 FreeRTOS
移植步骤
初始化 OTA 代理。
实现 OTA 应用程序回调函数。
创建 OTA 代理事件处理任务。
启动 OTOS OS OS OS
监控 OTA 代理统计信息。
关闭 OTOS OS OS OS OS
有关详细说明,请访问 FreeRTOS OTA over MQTT-演示的入口点
配置
以下配置是交互所必需的Amazon IoT Core:
Amazon IoT Core客户端凭证
Ota_Over_Mqtt_Demo/demo_config.h
使用亚马逊信任服务终端节点设置 d emoconfigroot_ca_PEM。有关更多详细信息,请参阅Amazon服务器身份验证。使用你的客户端凭据设置 democonfigclient_certifice_PEM 和 democonfigcAmazon IoT lient_private_key_
Ota_Over_Mqtt_Demo/demo_config.h
查看Amazon客户端身份验证详细信息以了解客户端证书和私钥。
应用程序版本
OTOS OS O
OTOS OS O
代码签名证书
其他 OTA 库配置
您可以在 FreeRTOS OTA 演示应用程序ota_config.h
中demo_config.h
和演示应用程序中找到上述信息。有关更多信息,请访问 FreeRTOS OTA over MQTT-设置设备
构建验证
运行演示应用程序来运行 OTA 作业。成功完成后,您可以继续运行 OTA E2E 测试。
FreeRT OS OTA 演示
使用 IDT 工具运行测试
要运行 OTA E2E 测试,必须使用Amazon IoT Device Tester (IDT) 自动执行。有关更多详细信息 Amazon IoT Device Tester,请参阅 FreeRT OS 用户指南中的 F reeRTOS。
E2E 测试用例
测试用例 |
描述 |
---|---|
|
定期更新 OTA 的快乐路径测试。它使用较新版本创建更新,设备会成功更新该版本。 |
|
此测试创建 3 次连续的 OTA 更新。该设备预计将连续更新 3 次。 |
|
此测试验证如果设备无法使用新固件连接到网络,则设备是否会回滚到以前的固件。 |
|
此测试确认,如果版本保持不变,设备会拒绝传入的固件。 |
|
此测试验证如果图像未签名,设备是否会拒绝更新。 |
|
此测试验证如果固件使用不可信证书签名,则设备会拒绝更新。 |
|
此测试验证设备是否拒绝了较早的更新版本。 |
|
不同的设备支持不同的签名和哈希算法。此测试验证如果设备是使用不支持的算法创建的,则该设备是否无法进行 OTA 更新。 |
|
这是暂停和恢复功能的成功路径测试。此测试创建 OTA 更新并开始更新。然后,它Amazon IoT Core使用相同的客户端 ID(事物名称)和凭据连接到。 Amazon IoT Core然后断开设备的连接。预计该设备会检测到已断开连接Amazon IoT Core,一段时间后,将自身移至暂停状态,然后尝试重新连接Amazon IoT Core并恢复下载。 |
|
此测试检查如果设备在 OTA 任务处于暂停状态时被取消,设备是否可以自行恢复。它与 |
|
创建 OTA 更新时,您可以配置 S3 预签名 URL 的生命周期。此测试可验证设备是否能够执行 OTA,即使在 URL 过期时它无法完成下载也是如此。预计设备将请求新的任务文档,其中包含用于恢复下载的新网址。 |
|
此测试连续创建两个 OTA 更新。当设备报告正在下载第一个更新时,测试强制取消第一个更新。预计该设备将中止当前更新并接收第二个更新,然后完成更新。 |
|
此测试连续创建两个 OTA 更新。当设备报告正在下载第一个更新时,测试强制取消第一个更新。预计设备将中止当前更新并获取第二个更新,然后完成更新。 |
|
此测试检查设备是否能够在映像崩溃时拒绝更新。 |
PAL 测试
先决条件
要移网络传输接口测试,您需要以下内容:
一个可以使用有效的 FreeRTOS 内核端口构建 FreeRTOS 的项目。
OTA PAL 的有效实现。
移植
将 Freertos-Libraries-Intestraries-
Integraries-Test作为子模块 项目中子模块的位置必须是可以构建子模块的位置。 将
config_template/test_execution_config_template.h
和复制config_template/test_param_config_template.h
到生成路径中的某个位置,然后将其重命名为test_execution_config.h
和test_param_config.h
。在编译系统中包含相关文件。如果使用
CMake
,则src/ota_pal_tests.cmake
可以使用qualification_test.cmake
和来包含相关文件。通过实现以下功能来配置测试:
SetupOtaPalTestParam()
: 在中定义src/ota/ota_pal_test.h
。实现必须与中定义的名称和签名相同ota_pal_test.h
。目前,您不需要配置此函数。
实现 UNITY_OUTPUT_CHAR,这样测试输出日志就不会与设备日志交错。
RunQualificationTest()
从应用程序中调用。在呼叫之前,必须正确初始化设备硬件,并且必须连接网络。
测试
本节介绍了 OTA PAL 资格测试的本地测试。
启用测试
打开test_execution_config.h
OTA_PAL_TEST_ENABLED 并将其定义为 1。
在test_param_config.h
中,更新以下选项:
OTA_PAL_TEST_CERT_T YPE:选择使用的证书类型。
OTA_PAL_CERTICATIFE_FILE:设备证书的路径(如果适用)。
OTA_PAL_FIRMWARE_FILE:固件文件的名称(如果适用)。
OTA_PAL_USE_FILE_SY STEM:如果 OTA PAL 使用文件系统抽象,则设置为 1。
使用您选择的工具链构建和刷新应用程序。调用RunQualificationTest()
时,OTA PAL 测试将运行。测试结果输出到串行端口。
集成 OTOS O
将 OTA 代理添加到您当前的 MQTT 演示中。
使用运行 OTA 端到端 (E2E) 测试Amazon IoT。这将验证集成是否按预期运行。
注意
要使设备正式获得 FreeRTOS 资格,您必须使用 OTA PAL 和 OTA E2E 测试组验证设备移植的源代码Amazon IoT Device Tester。按照 FreeRTOS 用户指南中 FreeRTOS 的使用Amazon IoT Device Tester中的说明Amazon IoT Device Tester进行端口验证设置。要测试特定库的端口,必须在Amazon IoT Device Testerconfigs
文件夹device.json
的文件中启用正确的测试组。
IoT 设备引导加载程序
您必须提供自己的安全引导加载程序应用程序。确保设计和实现能够适当缓解安全威胁。以下是威胁建模供您参考。
IoT 设备引导加载程序的威胁建模
背景
作为工作定义,该威胁模型引用的嵌入式Amazon IoT设备是基于微控制器的产品,可与云服务交互。它们可以部署在消费者、商业或工业环境中。IoT 设备可以收集有关用户、患者、机器或环境的数据,并且可以控制从灯泡和门锁到工厂机器的任何事物。
从假设对手的角度看,威胁建模是一种保护安全的方法。通过考虑对手的目标和方法,可以创建威胁列表。威胁是对手对资源或资产发起的攻击。该列表按优先顺序排列,用于确定和创建缓解解决方案。在选择缓解解决方案时,应在实施和维护其成本与其提供的实际安全价值之间取得平衡。可以使用多种威胁模型方法
FreeRTOS 为Amazon IoT设备提供 OTA (over-the-air) 软件更新。更新工具将云服务与设备上的软件库和合作伙伴提供的引导加载程序结合使用。该威胁模型明确侧重于针对引导加载程序的威胁。
引导加载程序使用案例
-
在部署之前对固件进行数字签名和加密。
-
将新的固件映像部署到单个设备、一组设备或整个队列中。
-
在新固件部署到设备之后,验证其真实性和完整性。
-
设备仅运行来自受信任的来源的未修改软件。
-
设备可以灵活处理通过 OTA 收到的故障软件。
数据流程图

威胁
有些攻击有多种缓解模式;例如,通过验证对 TLS 服务器提供的证书和新固件映像的代码签名者证书的信任,可以缓解 man-in-the-middle 旨在传送恶意固件映像的网络。为了最大限度地提高引导加载程序的安全性,任何非引导加载程序缓解解决方案都被认为是不可靠的。引导加载程序应该为每种攻击提供固有的缓解解决方案。拥有分层缓解解决方案被称为 defense-in-depth。
威胁:
-
攻击者劫持设备到服务器的连接以提供恶意固件映像。
缓解措施示例
-
在引导时,引导加载程序使用已知证书验证映像的加密签名。如果验证失败,引导加载程序将回滚到上一个映像。
-
-
攻击者利用缓冲区溢出以将恶意行为引入到闪存中存储的现有固件映像。
缓解措施示例
-
在引导时,引导加载程序将按照上面所述进行验证。如果验证失败并且没有以前的映像,引导加载程序将停止。
-
在引导时,引导加载程序将按照上面所述进行验证。当验证失败且之前没有可用的映像时,引导加载程序会进入仅限故障安全的 OTA 模式。
-
-
攻击者将设备引导到以前存储的映像,从而可以利用该映像发起攻击。
缓解措施示例
-
在成功安装和测试新映像后,将擦除存储上一个映像的闪存扇区。
-
在每次成功升级时,都会熔断保险丝,每个映像将会重新熔断保险丝才能运行,除非已熔断正确数量的保险丝。
-
-
OTA 更新提供故障或恶意映像,从而导致设备无法正常运行。
缓解措施示例
-
引导加载程序启动硬件监视程序计时器,以触发回滚到上一个映像。
-
-
攻击者修补引导加载程序以绕过映像验证,因此,设备将接受未签名的映像。
缓解措施示例
-
引导加载程序位于 ROM(只读存储器)中,无法进行修改。
-
引导加载程序位于 OTP(one-time-programmable 内存)中,无法修改。
-
引导加载程序位于 ARM 的安全区域中 TrustZone,无法修改。
-
-
攻击者替换验证证书,因此,设备将接受恶意映像。
缓解措施示例
-
证书位于加密协处理器中,无法进行修改。
-
证书位于 ROM、OTP 或安全区域中,无法进行修改。
-
进一步的威胁建模
该威胁模型仅考虑引导加载程序。进一步的威胁建模可能会提高整体安全性。建议的方法是列出对手的目标、这些目标针对的资产以及资产的入口点。可以考虑为控制资产而对入口点发起的攻击以创建威胁列表。以下是 IoT 设备的目标、资产和入口点示例列表。这些列表并非详尽无遗,旨在为您提供一些启发。
对手的目标
-
敲诈钱财
-
诋毁声誉
-
伪造数据
-
转移资源
-
远程监视目标
-
实际访问站点
-
造成严重破坏
-
灌输恐怖
主要资产
-
私有密钥
-
客户端证书
-
CA 根证书
-
安全凭证和令牌
-
客户的个人身份信息
-
商业机密实施
-
传感器数据
-
云分析数据存储
-
云基础设施
入口点
-
DHCP 响应
-
DNS 响应
-
基于 TLS 的 MQTT
-
HTTPS 响应
-
OTA 软件映像
-
应用程序指示的其他内容,例如 USB
-
实际访问总线
-
开封 IC