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.
Meine Schritte zum Absichern des Bootvorgangs
UEFI-Firmware aktuell halten
Die UEFI-Firmware sollte meiner Meinung nach wie jede andere Software auch behandelt werden. Das bedeutet, dass auch die UEFI-Firmware immer aktuell gehalten werden sollte, da die PC-/Notebook-Hersteller im Rahmen von neuen Firmware-Versionen oftmals auch Sicherheitslücken schließen. Unter Arch Linux verwende ich hierzu fwupd.
Betriebssystem aktuell halten (Kernel, initramfs, usw.)
Selbstredend sollte natürlich auch das Betriebssystem immer regelmäßig aktualisiert werden. Im Rahmen dessen werden auch die beim Booten verwendeten Kernel, initramfs, CPU-Microcode etc. aktualisiert.
Festplattenvollverschlüsselung mit dm-crypt/LUKS
Mein System besteht aus 2 Partitionen, wobei es eine EFI- und eine Root-Partition gibt. Letztgenannte ist mittels LVM on LUKS vollverschlüsselt. Die EFI-Partition ist hingegen unverschlüsselt, enthält aber nur durch meinen eigenen Secure-Boot-Key signierte Dateien.
Secure Boot mit eigenen Schlüsseln (Custom Keys) verwenden
Ein wichtiger Baustein für einen sicheren Bootvorgang ist die Verwendung von UEFI Secure Boot. Mit Hilfe von Secure Boot lässt sich sicherstellen, dass nur signierte und somit vertrauenswürdige (eigentlich nur in Verbindung mit Measured Boot) Software beim Booten ausgeführt wird. Wichtig ist dabei, dass auch wirklich jede geladene und ausgeführte Datei überprüft wird. Aus diesem Grund müssen neben dem Kernel auch z.B. initramfs und CPU-Microcode signiert und geprüft werden. Vielleicht ist es mittlerweile anders, aber früher haben Bootloder, wie z.B. Grub, immer nur den Kernel geprüft.
Standardmäßig liefern die Hersteller ihre Systeme so aus, dass die eigenen sowie die Microsoft Secure-Boot-Keys hinterlegt sind. Letztendlich müsst ihr also darauf vertrauen, dass der Hersteller oder Microsoft ihre Secure-Boot-Keys nicht verlieren und nicht irgendwelche Malware versehentlich signieren.
Ich selbst hab deshalb alle Secure-Boot-Keys von Lenovo und Microsoft gelöscht und meine eigenen Keys hinterlegt.

Aus Kernel, initramfs usw. erstelle ich ein sogenanntes Unified Kernel Image und signiere das mit meinem eigenen DB-Key. Damit das automatisiert passiert, habe ich mir ein kleines Helfer-Tool namens secbootctl geschrieben. Bei jedem Betriebssystem-Update, welches Änderungen des Kernel, initramfs etc. beinhaltet, wird somit automatisiert ein Unified Kernel Image erstellt, signiert und auf die EFI-Partition kopiert. Ebenso wird der Bootloader, bei mir systemd-boot, signiert.
Auf meinem Notebook werden somit mit aktiviertem Secure Boot nur Dateien geladen, die durch meinen eigenen Key signiert wurden. Es sei angemerkt, dass somit z.B. auch Live-USB-Sticks nur funktionieren, wenn ich die entsprechenden Dateien entsprechend signiere, oder Secure Boot temporär ausschalte.
UEFI-Passwort verwenden
Um zu verhindern, dass jemand Secure Boot über das UEFI-GUI einfach deaktiviert, habe ich ein Passwort zum Zugriff auf das UEFI-GUI eingerichtet.
Measured Boot mit tpm2-totp
Strenggenommen haben ich mit Secure Boot nur sichergestellt, dass beim Booten ausschließlich Dateien geladen werden, die mit den im UEFI hinterlegten Keys signiert wurden. In Verbindung mit Measured Boot kann zusätzlich die Vertrauenswürdigkeit sichergestellt werden. Leider hinkt Linux bei diesem Thema immer noch hinterher. Ich verwende hierfür derzeit die Lösung auf Basis von tpm2-totp (siehe Arch Linux: Bootvorgang mittels TPM2 & TOTP messen und Vertrauenswürdigkeit überprüfen (Measured-Boot)).
An der Stelle, an der ich meine LUKS-Passphrase zum Entschlüsseln meiner Festplatte eingeben muss, wird mir so ein TOTP-Code angezeigt. Diesen kann ich dann mit dem durch mein Smartphone und mein YubiKey generierten OTP vergleichen (siehe auch YubiKey: TOTP-Schlüssel für 2FA sicher speichern). Wenn beide gleich sind, kann ich davon ausgehen, dass an meinem System nichts manipuliert wurde.
Fazit
Das Absichern des Bootvorgangs sollte nicht vernachlässigt werden, wenn einem ein sicheres System wichtig ist.