Verwenden signierter Bootloader, um den UEFI Secure Boot-Schutz zu umgehen

Russische Version dieses Artikels.

EinfĂŒhrung

Die Firmware moderner Computer-Motherboards entspricht der UEFI- Spezifikation und unterstĂŒtzt seit 2013 die Authentifizierungstechnologie heruntergeladener Programme und Secure Boot-Treiber, die den Computer vor Bootkits schĂŒtzen soll . Secure Boot blockiert die AusfĂŒhrung von nicht signiertem oder nicht vertrauenswĂŒrdigem Programmcode: .efi-Dateien von Programmen und Bootloadern von Betriebssystemen, Firmware zusĂ€tzlicher GerĂ€te (OPROM-Grafikkarten, Netzwerkadapter).
Secure Boot kann auf jedem Store-Motherboard deaktiviert werden. Eine physische Anforderung zum Ändern der Einstellungen ist jedoch eine physische PrĂ€senz auf dem Computer. Sie mĂŒssen die UEFI-Einstellungen aufrufen, wenn der Computer hochfĂ€hrt. Erst dann können Sie die Technologie deaktivieren oder ihre Einstellungen Ă€ndern.

Die meisten Motherboards werden nur mit vertrauenswĂŒrdigen Microsoft-SchlĂŒsseln geliefert. Aus diesem Grund mĂŒssen sich die Entwickler der Boot-Software an Microsoft wenden, um die Signatur der Bootloader zu erhalten, sich einem PrĂŒfverfahren zu unterziehen und die Notwendigkeit einer globalen Signatur ihrer Datei zu rechtfertigen, wenn das Laufwerk oder das Flash-Laufwerk unnötig ausgefĂŒhrt werden soll Deaktivieren Sie den sicheren Start oder fĂŒgen Sie den SchlĂŒssel manuell auf jedem Computer hinzu.
Microsoft muss Downloader fĂŒr Entwickler von Linux-Distributionen, Hypervisoren, Antiviren-Bootdisketten und Computerwiederherstellungsprogrammen 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 das umgesetzt werden kann.

Signierte Bootloader-Downloader

Um Linux mit aktiviertem Secure Boot zu starten, benötigen Sie einen signierten Bootloader. Microsoft hat das Signieren von unter GPLv3 lizenzierter Software aufgrund des Verbots der Tivoisierung gemĂ€ĂŸ den Lizenzregeln verboten, sodass GRUB nicht signieren kann .
Als Reaktion darauf veröffentlichte die Linux Foundation PreLoader , und Matthew Garrett schrieb Shim - kleine Bootloader, die die Signatur oder den Hash der nĂ€chsten Download-Datei ĂŒberprĂŒfen. PreLoader und Shim verwenden keine UEFI- Datenbankzertifikate, sondern enthalten eine Datenbank mit zulĂ€ssigen Hashes (PreLoader) oder Zertifikaten (Shim) in sich.
Beide Programme ermöglichen nicht nur das automatische Herunterladen vertrauenswĂŒrdiger Dateien, sondern auch das Herunterladen zuvor nicht vertrauenswĂŒrdiger Dateien im Secure Boot-Modus, erfordern jedoch die physische Anwesenheit des Benutzers: Beim ersten Start mĂŒssen Sie das hinzugefĂŒgte Zertifikat oder die Hash-Datei in der grafischen OberflĂ€che auswĂ€hlen. Anschließend werden die Daten in eine spezielle NVRAM-Variable eingegeben Ein Motherboard, das von einem geladenen Betriebssystem nicht geĂ€ndert werden kann. Dateien werden nur fĂŒr diese Preloader und nicht fĂŒr Secure Boot im Allgemeinen als vertrauenswĂŒrdig eingestuft. Sie können sie ohnehin nicht ohne PreLoader / Shim ausfĂŒhren.

Aktionen, die erforderlich sind, um ein nicht vertrauenswĂŒrdiges Programm ĂŒber Shim auszufĂŒhren.
Erforderliche Aktionen, wenn ein nicht vertrauenswĂŒrdiges Programm zum ersten Mal ĂŒber Shim gestartet wird.

Alle gĂ€ngigen Linux-Distributionen verwenden aufgrund der ZertifikatunterstĂŒtzung Shim, wodurch das Aktualisieren des nĂ€chsten Bootloaders ohne Benutzerinteraktion vereinfacht wird. Normalerweise wird Shim verwendet, um GRUB2, den beliebtesten Bootloader unter Linux, auszufĂŒhren.

GRUB2

