Table des matières

Article rédigé par : Mohamed BELOUARGA et Fabien Lahoudere

Le monde est de plus en plus connecté et des millions d'appareils sont développés pour être connectés soit à des serveurs, soit entre eux. Cette hyperconnectivité comporte de nombreuses menaces et les systèmes embarqués basés sur Linux n'en sont pas exempts.

Dans cet article, nous aborderons une technique qui renforce la sécurité des périphériques Linux intégrés, mais le lecteur doit être conscient que cette méthode ne protège pas les périphériques Linux intégrés de toutes les menaces.

Le lecteur doit savoir que l'auteur est un ingénieur Linux embarqué et non un expert en cybersécurité.

Qu'est-ce qu'un démarrage sécurisé ?

Le démarrage sécurisé consiste à implémenter une chaîne de confiance entre les différents composants logiciels d'un périphérique Linux intégré. Cette chaîne de confiance est mise en œuvre pour empêcher les appareils d'exécuter des logiciels corrompus ou des logiciels qui ne proviennent pas du fabricant de l'appareil.


Cette chaîne de confiance est en fait un processus de vérification à plusieurs niveaux qui permettra d'identifier l'origine de ces composants logiciels

Secure boot process of linux embedded systems softwares and devices

Tout d'abord, le Code ROM vérifie que le chargeur de démarrage provient du fabricant, puis chargeur de démarrage vérifie que Linux noyau provient également du fabricant avant de le lancer et enfin le noyau vérifie que le TOITS (l'application) provient du fabricant.

Nous verrons ci-dessous comment fonctionne cette chaîne de confiance, ou ce que nous appelons démarrage sécurisé-, et comment le mettre en œuvre.

Comment implémenter le démarrage sécurisé

Sécurisation du bootloader

Cette partie dépend du matériel et est réalisée par le matériel et le code ROM. Le code ROM vérifie que le bootloader provient du fabricant en vérifiant sa signature. La signature du bootloader est généralement son hachage chiffré par une clé privée.

Si la signature est corrompue, le code ROM ne lance pas le chargeur de démarrage et le périphérique ne démarre donc pas.

Sécurisation du noyau

Après vérification, le code ROM lance le bootloader.

Le chargeur de démarrage initialise juste assez de matériel (au moins la SDRAM et la console série) pour démarrer le noyau et charger le noyau ainsi que l'arborescence des périphériques dans la RAM.

Le chargeur de démarrage vérifie la signature du noyau et de l'arborescence des périphériques (et d'autres fichiers binaires si nécessaire) avant de démarrer le noyau.

Si les fichiers binaires doivent être vérifiés, une image FIT contenant tous ces fichiers binaires peut être utilisée pour gagner en efficacité dans ce processus.

Sécurisation du ROOTFS

Pour sécuriser le ROOTFS, il est préférable d'utiliser un ROOTFS en lecture seule et de tirer parti d'une fonctionnalité fournie par le noyau, appelée DM-Verity.

DM-Verity utilise un arbre de hachage pour s'assurer que le ROOTFS n'est pas endommagé. La couche 0 de l'arbre de hachage contient les hachages ROOTFS, soit un hachage pour chaque 4k.

Plus de détails dans le schéma ci-dessous.

Securing the ROOTFS for secure boot in linux systems softwares and devices

  • La couche 0 contient des hachages du ROOTFS, un hachage pour 4 Ko de mémoire
  • La COUCHE 1 contient les hachages de la COUCHE 0
  • Hachages de la COUCHE 2 de la COUCHE 1...
  • Jusqu'à ce que nous finissions avec un hash appelé racine de haschisch.

Afin d'utiliser DM-Verity sur la partition ROOTFS, il est plus facile d'utiliser un InitramFS qui lance DM-Verity sur la partition du ROOTFS avant de passer au ROOTFS.

Le fichier InitramFS (qui contient le hachage racine) doit être ajouté à l'image FIT et doit également être signé.

Si DM-Verity détecte une corruption dans le ROOTFS ou si le hachage racine a changé, la fonctionnalité génère une panique dans le noyau, ce qui bloque le lancement.

Exemple d'imx8

Pour illustrer certains aspects du démarrage sécurisé liés au matériel, prenons imx8 comme exemple :

