#!/coding/blatt
Sammelsurium mit Schwerpunkten Linux & IT-Sicherheit

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.

Folgende Geräte bzw. Software wurde verwendet:
  • Lenovo ThinkPad X1 Carbon Gen 9 mit Arch Linux

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.

Hinweis Open-Source-Firmware als Alternative (z.B. Coreboot)

Bei der UEFI-Firmware der Hersteller handelt es sich meistens um proprietäre Software. Es gibt aber auch Alternativen, wie z.B. Coreboot.

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.

BIOS: UEFI Secure Boot mit eigenen Keys

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.