Comment utiliser TrustZone pour sécuriser les dispositifs IoT avec des coûts et une complexité matériels minimum

Par Jacob Beningo

Avec la contribution de Rédacteurs nord-américains de DigiKey

Les dispositifs IoT en périphérie exigent des mesures de sécurité supplémentaires par rapport à celles traditionnellement requises par les produits embarqués. Il est souvent difficile de comprendre et de commencer à travailler sur la sécurité pour les équipes et les développeurs qui ont une formation en génie électrique mais aucune expertise en cryptographie ou en sécurité des systèmes.

Dans un cycle de développement moderne, les développeurs disposent de peu de temps et de budget pour démarrer de zéro ou devenir des experts en sécurité. Au lieu de cela, les développeurs peuvent exploiter les solutions de sécurité existantes et les adapter à leurs besoins spécifiques.

Cet article présente TrustZone d'Arm®, une solution intéressante qui gagne du terrain chez les concepteurs de systèmes basés sur des microcontrôleurs. À titre d'exemple, l'article présente les microcontrôleurs prenant en charge TrustZone de la série STM32L5 de STMicroelectronics et montre comment démarrer avec TrustZone en utilisant les kits de développement associés.

La sécurité par l'isolement

L'élément fondamental d'un système embarqué sécurisé est d'avoir la sécurité par l'isolement. L'idée est que les actifs de données importants tels que les clés privées, les données utilisateur, les fonctions sécurisées, etc. doivent être isolés des données et fonctions génériques comme les éléments d'interface utilisateur graphique ou le système d'exploitation en temps réel (RTOS). S'il existe des méthodes permettant de créer une isolement logiciel, les experts en sécurité s'accordent à dire qu'un système embarqué doit utiliser la sécurité via un isolement matériel.

Le matériel peut être utilisé de diverses manières pour créer l'isolement, par exemple avec un microcontrôleur et un processeur de sécurité ou avec un processeur multicœur dont un cœur est dédié au traitement sécurisé. Les nouveaux processeurs Arm Cortex®-M23, Cortex-M33 et Cortex-M55 prennent en charge une fonction d'isolement matériel optionnelle appelée TrustZone.

Présentation d'Arm TrustZone

TrustZone est un mécanisme matériel implémenté dans des microcontrôleurs à un cœur, qui décompose l'environnement d'exécution en fonctions, périphériques et mémoires sécurisés et non sécurisés. Chaque environnement d'exécution contient également une unité de protection de la mémoire (MPU) qui peut être utilisée pour isoler davantage les zones de mémoire afin de fournir plus de couches et agir comme un moyen de dissuasion contre les attaquants potentiels qui tentent d'accéder aux données.

En général, un développeur de système embarqué partitionnera son système en au moins deux projets, le projet d'exécution non sécurisé, souvent appelé projet utilisateur, et le projet d'exécution sécurisé, souvent appelé projet micrologiciel. Un microcontrôleur avec TrustZone s'amorcera dans l'état sécurisé et démarrera le système avant de passer à l'état non sécurisé pour exécuter l'application utilisateur (Figure 1).

Schéma des projets TrustZone atteignant l'isolement via un mécanisme matérielFigure 1 : Les projets TrustZone atteignent l'isolement via un mécanisme matériel qui décompose le logiciel embarqué en un projet utilisateur (non sécurisé) et un projet micrologiciel (sécurisé). (Source de l'image : Arm)

Le projet utilisateur ne peut accéder aux fonctions sécurisées que via une passerelle sécurisée créée entre le projet micrologiciel et le projet utilisateur, et ne peut accéder à des emplacements de mémoire sécurisés sans déclencher une exception.

Sélection d'une carte de développement compatible TrustZone

Le moyen le plus simple pour comprendre TrustZone est de se lancer et de l'utiliser. Pour ce faire, un développeur doit d'abord choisir une carte de développement. Il existe plusieurs cartes de développement différentes disponibles via divers fournisseurs de microcontrôleurs, mais attention : elles n'implémentent pas toutes TrustZone de la même manière, ce qui peut rendre la tâche un peu délicate.

Un bon exemple de carte de développement pouvant être utilisée pour démarrer avec TrustZone est le kit de découverte STM32L562E de STMicroelectronics (Figure 2).

Image du kit de découverte STM32L562E de STMicroelectronicsFigure 2 : Le kit de découverte STM32L562E inclut de nombreux capteurs embarqués, Bluetooth et une carte d'extension E/S qui facilite la mise en route des applications TrustZone. (Source de l'image : STMicroelectronics)

