Utilisation de chargeurs de démarrage signés pour contourner la protection de démarrage sécurisé UEFI

Version russe de cet article.

Présentation

Le micrologiciel des cartes mÚres d'ordinateur modernes fonctionne selon la spécification UEFI et, depuis 2013, il prend en charge la technologie d'authentification des programmes téléchargés et des pilotes Secure Boot, qui est conçue pour protéger l'ordinateur contre les kits de démarrage . Secure Boot bloque l'exécution de code de programme non signé ou non approuvé: fichiers .efi des programmes et chargeurs de démarrage des systÚmes d'exploitation, firmware des équipements supplémentaires (cartes vidéo OPROM, adaptateurs réseaux).
Le dĂ©marrage sĂ©curisĂ© peut ĂȘtre dĂ©sactivĂ© sur n'importe quelle carte mĂšre de magasin, mais une exigence physique pour modifier ses paramĂštres est une prĂ©sence physique sur l'ordinateur. Vous devez entrer dans les paramĂštres UEFI au dĂ©marrage de l'ordinateur et ce n'est qu'alors qu'il sera possible de dĂ©sactiver la technologie ou de modifier ses paramĂštres.

La plupart des cartes mÚres sont livrées uniquement avec des clés Microsoft de confiance, c'est pourquoi les créateurs du logiciel de démarrage sont obligés de contacter Microsoft pour la signature des chargeurs de démarrage, de subir une procédure d'audit et de justifier la nécessité d'une signature globale de leur fichier s'ils souhaitent que le lecteur ou le lecteur flash s'exécute inutilement. désactivez le démarrage sécurisé ou ajoutez manuellement leur clé sur chaque ordinateur.
Microsoft doit signer des chargeurs de démarrage pour les développeurs de distributions Linux, d'hyperviseurs, de disques de démarrage antivirus et de programmes de récupération informatique.

Je voulais crĂ©er un lecteur flash USB amorçable avec divers logiciels de rĂ©cupĂ©ration d'ordinateur qui dĂ©marreraient sans dĂ©sactiver le dĂ©marrage sĂ©curisĂ©. Voyons comment cela peut ĂȘtre mis en Ɠuvre.

Téléchargeurs de Bootloader signés

Donc, pour démarrer Linux avec Secure Boot activé, vous avez besoin d'un chargeur de démarrage signé. Microsoft a interdit la signature de logiciels sous licence GPLv3 en raison de l'interdiction de la tivalisation par les rÚgles de la licence, donc GRUB ne pourra pas signer .
En rĂ©ponse, la Linux Foundation a publiĂ© PreLoader et Matthew Garrett a Ă©crit des shim , de petits chargeurs de dĂ©marrage qui vĂ©rifient la signature ou le hachage du prochain tĂ©lĂ©chargement. PreLoader et shim n'utilisent pas de certificats db UEFI , mais contiennent une base de donnĂ©es de hachages autorisĂ©s (PreLoader) ou de certificats (shim) Ă  l'intĂ©rieur d'eux-mĂȘmes.
Les deux programmes, en plus de tĂ©lĂ©charger automatiquement les fichiers approuvĂ©s, vous permettent de tĂ©lĂ©charger tous les fichiers prĂ©cĂ©demment non approuvĂ©s en mode Secure Boot, mais nĂ©cessitent la prĂ©sence physique de l'utilisateur: au premier dĂ©marrage, vous devez sĂ©lectionner le certificat ou le fichier de hachage ajoutĂ© dans l'interface graphique, aprĂšs quoi les donnĂ©es sont entrĂ©es dans une variable NVRAM spĂ©ciale une carte mĂšre qui ne peut pas ĂȘtre modifiĂ©e Ă  partir d'un systĂšme d'exploitation chargĂ©. Les fichiers ne sont approuvĂ©s que pour ces prĂ©chargeurs, et non pour Secure Boot en gĂ©nĂ©ral, et vous ne pouvez pas les exĂ©cuter sans PreLoader / shim de toute façon.

Actions requises pour exécuter un programme non approuvé via shim.
Actions requises lors du premier démarrage d'un programme non approuvé via shim.

Toutes les distributions Linux populaires actuelles utilisent shim, en raison de la prise en charge des certificats, ce qui facilite la mise à jour du prochain chargeur de démarrage sans intervention de l'utilisateur. En général, shim est utilisé pour exécuter GRUB2, le chargeur de démarrage le plus populaire sur Linux.

GRUB2

