
UEFI shim loader
shim est une application EFI simple qui, lorsqu'elle est exécutée, tente d'ouvrir et d'exécuter une autre application. Elle tente d'abord de le faire via les appels EFI standard LoadImage() et StartImage(). Si ceux-ci échouent (parce que Secure Boot est activé et que le binaire n'est pas signé avec une clé appropriée, par exemple), elle valide ensuite le binaire par rapport à un certificat intégré. Si cela réussit et que le binaire ou la clé de signature ne sont pas interdits, shim relocalise et exécute le binaire.
shim installera également un protocole qui permet au chargeur d'amorçage de deuxième étage d'effectuer une validation binaire similaire. Ce protocole possède un GUID comme décrit dans le fichier d'en-tête shim.h et fournit un point d'entrée unique. Sur les systèmes 64 bits, ce point d'entrée s'attend à être appelé avec l'ABI SysV plutôt que MSABI, de sorte que les appels vers celui-ci ne doivent pas être enveloppés.
Depuis la version 16.1, shim remplace la table système et installe sa propre version des fonctions LoadImage()/StartImage()/UnloadImage()/Exit(), afin que les deuxièmes étages puissent simplement les appeler depuis la table système, et que cela fonctionne que shim soit ou non le premier étage, sans nécessiter de code spécifique à shim dans les deuxièmes étages.
Lorsque ce protocole est installé, les UKI signés Unified Kernel Images peuvent être chargés même si le noyau imbriqué n'est pas signé, car une fois l'UKI chargé et validé, shim construit une liste d'autorisation interne de toutes les sections contenues dans l'UKI. Lorsqu'une image est chargée depuis l'une de ces sections, elle est validée par rapport aux listes de blocage (DBX/MOKX/SBAT au moment de la rédaction), mais elle n'est pas vérifiée par rapport aux listes d'autorisation (hashs/signatures DB/MOK), car l'image externe a déjà été validée et l'image interne est donc couverte par ces signatures ou hashs. De plus, l'image interne n'est pas mesurée dans le TPM, afin d'éviter les doubles mesures.
Sur les systèmes dotés d'une puce TPM activée et prise en charge par le firmware du système, shim étendra divers PCRs avec les condensats des cibles qu'il charge. Une liste complète se trouve dans le fichier README.tpm .
Pour utiliser shim, placez simplement un certificat public encodé DER dans un fichier tel que pub.cer et compilez avec make VENDOR_CERT_FILE=pub.cer.
Il existe quelques options de compilation et plusieurs façons de personnaliser la compilation, décrites dans BUILDING.
Consultez le plan de test et ouvrez un ticket si quelque chose échoue !
Dans le cas où les développeurs doivent être contactés au sujet d'un incident de sécurité ou d'une vulnérabilité, veuillez envoyer un courriel à [email protected].