Le kit est fourni avec de nombreuses fonctions de support pouvant s'avérer utiles lors de la première utilisation de TrustZone. Par exemple, le kit de développement inclut un module LCD TFT de 1,54 pouce, 240 x 240 pixels, qui comprend un panneau de contrôle tactile, un module Bluetooth v4.1 Low Energy, un gyroscope et un accéléromètre iNEMO 3D, et un STLINK-V3E embarqué, parmi de nombreuses autres caractéristiques pour l'extension périphérique et E/S.

Une deuxième carte de développement pouvant être utilisée pour démarrer avec TrustZone est la carte Nucleo NUCLEO-L552ZE-Q de STMicroelectronics (Figure 3).

Image de la carte de développement NUCLEO STM32L552ZE-Q de STMicroelectronicsFigure 3 : La carte de développement NUCLEO STM32L552ZE-Q fournit un processeur compatible TrustZone, ST-LinkV3 et des embases d'extension pour les activités de développement personnalisé. (Source de l'image : STMicroelectronics)

Contrairement au kit de découverte STM32L562E, la carte NUCLEO-L552ZE-Q est une carte de développement basique qui comprend le ST-LinkV3, le microcontrôleur STM32L552VET6, des ports d'extension et une LED. Cette carte de développement est idéale pour les développeurs qui veulent jouer avec TrustZone et commencer à intégrer leurs propres composants matériels le plus rapidement possible.

Même si la carte NUCLEO-L552ZE-Q n'inclut pas toutes les fonctions, le STM32L552VET6 est assez impressionnant. Il s'agit d'un processeur Arm Cortex-M33 avec unité en virgule flottante (FPU), offrant jusqu'à 512 kilo-octets (Ko) de mémoire Flash et 256 Ko de SRAM. Il inclut plusieurs fonctions de sécurité supplémentaires par rapport à TrustZone, telles qu'une racine de confiance avec entrée d'amorçage unique, l'installation de micrologiciels sécurisés et la prise en charge de la mise à jour des micrologiciels sécurisés avec des micrologiciels de confiance pour Cortex-M (TF-M).

Les processeurs des deux cartes de développement incluent l'unité TrustZone Security Arbitration Unit (SAU) qui est utilisée pour définir quels mémoires et périphériques seront protégés par TrustZone. L'unité SAU est absente dans les implémentations TrustZone de certains fournisseurs de microcontrôleurs. Ce n'est pas nécessairement un problème, mais cela nécessite une procédure différente pour configurer TrustZone.

Lancement de la première application basée sur TrustZone

La mise en route d'une des cartes de développement de STMicroelectronics nécessite plusieurs étapes et progiciels. Tout d'abord, le développeur doit télécharger STM32CubeIDE. STM32CubeIDE fournit le compilateur, les packs de microcontrôleurs et l'environnement de développement intégré (IDE) pour le développement d'applications, ainsi que toutes les notes d'application associées, y compris STM AN5394.

L'utilisation d'un projet d'exemple TrustZone existant est le moyen le plus rapide de lancer une application. Plusieurs projets sont inclus dans le progiciel STM32Cube_FW_L5. Le logiciel est téléchargé avec le logiciel STM32CubeL5. Une fois téléchargé, les développeurs peuvent importer le projet TrustZoneEnabled situé dans un chemin de répertoire similaire au suivant :

STM32Cube_FW_L5_V1.2.0\STM32Cube_FW_L5_V1.2.0\Projects\STM32L552E-EV\Templates\TrustZoneEnabled\

Une fois le projet importé, le développeur peut voir que le projet a une structure hiérarchique qui divise l'application en applications sécurisées et non sécurisées (Figure 4).

