Bisher habe ich zum Signieren von EFI-Dateien bzw. Unified Kernel Images (UKIs) immer sbsign (im Paket sbsigntools enthalten) eingesetzt. Mittlerweile bietet systemd seit Version 257 mit systemd-sbsign aber auch eine gleichwertige Alternative. Da ich selbst sowieso systemd-ukify zum Erstellen von Unified Kernel Images verwende, nutze ich nun systemd-sbsign zum Signieren der UKIs mit meinem eigenen UEFI-Secure-Boot-Schlüssel.
systemd-sbsign: Alternative zu sbsign (sbsigntools)
fwupd: Firmware aktualisieren mit aktiviertem Secure Boot und eigenen Secure-Boot-Schlüsseln
Aus Sicherheitsgründen ist es ratsam neben dem regelmäßigen Aktualisieren des Betriebssystems und der dazugehörigen Anwendungssoftware auch die (Hardware-)Firmware seines Rechners aktuell zu halten. Unter Linux nutze ich hierfür fwupd mit Gnome Firmware als GUI. Im Normalfall erfordern die Firmware-Updates einen Neustart, bei welchem dann die fwupd-EFI-Datei anstelle des Betriebssystems geladen wird. Wer wie ich UEFI-Secure-Boot mit eigenen Schlüsseln (Keys) verwendet, muss hierzu jedoch sicherstellen, dass diese fwupd-EFI-Datei entsprechend mit dem eigenen Secure-Boot-Key signiert ist. Wie ich das unter Arch Linux bewerkstelligt habe, erfahrt in diesem Beitrag.
systemd-ukify: Unified Kernel Image (UKI) für UEFI Secure Boot mit YubiKey signieren
In einem älteren Beitrag hatte ich bereits beschrieben, wie ich mittels systemd-ukify sogenannte Unified Kernel Images (UKIs) zum Booten meines Arch-Linux-Systems erstelle. Die so generierten UKIs wurden dabei mit meinem eigenen UEFI-Secure-Boot-Schlüssel signiert. Dabei befand sich der private Secure-Boot-Schlüssel jedoch auf meinem System selbst, wobei dieser aber natürlich nur für den Root-Benutzer lesbar ist.
Eine andere Möglichkeit ist es, den privaten Secure-Boot-Schlüssel (konkret geht es um den Signature Database Key) auf einem Hardware-Security-Token, wie z.B. einem YubiKey, zu speichern. Der Vorteil besteht darin, dass der private Schlüssel sich nicht direkt auf dem eigentlichen System befindet und ein Zugriff auf den privaten Schlüssel erschwert wird bzw. ein Auslesen generell beim YubiKey nicht möglich ist. Die Kommunikation zwischen systemd-ukify (intern eigentlich sbsign) und YubiKey findet über die PKCS#11-Schnittstelle statt.
Arch Linux & Secure Boot: Unified Kernel Image (UKI) mit systemd-ukify erstellen & signieren
Bis vor Kurzem hatte ich zum Generieren von Unified Kernel Images (UKIs) mein selbstentwickeltes Tool secbootctl verwendet. Da ich derzeit nicht die Muße habe, es weiterzuentwickeln und es durch eine der letzten systemd-Änderungen sowie nicht mehr korrekt funktioniert hat, habe ich mein System nun auf systemd-ukify umgestellt. Als Bestandteil von systemd ist somit sichergestellt, dass die generierten UKIs zukünftig immer der initial vom systemd-Projekt initierten UAPI: Bootloader Specification entsprechen (also hoffe ich zumindest :)).
In Verbindung mit pacman, dem Paketmanager von Arch Linux, wird bei jedem Kernel-, initramfs- und CPU-Microcode-Update ein UKI erstellt und mit meinem eigenen UEFI-Secure-Boot-Schlüssel signiert. Wie das genau funktioniert, erfahrt ihr in diesem Beitrag.
Wie ich den Bootvorgang meines Linux-Notebooks absichere - UEFI Secure Boot, Measured Boot (TPM), LUKS
Nebst dem Absichern (Hardening) des Betriebssystems, sollte auch der eigentliche Bootvorgang, dem meist weniger Beachtung bzgl. Sicherheit geschenkt wird, abgesichert werden. Die beste Festplatten-Vollverschlüsselung bringt nicht allzu viel, wenn euer System z.B. mit einem manipulierten Kernel gebootet wird und im Hintergrund bspw. euer Passwort mitgeloggt wird. Aus diesem Grund ist es wichtig bereits beim Bootvorgang sichzustellen, dass nur vertrauenswürdige Firmware/Software geladen und ausgeführt wird.
In diesem Beitrag gebe ich euch einen Überblick darüber, welche Schritte ich umgesetzt habe, um ich mein Notebook mit Arch Linux sicher zu booten.