Pour empĂȘcher les attaquants de faire des affaires tranquillement Ă  l'aide d'un chargeur de dĂ©marrage signĂ© d'un kit de distribution, Red Hat a créé des correctifs pour GRUB2 bloquant les fonctions «dangereuses» lorsque Secure Boot Ă©tait activĂ©: insmod / rmmod, appleloader, linux (remplacĂ© par linuxefi), multiboot, xnu, memrw, iorw. Le module chainloader, qui charge des fichiers .efi arbitraires, a Ă©tĂ© complĂ©tĂ© par son propre chargeur .efi (PE), sans utiliser les commandes UEFI LoadImage / StartImage, ainsi que le code de validation des fichiers tĂ©lĂ©chargĂ©s via shim, de sorte que la possibilitĂ© de tĂ©lĂ©charger des fichiers de confiance pour shim mais pas de confiance en termes d'UEFI. La raison pour laquelle ils l'ont fait n'est pas claire; UEFI vous permet de redĂ©finir (accrocher) la fonction de vĂ©rification des images tĂ©lĂ©chargĂ©es, c'est ainsi que PreLoader fonctionne, et le shim lui-mĂȘme a une telle fonction , mais elle est dĂ©sactivĂ©e par dĂ©faut.

D'une maniÚre ou d'une autre, l'utilisation d'un GRUB signé d'une distribution Linux échouera. Il existe deux façons de créer un lecteur flash USB amorçable universel qui ne nécessite pas d'ajouter les clés de chaque fichier téléchargé à celles de confiance:

  • Utiliser un GRUB modifiĂ© qui tĂ©lĂ©charge les fichiers EFI seul, sans vĂ©rifier une signature numĂ©rique et sans bloquer les modules;
  • Utilisation de votre propre prĂ©chargeur (deuxiĂšme) qui remplace les fonctions de vĂ©rification de signature numĂ©rique UEFI (EFI_SECURITY_ARCH_PROTOCOL.FileAuthenticationState, EFI_SECURITY2_ARCH_PROTOCOL.FileAuthentication)

La deuxiĂšme option est prĂ©fĂ©rable - les programmes non approuvĂ©s tĂ©lĂ©chargĂ©s pourront Ă©galement tĂ©lĂ©charger des programmes non approuvĂ©s (par exemple, vous pouvez tĂ©lĂ©charger des fichiers via le shell UEFI), et dans la premiĂšre version, seul GRUB lui-mĂȘme peut tout tĂ©lĂ©charger. Nous modifions PreLoader , en supprimant le code supplĂ©mentaire et en permettant le lancement de tous les fichiers.

