移植 AWS IoT over-the-air (OTA) 更新程式庫 - 免費RTOS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

移植 AWS IoT over-the-air (OTA) 更新程式庫

使用 FreeRTOS over-the-air (OTA)更新,您可以執行以下操作:

  • 將新的韌體映像部署到單一裝置、裝置群組,或是您的整個機群。

  • 將韌體新增至群組、重設或重新佈建時,將韌體部署至裝置。

  • 將新韌體部署到裝置後,驗證其真實性和完整性。

  • 監控部署進度。

  • 對失敗的部署進行除錯。

  • 使用程式碼簽章對韌體進行數位簽章 AWS IoT。

如需詳細資訊,請參閱 FreeRTOS 使用者指南中的無線更新以及 O 更新文件。AWS IoT ver-the-air

您可以使用 OTA 更新程式庫將 OTA 功能整合到 FreeRTOS 應用程式中。如需詳細資訊,請參閱 FreeRTOS 使用者指南中的《Free RTOS OTA 更新程式庫》。

FreeRTOS 裝置必須在收到的 OTA 韌體映像上強制執行加密程式碼簽章驗證。我們建議以下演算法:

  • 橢圓曲線數位簽章演算法 (ECDSA)

  • NIST P256 曲線

  • SHA-256 雜湊

必要條件

平台移植

您必須提供 OTA 便攜式抽象層(PAL)的實現,以將 OTA 庫移植到新設備。PAL API 定義於必須提供實作特定詳細資訊的檔案中。

函數名稱

描述

otaPal_Abort

停止 OTA 更新。

otaPal_CreateFileForRx

創建一個文件來存儲接收的數據塊。

otaPal_CloseFile

關閉指定的檔案。如果您使用實作加密保護的儲存體,這可能會驗證檔案。

otaPal_WriteBlock

將資料區塊寫入指定檔案中的指定位移。成功後,該函數返回寫入的字節數。否則,該函數返回一個負的錯誤代碼。塊大小將始終是 2 的冪,並將被對齊。有關更多信息,請參閱 OTA 庫配置

otaPal_ActivateNewImage

啟用或啟動新的韌體映像。對於某些端口,如果設備以編程方式同步重置,則此功能將不會返回。

otaPal_SetPlatformImageState

執行讓平台接受或拒絕最新 OTA 韌體映像 (或套件) 所需的動作。若要實作此功能,請參閱您主機板 (平台) 詳細資料和架構的說明文件。

otaPal_GetPlatformImageState

取得 OTA 更新映像的狀態。

如果您的裝置內建支援此表格中的函數,請實作這些函數。

函數名稱

描述

otaPal_CheckFileSignature

驗證指定檔案的簽章。

otaPal_ReadAndAssumeCertificate

從檔案系統讀取指定的簽署者憑證,並傳回給發起人。

otaPal_ResetDevice

重設裝置。

注意

確定您具有可支援 OTA 更新的開機載入器。有關創建 AWS IoT 設備引導加載程序的說明,請參閱IoT 裝置開機載入器

端對端測試和朋友測試

運行 OTA PAL 和 E2E 測試。

端對端測試

OTA 端對端(E2E)測試用於驗證設備的 OTA 功能並從現實中模擬場景。此測試將包括錯誤處理。

必要條件

要移植此測試,您需要以下內容:

  • 一個集成了 O AWS TA 圖書館的項目。有關更多信息,請訪問 OTA 圖書館移植指南

  • 使用 OTA 庫移植演示應用程序以與之交互 AWS IoT Core 以進行 OTA 更新。請參閱移植 OTA 演示應用程序

  • 設定 IDT 工具。這將運行 OTA E2E 主機應用程序以構建,刷新和監視具有不同配置的設備,並驗證 OTA 庫集成。

移植 OTA 演示應用程序

OTA E2E 測試必須具有 OTA 演示應用程序才能驗證 OTA 庫集成。演示應用程序必須具有執行 OTA 固件更新的能力。您可以在 FreeRTOS 儲存庫中找到免費伺服器 OTA 示範應用程式。 GitHub我們建議您使用演示應用程序作為參考,並根據您的規格進行修改。