Um zu verhindern, dass die Angreifer mit Hilfe eines signierten Bootloaders eines Distributionskits leise GeschĂ€fte machen, 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, wurde durch einen eigenen .efi (PE) -Lader ergĂ€nzt, ohne die Befehle UEFI LoadImage / StartImage sowie den Validierungscode der heruntergeladenen Dateien ĂŒber shim zu verwenden, sodass Dateien heruntergeladen werden können, die fĂŒr shim vertrauenswĂŒrdig, aber nicht vertrauenswĂŒrdig sind in Bezug auf UEFI. Warum sie genau das getan haben, ist nicht klar; Mit UEFI können Sie die Funktion zum ÜberprĂŒfen heruntergeladener Bilder neu definieren (einbinden). So funktioniert PreLoader, und Shim selbst hat eine solche Funktion , ist jedoch standardmĂ€ĂŸig deaktiviert.

Auf die eine oder andere Weise schlĂ€gt die Verwendung eines signierten GRUB aus einer Linux-Distribution fehl. Es gibt zwei Möglichkeiten, ein universelles bootfĂ€higes USB-Flash-Laufwerk zu erstellen, bei dem nicht die SchlĂŒssel jeder heruntergeladenen Datei zu den vertrauenswĂŒrdigen hinzugefĂŒgt werden mĂŒssen:

  • Verwendung eines modifizierten GRUB, der EFI-Dateien selbst herunterlĂ€dt, ohne eine digitale Signatur zu ĂŒberprĂŒfen und ohne Module zu blockieren;
  • Verwenden Sie Ihren eigenen Preloader (zweiten), der die Funktionen zur ÜberprĂŒfung der digitalen UEFI-Signatur ĂŒberschreibt (EFI_SECURITY_ARCH_PROTOCOL.FileAuthenticationState, EFI_SECURITY2_ARCH_PROTOCOL.FileAuthentication).

Die zweite Option ist vorzuziehen: Heruntergeladene nicht vertrauenswĂŒrdige Programme können auch nicht vertrauenswĂŒrdige Programme herunterladen (z. B. können Sie Dateien ĂŒber die UEFI-Shell herunterladen), und in der ersten Version kann nur GRUB selbst alles herunterladen. Wir Ă€ndern PreLoader , entfernen den zusĂ€tzlichen Code und ermöglichen das Starten von Dateien.

