Vor einem Server sitzt üblicherweise nicht dauernd ein Admin aus Fleisch und Blut,
wenn ein Neustart fällig ist. Bei verschlüsselten Datenträgern mit Cryptsetup/Luks2
kann der TPM2-Chip unbeaufsichtigt das sichere Entsperren übernehmen.
Bei einem voll verschlüsselten Linux, wie es die Installer der meisten Distributionen anbieten, ist zum Systemboot die Eingabe des festgelegten Passworts nötig. Gleich nach dem Laden des Grub-Bootloaders zeigen diese Systeme ein Feld zur Passworteingabe an und erst nach korrekter Kennworteingabe geht es mit dem Systemstart weiter. Die Verschlüsselung gelingt über Cryptsetup/Luks, eine gut ausgereifte und sichere Methode, eine Systempartition samt Swap zu chiffrieren.
Die Passwortabfrage zum Systemstart ist hin und wieder lästig, unterbricht sie doch einen flotten Neustart bis zur Benutzeranmeldung am Desktop. Vor allem aber ist die zwingend interaktive Passwortabfrage ein Grund, warum sich diese Art der Vollverschlüsselung nicht für Server eignet. Denn zum einen soll ein Server auch mal per SSH aus der Ferne neu gestartet werden, ohne hilfreiche Hand vor Ort. Zum anderen arbeiten viele Linux-Systeme in einer Serverrolle komplett ohne Monitor und ohne angeschlossene Tastatur.
TPM2-Chip: Schlüssel per Hardware
Einen Ansatz mit einem automatisierten Schlüsseldienst zum Entsperren von Luks2-Partitionen bieten Trusted-Platform-Module der Version 2 (im Folgenden kurz „TPM2“), die sich seit 2014 auf vielen Hauptplatinen und in Laptops finden. Es handelt sich um die Weiterentwicklung von TPM der Version 1.2 – ein separater Kryptoprozessor, den Microsoft zur Speicherung von Identitäten, Signaturschlüsseln und Softwarelizenzen auf typischer PC-Hardware entwickelte. Der Nachfolger TPM2 verfeinert das Konzept und kennt moderne Kryptoalgorithmen wie AES-128-Bit sowie Hashing mit SHA-256. Zudem hat das neuere Trusted Platform Module eine ausführlichere Spezifikation erhalten, die eine Nutzung als kryptografischen Speicher auch mit Tools unter Linux ermöglicht. Voraussetzung ist, dass ein System im Uefi-Modus der Firmware installiert wurde.

