Ausnutzen signierter Bootloader, um UEFI Secure Boot zu umgehen

Russische Version dieses Artikels.
Die Firmware moderner PC-Motherboards entspricht seit 2010 der UEFI- Spezifikation. 2013 wurde eine neue Technologie namens Secure Boot eingefĂŒhrt, die verhindern soll, dass Bootkits installiert und ausgefĂŒhrt werden. Secure Boot verhindert die AusfĂŒhrung von nicht signiertem oder nicht vertrauenswĂŒrdigem Programmcode (.efi-Programme und Bootloader des Betriebssystems, zusĂ€tzliche Hardware-Firmware wie Grafikkarten- und Netzwerkadapter-OPROMs).
Secure Boot kann auf jedem Einzelhandels-Motherboard deaktiviert werden. Eine obligatorische Voraussetzung fĂŒr die Änderung des Status ist jedoch die physische Anwesenheit des Benutzers am Computer. Beim Booten des Computers mĂŒssen die UEFI-Einstellungen eingegeben werden. Erst dann können die Einstellungen fĂŒr den sicheren Start geĂ€ndert werden.

Die meisten Motherboards enthalten nur Microsoft-SchlĂŒssel als vertrauenswĂŒrdig, wodurch bootfĂ€hige Softwareanbieter gezwungen werden, Microsoft aufzufordern, ihre Bootloader zu signieren. Dieser Prozess umfasst das Code-Audit-Verfahren und die BegrĂŒndung fĂŒr die Notwendigkeit, die Datei mit einem global vertrauenswĂŒrdigen SchlĂŒssel zu signieren, wenn die Festplatte oder der USB-Flash im Secure Boot-Modus funktionieren sollen, ohne den SchlĂŒssel manuell auf jedem Computer hinzuzufĂŒgen.
Linux-Distributionen, Hypervisoren, Antiviren-Bootdisketten und Autoren von Computerwiederherstellungssoftware mĂŒssen ihre Bootloader in Microsoft signieren.

Ich wollte ein bootfÀhiges USB-Flash-Laufwerk mit verschiedenen Computer-Wiederherstellungssoftware erstellen, das ohne Deaktivierung von Secure Boot gestartet werden kann. Mal sehen, wie dies erreicht werden kann.

Signierte Bootloader von Bootloadern

Um Linux mit aktiviertem Secure Boot zu starten, benötigen Sie einen signierten Bootloader. Microsoft verbietet das Signieren von unter GPLv3 lizenzierter Software aufgrund der Lizenzregel fĂŒr Tivoization Restriction. Daher kann GRUB nicht signiert werden .
Um dieses Problem zu beheben , veröffentlichte Linux Foundation PreLoader und Matthew Garrett machte Shim - kleine Bootloader, die die Signatur oder den Hash einer einzelnen Datei ĂŒberprĂŒfen und ausfĂŒhren. PreLoader und Shim verwenden keinen UEFI- Datenbankzertifikatsspeicher, sondern enthalten eine Datenbank mit zulĂ€ssigen Hashes (PreLoader) oder Zertifikaten (Shim) in der ausfĂŒhrbaren Datei.
Mit beiden Programmen können Sie nicht nur vertrauenswĂŒrdige Dateien automatisch ausfĂŒhren, sondern auch alle zuvor nicht vertrauenswĂŒrdigen Programme im sicheren Startmodus ausfĂŒhren, benötigen jedoch die physische Anwesenheit des Benutzers. Bei der ersten AusfĂŒhrung mĂŒssen Sie ein Zertifikat auswĂ€hlen, das hinzugefĂŒgt werden soll, oder die Datei, die gehasht werden soll, in der grafischen OberflĂ€che. Anschließend werden die Daten in eine spezielle NVRAM-Variable auf dem Motherboard eingefĂŒgt, auf die das geladene Betriebssystem nicht zugreifen kann . Dateien werden nur fĂŒr diese Preloader vertrauenswĂŒrdig, nicht fĂŒr Secure Boot im Allgemeinen, und können ohne PreLoader oder Shim immer noch nicht geladen werden.

