AWS IoT over-the-air (OTA) 更新ライブラリの移植 - FreeRTOS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS IoT over-the-air (OTA) 更新ライブラリの移植

FreeRTOS OTA over-the-air (OTA) 更新を使用すると、次の操作を実行できます。

  • 新しいファームウェアイメージを単一のデバイス、デバイスのグループ、またはフリート全体に展開します。

  • デバイスがグループに追加されたり、リセットされたり、再プロビジョニングされたりしたときに、ファームウェアをデバイスに展開します。

  • デバイスに導入された新しいファームウェアの信頼性と整合性を確認します。

  • デプロイの進行状況をモニタリングします。

  • 失敗したデプロイをデバッグします。

  • AWS IoT のコード署名を使用してファームウェアにデジタル署名します。

詳細については、『FreeRTOS ユーザーガイド』の「FreeRTOS 無線アップデート」と「AWS IoTOver-the-air アップデートドキュメント」を参照してください

OTA 更新ライブラリを使用して、OTA の機能を FreeRTOS アプリケーションに統合できます。詳細については、FreeRTOS ユーザーガイドFreeRTOS OTA 更新ライブラリを参照してください。

FreeRTOS デバイスは、受信した OTA ファームウェアイメージに対して暗号化コード署名検証を実行する必要があります。以下のアルゴリズムを推奨します。

  • 楕円曲線デジタル署名アルゴリズム (ECDSA)

  • NIST P256 曲線

  • SHA-256 ハッシュ

前提条件

プラットフォームの移植

OTA ライブラリを新しいデバイスに移植するには、OTA ポータブル抽象化レイヤー (PAL) を実装する必要があります。PAL API は ota_platform_interface.h ファイルで定義されています。このファイルについては、実装固有の詳細を提供する必要があります。

関数名

説明

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 デバイスブートローダー

E2E テストと PAL テスト

OTA PAL テストと E2E テストを実行します。

E2E テスト

OTA エンドツーエンド (E2E) テストは、デバイスの OTA 機能を検証し、現実のシナリオをシミュレートするために使用されます。このテストにはエラー処理が含まれます。

前提条件

このテストを移植するには、以下のものが必要です。

  • AWSOTA ライブラリが統合されたプロジェクト。詳細については、OTA ライブラリ移植ガイドをご覧ください

  • OTA ライブラリを使用してデモアプリケーションを移植し、AWS IoT Core操作して OTA 更新を行います。OTA デモアプリケーションの移植 を参照してください。

  • IDT ツールのセットアップ。これにより OTA E2E ホストアプリケーションが実行され、さまざまな構成のデバイスをビルド、フラッシュ、監視し、OTA ライブラリの統合が検証されます。

OTA デモアプリケーションの移植

OTA E2E テストには、OTA ライブラリの統合を検証するための OTA デモアプリケーションが必要です。デモアプリケーションには OTA ファームウェアの更新を実行する機能が必要です。FreeRTOS OTA デモアプリケーションは、FreeRTOS GitHub リポジトリにあります。デモアプリケーションを参考にして、仕様に合わせて修正することをおすすめします。

移植手順
  1. OTA エージェントを初期化します。

  2. OTA アプリケーションコールバック関数を実装します。

  3. OTA エージェントイベント処理タスクを作成します。

  4. OTA エージェントを開始します。

  5. OTA エージェントの統計を監視します。

  6. OTA エージェントをシャットダウンします。

詳細な手順については、FreeRTOS OTA over MQTT-デモのエントリーポイントをご覧ください

構成

とやり取りするには、次の構成が必要ですAWS IoT Core。

  • AWS IoT Coreクライアント認証情報

  • アプリケーションバージョン

  • OTA 制御プロトコル

  • OTA データプロトコル

  • コード署名認証情報

  • その他の OTA ライブラリ構成

上記の情報は、FreeRTOS OTAdemo_config.hota_config.h デモアプリケーション内および中にあります。詳細については、FreeRTOS OTA over MQTT-デバイスのセットアップをご覧ください

ビルド検証

デモアプリケーションを実行して OTA ジョブを実行します。正常に完了すると、OTA E2E テストを引き続き実行できます。

FreeRTOS OTA デモでは、FreeRTOS ウィンドウシミュレーターでのAWS IoT Core OTA クライアントと OTA ジョブのセットアップに関する詳細情報を提供します。 AWSOTA は MQTT プロトコルと HTTP プロトコルの両方をサポートしています。詳細については、次の例を参照してください。