Image du projet TrustZone implémenté dans une structure de projet hiérarchiqueFigure 4 : Le projet TrustZone est implémenté dans une structure de projet hiérarchique avec des projets sécurisés et non sécurisés. (Source de l'image : Beningo Embedded Group)

De nombreux détails peuvent être explorés dans ces projets. La note AN5394 fournit un certain nombre d'informations, tandis que le fichier readme.txt du dossier Doc de chaque projet explique les détails des projets sécurisés et non sécurisés. Pour les besoins de cet article, nous examinerons les concepts les plus importants liés à TrustZone. Plus précisément, la manière dont TrustZone est configuré. La configuration se trouve dans le fichier partition_stm32L562xx.h situé sous :

C:\STM32Cube_FW_L5_V1.2.0\Projects\STM32L562E-DK\Templates\TrustZoneEnabled\Secure\Inc

Ce fichier contient les paramètres pour l'unité SAU. Par exemple, la Figure 5 montre les paramètres pour la région 0 SAU. Cette région est actuellement configurée pour une exécution sécurisée. La Figure 6, en revanche, montre la région 1 SAU configurée comme non sécurisée.

Code de la région 0 SAU configurée pour une exécution sécuriséeFigure 5 : L'unité SAU est utilisée pour configurer quelles régions de la mémoire sont sécurisées et non sécurisées. Le code ci-dessus montre comment la région 0 SAU est configurée pour une exécution sécurisée. (Source de l'image : Beningo Embedded Group)

Image de la région 1 SAU configurée pour une exécution non sécuriséeFigure 6 : L'unité SAU est utilisée pour configurer quelles régions de la mémoire sont sécurisées et non sécurisées. Le code ci-dessus montre comment la région 1 SAU est configurée pour une exécution non sécurisée. (Source de l'image : Beningo Embedded Group)

Le développeur décide quelles régions doivent être sécurisées et non sécurisées et utilise le fichier de partition pour configurer l'unité SAU. La création de ces paramètres ne garantit pas que TrustZone sera activé ! Lorsqu'une application basée sur TrustZone est programmée sur la cible, un développeur doit définir l'octet d'option TZ sur 1 pour activer TrustZone. Ensuite, lors du démarrage, il sera activé et la configuration SAU sera lue et utilisée.

Conseils et astuces pour travailler avec TrustZone

Il n'est pas difficile de démarrer avec TrustZone, mais il faut que les développeurs réfléchissent à la conception de leur application d'une manière un peu différente. Voici quelques « conseils et astuces » pour commencer :

  • Toutes les données n'auront pas besoin d'être protégées. Identifiez dès le départ les données critiques qui doivent être protégées.
  • Exploitez les structures de sécurité existantes telles que CMSIS-Zone et Trusted Firmware for Cortex-M (TF-M) pour accélérer le développement.
  • Étudiez avec soin les menaces potentielles qui pèsent sur le dispositif et sélectionnez un microcontrôleur qui prend en charge les solutions matérielles et logicielles de protection contre ces menaces.
  • TrustZone offre une seule couche d'isolement. Exploitez les unités de protection de la mémoire et d'autres mécanismes matériels pour créer de multiples couches d'isolement basées sur le matériel.
  • Identifiez les éléments de code sécurisés et non sécurisés pendant la phase d'architecture — et non pendant l'implémentation.

Les développeurs qui suivent ces « conseils et astuces » constateront qu'ils économisent beaucoup de temps et d'efforts lorsqu'ils sécurisent leur dispositif IoT.

Conclusion

TrustZone est un outil important, disponible pour les développeurs IoT qui cherchent à sécuriser leurs dispositifs et à protéger leurs actifs de données. Les solutions sécurisées peuvent être implémentées de plusieurs manières différentes, mais comme nous l'avons vu, TrustZone offre aux développeurs une solution de base unique qui fournit un modèle de développement logiciel traditionnel. La seule différence est que les développeurs doivent commencer à penser en termes de composants, de données et de threads sécurisés et non sécurisés.

DigiKey logo

Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.

À propos de l'auteur

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo est un consultant en logiciels embarqués, et il travaille actuellement avec des clients dans plus d'une douzaine de pays pour transformer radicalement leurs activités en améliorant la qualité, les coûts et les délais de commercialisation des produits. Il a publié plus de 200 articles sur les techniques de développement de logiciels embarqués. Jacob Beningo est un conférencier et un formateur technique recherché, et il est titulaire de trois diplômes, dont un master en ingénierie de l'Université du Michigan. N'hésitez pas à le contacter à l'adresse jacob@beningo.com et sur son site Web www.beningo.com, et abonnez-vous à sa newsletter mensuelle Embedded Bytes.

À propos de l'éditeur

Rédacteurs nord-américains de DigiKey