Outils CST

Avant d'essayer d'implémenter un démarrage sécurisé sur imx8, nous devons générer des clés privées qui seront utilisées pour signer les fichiers binaires. NXP fournit Outils CST (Outil de signature de code) qui génère des clés privées et publiques et nous permet de signer le bootloader et d'autres fichiers binaires.

Fusibles et CAAM

Imx8 possède un module appelé CAAM (Module d'accélération et d'assurance cryptographiques) qui sera utilisé pour accélérer la vérification de toutes les signatures. Imx8 possède également des registres appelés Registres programmables à usage unique (eFuse).

Afin de permettre la vérification des signatures, les eFuses SRK_HASH doivent être programmés avec les hachages de clés publiques générés, et pour verrouiller la carte, un autre eFuse doit être programmé.

Tous ces éléments seront utilisés pour implémenter le HAB (High Assurance Boot) : le démarrage sécurisé imx.

Code ROM

Au démarrage, le code ROM vérifie si les EFuses SRK_HASH sont programmés. Si c'est le cas, il vérifiera la signature du bootloader (SPL + ATF + OPTEE + U-boot). Selon que la carte est verrouillée ou non, le code ROM poursuivra le processus de démarrage ou l'arrêtera :

ROM secure booting of linux Embedded devides

Le code Rom vérifie une image, comme le montre l'image ci-dessous :

ROM Code verification of FIT Image and hash Certificate

Remarque : d'autres EFuses doivent également être programmés pour implémenter correctement le démarrage sécurisé. Par exemple, l'eFuse qui désactive le JTAG.

Botte IMX

Après avoir vérifié sa signature, le code ROM lance le bootloader (SPL puis ATF et OPTEE puis U-boot).

U-boot doit être configuré pour vérifier la signature de l'image FIT si le HAB est activé. La vérification de la signature de l'image FIT se fait en appelant le code ROM (via ATF).

U-boot se comportera alors comme le code ROM de l'étape précédente : si la carte est verrouillée et que la signature est corrompue, le processus de démarrage sera arrêté.

Ajuster l'image et le fichier ROOTFS

L'image d'ajustement contient au moins trois éléments : le noyau, l'arborescence des appareils et le Dans Itramfs.

Lorsque U-boot vérifie la signature de l'image : il extrait ces éléments et lance le noyau.

Lorsque le noyau est lancé avec InitramFS, ce dernier applique DM-Verity sur la partition ROOTFS et donne au noyau le hash racine. Enfin, le noyau continue de démarrer sur le ROOTFS.

 

Ces différentes étapes ont constitué le démarrage sécurisé pour imx8 :

Embedded Linux base softwares devices or systems secure booting sequence

Le lecteur curieux peut trouver plus de documentation sur l'implémentation du HAB sur Internet. Cette deuxième partie de l'article n'était pas destinée à expliquer tous les détails du HAB, mais uniquement à montrer la relation entre le démarrage sécurisé et le matériel.

Partagez :
PARTAGEZ

Nos experts sont à votre écoute

Faites-nous part de vos enjeux technologiques, opérationnels ou métiers : nous co-construirons la solution la plus adaptée pour faire avancer vos projets.
Nous contacter

Lire plus d'actualités

24/7/25

Technology & Strategy et Fraunhofer IEM forment un partenariat stratégique pour développer des solutions d'IA pour l'ingénierie

T&S s'associe à Fraunhofer IEM pour développer des solutions d'IA modulaires, stimuler le développement de produits et stimuler l'innovation dans l'ingénierie automobile.

EN SAVOIR PLUS
28/7/25

L'interculturalité, un pilier stratégique de la technologie et de la stratégie

L'interculturalité est bien plus qu'un concept : c'est un levier stratégique pour l'innovation, la collaboration et le succès dans un environnement international.

EN SAVOIR PLUS
16/7/25

Naviguer entre science et terrain : immersion dans la thèse CIFRE de Florian Philippe

Comment la robotique autonome et l'IA peuvent-elles soutenir l'agriculture dans des environnements complexes ? Florian Philippe, doctorant CIFRE à Englab, explore des solutions concrètes grâce à la recherche appliquée dans les domaines de la navigation hors route et de l'agriculture de précision.

EN SAVOIR PLUS