IDT ツールによるテストの実行

OTA E2E テストを実行するには、AWS IoT Device Tester (IDT) を使用して実行を自動化する必要があります。AWS IoT Device Tester詳細については、『FreeRTOS ユーザーガイド』の「FreeRTOS」を参照してください。

E2E テストケース

テストケース

説明

OTAE2EGreaterVersion

定期的なOTAアップデートのハッピーパステスト。新しいバージョンで更新が作成され、デバイスは正常に更新されます。

OTAE2EBackToBackDownloads

このテストでは、3 回連続で OTA アップデートを作成します。デバイスは 3 回連続で更新される予定です。

OTAE2ERollbackIfUnableToConnectAfterUpdate

このテストでは、デバイスが新しいファームウェアでネットワークに接続できない場合、デバイスが以前のファームウェアにロールバックすることを確認します。

OTAE2ESameVersion

このテストでは、バージョンが変わらない場合、デバイスが受信ファームウェアを拒否することを確認します。

OTAE2EUnsignedImage

このテストでは、イメージが署名されていない場合、デバイスが更新を拒否することを確認します。

OTAE2EUntrustedCertificate

このテストでは、ファームウェアが信頼できない証明書で署名されている場合、デバイスが更新を拒否することを確認します。

OTAE2EPreviousVersion

このテストでは、デバイスが古い更新バージョンを拒否していることを確認します。

OTAE2EIncorrectSigningAlgorithm

デバイスによってサポートされる署名アルゴリズムとハッシュアルゴリズムは異なります。このテストでは、デバイスがサポートされていないアルゴリズムで作成された場合に OTA アップデートが失敗することを確認します。

OTAE2EDisconnectResume

これはサスペンド/レジューム機能のハッピーパステストです。このテストでは OTA アップデートを作成し、アップデートを開始します。次に、同じクライアント ID (モノ名) と認証情報を使用してに接続します。AWS IoT Core AWS IoT Coreその後、デバイスの接続を切断します。デバイスは、接続が切断されたことを検出しAWS IoT Core、一定時間が経過すると自動的に中断状態になり、AWS IoT Core再接続してダウンロードを再開しようとします。

OTAE2EDisconnectCancelUpdate

このテストでは、OTA ジョブが中断状態のときに OTA ジョブがキャンセルされた場合に、デバイスが自動的に回復できるかどうかを確認します。接続後にデバイスの接続が切断されると OTA 更新がキャンセルされる点以外は、OTAE2EDisconnectResumeテストと同じ処理を行います。AWS IoT Core新しいアップデートが作成されます。デバイスはに再接続しAWS IoT Core、現在の更新を中止し、待機状態に戻り、次の更新を受け入れて終了することが想定されます。

OTAE2EPresignedUrlExpired

OTA アップデートを作成すると、S3 署名付き URL の有効期間を設定できます。このテストでは、URL の有効期限が切れても、デバイスがダウンロードを完了できない場合でも、OTA を実行できることを確認します。デバイスは、ダウンロードを再開するための新しい URL を含む新しいジョブドキュメントを要求することが想定されています。

OTAE2E2UpdatesCancel1st

このテストでは、2 つの OTA アップデートを連続して作成します。デバイスが最初のアップデートをダウンロードしていると報告すると、テストは最初のアップデートを強制的にキャンセルします。デバイスは現在の更新を中止し、2 回目の更新を取得して完了することが想定されます。

OTAE2ECancelThenUpdate

このテストでは、2 つの OTA アップデートを連続して作成します。デバイスが最初のアップデートをダウンロードしていると報告すると、テストは最初のアップデートを強制的にキャンセルします。デバイスは現在の更新を中止し、2 回目の更新を取得して完了することが想定されます。

OTAE2EImageCrashed

このテストでは、イメージがクラッシュしたときにデバイスが更新を拒否できることを確認します。

PAL テスト

前提条件

ネットワークトランスポートインターフェイスのテストを移植するには、以下のものが必要です。

  • 有効な FreeRTOS カーネルポートを使用して FreeRTOS をビルドできるプロジェクト。

  • OTA PAL の実用的な実装です。