移植步驟
  1. 初始化 OTA 代理程式。

  2. 實現 OTA 應用程序回調函數。

  3. 建立 OTA 代理程式事件處理工作。

  4. 啟動 OTA 代理程式。

  5. 監視 OTA 代理程式統計資料。

  6. 關閉 OTA 代理程式。

通過 MQTT 訪問 FreeRTOS OTA-演示的入口點以獲取詳細說明。

組態

以下是與之互動所必需的配置 AWS IoT Core:

  • AWS IoT Core 用戶端認證

    • 使用 Amazon 信任服務端點設定示範 Ota_Over_Mqtt_Demo/demo_config.h 如需詳細資訊,請參閱AWS 伺服器驗證

    • 使用您的客戶端憑據設置演示配置客戶端證書 Ota_Over_Mqtt_Demo/demo_config.h AWS IoT 請參閱用戶AWS 端驗證詳細資料,以瞭解用戶端憑證和私密金鑰。

  • 應用程式版本

  • OTA 控制協議

  • OTA 數據協議

  • 程式碼簽章認證

  • 其他 OTA 庫配置

您可以在 FreeRTOS OTA 示範應用程式ota_config.h中找到上述資訊。demo_config.h如需詳細資訊,請造訪透過 MQTT 的 FreeRTOS OTA-設定裝置

構建驗證

運行演示應用程序以運行 OTA 作業。成功完成後,您可以繼續運行 OTA E2E 測試。

FreeRTOS OTA 演示提供了有關在 FreeRTOS 窗口模擬器上設置 OTA 客戶端和 AWS IoT Core OTA 作業的詳細信息。 AWS OTA 同時支持 MQTT 和 HTTP 協議。如需詳細資訊,請參閱下列範例:

使用 IDT 工具執行測試

要運行 OTA E2E 測試,您必須使用 AWS IoT Device Tester (IDT)自動執行。AWS IoT Device Tester 如需詳細資訊,請參閱 FreeRTOS 使用者指南中的 FreeRTOS

端對端測試用例

測試用例

描述

OTAE2EGreaterVersion

定期 OTA 更新的快樂路徑測試。它會建立具有較新版本的更新,裝置會成功更新。

OTAE2EBackToBackDownloads

此測試會連續建立 3 次 OTA 更新。裝置預期會連續更新 3 次。

OTAE2ERollbackIfUnableToConnectAfterUpdate

如果設備無法連接到具有新固件的網絡,則此測試將驗證設備是否還原到先前的固件。

OTAE2ESameVersion

此測試確認如果版本保持不變,則設備拒絕傳入的固件。

OTAE2EUnsignedImage

如果映像未簽署,此測試會驗證裝置是否拒絕更新。

OTAE2EUntrustedCertificate

如果韌體使用不受信任的憑證簽署,此測試會驗證裝置是否拒絕更新。

OTAE2EPreviousVersion

此測試會驗證裝置是否拒絕較舊的更新版本。

OTAE2EIncorrectSigningAlgorithm

不同的裝置支援不同的簽章和雜湊演算法。如果使用不支持的算法創建,則此測試驗證設備是否會失敗 OTA 更新。

OTAE2EDisconnectResume

這是暫停和恢復功能的快樂路徑測試。此測試會建立 OTA 更新並開始更新。然後,它會 AWS IoT Core 使用相同的用戶端 ID (物件名稱) 和認證連線到。 AWS IoT Core 然後斷開設備的連接。預計該設備會檢測到它與斷開連接 AWS IoT Core,並在一段時間後將自己移動到暫停狀態,並嘗試重新連接到 AWS IoT Core 並繼續下載。

OTAE2EDisconnectCancelUpdate

如果 OTA 作業處於暫停狀態時取消,此測試將檢查設備是否可以自行恢復。它與OTAE2EDisconnectResume測試執行相同的操作,除了在連接到 AWS IoT Core斷開設備的連接後,它會取消 OTA 更新。隨即建立新的更新。裝置預期會重新連線到 AWS IoT Core、中止目前的更新、回到等待中狀態,然後接受並完成下一次更新。

OTAE2EPresignedUrlExpired

