Linux-Kernel: ACPI-Bug hebelt Schutzmechanismen von UEFI Secure Boot aus

Ein Bug im Linux-Mainline-Kernel könnte Angreifern das Laden unsignierter Kernel-Module trotz UEFI Secure Boot ermöglichen. PoC-Code und ein Patch liegen vor.

In Pocket speichern vorlesen Druckansicht 36 Kommentare lesen
Linux-Kernel: ACPI-Bug hebelt Schutzmechanismen von UEFI Secure Boot aus

Der Proof-of-Concept-Code erlaubt das Laden beliebiger Linux-Kernel-Module trotz aktivem UEFI Secure Boot.

(Bild: Screenshot / git.zx2c4.com)

Lesezeit: 4 Min.
Von
  • David Wolski
Inhaltsverzeichnis

Eigentlich sollte ein Linux-System bei aktiviertem UEFI Secure Boot keine unsignierten Kernel-Module laden dürfen, weil diese das System kompromittieren könnten. Allerdings hebelt ein Bug in der Behandlung von ACPI-Tabellen im Linux-Mainline-Kernel diesen Lockdown-Modus aus. Ein Angreifer mit Root-Rechten und passendem Exploit-Code könnte sich das zunutze machen, um beliebige Kernel-Module trotz UEFI Secure Boot zu laden.

Ein Patch gegen das Sicherheitsproblem und ein Proof-Of-Concept (PoC) in Form eines Bash-Skripts liegen bereits vor. Die Vergabe einer CVE-Nummer steht hingegen noch aus.

Entdeckt hat den Bug Jason A. Donenfeld, der Hauptentwickler der VPN-Software Wireguard, vor einigen Tagen unter Ubuntu 18.04 LTS (Long-term support) im dort verwendeten Kernel 4.15. Diese Kernelversion stammt ursprünglich vom Januar 2018 und erhielt in der LTS-Ausgabe bis heute etliche zurückportierte Patches, um den Kernel aktuell und sicher zu halten. Es handelt sich dabei also strenggenommen nicht mehr um den Mainline-Kernel, sondern um eine stark modifizierte Version des Ubuntu Security Teams.

Donenfelds anfänglicher, via OSS-Sec-Mailingliste geäußerter Verdacht war, dass eben diese nachträglichen Patches den sicherheitsrelevanten Bug in der spezifischen Kernel-Version verursachten. Wie sich jetzt nach weiteren Experimenten des Wireguard-Entwicklers herausgestellt hat, ist das Problem doch größer: Der Bug ist nicht etwa Ubuntu-spezifisch, sondern tritt unter ähnlichen Bedingungen auch in allen Ausgaben des offiziellen, unmodifizierten Mainline-Kernels auf.

Donenfelds über die Kernel-Mailingliste eingereichter Patch wird deshalb auch für alle bei kernel.org aufgelisteten aktuell gepflegten Longterm-Kernel zurückportiert.

Im Normalfall startet der Kernel bei aktiviertem UEFI Secure Boot in einem Lockdown-Modus und lädt nur signierte Kernel-Module, deren Signatur zum hinterlegten Secure-Boot-Schlüssel in der Firmware passen. Das sind üblicherweise die mitgelieferten Module einer Linux-Distribution oder solche, die von Administratoren eines Systems zuvor passend signiert wurden. In Anwendungsfällen, die eine erhöhte Sicherheit erfordern, soll der Kernel-Lockdown das Laden unautorisierter Module verbieten und damit das Risiko einer Kompromittierung minimieren.

Der von Donenfeld entdeckte Bug offenbarte allerdings, dass der Kernel die Schnittstelle für die so genannten ACPI Secondary System Descriptor Tables (SSDT) nicht ausreichend schützt. Diese Schnittstelle erlaubt es dem Kernel, während des Betriebs ACPI-Tabellen zur Initialisierung von Systemkomponenten dynamisch nachzuladen oder anzupassen.

Donenfeld konnte den Bug ausnutzen, um mit Root-Rechten manipulierte ACPI-Tabellen zu laden und die Lockdown-Variable des Kernels mit Nullen zu überschreiben, um den Lockdown-Modus effektiv auszuschalten. Zuvor hebelt der Beispiel-Exploit auch noch den Sicherheitsmechanismus Kernel Address Space Layout Randomization (KASLR) aus, um an die physikalische Adresse der Kernel-Variable zu kommen. Laut den Kommentaren im Exploit-Code funktioniert dies verhältnismäßig einfach über die Abfrage von /proc/kcore sowie /proc/kallsysm.

In der ersten Variante des Exploits, die auf den Kernel 4.15 in Ubuntu 18.04 abzielte, war es noch nötig, KASLR über einen hinzugefügten Boot-Parameter und einen Neustart des Systems abzuschalten. Die neue, universellere Variante macht den Exploit über die Errechnung der physikalischen Adresse eleganter und permanent: Die Deaktivierung des Lockdown-Modus übersteht dank Ermittlung der physikalischen Speicheradresse sogar einen Neustart. Root-Privilegien sind aber weiterhin nötig, um so die Einschränkungen von UEFI Secure Boot auf einem Linux-System zu umgehen.

Donenfelds Patch fällt knapp aus: Er ergänzt lediglich einen Check, ob der Kernel-Lockdown-Modus aktiv ist, und verbietet in diesem Fall eine nachträgliche Modifikation der ACPI-Tabellen.

(ovw)