Damit TPM einen dort gespeicherten Wert ausgeben darf, müssen definierte Voraussetzungen erfüllt sein. Welches Betriebssystem startet? Unter welchen Bedingungen erfolgte der Boot? Nur wenn diese Bedingungen dem Ist-Zustand entsprechen, gibt der TPM2-Chip ein hinterlegtes Geheimnis wieder preis. Diese Informationen sind in einem Platform Configuration Register (PCR) mit den Prüfwerten des gestarteten Betriebssystems, der Hardware und deren Firmware hinterlegt. Die Spezifikation zu TPM2 kennen 18 PCRs und einige davon sind auch für Linux-Systeme verwendbar – mit oder ohne Secure Boot.
Mit den nachinstallierbaren Tools moderner Linux-Systeme nimmt der TPM2-Chip die Schlüssel von Luks2 zum automatischen Entsperren über Scripts in der initialen Ramdisk auf und rückt diese heraus, wenn die gewählten PCRs erfüllt sind. Das so anvisierte Setup unter Linux soll jenem von Bitlocker in Microsoft Windows gleichen: Zwar werden die Datenträger automatisch per TPM2-Schlüssel entsperrt, aber ohne eine Passworteingabe bei der Benutzeranmeldung ist das System nicht nutzbar. Ein Angreifer auf einen Rechner könnte aber nicht einfach ein anderes Livesystem booten und dann auf die verschlüsselten Daten zugreifen. Auch ein Ausbau der Festplatte bringt nichts, denn diese sind nur in dem einen Rechner mit dem präparierten TPM2-Chip entschlüsselbar.
Clevis: Ein Überbau für TPM2
Eine Erweiterung der Scripts in der initialen Ramdisk erlaubt einem Linux-System, per TPM2-Chip die Luks2-Partitionen beim Systemstart selbständig aufzuschließen. Das Projekt Clevis (https://github.com/latchset/clevis) fasst Konfigurationstools und Scripts zum Schreiben und Auslesen des Schlüssels in einem handlichen Paket zusammen. Es nutzt dabei die verfügbaren Programme von verbreiteten Linux-Distributionen, wird schon seit 2016 gepflegt und ist deshalb in den Standard-Paketquellen von Debian, Ubuntu und anderen Linux-Systemen vorhanden. In Debian/Ubuntu ist Clevis mit diesem Kommando zu installieren:
sudo apt install clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools tss2 tpm2-tools
Ob TPM2 vorhanden und in den Firmwareeinstellungen aktiviert ist, zeigt zunächst dieser Terminalbefehl
sudo tpm2_pcrread

Ist der Befehl erfolgreich, so listet er die hinterlegten SHA-Hashwerte der PCRs auf: Der TPM2-Chip ist somit erkannt und einsatzbereit. Clevis kann das Luks2-Passwort für die gewünschte Partition mit den Prüfwerten von ausgewählten PCRs hinterlegen. Dazu zeigt dieses Kommando zunächst an, wie die Kennung der betreffenden Partition lautet:
lsblk
Sind die verschlüsselten Partitionen nach dem Ubuntu-Standard beispielsweise unterhalb von „vda3“ als „vda3_crypt“ angelegt, so verlangt das unten gezeigte Kommando „/dev/vda3“ als Laufwerkskennung. Denn diese Partition enthält den Luks2-Header und gewährt Zugriff auf die enthaltenen Volumes.
Clevis übernimmt mit folgendem Kommando das Passwort in den TPM2-Chip und knüpft dessen Freigabe beim Boot an PCR 0 und PCR 1. Das sind die Prüfwerte für Uefi-Einstellungen, welche auch die Bootreihenfolge beachtet:
sudo clevis luks bind -d /dev/vda3 tpm2 '{"pcr_bank":"sha256",
"pcr_ids":"0,1"}'
Dann muss die initiale Ramdisk neu gebaut werden, was dieser Befehl erledigt:
sudo update-initramfs -u -k all
Mehr ist nicht zu tun, um Luks2-Partitionen automatisch aufzuschließen. Ab dem nächsten Neustart zeigt das Debian/Ubuntu-System beim Booten zwar kurz das Eingabefeld für das Kennwort, aber dann übernehmen die Scripts von Clevis und setzen den Systemstart automatisch mit dem Passwort aus dem TPM2-Chip fort.
Ändern sich später mal die Messwerte der gewählten PCRs 1 und 0 (nach Modifikationen der Uefi-Einstellungen), dann erscheint wieder die manuelle Passwortabfrage. Der Schlüssel im TPM2 verlangt dann eine Aktualisierung. Dazu zeigt Clevis mit diesem Befehl an, welcher Speicherslot im TPM2-Chip mit dem Schlüssel belegt ist – beispielsweise „1“:
sudo clevis luks list -d /dev/vda3
Die Ausgabe zeigt in den geschweiften Klammern auch an, mit welchen PCRs das hinterlegte Kennwort versiegelt ist. Um die Werte im Slot 1 für die Partition „/dev/vda3“ nachzuberechnen, dient dann diese Eingabe, welche noch eine Bestätigung mit „y“ erwartet:
sudo clevis luks regen -d /dev/vda3 -s 1

Wenn der Systembenutzer das Luks2-Passwort der Partition ändert, dann ist ein kompletter Austausch dieser Infos im TPM2 nötig. Folgender Befehl löscht dazu den verwendeten Slot für die angegebene Luks2-Partition:
sudo clevis luks unbind -d /dev/vda3 -s 1 tpm2
Dann kann das Kennwort mit dem eingangs genannten Befehl
sudo clevis luks bind [...]
neu geschrieben werden. Bei der Aufnahme von anderen PCRs als Siegel benötigt dann auch wieder die initiale Ramdisk einen erneuten Aufbau.