Au total, l'architecture du lecteur flash est la suivante:
______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ → /_│ │ → /_│ │ │ │ → │ │ → │ │ │ EFI │ → │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (shim) (FileAuthentication (GRUB2) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ MokManager.efi (Key enrolling tool) 


Il y a donc eu Super UEFIinSecureBoot Disk .
Super UEFIinSecureBoot Disk - une image disque avec le chargeur de démarrage GRUB2, conçue pour exécuter facilement des programmes efi et des systÚmes d'exploitation non signés en mode de démarrage sécurisé UEFI.

Le disque peut ĂȘtre utilisĂ© comme base pour crĂ©er un lecteur USB avec des utilitaires de rĂ©cupĂ©ration d'ordinateur, pour lancer diverses distributions en direct Linux et WinPE, dĂ©marrer Ă  partir du rĂ©seau, sans dĂ©sactiver Secure Boot dans les paramĂštres de la carte mĂšre, ce qui peut ĂȘtre pratique lors de l'entretien des ordinateurs ou de l'entreprise d'autres personnes les ordinateurs portables, par exemple, avec un mot de passe dĂ©fini pour modifier les paramĂštres UEFI.

L'image se compose de trois composants: un préchargeur de cales de Fedora (signé avec une clé Microsoft préinstallée sur la grande majorité des cartes mÚres et des ordinateurs portables), un préchargeur Linux Foundation PreLoader modifié (pour désactiver la vérification de signature lors du chargement de fichiers .efi) et un chargeur de démarrage GRUB2 modifié.

Lors du premier démarrage d'un disque sur un ordinateur avec Secure Boot, vous devez sélectionner un certificat via le menu MokManager (il démarre automatiquement), aprÚs quoi le chargeur de démarrage fonctionnera comme si Secure Boot est désactivé: GRUB charge tout fichier .efi ou noyau Linux non signé, les programmes EFI téléchargés peut exécuter d'autres programmes et pilotes avec une signature manquante ou non fiable.

Pour dĂ©montrer l'opĂ©rabilitĂ©, l'image contient Super Grub Disk (scripts pour rechercher et charger les systĂšmes d'exploitation installĂ©s, mĂȘme si leur chargeur de dĂ©marrage est endommagĂ©), GRUB Live ISO Multiboot (scripts pour un dĂ©marrage Linux LiveCD pratique directement Ă  partir de l'ISO, sans dĂ©ballage et traitement prĂ©liminaires), One Fichier Linux (noyau et initrd dans un seul fichier, pour la rĂ©cupĂ©ration du systĂšme) et plusieurs utilitaires UEFI.

Le lecteur est compatible avec UEFI sans démarrage sécurisé, ainsi que les ordinateurs plus anciens avec BIOS.


Téléchargeurs signés

Je me demandais s'il Ă©tait possible de contourner la nĂ©cessitĂ© d'ajouter une clĂ© via une cale au premier dĂ©marrage. Peut-ĂȘtre qu'il existe des tĂ©lĂ©chargeurs signĂ©s qui vous permettent de faire plus que ce que les auteurs attendaient?
En fait, il existe de tels chargeurs. L'un d'eux est utilisé dans Kaspersky Rescue Disk 18 - un disque de démarrage avec un logiciel antivirus. GRUB à partir du disque vous permet de charger des modules (commande insmod), tandis que les modules de GRUB vous permettent de charger du code exécutable normal. Le préchargeur de disque est natif.

Bien sĂ»r, juste parce que GRUB Ă  partir du disque ne charge pas le code non approuvĂ©. Il est nĂ©cessaire de modifier le module de chargeur de chaĂźne afin que GRUB n'utilise pas les fonctions UEFI LoadImage / StartImage, mais charge Ă  la place le fichier .efi en mĂ©moire, effectue la relocalisation, trouve le point d'entrĂ©e et le suit. Heureusement, presque tout le code nĂ©cessaire se trouve dans le rĂ©fĂ©rentiel GRUB avec la prise en charge de Red Hat Secure Boot , le seul problĂšme: il n'y a pas de code d'analyse d'en-tĂȘte PE , l'en-tĂȘte analyse et renvoie un shim, en rĂ©ponse Ă  un appel de fonction via un protocole spĂ©cial. Cela peut ĂȘtre facilement rĂ©solu en portant le code appropriĂ© depuis shim ou PreLoader vers GRUB.

Il y avait donc Silent UEFIinSecureBoot Disk. L'architecture de disque résultante est la suivante:
  ______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ /_│ │ → /_│ │ │ │ │ │ → │ │ │ EFI │ │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (Kaspersky (FileAuthentication (GRUB2) Loader) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ fde_ld.efi + custom chain.mod (Kaspersky GRUB2) 


Conclusion

Dans cet article, nous avons découvert qu'il n'y a pas suffisamment de chargeurs de démarrage fiables signés avec une clé Microsoft activant le mode de démarrage sécurisé.
En utilisant les fichiers signés de Kaspersky Rescue Disk, nous avons réalisé un téléchargement «silencieux» de tous les fichiers .efi non approuvés avec Secure Boot activé, sans avoir besoin d'ajouter un certificat à UEFI db ou shim MOK.
Ces fichiers peuvent ĂȘtre utilisĂ©s Ă  la fois pour les bonnes actions (pour le tĂ©lĂ©chargement Ă  partir de lecteurs flash USB) et pour les mauvaises (pour l'installation de bootkits Ă  l'insu du propriĂ©taire de l'ordinateur).
Je suppose que le certificat Kaspersky ne durera pas longtemps et sera ajouté à la liste globale des certificats UEFI révoqués , qui seront installés sur les ordinateurs exécutant Windows 10 via Windows Update, ce qui perturbera le chargement de Kaspersky Rescue Disk 18 et Silent UEFIinSecureBoot Disk. Voyons combien de temps cela se produira.

Téléchargez Super UEFIinSecureBoot Disk: https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk
Téléchargez Silent UEFIinSecureBoot Disk sur le réseau ZeroNet Git Center : http://127.0.0.1:43110/1KVD7PxZVke1iq4DKb4LNwuiHS4UzEAdAv/

À propos de ZeroNet
ZeroNet est un systĂšme trĂšs puissant pour crĂ©er des sites Web et des services dynamiques dĂ©centralisĂ©s distribuĂ©s. Lors de la visite d'une ressource, l'utilisateur commence Ă  la tĂ©lĂ©charger et Ă  la distribuer, comme dans BitTorrent. Dans le mĂȘme temps, il est possible de crĂ©er des ressources Ă  part entiĂšre: blogs avec commentaires, forums, hĂ©bergement vidĂ©o, sites wiki, chats, e-mail, git.
ZeroNet sépare les concepts de code et de données de site: les données utilisateur sont stockées dans des fichiers .json, et lorsqu'elles sont synchronisées, elles sont importées dans la base de données sqlite du site avec un schéma standardisé, ce qui vous permet de faire des choses à couper le souffle: recherche de texte locale sur tous les sites ouverts en quelques millisecondes, automatique analogique en temps réel de RSS pour tous les sites à la fois.
SystÚme d'authentification et d'autorisation standardisé (similaire à OAuth), prise en charge du travail derriÚre NAT et via Tor.
ZeroNet est trÚs rapide, convivial, possÚde une interface moderne et des fonctionnalités petites mais trÚs pratiques, telles que la commutation globale des thÚmes jour / nuit sur les sites.

Je considÚre ZeroNet comme un systÚme trÚs sous-estimé, et je publie intentionnellement la version Silent uniquement dans ZeroNet Git, pour attirer de nouveaux utilisateurs.

Source: https://habr.com/ru/post/fr446072/


All Articles