創建 OTA 更新時,您可以配置 S3 預簽名 URL 的生命週期。此測試驗證設備是否能夠執行 OTA,即使在 url 過期時無法完成下載也是如此。裝置預期會要求新的工作文件,其中包含可繼續下載的新 URL。

OTAE2E2UpdatesCancel1st

此測試連續創建兩個 OTA 更新。當設備報告正在下載第一個更新時,測試會強制取消第一次更新。裝置預期會中止目前的更新並取得第二個更新,然後完成更新。

OTAE2ECancelThenUpdate

此測試連續創建兩個 OTA 更新。當設備報告正在下載第一個更新時,測試會強制取消第一次更新。裝置預期會中止目前的更新並取得第二個更新,然後完成更新。

OTAE2EImageCrashed

此測試會檢查設備是否能夠在映像崩潰時拒絕更新。

PAL 測試

必要條件

若要移植「網路傳輸介面」測試,您需要下列項目:

  • 可以使用有效的 FreeRTOS 核心連接埠建置 FreeRTOS 的專案。

  • OTA PAL 的工作實施。

移植

  • FreeRTOS 庫集成測試作為子模塊添加到您的項目中。項目中子模塊的位置必須是可以構建的位置。

  • config_template/test_execution_config_template.h和複製config_template/test_param_config_template.h到構建路徑中的位置,並將其重命名為test_execution_config.htest_param_config.h

  • 在建置系統中包含相關檔案。如果使用 CMakequalification_test.cmake,則src/ota_pal_tests.cmake可用於包含相關文件。

  • 透過實作下列功能來設定測試:

    • SetupOtaPalTestParam():定義於src/ota/ota_pal_test.h。該實現必須具有與中定義相同的名稱和簽名ota_pal_test.h。目前,您不需要設定此功能。

  • 實施 UNITY_OUTPUT_CHAR,以便測試輸出日誌不會與設備日誌交錯。

  • RunQualificationTest()從應用程序調用。設備硬件必須正確初始化,並且必須在呼叫之前連接網絡。

測試

本節介紹 OTA PAL 資格測試的本地測試。

啟用測試

開啟test_execution_config.h並將其定義為 1。

在中test_param_config.h,更新下列選項:

  • 證類型:選取使用的憑證類型。

  • 證檔案:裝置憑證的路徑 (如果適用)。

  • 體檔案:韌體檔案的名稱 (如果適用)。

  • 系統:如果 OTA PAL 使用文件系統抽象,則設置為 1。

使用您選擇的工具鏈來建置和更新應用程式。當RunQualificationTest()被調用時,OTA PAL 測試將運行。測試結果將輸出到串行端口。

整合 OTA 工作

  • 將 OTA 代理程式新增至您目前的 MQTT 示範。

  • 運行 OTA 端對端(E2E)測試。 AWS IoT這會驗證整合是否如預期般運作。

注意

要正式使用 FreeRTOS 的設備資格,您必須使用. AWS IoT Device Tester請依照 FreeRTOS 使 AWS IoT Device Tester 用者指南中的使用 FreeRTOS 中的指示來設定連接 AWS IoT Device Tester 埠驗證。若要測試特定程式庫的連接埠,必須在 AWS IoT Device Tester configs資料夾中的device.json檔案中啟用正確的測試群組。

IoT 裝置開機載入器

您必須提供自己的安全引導加載程序應用程序。確保設計和實施可以適當緩解安全威脅。以下是威脅建模,供您參考。

IoT 裝置開機載入器的威脅模型

背景介紹

作為工作定義,此威脅模型引用的嵌入式 AWS IoT 設備是基於微控制器的產品,可與雲服務進行交互。它們可以部署在消費者、商業或工業環境。IoT 裝置可能會收集有關使用者、病患、機器或環境的資料,並可以控制燈泡和門鎖到工廠機械等任何項目。

威脅模型是假設從對手的角度來檢視安全的方法。通過考慮對手的目標和方法,將創建一個威脅列表。威脅是對手對資源或資產的攻擊。此清單會排定優先順序,並用來識別和建立緩和解決方案。在選擇緩解解決方案時,實施和維護它的成本應與其提供的真正安全價值保持平衡。有多種 威脅模型方法。每個都能夠支持安全和成功的 AWS IoT 產品的開發。

FreeRTOS 為 AWS 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