Portage de la bibliothèque de mise à jour AWS IoT over-the-air (OTA) - Gratuit RTOS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Portage de la bibliothèque de mise à jour AWS IoT over-the-air (OTA)

Avec les mises à jour de over-the-air FreeRTOS (OTA), vous pouvez effectuer les opérations suivantes :

  • Déployer les nouvelles images du microprogramme sur un seul appareil, un groupe d'appareils ou l'ensemble de votre flotte.

  • Déployez le microprogramme sur les appareils au fur et à mesure qu'ils sont ajoutés à des groupes, réinitialisés ou reprovisionnés.

  • Vérifiez l'authenticité et l'intégrité du nouveau microprogramme après son déploiement sur les appareils.

  • Surveiller la progression d'un déploiement.

  • Déboguer un déploiement ayant échoué.

  • Signez numériquement le microprogramme à l'aide de Code Signing for AWS IoT.

Pour plus d'informations, consultez les mises à jour en direct de FreeRTOS dans le guide de l'utilisateur de FreeRTOS ainsi que dans la documentation relative à O Update.AWS IoT ver-the-air

Vous pouvez utiliser la bibliothèque de mise à jour OTA pour intégrer la fonctionnalité OTA dans vos applications FreeRTOS. Pour plus d'informations, consultez la bibliothèque de mise à jour de FreeRTOS OTA dans le guide de l'utilisateur de FreeRTOS.

Les appareils FreeRTOS doivent appliquer la vérification de signature de code cryptographique sur les images du microprogramme OTA qu'ils reçoivent. Nous vous recommandons les algorithmes suivants :

  • L’algorithme ECDSA (Elliptic Curve Digital Signature Algorithm)

  • La courbe NIST P256

  • Le hachage SHA-256

Prérequis

Portage de plateformes

Vous devez fournir une implémentation de la couche d'abstraction portable OTA (PAL) pour porter la bibliothèque OTA vers un nouveau périphérique. Les API PAL sont définies dans le fichier ota_platform_interface.h pour lequel les détails spécifiques à l'implémentation doivent être fournis.

Nom de la fonction

Description

otaPal_Abort

Arrête une mise à jour OTA.

otaPal_CreateFileForRx

Crée un fichier pour stocker les blocs de données reçus.

otaPal_CloseFile

Ferme le fichier spécifié. Cela peut authentifier le fichier si vous utilisez un stockage qui implémente une protection cryptographique.

otaPal_WriteBlock

Écrit un bloc de données dans le fichier spécifié au décalage donné. En cas de succès, la fonction renvoie le nombre d'octets écrits. Dans le cas contraire, la fonction renvoie un code d'erreur négatif. La taille du bloc sera toujours une puissance de deux et sera alignée. Pour plus d'informations, consultez la section Configuration de la bibliothèque OTA.

otaPal_ActivateNewImage

Active ou lance la nouvelle image du microprogramme. Pour certains ports, si le périphérique est réinitialisé par programmation synchrone, cette fonction ne sera pas rétablie.

otaPal_SetPlatformImageState

Fait que ce qui est requis par la plateforme pour accepter ou rejeter l’image la plus récente du microprogramme OTA (ou bundle). Pour implémenter cette fonction, consultez la documentation relative aux détails et à l'architecture de votre tableau (plate-forme).

otaPal_GetPlatformImageState

Permet d'obtenir l'état de l'image de la mise à jour OTA.

Implémentez les fonctions de ce tableau, si votre appareil intègre une prise en charge de ces dernières.

Nom de la fonction

Description

otaPal_CheckFileSignature

Vérifie la signature du fichier spécifié.

otaPal_ReadAndAssumeCertificate

Lit le certificat de signataire spécifiée à partir du système de fichiers et le renvoie à l'appelant.

otaPal_ResetDevice

Réinitialise l'appareil.

Note

Assurez-vous que vous avez un chargeur de démarrage pouvant prendre en charge les mises à jour OTA. Pour obtenir des instructions sur la création du chargeur de démarrage de votre AWS IoT appareil, consultezChargeur de démarrage pour périphériques IoT.

Tests E2E et PAL

Exécutez les tests OTA PAL et E2E.

Tests E2E

Le test OTA de bout en bout (E2E) est utilisé pour vérifier la capacité OTA d'un appareil et pour simuler des scénarios à partir de la réalité. Ce test inclura la gestion des erreurs.

Prérequis