移植

  • FreeRTOS-ライブラリ-統合テストをサブモジュールとしてプロジェクトに追加します。プロジェクト内のサブモジュールの場所は、サブモジュールを構築できる場所でなければなりません。

  • config_template/test_execution_config_template.hconfig_template/test_param_config_template.hとをビルドパス内の場所にコピーし、test_execution_config.htest_param_config.h名前をとに変更します。

  • 関連するファイルをビルドシステムに追加します。を使用する場合CMakequalification_test.cmakesrc/ota_pal_tests.cmakeおよびを使用して関連ファイルを含めることができます。

  • 次の関数を実装してテストを設定します。

    • SetupOtaPalTestParam(): で定義されていますsrc/ota/ota_pal_test.h。実装には、で定義されているものと同じ名前と署名が必要ですota_pal_test.h。現在、この機能を設定する必要はありません。

  • テスト出力ログがデバイスログと重複しないように UNITY_OUTPUT_CHAR を実装します。

  • RunQualificationTest()アプリケーションから呼び出します。デバイスハードウェアは正しく初期化され、通話前にネットワークが接続されている必要があります。

テスト

このセクションでは、OTA PAL認定試験のローカルテストについて説明します。

テストを有効にする

OTA_PAL_TEST_ENABLEDtest_execution_config.h を開いて 1 に定義します。

test_param_config.h、以下のオプションを更新します。

  • OTA_PAL_TEST_CERT_TYPE: 使用する証明書の種類を選択します。

  • OTA_PAL_CERTIFICATE_FILE: デバイス証明書へのパス (該当する場合)。

  • OTA_PAL_FIRMWARE_FILE: ファームウェアファイルの名前 (該当する場合)。

  • OTA_PAL_USE_FILE_SYSTEM: OTA PAL がファイルシステムの抽象化を使用する場合は 1 に設定されます。

任意のツールチェーンを使用してアプリケーションをビルドおよびフラッシュします。RunQualificationTest()が呼び出されると、OTA PAL テストが実行されます。テスト結果はシリアルポートに出力されます。

OTA タスクの統合

  • 現在の MQTT デモに OTA エージェントを追加します。

  • を使用して OTA エンドツーエンド (E2E) テストを実行しますAWS IoT。これにより、統合が期待どおりに機能しているかどうかが検証されます。

注記

デバイスを正式に FreeRTOS 向けに資格認定するには、でデバイスの移植されたソースコードを検証する必要がありますAWS IoT Device Tester。『FreeRTOS ユーザーガイド』の「FreeRTOS の使用AWS IoT Device Tester」に記載されている手順に従って、AWS IoT Device Testerポート検証を設定してください。特定のライブラリのポートをテストするには、device.jsonAWS IoT Device Testerconfigsフォルダー内のファイルで正しいテストグループを有効にする必要があります。

IoT デバイスブートローダー

独自の安全なブートローダーアプリケーションを提供する必要があります。設計と実装によってセキュリティ上の脅威を適切に軽減できることを確認してください。以下は参考までに脅威モデルです。

IoT デバイスブートローダーの脅威モデリング

背景

実用的な定義として、AWS IoTこの脅威モデルで参照される組み込みデバイスは、クラウドサービスと相互作用するマイクロコントローラーベースの製品です。コンシューマー、商用、または産業用にデプロイできます。IoT デバイスは、ユーザー、患者、マシン、環境に関するデータを収集し、電球やドアロックから工場の機械に至るまで、あらゆるものを制御できます。

脅威モデリングは、仮定の敵対者の観点からのセキュリティへのアプローチです。攻撃者の目標と方法を考慮して、脅威リストが作成されます。脅威とは、敵によって実行されるリソースまたはアセットに対する攻撃です。このリストには優先順位が付けられ、緩和策の特定と作成に使用されます。緩和ソリューションを選択する際には、その実装と維持にかかるコストと、そのソリューションが提供する実際のセキュリティ価値とのバランスを取る必要があります。複数の 脅威モデルの方法論があります。AWS IoTそれぞれが安全で成功した製品の開発をサポートすることができます。

FreeRTOSAWS IoT はデバイスに OTA (over-the-air) ソフトウェアアップデートを提供します。更新機能は、クラウドサービスとオンデバイスソフトウェアライブラリとパートナー提供のブートローダーを組み合わせます。この脅威モデルは、特にブートローダーに対する脅威に焦点を当てています。

ブートローダーのユースケース
  • 展開する前に、ファームウェアにデジタル署名し、暗号化します。

  • 新しいファームウェアイメージを単一のデバイス、デバイスのグループ、またはフリート全体にデプロイします。

  • 新しいファームウェアがデバイスに導入された後、そのファームウェアの信頼性と完全性を検証します。

  • デバイスは、信頼できるソースから変更されていないソフトウェアのみを実行します。

  • デバイスは、OTA を介して受け取ったソフトウェアに障害耐性があります。

