
Linux est installé sur votre machine, votre Secure Boot est activé dans votre BIOS (pardon.. votre UEFI), et tout fonctionne sans problème ! Mais est-ce que vous vous doutez que, pour démarrer, votre distro Linux préférée passe par un programme signé par Microsoft ? Oui, Microsoft... Sur une machine Linux. Et tout ça “à cause” du Secure Boot.
Pour comprendre pourquoi, il faut remonter un peu et comprendre ce qu'il se passe exactement quand on appuie sur le bouton "Power" (et démêler quelques concepts un peu obscurs).
Quand on appuie sur le bouton power, le PC s'allume (en général), mais qu'est-ce qu'il se passe exactement à ce moment-là ?
Pour faire simple, au démarrage de la machine, on peut résumer comme suit :

Revenons un peu sur ces termes :
Ce qu'il faut comprendre, c'est que quand le CPU démarre, il commence toujours à la même adresse mémoire hardcodée dans le CPU lui-même. Cette adresse pointe vers un espace précis d'une puce de la carte mère (la puce flash SPI), là où est stocké le code de l'UEFI/BIOS. Voilà pourquoi c'est toujours lui le premier à prendre la main.
Le BIOS (Basic Input/Output System) est le firmware historique des PC, apparu dans les années 1980. Conçu en 16 bits, stocké directement sur une ROM (Read Only Memory), il y avait plusieurs limitations sérieuses mais surtout un démarrage lent et aucune vérification de sécurité !
Son mécanisme de démarrage était extremement basique: Le BIOS lit simplement le tout premier secteur du disque dur, et exécute le code qu'il y trouve. Pas compliqué non ? Mais pas vraiment sécurisé..
Pour être précis, le "premier secteur du disque dur" est aussi appelé le MBR (pour Master Boot Record). Le problème, c'est qu'avec le BIOS, il n'y a aucun check de sécurité, aucune signature, aucun contrôle d'intégrité. Si un malware se glisse dans ce secteur, le BIOS le lancera ad vitam eternam à chaque démarrage. C'est ce qu'on appelle un bootkits (ex: Mebroot (découvert en 2007) ou TDL-4 (dans les années 2010)).

L'UEFI (Unified Extensible Firmware Interface) est la nouvelle génération, en 32 ou 64 bits, qui devient un standard en 2006. Mais c'est vraiment avec Windows 8 en 2012 et l'introduction obligatoire du Secure Boot que son adoption devient massive.
L'UEFI apporte avec lui trois éléments essentiels:
Ces phases UEFI s'enchaînent à chaque démarrage:

Les bootkits du temps du BIOS étaient très efficaces puisqu'il n'existait aucun mécanisme pour vérifier que le code exécuté au démarrage était légitime. L'UEFI (poussé par Windows) a permi d'introduire une réponse directe: le Secure Boot.
Le principe est simple, chaque programme lancé au démarrage doit être signé numériquement avec une clé reconnue par l'UEFI. Si ce n'est pas le cas, le démarrage est bloqué !
Le Secure Boot repose sur une hiérarchie de clés, installées par le constructeur dans le firmware (donc dans la puce sur la carte mère):

Sur la quasi-totalité des PC du marché, on retrouve le KEK du constructeur (normal) mais aussi très, très, très souvent (pour ne pas dire toujours) le KEK de Microsoft. C'est assez pratique pour Microsoft mais cela signifie aussi qu'une vulnérabilité dans un binaire signé par Microsoft peut potentiellement impacter des centaines de millions de machines.
C'est là que la situation devient intéressante. Comment Linux peut-il se lancer alors que le Secure Boot est actif si le constructeur n'a pas signé Linux ? Est-ce que Microsoft signe Linux et partage ça dans sa KEK ?
Et bien non, Linux n'est pas signé directement par les clés Microsoft. Les systèmes d'exploitations Linux sont souvent lancés par un bootloader connu appelé GRUB. Mais la signature de GRUB ne se trouve pas dans la db, il ne peut donc pas être autorisé par le firmware (ce serait trop compliqué, GRUB est décliné en plusieurs versions custom selon les distributions Linux, il serait impossible de maintenir toutes les signatures à jour).
Alors comment Ubuntu, Debian ou Fedora démarrent-ils sur une machine avec Secure Boot activé ? Et qu'est-ce que Windows a à voir avec Linux ?
La solution s'appelle shim. C'est un petit bootloader intermédiaire, signé par Microsoft, dont le seul rôle est d'établir un pont de confiance entre l'UEFI et le monde Linux.
La chaîne de confiance complète ressemble à ça :
Voilà pourquoi il y a "du Windows dans chaque Linux": le système démarre grâce à un programme qui porte la signature de Microsoft.
Mais que faire si on souhaite charger notre propre kernel compilé, ou des modules non signés ? Si vous avez déjà eu affaire à HackBGRT, vous voyez sûrement de quoi je veux parler.
En fait, on ne peut pas facilement modifier la db du firmware, c'est une zone reservée au constructeur.
C'est pour ça qu'il existe la MOK (Machine Owner Key). C'est un système parallèle, contrôlé par l'utilisateur, qui permet d'ajouter nos propres clés pour autoriser nos propres binaires.

Et voici une petite image de l'attrayante interface de MOK:

Pas vraiment. On peut noter deux malware assez connus :
Le Secure Boot protège dans le périmètre de la chaîne de confiance. Tout ce qui est en dessous (la puce firmware) ou qui contourne cette chaîne (une signature valide mais vulnérable) reste un vecteur d'attaque.
Le Secure Boot est une réponse directe aux bootkits inarrêtables à l'époque du BIOS. En imposant une chaîne de confiance signée cryptographiquement, le Secure Boot garantit que chaque maillon du démarrage (du firmware à l'OS) est légitime
Pour Linux, cette chaîne passe par shim, un bootloader intermédiaire signé par Microsoft. En fait, c'est une contrainte pratique car les PC du marché font confiance aux clés Microsoft, et shim est le pont qui permet à Linux de s'y intégrer sans que chaque distribution ait à négocier sa propre signature.
Le système n'est pas parfait. Si une clé est révoquée trop tard, si un firmware est directement compromis, alors la chaîne peut être contournée. Ceci dit, comparé au BIOS (qui exécutait aveuglément ce qu'il trouvait sur le disque), l'UEFI avec Secure Boot reste une avancée de sécurité importante !
Faisant parti d’Apache Service Mix, Apache CAMEL est une des principales fonctionnalités de la célèbre solution Open Source.
Découvrez la planche #41 !
La pérennité des applications en développement : définition et enjeux. On en parle sur AXOTalks, le blog des experts tech & IT !