Pour transférer ce test, vous avez besoin des éléments suivants :

  • Un projet avec une bibliothèque AWS OTA intégrée. Consultez le guide de portage des bibliothèques OTA pour plus d'informations.

  • Portez l'application de démonstration à l'aide de la bibliothèque OTA avec laquelle interagir AWS IoT Core pour effectuer les mises à jour OTA. veuillez consulter Portage de l'application de démonstration OTA.

  • Configurez l'outil IDT. Cela exécute l'application hôte OTA E2E pour créer, flasher et surveiller l'appareil avec différentes configurations, et valide l'intégration de la bibliothèque OTA.

Portage de l'application de démonstration OTA

Le test OTA E2E doit disposer d'une application de démonstration OTA pour valider l'intégration de la bibliothèque OTA. L'application de démonstration doit être capable d'effectuer des mises à jour du microprogramme OTA. Vous pouvez trouver l'application de démonstration FreeRTOS OTA dans le référentiel FreeRTOS. GitHub Nous vous recommandons d'utiliser l'application de démonstration comme référence et de la modifier selon vos spécifications.

Étapes de portage
  1. Initialisez l'agent OTA.

  2. Implémentez la fonction de rappel de l'application OTA.

  3. Créez la tâche de traitement des événements de l'agent OTA.

  4. Démarrez l'agent OTA.

  5. Surveillez les statistiques des agents OTA.

  6. Arrêtez l'agent OTA.

Visitez FreeRTOS OTA over MQTT - Point d'entrée de la démo pour obtenir des instructions détaillées.

Configuration

Les configurations suivantes sont nécessaires pour interagir avec AWS IoT Core :

  • AWS IoT Core informations d'identification du client

    • Configurez DemoConfigRoot_CA_PEM avec les points de terminaison Amazon Trust Services. Ota_Over_Mqtt_Demo/demo_config.h Voir AWS Authentification du serveur pour plus de détails.

    • Configurez DemoConfigClient_Certificate_pem et DemoConfigClient_Private_Key_PEM avec les informations d'identification de votre client. Ota_Over_Mqtt_Demo/demo_config.h AWS IoT Consultez les informations relatives àAWS l'authentification des clients pour en savoir plus sur les certificats clients et les clés privées.

  • Version de l'application

  • Protocole de contrôle OTA

  • Protocole de données OTA

  • Identifiants de signature de code

  • Autres configurations de bibliothèques OTA

Vous trouverez les informations précédentes dans demo_config.h et ota_config.h dans les applications de démonstration de FreeRTOS OTA. Consultez FreeRTOS OTA over MQTT - Configuration de l'appareil pour plus d'informations.

Vérification des builds

Exécutez l'application de démonstration pour exécuter la tâche OTA. Une fois l'opération terminée avec succès, vous pouvez continuer à exécuter les tests OTA E2E.

La démo de FreeRTOS OTA fournit des informations détaillées sur la configuration d'un client OTA et d'une tâche OTA sur le AWS IoT Core simulateur Windows FreeRTOS. AWS OTA prend en charge les protocoles MQTT et HTTP. Reportez-vous aux exemples suivants pour plus de détails :

Exécution de tests avec l'outil IDT

Pour exécuter les tests OTA E2E, vous devez utiliser AWS IoT Device Tester (IDT) pour automatiser l'exécution. Voir FreeRTOS dans le Guide de l'utilisateur de FreeRTOS AWS IoT Device Tester pour plus de détails.

Cas de test E2E

Cas de test

Description

OTAE2EGreaterVersion

Bon test de trajectoire pour les mises à jour régulières de l'OTA. Il crée une mise à jour avec une version plus récente, que l'appareil met à jour avec succès.

OTAE2EBackToBackDownloads

Ce test crée 3 mises à jour OTA consécutives. L'appareil devrait être mis à jour 3 fois de suite.

OTAE2ERollbackIfUnableToConnectAfterUpdate

Ce test vérifie que l'appareil revient au microprogramme précédent s'il ne peut pas se connecter au réseau avec le nouveau microprogramme.

OTAE2ESameVersion

Ce test confirme que l'appareil rejette le microprogramme entrant si la version reste la même.

OTAE2EUnsignedImage

Ce test vérifie que l'appareil rejette une mise à jour si l'image n'est pas signée.

OTAE2EUntrustedCertificate

Ce test vérifie que l'appareil rejette une mise à jour si le microprogramme est signé avec un certificat non fiable.

