Was ist Heads?

Heads ist ein Open-Source-Projekt, das sich damit beschäftigt, den Bootvorgang möglichst sicher zu gestalten. Es handelt sich um einen Linux-Kernel mit einem Initrd-Archiv, das als coreboot-Payload verwendet werden kann. Auf diese Weise ist es möglich, die integrierten Linux-Programme schon auf BIOS-Ebene zu verwenden. Um die Integrität des Systems sicherzustellen übernimmt Heads die Kontrolle über das Trusted Platform Module des Rechners.


Trusted Platform Module

Ein Trusted Platform Module ist ein Hardware-Bauteil, das einen Rechner um Sicherheitsfunktionen erweitert. Es besitzt einen selbstständigen Krypto-Prozessor, der in der Lage ist Zufallszahlen, RSA-Schlüssel und Hashes zu generieren. Außerdem beinhaltet es einen nichtflüchtigen Speicher, der die Hauptschlüssel des TPMs enthält (Endorsement Key, Storage Root Key) und einen flüchtigen Speicher, in dem generierte Schlüssel und Daten gespeichert werden können, die zuvor mittels PCRs versiegelt wurden.

Platform Configuration Registers (PCRs) sind Hashwerte, vergleichbar mit Prüfsummen, die die Konfiguration des Rechners abbilden. Die PCRs sind dabei hierarchisch verschiedenen Bereichen des Systems zugeordnet, so enthält PCR0 beispielsweise einen Hashwert des BIOS, PCR1 den der BIOS-Konfiguration, PCR2 und PCR3 die Prüfsumme der Option-ROMs, PCR4 und PCR5 die des Master Boot Records, PCR8-15 die Hashwerte der statischen Betriebssystem-Konfiguration und ab PCR23 können auch einzelne Anwendungen des Betriebssystems abgebildet werden. Die PCRs werden bei jedem Systemstart neu berechnet.

Beim Versiegeln (sealing) werden nun sicherheitsrelevante Daten mit dem Hashwert eines oder mehrerer PCRs verschlüsselt und im Speicher abgelegt. Bei nächsten Systemstart soll auf diese Daten wieder zugegriffen werden; dabei wird versucht die Daten mit den neu berechnetet PCRs wieder zu entschlüsseln. Das Entschlüsseln funktioniert hingegen nur, wenn sich die Hashwerte der PCRs nicht verändert haben, wenn sich also die Konfiguration, die dem jeweiligen PCR zugrunde liegt, nicht verändert hat. So kann sichergestellt werden, dass die Daten nur dann vom TPM freigegeben werden, wenn sich die Konfiguration des Systems nicht verändert hat und die Integrität über die Hashwerte festgestellt werden konnte.


Systemstart von Heads

Heads nutzt das TPM um ein so genanntes "Secret" mit mehreren PCRs zu versiegeln, um die Integrität der ersten Komponenten des Systems sicherzustellen. Bei dem Geheimnis kann es sich um eine einfach Textdatei handeln, die bei jedem Systemstart auf dem Bildschirm ausgegeben wird, nur um zu zeigen, dass die Entschlüsselung funktioniert, sprich die PCRs sich nicht geändert haben. Da diese Geheimnis beim Systemstart theoretisch von einer anderen Person gesehen werden könnte, setzt Heads in der Originalversion auf ein TOTP (time based one time password), das außerdem mit dem Secret aus dem TPM verschlüsselt und dann als QR-Code ausgegeben wird. Mit einem Handy, dem diese Secret bekannt sein muss, kann dieser QR-Code gescannt und das TOTP wieder entschlüsselt werden. Als Resultat erhält man einen sechsstelligen Code, der sich bei jedem Systemstart ändert und der auf dem Handy und dem Rechner übereinstimmen muss. Wir verzichten in unserer Version auf TOTP und QR-Codes und verwenden stattdessen ein Geheimnis, das direkt nach der Eingabe des BIOS-Passworts am Bildschirm in Klartext erscheint. Dadurch ist für die Authentifizierung kein externes Gerät nötig.

Die weitere Verifikation erfolgt in Heads über das Kernelmodul dm-crypt (LUKS) und das Programm GPG. Da sich Heads im Flash-Chip auf dem Mainboard befindet, es die Festplatte mittels LUKS entschlüsseln kann und außerdem in der Lage ist, den Kernel des Betriebssystems zu starten, ist es möglich die gesamte Festplatte inklusive /boot-Partition zu verschlüsseln. Somit wird verhindert, dass durch das Ausbauen der Festplatte die für den Bootvorgang relevante Daten auf /boot manipuliert werden können, um beim nächsten Start beispielsweise das Passwort der verschlüsselten Festplatte abzugreifen oder Schadcode auszuführen.

Zusätzlich wird GPG eingesetzt, um mithilfe von Signaturen den Kernel und das Initramfs des Betriebssystems zu verifizieren. In der Originalversion wird dazu ein 2FA-Stick verwendet, der die nötigen GPG-Schlüssel enthält. Bei unserer Version ist stattdessen eine seperate Partition vorgesehen, die ausschließlich im BIOS verfügbar ist und auf die das Betriebssystem im laufenden Betrieb keinen Zugriff hat, da die Partition dem Betriebssystem nur in verschlüsseltem Zustand vorliegt. Das Passwort für die Partition befindet sich im TPM und kann nur von Heads ausgelesen werden. Außerdem sind die GPG-private-keys, die zum Signieren verwendet werden, sowieso standardmäßig nochmal mit einer Passphrase verschlüsselt, die ebenfalls nur im BIOS eingegeben wird und die dem Angreifer bekannt sein müsste.

Nachdem der Kernel und das Initramfs des Betriebssystems über die zuvor generierten Signaturen verifiziert wurden fugiert Heads als Bootloader und startet mittels der kexec-Funktion den Linuxkernel auf der Festplatte, so dass das Betriebssystem startet. Aus diesem Grund sind sowohl GRUB, als auch der Master Boot Record für den Systemstart nicht notwendig. (Wobei Heads die Datei /boot/grub2/grub.cfg ausliest, um die Kernelparameter zu übernehmen)


Ausführliche Dokumentation unseres modifizieren Heads

- wird veröffentlicht, sobald im Online-Shop verfügbar ... (voraussichtlich im Februar 2019)