Insgesamt sieht die Architektur des Flash-Laufwerks wie folgt aus:
______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ → /_│ │ → /_│ │ │ │ → │ │ → │ │ │ EFI │ → │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (shim) (FileAuthentication (GRUB2) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ MokManager.efi (Key enrolling tool) 


Es gab also Super UEFIinSecureBoot Disk .
Super UEFIinSecureBoot Disk - ein Disk-Image mit dem GRUB2-Bootloader, mit dem nicht signierte EFI-Programme und Betriebssysteme bequem im UEFI Secure Boot-Modus ausgefĂŒhrt werden können.

Die Festplatte kann als Grundlage fĂŒr die Erstellung eines USB-Laufwerks mit Dienstprogrammen zur Computerwiederherstellung, fĂŒr den Start verschiedener Linux-Live-Distributionen und fĂŒr WinPE verwendet werden. Booten Sie ĂŒber das Netzwerk, ohne Secure Boot in den Einstellungen des Motherboards zu deaktivieren. Dies kann bei der Wartung von Computern oder Unternehmen anderer Personen hilfreich sein Laptops, zum Beispiel mit einem Kennwort zum Ändern der UEFI-Einstellungen.

Das Image besteht aus drei Komponenten: einem Shim-Preloader von Fedora (signiert mit einem Microsoft-SchlĂŒssel, der auf den meisten Motherboards und Laptops vorinstalliert ist), einem modifizierten Linux Foundation PreLoader-Preloader (zum Deaktivieren der SignaturĂŒberprĂŒfung beim Laden von .efi-Dateien) und einem modifizierten GRUB2-Bootloader.

WĂ€hrend des ersten Starts einer Festplatte auf einem Computer mit Secure Boot mĂŒssen Sie ein Zertifikat ĂŒber das MokManager-MenĂŒ auswĂ€hlen (es wird automatisch gestartet). Danach funktioniert der Bootloader so, als ob Secure Boot deaktiviert ist: GRUB lĂ€dt alle nicht signierten .efi-Dateien oder Linux-Kernel, heruntergeladene EFI-Programme kann andere Programme und Treiber mit einer fehlenden oder nicht vertrauenswĂŒrdigen Signatur ausfĂŒhren.

Um die FunktionsfÀhigkeit zu demonstrieren, enthÀlt das Image Super Grub Disk (Skripte zum Suchen und Laden installierter Betriebssysteme, auch wenn deren Bootloader beschÀdigt ist), GRUB Live ISO Multiboot (Skripte zum bequemen Booten von Linux LiveCD direkt von ISO, ohne vorheriges Entpacken und Verarbeiten), One Datei Linux (Kernel und initrd in einer Datei zur Systemwiederherstellung) und mehrere UEFI-Dienstprogramme.

Das Laufwerk ist kompatibel mit UEFI ohne Secure Boot sowie mit Àlteren Computern mit BIOS.


Signierte Downloader

Ich habe mich gefragt, ob es möglich ist, die Notwendigkeit zu umgehen, beim ersten Start einen SchlĂŒssel per Unterlegscheibe hinzuzufĂŒgen. Vielleicht gibt es einige signierte Downloader, mit denen Sie mehr tun können, als die Autoren erwartet haben?
Wie sich herausstellte, gibt es solche Lader. Eine davon wird in Kaspersky Rescue Disk 18 verwendet - einer Startdiskette mit Antivirensoftware. Mit GRUB von der Festplatte können Sie Module laden (Befehl insmod), wĂ€hrend Sie mit Modulen in GRUB regulĂ€ren ausfĂŒhrbaren Code laden können. Der Disk Pre-Loader ist nativ.

NatĂŒrlich, nur weil GRUB von der Festplatte keinen nicht vertrauenswĂŒrdigen Code lĂ€dt. Das Chainloader-Modul muss so geĂ€ndert werden, dass GRUB die UEFI LoadImage / StartImage-Funktionen nicht verwendet, sondern die .efi-Datei unabhĂ€ngig in den Speicher lĂ€dt, eine Verschiebung durchfĂŒhrt, den Einstiegspunkt findet und diesem folgt. GlĂŒcklicherweise befindet sich fast der gesamte erforderliche Code im GRUB- Repository mit Red Hat Secure Boot-UnterstĂŒtzung . Das einzige Problem: Es gibt keinen PE- Header-Parsing-Code, der Header analysiert und gibt Shim als Antwort auf einen Funktionsaufruf ĂŒber ein spezielles Protokoll zurĂŒck. Dies kann einfach behoben werden, indem der entsprechende Code von Shim oder PreLoader nach GRUB portiert wird.

Es gab also Silent UEFIinSecureBoot Disk. Die resultierende Festplattenarchitektur lautet wie folgt:
  ______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ /_│ │ → /_│ │ │ │ │ │ → │ │ │ EFI │ │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (Kaspersky (FileAuthentication (GRUB2) Loader) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ fde_ld.efi + custom chain.mod (Kaspersky GRUB2) 


Fazit

In diesem Artikel haben wir festgestellt, dass nicht genĂŒgend zuverlĂ€ssige Bootloader vorhanden sind, die mit einem Microsoft-SchlĂŒssel signiert sind, der das Arbeiten im sicheren Startmodus ermöglicht.
Mit den signierten Kaspersky Rescue Disk-Dateien haben wir einen "stillen" Download 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 Herunterladen von USB-Sticks) als auch fĂŒr böse Taten (zum Installieren von Bootkits ohne Wissen des Computerbesitzers) verwendet werden.
Ich gehe davon aus, dass das Kaspersky-Zertifikat nicht lange hĂ€lt und zur globalen Liste der gesperrten UEFI-Zertifikate hinzugefĂŒgt wird, die auf Computern unter Windows 10 ĂŒber Windows Update installiert werden, wodurch das Laden von Kaspersky Rescue Disk 18 und Silent UEFIinSecureBoot Disk unterbrochen wird. Mal sehen, wie schnell das passieren wird.

Laden Sie die Super UEFIinSecureBoot-Festplatte herunter: https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk
Laden Sie Silent UEFIinSecureBoot Disk im ZeroNet Git Center- Netzwerk herunter: http://127.0.0.1:43110/1KVD7PxZVke1iq4DKb4LNwuiHS4UzEAdAv/

Über ZeroNet
ZeroNet ist ein sehr leistungsfÀhiges System zum Erstellen dezentraler verteilter dynamischer Websites und Dienste. Beim Besuch einer Ressource beginnt der Benutzer, diese wie in BitTorrent herunterzuladen und zu verteilen. Gleichzeitig ist es möglich, vollwertige Ressourcen zu erstellen: Blogs mit Kommentaren, Foren, Video-Hosting, Wiki-Sites, Chats, E-Mail, Git.
ZeroNet trennt die Konzepte von Code und Site-Daten: Benutzerdaten werden in JSON-Dateien gespeichert und bei der Synchronisierung mit einem standardisierten Schema in die SQLite-Datenbank der Site importiert, mit dem Sie atemberaubende Dinge tun können: lokale Textsuche auf allen jemals geöffneten Sites in Millisekunden, automatisch Echtzeit-Analogon von RSS fĂŒr alle Sites gleichzeitig.
Standardisiertes Authentifizierungs- und Autorisierungssystem (Ă€hnlich wie OAuth), UnterstĂŒtzung fĂŒr die Arbeit hinter NAT und ĂŒber Tor.
ZeroNet ist sehr schnell, benutzerfreundlich, verfĂŒgt ĂŒber eine moderne BenutzeroberflĂ€che und kleine, aber sehr praktische Funktionen wie das globale Umschalten von Tag / Nacht-Themen auf Websites.

Ich halte ZeroNet fĂŒr ein sehr unterschĂ€tztes System und veröffentliche die Silent-Version absichtlich nur in ZeroNet Git, um neue Benutzer anzulocken.

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


All Articles