データフロー図

脅威

一部の攻撃には複数の緩和モデルがあります。たとえば、 man-in-the-middle 悪意のあるファームウェアイメージを配信することを目的としたネットワークは、TLSサーバーが提供する証明書と新しいファームウェアイメージのコード署名者証明書の両方に対する信頼性を検証することで軽減されます。ブートローダーのセキュリティを最大化するために、ブートローダー以外の緩和ソリューションは信頼性が低いと見なされます。ブートローダーには、攻撃ごとに固有の緩和ソリューションが必要です。階層化された緩和ソリューションを使用することとして知られています defense-in-depth。

脅威:
  • 攻撃者は、悪意のあるファームウェアイメージを配信するために、デバイスからサーバーへの接続をハイジャックします。

    緩和の例
    • ブートローダーは、起動時に、既知の証明書を使用してイメージの暗号化署名を検証します。検証に失敗した場合、ブートローダーは前のイメージにロールバックします。

  • 攻撃者は、バッファオーバーフローを悪用して、フラッシュに保存されている既存のファームウェアイメージに悪意のある動作を導入します。

    緩和の例
    • ブート時に、前に説明したように、ブートローダーが検証します。以前のイメージが使用できない状態で検証に失敗すると、ブートローダーは停止します。

    • ブート時に、前に説明したように、ブートローダーが検証します。以前のイメージが使用できない状態で検証に失敗すると、ブートローダーはフェイルセーフ OTA 専用モードに入ります。

  • 攻撃者は、以前に保存されたイメージからデバイスを起動します。このイメージは悪用可能です。

    緩和の例
    • 最後のイメージを保存する Flash セクターは、新しいイメージのインストールとテストに成功すると消去されます。

    • ヒューズはアップグレードが成功するたびに焼き付けられ、正しい数のヒューズが焼き付けられていない限り、各イメージの実行は拒否されます。

  • OTA 更新は、デバイスをブロックする障害のあるイメージや悪意のあるイメージを配信します。

    緩和の例
    • ブートローダーは、前のイメージへのロールバックをトリガーするハードウェアウォッチドッグタイマーを開始します。

  • 攻撃者はブートローダーにパッチを適用してイメージの検証をバイパスし、デバイスが署名されていないイメージを受け入れるようにします。

    緩和の例
    • ブートローダーは ROM (読み取り専用メモリ) にあり、変更することはできません。

    • ブートローダーは OTP (one-time-programmable メモリ) 内にあり、変更できません。

    • ブートローダーは ARM TrustZone のセキュアゾーンにあり、変更できません。

  • デバイスが悪意のあるイメージを受け入れるように、攻撃者は検証証明書を置き換えます。

    緩和の例
    • 証明書は暗号コプロセッサにあり、変更することはできません。

    • 証明書は ROM (または OTP、またはセキュアゾーン) にあり、変更することはできません。

脅威のさらなるモデル化

この脅威モデルでは、ブートローダーのみを考慮します。さらに脅威モデリングを行うことで、全体的なセキュリティを向上させることができます。推奨される方法は、敵対者の目標、それらの目標の対象となるアセット、およびアセットへの参入ポイントをリストすることです。脅威のリストは、エントリポイントに対する攻撃を考慮してアセットをコントロールすることで作成できます。以下は、IoT デバイスの目標、アセット、エントリポイントの例です。これらのリストはすべてを網羅したものではなく、さらなる検討を促進することを目的としています。

敵対者の目標
  • 資金の強要

  • 評判を落とす

  • データの改ざん

  • リソースの転送

  • ターゲットをリモートでスパイ

  • サイトへの物理的なアクセスを獲得する

  • 大惨事

  • 恐怖を与える

主要なアセット
  • プライベートキー

  • クライアント証明書

  • CA ルート証明書

  • セキュリティ認証情報とトークン

  • お客様の個人識別情報

  • 企業シークレットの実装

  • センサーデータ

  • クラウド分析データストア

  • クラウドインフラストラクチャ

エントリポイント
  • DHCP レスポンス

  • DNS レスポンス

  • MQTT over TLS

  • HTTPS レスポンス

  • OTA ソフトウェアイメージ

  • その他 (アプリケーションによって指示される USB など)

  • バスへの物理的なアクセス

  • デキャップされた IC