OTAE2EPreviousVersion

Ce test vérifie que l'appareil rejette une ancienne version de mise à jour.

OTAE2EIncorrectSigningAlgorithm

Différents appareils prennent en charge différents algorithmes de signature et de hachage. Ce test vérifie que l'appareil échoue à la mise à jour OTA s'il est créé avec un algorithme non pris en charge.

OTAE2EDisconnectResume

Il s'agit d'un test de réussite pour la fonctionnalité de suspension et de reprise. Ce test crée une mise à jour OTA et démarre la mise à jour. Il se connecte ensuite AWS IoT Core avec le même identifiant client (nom de l'objet) et les mêmes informations d'identification. AWS IoT Core puis déconnecte l'appareil. L'appareil est censé détecter qu'il est déconnecté et AWS IoT Core, au bout d'un certain temps, passer à l'état suspendu, essayer de se reconnecter AWS IoT Core et de reprendre le téléchargement.

OTAE2EDisconnectCancelUpdate

Ce test vérifie si l'appareil peut se rétablir lui-même si la tâche OTA est annulée alors qu'il est suspendu. Il fait la même chose que le OTAE2EDisconnectResume test, sauf qu'après s'être connecté à AWS IoT Core, ce qui déconnecte l'appareil, il annule la mise à jour OTA. Une nouvelle mise à jour est créée. L'appareil est censé se reconnecter au AWS IoT Core, abandonner la mise à jour en cours, revenir à l'état d'attente, accepter et terminer la mise à jour suivante.

OTAE2EPresignedUrlExpired

Lorsqu'une mise à jour OTA est créée, vous pouvez configurer la durée de vie de l'URL pré-signée S3. Ce test vérifie que l'appareil est capable d'effectuer une OTA, même s'il ne peut pas terminer le téléchargement lorsque l'URL expire. L'appareil est censé demander un nouveau document de travail contenant une nouvelle URL pour reprendre le téléchargement.

OTAE2E2UpdatesCancel1st

Ce test crée deux mises à jour OTA d'affilée. Lorsque l'appareil signale qu'il télécharge la première mise à jour, le test force l'annule. L'appareil est censé abandonner la mise à jour en cours, récupérer la deuxième mise à jour et la terminer.

OTAE2ECancelThenUpdate

Ce test crée deux mises à jour OTA d'affilée. Lorsque l'appareil signale qu'il télécharge la première mise à jour, le test force l'annule. L'appareil est censé abandonner la mise à jour en cours et récupérer la deuxième mise à jour, puis la terminer.

OTAE2EImageCrashed

Ce test vérifie que l'appareil est capable de rejeter une mise à jour lorsque l'image tombe en panne.

Tests PAL

Prérequis

Pour porter les tests de l'interface de transport réseau, vous avez besoin des éléments suivants :

  • Un projet capable de créer FreeRTOS avec un port de noyau FreeRTOS valide.

  • Une implémentation fonctionnelle d'OTA PAL.

Portage

  • Ajoutez FreeRTOS-Libraries-Integration-Tests en tant que sous-module dans votre projet. L'emplacement du sous-module dans le projet doit être là où il peut être construit.

  • Copiez config_template/test_execution_config_template.h et config_template/test_param_config_template.h vers un emplacement dans le chemin de construction, et renommez-les en test_execution_config.h ettest_param_config.h.

  • Incluez les fichiers pertinents dans le système de compilation. Si vous l'utilisezCMake, qualification_test.cmake et src/ota_pal_tests.cmake peut être utilisé pour inclure les fichiers pertinents.

  • Configurez le test en implémentant les fonctions suivantes :

    • SetupOtaPalTestParam(): défini danssrc/ota/ota_pal_test.h. L'implémentation doit avoir le même nom et la même signature que ceux définis dansota_pal_test.h. Pour le moment, il n'est pas nécessaire de configurer cette fonction.

  • Implémentez UNITY_OUTPUT_CHAR afin que les journaux de sortie des tests ne soient pas entrelacés avec les journaux des périphériques.

  • Appelez RunQualificationTest() depuis l'application. Le matériel de l'appareil doit être correctement initialisé et le réseau doit être connecté avant l'appel.

Test

Cette section décrit les tests locaux des tests de qualification OTA PAL.

Activez le test

Ouvrez test_execution_config.h et définissez OTA_PAL_TEST_ENABLED sur 1.

Danstest_param_config.h, mettez à jour les options suivantes :

  • OTA_PAL_TEST_CERT_TYPE : sélectionnez le type de certificat utilisé.

  • OTA_PAL_CERTIFICATE_FILE : chemin d'accès au certificat de l'appareil, le cas échéant.

  • OTA_PAL_FIRMWARE_FILE : nom du fichier du microprogramme, le cas échéant.

  • OTA_PAL_USE_FILE_SYSTEM : défini sur 1 si l'OTA PAL utilise l'abstraction du système de fichiers.

Créez et flashez l'application à l'aide de la chaîne d'outils de votre choix. Lorsque le RunQualificationTest() est appelé, les tests OTA PAL s'exécutent. Les résultats des tests sont transmis au port série.

Intégration des tâches OTA

  • Ajoutez un agent OTA à votre démo MQTT actuelle.

  • Exécutez des tests OTA de bout en bout (E2E) avec AWS IoT. Cela permet de vérifier si l'intégration fonctionne comme prévu.

Note

Pour qualifier officiellement un appareil pour FreeRTOS, vous devez valider le code source porté de l'appareil par rapport aux groupes de test OTA PAL et OTA E2E avec. AWS IoT Device Tester Suivez les instructions de la section Utilisation AWS IoT Device Tester pour FreeRTOS du Guide de l'utilisateur de FreeRTOS pour configurer la validation des ports. AWS IoT Device Tester Pour tester le port d'une bibliothèque spécifique, le groupe de test approprié doit être activé dans le device.json fichier du AWS IoT Device Tester configs dossier.

Chargeur de démarrage pour périphériques IoT

Vous devez fournir votre propre application de bootloader sécurisée. Assurez-vous que la conception et la mise en œuvre permettent d'atténuer correctement les menaces de sécurité. Vous trouverez ci-dessous la modélisation des menaces à titre de référence.

Modélisation des menaces pour le chargeur de démarrage de périphérique IoT

Contexte

À titre de définition pratique, les AWS IoT appareils embarqués auxquels fait référence ce modèle de menace sont des produits basés sur des microcontrôleurs qui interagissent avec les services cloud. Ils peuvent être déployés dans des environnements grand public, commerciaux ou industriels. Les périphériques IoT peuvent collecter des données sur un utilisateur, un patient, une machine ou un environnement, que ce soit des ampoules, des verrous de porte ou des machines d'usine.

La modélisation des menaces est une approche de la sécurité du point de vue d'un adversaire hypothétique. En tenant compte des objectifs et des méthodes de l'adversaire, une liste de menaces est créée. Les menaces sont des attaques contre une ressource ou un asset réalisées par un adversaire. La liste est priorisée et utilisée pour identifier et créer des solutions d'atténuation. Lors du choix d'une solution d'atténuation, le coût de sa mise en œuvre et de sa maintenance doit être mis en balance avec la valeur de sécurité réelle qu'elle apporte. Il existe plusieurs méthodologies de modèle de menace. Chacun est capable de soutenir le développement d'un AWS IoT produit sûr et performant.

FreeRTOS propose des mises à jour logicielles OTA over-the-air () pour les appareils. AWS IoT Le processus de mise à jour associe des services cloud à des bibliothèques logicielles sur périphérique et un chargeur de démarrage fourni par un partenaire. Ce modèle de menace se concentre spécifiquement sur les menaces contre le chargeur de démarrage.

Cas d'utilisation du chargeur de démarrage
  • Signer numériquement et chiffrer les microprogrammes avant le déploiement.

  • Déployer les nouvelles images du microprogramme sur un seul appareil, un groupe d'appareils ou l'ensemble d’une flotte.

  • Vérifier l'authenticité et l'intégrité du nouveau microprogramme après qu'il a été déployé sur les appareils.

  • Les périphériques exécutent uniquement des logiciels non modifiés à partir d'une source approuvée.

  • Les périphériques sont résistants aux logiciels défaillants reçus via OTA.

Diagramme de flux de données

Schéma de flux de données pour la sécurité des appareils intégrés qui contient l'accès physique, le périphérique intégré, les limites Internet et d'autres composants.

Menaces

Certaines attaques utilisent plusieurs modèles d'atténuation ; par exemple, un réseau man-in-the-middle destiné à fournir une image de microprogramme malveillant est atténué en vérifiant la fiabilité à la fois du certificat proposé par le serveur TLS et du certificat du signataire de code de la nouvelle image du microprogramme. Pour optimiser la sécurité du chargeur de démarrage, toute solution d'atténuation autre que le chargeur de démarrage est considérée comme peu fiable. Le bootloader doit disposer de solutions d'atténuation intrinsèques pour chaque attaque. Les solutions d'atténuation en couches sont connues sous le nom de defense-in-depth.

Menaces :
  • Un pirate détourne la connexion du périphérique au serveur pour diffuser une image de microprogramme malveillante.

    Exemple d'atténuation
    • Au démarrage, le chargeur de démarrage vérifie la signature cryptographique de l'image à l'aide d'un certificat connu. Si la vérification échoue, le chargeur de démarrage revient à l'image précédente.

  • Un pirate exploite un dépassement de mémoire tampon pour introduire un comportement malveillant dans l'image du microprogramme existante stockée en flash.

    Exemples d'atténuation
    • Au démarrage, le chargeur de démarrage procède à une vérification, comme décrit précédemment. Lorsque la vérification échoue et qu'aucune image précédente n'est disponible, le chargeur de démarrage s'arrête.

    • Au démarrage, le chargeur de démarrage procède à une vérification, comme décrit précédemment. Lorsque la vérification échoue et qu'aucune image précédente n'est disponible, le chargeur de démarrage passe en mode OTA à sécurité intégrée uniquement.

  • Un pirate démarre le périphérique sur une image précédemment stockée, qui est exploitable.

    Exemples d'atténuation
    • Les secteurs Flash stockant la dernière image sont effacés lors de l'installation réussie et du test d'une nouvelle image.

    • Un fusible est grillé à chaque mise à niveau réussie, et chaque image refuse de s'exécuter, sauf si le nombre correct de fusibles a été grillé.

  • Une mise à jour OTA fournit une image défectueuse ou malveillante qui détaille le périphérique.

    Exemple d'atténuation
    • Le chargeur de démarrage démarre un minuteur de surveillance matériel qui déclenche la restauration de l'image précédente.

  • Un pirate applique des correctifs au chargeur de démarrage pour contourner la vérification d'image afin que le périphérique accepte les images non signées.

    Exemples d'atténuation
    • Le chargeur de démarrage est en ROM (mémoire en lecture seule) et ne peut pas être modifié.

    • Le bootloader est en OTP (one-time-programmable mémoire) et ne peut pas être modifié.

    • Le bootloader se trouve dans la zone sécurisée d'ARM TrustZone et ne peut pas être modifié.

  • Un pirate remplace le certificat de vérification afin que le périphérique accepte les images malveillantes.

    Exemples d'atténuation
    • Le certificat se trouve dans un co-processeur cryptographique et ne peut pas être modifié.

    • Le certificat se trouve dans la ROM (ou OTP, ou zone sécurisée) et ne peut pas être modifié.

Modélisation plus poussée des menaces

Ce modèle de menace prend uniquement en compte le chargeur de démarrage. Une modélisation plus poussée des menaces pourrait améliorer la sécurité globale. Une méthode recommandée consiste à répertorier les objectifs de l'adversaire, les assets ciblés par ces objectifs et les points d'entrée des assets. Une liste des menaces peut être établie en prenant en compte les attaques sur les points d'entrée destinées à prendre le contrôle des assets. Vous trouverez ci-après des listes d’exemples d'objectif, d'asset et de point d'entrée pour un périphérique IoT. Ces listes ne sont pas exhaustives et ont pour but de stimuler la réflexion.

Objectifs de l'adversaire
  • Extorquer de l'argent

  • Nuire à une réputation

  • Falsifier des données

  • Détourner des ressources

  • Espionner une cible à distance

  • Obtenir un accès physique à un site

  • Provoquer de gros dégâts

  • Instaurer la terreur

Ressources clés
  • Clés privées

  • Certificat de client

  • Certificats racines d’autorité de certification

  • Informations d'identification et jetons de sécurité

  • Informations personnelles identifiables d’un client

  • Implémentations de secrets commerciaux

  • Données de capteur

  • Magasin de données d'analyse dans le cloud

  • Infrastructure cloud

Points d'entrée
  • Réponse DHCP

  • Réponse DNS

  • MQTT via TLS

  • Réponse HTTPS

  • Image logicielle OTA

  • Autre, tel que dicté par l'application, par exemple, USB

  • Accès physique au bus

  • Carte d'interface réseau délimitée