Nicht vertrauenswĂŒrdige Software startet zuerst mit Shim.
Nicht vertrauenswĂŒrdige Software startet zuerst mit Shim.

Alle modernen, gĂ€ngigen Linux-Distributionen verwenden Shim aufgrund der ZertifikatunterstĂŒtzung, wodurch es einfach ist, Updates fĂŒr den Haupt-Bootloader bereitzustellen, ohne dass Benutzerinteraktionen erforderlich sind. Im Allgemeinen wird Shim verwendet, um GRUB2 auszufĂŒhren - den beliebtesten Bootloader unter Linux.

GRUB2

Um den Missbrauch signierter Bootloader mit böswilligen Absichten zu verhindern, hat Red Hat Patches fĂŒr GRUB2 erstellt, die "gefĂ€hrliche" Funktionen blockieren, wenn Secure Boot aktiviert ist: insmod / rmmod, appleloader, linux (ersetzt durch linuxefi), multiboot, xnu, memrw, iorw. Das Chainloader-Modul, das beliebige .efi-Dateien lĂ€dt, fĂŒhrte einen eigenen benutzerdefinierten internen .efi (PE) -Lader ein, ohne die UEFI LoadImage / StartImage-Funktionen sowie den Validierungscode der geladenen Dateien ĂŒber Shim zu verwenden, um die Möglichkeit zum Laden von Dateien, denen Shim vertraut, die jedoch in Bezug auf UEFI nicht vertrauenswĂŒrdig sind. Es ist nicht genau klar, warum diese Methode vorzuziehen ist - UEFI ermöglicht die Neudefinition (Hook) von UEFI-ÜberprĂŒfungsfunktionen. So funktioniert PreLoader, und tatsĂ€chlich ist die Shim-Funktion vorhanden, aber standardmĂ€ĂŸig deaktiviert.

Die Verwendung des signierten GRUB aus einer Linux-Distribution entspricht jedoch nicht unseren Anforderungen. Es gibt zwei Möglichkeiten, ein universelles bootfĂ€higes Flash-Laufwerk zu erstellen, bei dem nicht die SchlĂŒssel jeder ausfĂŒhrbaren Datei zu den vertrauenswĂŒrdigen Dateien hinzugefĂŒgt werden mĂŒssen:

  • Verwenden Sie modifizierten GRUB mit internem EFI-Loader ohne Vertifizierung der digitalen Signatur oder ModuleinschrĂ€nkungen.
  • Verwenden Sie einen benutzerdefinierten Preloader (den zweiten), der die Vertifizierungsfunktionen fĂŒr UEFI-Dateien verknĂŒpft (EFI_SECURITY_ARCH_PROTOCOL.FileAuthenticationState, EFI_SECURITY2_ARCH_PROTOCOL.FileAuthentication).

Die zweite Methode ist vorzuziehen, da ausgefĂŒhrte Software eine andere Software laden und starten kann. Beispielsweise kann die UEFI-Shell jedes Programm ausfĂŒhren. Die erste Methode bietet dies nicht, sodass nur GRUB beliebige Dateien ausfĂŒhren kann. Lassen Sie uns PreLoader Ă€ndern, indem Sie alle unnötigen Funktionen und den Patch-ÜberprĂŒfungscode entfernen, um alles zuzulassen.

