Article par : Mohamed BELOUARGA & Fabien Lahoudere

Le monde devient 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 hyper connectivité s'accompagne de nombreuses menaces et les systèmes embarqués basés sur Linux n'en sont pas exempts.

Dans cet article, nous discuterons d'une technique qui ajoute de la sécurité aux dispositifs Linux embarqués, mais le lecteur doit être conscient que cette méthode ne protège pas les dispositifs Linux embarqués contre 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 à mettre en place une chaîne de confiance entre les différents composants logiciels d'un dispositif Linux embarqué. 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

Processus d'amorçage sécurisé des logiciels et dispositifs des systèmes embarqués linux

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

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

Comment mettre en œuvre le démarrage sécurisé

Sécuriser le chargeur de démarrage

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 chargeur de démarrage provient du fabricant, en contrôlant sa signature. La signature du chargeur de démarrage est généralement son hachage crypté par une clé privée.

Si la signature est corrompue, le code ROM ne lance pas le chargeur de démarrage et l'appareil ne démarre pas.

Sécuriser le noyau

Après vérification, le code ROM lance le chargeur de démarrage.

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 pour charger le noyau ainsi que l'arborescence des périphériques dans la RAM.

Le chargeur de démarrage vérifie les signatures du noyau et de l'arborescence (et d'autres binaires si nécessaire) avant de démarrer le noyau.

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

Sécuriser le ROOTFS

Pour sécuriser la ROOTFS, il est préférable d'utiliser une 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 corrompu. La couche 0 de l'arbre de hachage contient les hachages de la base de données ROOTFS - un hachage pour chaque 4k.

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

Sécuriser le ROOTFS pour un démarrage sécurisé dans les logiciels et dispositifs des systèmes linux

  • La couche 0 contient les hachages de ROOTFS, un hachage pour chaque 4kB de mémoire.
  • La COUCHE 1 contient les hachages de la COUCHE 0
  • Les hachages de la couche 2 de la couche 1 ...
  • Jusqu'à ce que nous terminions avec un hachage appelé hachage racine.

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 de la racine) doit être ajouté à l'image FIT et doit également être signé.

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

Exemple d'imx8

Pour illustrer certains aspects du démarrage sécurisé qui dépendent du matériel, nous prendrons l'exemple de l'imx8 :

Outils CST

Avant d'essayer d'implémenter le démarrage sécurisé sur l'imx8, nous devons générer des clés privées qui seront utilisées pour signer les binaires. NXP fournit des outils CST (Code Signing Tool) qui génèrent des clés privées et publiques, et nous permettent de signer le bootloader et d'autres binaires.

Fusibles et CAAM

L'Imx8 dispose d'un module appelé CAAM(Cryptographic Acceleration and Assurance Module) qui sera utilisé pour accélérer la vérification de toutes les signatures. L'Imx8 possède également des registres appelés registres programmables en une seule fois (eFuse).

Pour permettre la vérification de la signature, les eFuses SRK_HASH doivent être programmés avec les hachages des 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 mettre en œuvre le HAB (High Assurance Boot) : l'amorçage sécurisé imx.

Code ROM

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

Amorçage sécurisé de linux par ROM Devides embarqués

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

Vérification du code ROM de l'image FIT et du certificat de hachage

Note : D'autres eFuses doivent également être programmés pour mettre en œuvre correctement Secure Boot. Par exemple, l'eFuse qui désactive le JTAG.

Imx-boot

Après avoir vérifié sa signature, le code ROM lance le chargeur de démarrage (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 faisant quelques appels au code ROM (par l'intermédiaire de l'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, il arrêtera le processus de démarrage.

Fit Image et ROOTFS

La Fit Image contient au moins trois éléments : le noyau, l'arborescence des périphériques et l' InitRamFS.

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 l'InitRamFS, ce dernier applique la DM-verity sur la partition ROOTFS, et donne au noyau le hash de la racine. Enfin, le noyau continue de démarrer sur la partition ROOTFS.

 

Ces différentes étapes constituent le démarrage sécurisé de l'imx8 :

Séquence d'amorçage sécurisée des dispositifs ou systèmes à base de logiciels Linux embarqués

Le lecteur curieux peut trouver plus de documentation sur la mise en œuvre de HAB sur Internet, cette deuxième partie de l'article n'avait pas pour but d'expliquer tous les détails de HAB, mais seulement de montrer la relation entre le démarrage sécurisé et le matériel.

Partager

Nos experts sont à votre disposition sur simple appel téléphonique !

Posez vos questions et trouvez des solutions pour le développement de vos produits

Contactez nous

Plus d'actualités

7/5/24

Employés boomerang : Une tendance à la hausse ?

L'article traite de la tendance croissante des "employés boomerang" qui quittent une entreprise pour y revenir plus tard. Il examine s'il s'agit d'une mode passagère ou d'une tendance profonde, et comment les entreprises peuvent en tirer parti. En France, le nombre d'employés boomerang a augmenté de 36 % en trois ans. Ce phénomène correspond à l'évolution des aspirations des salariés en matière d'équilibre entre vie professionnelle et vie privée. Les employés boomerang apportent une expérience précieuse, une connaissance approfondie de l'entreprise et une motivation accrue. Des entreprises comme Technology&Strategy s'adaptent à cette tendance en favorisant une marque d'employeur forte et un environnement de travail positif. L'article inclut les points de vue des employés de T&S et de Cheima Hammi, responsable des ressources humaines en France, sur les avantages et les motivations de la tendance boomerang.

LIRE LA SUITE
2/5/24

T&S Success Story: Indiana, l'exemple d'une évolution professionnelle réussie chez T&S

Cet article détaille le parcours d'Indiana sur le site T&S, en soulignant l'investissement de l'entreprise dans le développement des employés et les opportunités de mobilité interne. Découvrez comment Indiana a mis à profit ses compétences pour passer du statut d'assistante administrative à celui de HR Business Partner & Team Leader.

LIRE LA SUITE
19/3/24

Du stagiaire à l'employé : l'histoire de la réussite de Sophie chez Technology & Strategy

Découvrez le parcours remarquable de Sophie chez T&S: d'un stage de 6 mois à un poste permanent au sein du département Employee Experience. Découvrez sa persévérance, sa capacité d'adaptation et la manière dont elle a surmonté les obstacles pour parvenir à la réussite professionnelle.

LIRE LA SUITE