Die Festplattenarchitektur lautet wie folgt:
______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ → /_│ │ → /_│ │ │ │ → │ │ → │ │ │ EFI │ → │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (shim) (FileAuthentication (GRUB2) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ MokManager.efi (Key enrolling tool) 


So wurde Super UEFIinSecureBoot Disk erstellt.
Super UEFIinSecureBoot Disk ist ein bootfĂ€higes Image mit GRUB2-Bootloader, das als Basis fĂŒr die Wiederherstellung von USB-Flash-Laufwerken dient.

Hauptmerkmal: Die Festplatte ist voll funktionsfĂ€hig, wenn der UEFI Secure Boot-Modus aktiviert ist. Es kann jedes Betriebssystem oder jede .efi-Datei starten, auch wenn nicht vertrauenswĂŒrdige, ungĂŒltige oder fehlende Signaturen vorhanden sind.

Auf der Festplatte können verschiedene Live Linux-Distributionen, die WinPE-Umgebung und der Netzwerkstart ausgefĂŒhrt werden, ohne den sicheren Startmodus in den UEFI-Einstellungen zu deaktivieren. Dies kann praktisch sein, um die Wartung des PCs und der Unternehmens-Laptops eines anderen Benutzers durchzufĂŒhren, z. B. mit gesperrten UEFI-Einstellungen ein Passwort.

Das Image enthĂ€lt 3 Komponenten: Shim-Preloader von Fedora (signiert mit Microsoft Key, der in den meisten Motherboards und Laptops vorinstalliert ist), modifizierter Linux Foundation PreLoader (deaktiviert die ÜberprĂŒfung der digitalen Signatur ausgefĂŒhrter Dateien) und modifizierter GRUB2-Loader.

Beim ersten Start muss das Zertifikat mit MokManager ausgewĂ€hlt werden (startet automatisch). Danach funktioniert alles genauso wie bei deaktiviertem Secure Boot. GRUB lĂ€dt alle nicht signierten .efi-Dateien oder Linux-Kernel, ausgefĂŒhrte EFI-Programme können alle anderen nicht vertrauenswĂŒrdigen ausfĂŒhrbaren Dateien laden oder Treiber.

Um die Festplattenfunktionen zu demonstrieren, enthĂ€lt das Image Super Grub Disk (eine Reihe von Skripten zum Suchen und AusfĂŒhren des Betriebssystems, auch wenn der Bootloader defekt ist), GRUB Live ISO Multiboot (eine Reihe von Skripten zum Laden von Linux Live-Distributionen direkt aus der ISO-Datei), One Datei Linux (der Kernel und initrd in einer einzigen Datei fĂŒr die Systemwiederherstellung) und mehrere UEFI-Dienstprogramme.

Die Festplatte ist auch mit UEFI ohne Secure Boot und mit Àlteren PCs mit BIOS kompatibel.


Signierte Bootloader

Ich habe mich gefragt, ob es möglich ist, die Registrierung des ersten StartschlĂŒssels ĂŒber Shim zu umgehen. Könnte es einen signierten Bootloader geben, mit dem Sie mehr tun können, als die Autoren erwartet hatten?
Wie sich herausstellte, gibt es solche Lader. Eine davon wird in Kaspersky Rescue Disk 18 - Bootdiskette fĂŒr Antivirensoftware verwendet. Mit GRUB von der Festplatte können Sie Module laden (Befehl insmod), und das Modul in GRUB ist nur ein ausfĂŒhrbarer Code. Der Preloader auf der Festplatte ist ein benutzerdefinierter.

NatĂŒrlich können Sie GRUB nicht einfach von der Festplatte verwenden, um nicht vertrauenswĂŒrdigen Code zu laden. Das Chainloader-Modul muss so geĂ€ndert werden, dass GRUB nicht die UEFI LoadImage / StartImage-Funktionen verwendet, sondern die .efi-Datei selbst in den Speicher lĂ€dt, eine Verschiebung durchfĂŒhrt, den Einstiegspunkt findet und dorthin springt. GlĂŒcklicherweise ist fast der gesamte erforderliche Code im Red Hat GRUB Secure Boot-Repository vorhanden . Das einzige Problem: Der PE- Header-Parser fehlt. GRUB erhĂ€lt den analysierten Header von Shim als Antwort auf einen Funktionsaufruf ĂŒber ein spezielles Protokoll. Dies kann leicht behoben werden, indem der entsprechende Code vom Shim oder PreLoader nach GRUB portiert wird.

So wurde Silent UEFIinSecureBoot Disk erstellt. Die endgĂŒltige Festplattenarchitektur sieht wie folgt aus:
  ______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ /_│ │ → /_│ │ │ │ │ │ → │ │ │ EFI │ │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (Kaspersky (FileAuthentication (GRUB2) Loader) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ fde_ld.efi + custom chain.mod (Kaspersky GRUB2) 


Das Ende

In diesem Artikel haben wir nachgewiesen, dass nicht genĂŒgend zuverlĂ€ssige Bootloader vorhanden sind, die mit dem Microsoft-SchlĂŒssel signiert sind, sodass nicht vertrauenswĂŒrdiger Code im sicheren Startmodus gestartet werden kann.
Mit signierten Kaspersky Rescue Disk-Dateien haben wir einen stillen Start aller nicht vertrauenswĂŒrdigen .efi-Dateien mit aktiviertem Secure Boot erreicht, ohne dass ein Zertifikat zu UEFI db oder shim MOK hinzugefĂŒgt werden muss.
Diese Dateien können sowohl fĂŒr gute Taten (zum Booten von USB-Sticks) als auch fĂŒr böse Taten (zum Installieren von Bootkits ohne Zustimmung des Computerbesitzers) verwendet werden.
Ich gehe davon aus, dass das Kaspersky Bootloader-Signaturzertifikat nicht lange gĂŒltig ist und zur globalen Sperrliste fĂŒr UEFI-Zertifikate hinzugefĂŒgt wird, die auf Computern unter Windows 10 ĂŒber Windows Update installiert wird, wodurch Kaspersky Rescue Disk 18 und Silent UEFIinSecureBoot Disk beschĂ€digt werden. Mal sehen, wie schnell das passieren wĂŒrde.

Super UEFIinSecureBoot Disk herunterladen: https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk
Stiller UEFIinSecureBoot-DatentrÀger-Download ( ZeroNet Git Center- Netzwerk): http://127.0.0.1:43110/1KVD7PxZVke1iq4DKb4LNwuiHS4UzEAdAv/

Über ZeroNet
ZeroNet ist ein sehr leistungsfĂ€higes System fĂŒr dezentral verteilte dynamische Websites und Dienste. Der Benutzer beginnt beim Besuch mit dem Herunterladen und Seeding von Website-Daten nach dem BitTorrent-Prinzip. Im Gegensatz zu anderen Ă€hnlichen Systemen ermöglicht ZeroNet die Erstellung vollwertiger Blogs mit Kommentaren, Foren, Video-Hostings, Wiki-Sites, Chats, E-Mails und Git.
ZeroNet trennt Website-Daten vom Website-Code: Die Daten werden in JSON-Dateien gespeichert und in SQLite-Datenbanken mit einem definierten Schema kombiniert, mit dem umwerfende Funktionen implementiert werden können: Lokale Suche auf allen geöffneten Websites im Sinne von Millisekunden, All-Site-Real -time RSS-Àhnlicher Update-Stream.
ZeroNet bietet ein standardisiertes Authentifizierungssystem Ă€hnlich der OAuth-, NAT- und Tor-UnterstĂŒtzung.
Das System arbeitet sehr schnell, ist benutzerfreundlich, verfĂŒgt ĂŒber eine moderne BenutzeroberflĂ€che mit kleinen, aber praktischen Funktionen wie dem globalen Wechsel des Nacht- / Tagesthemas fĂŒr alle Websites.

Ich glaube, dass ZeroNet unterschÀtzt wird und absichtlich eine stille Version der Festplatte nur auf ZeroNet Git hochgeladen wird, um neue Benutzer anzulocken.

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


All Articles