Moderne Prozessoren sind leistungsfähig genug, um eine Festplatte oder SSD komplett zu verschlüsseln. Eine verschlüsselte Festplatte macht es einem viel einfacher, sie ordnungsgemäß zu entsorgen. Klassisch habe ich die Festplatte mechanisch zerstört, bevor sie ins Recycling ging. Das ist aufwendig. Auch wenn man nicht paranoid ist, sollten die Datenträger also immer verschlüsselt werden.
Grundlagen
Ubuntu bietet bei der Installation schon die Option die komplette Installation zu verschlüsseln. Das ganze funktioniert stabil und sicher. Für Arch Linux habe ich mir ein Installationsskript geschrieben. Verschlüsselte Datenträger sind also unter Linux sehr einfach eingerichtet.
Gegen die Verschlüsselung der Festplatte spricht nur die Eingabe des Passworts für die Entschlüsselung während des Bootvorgangs. An einem Rechner mit Bildschirm und Tastatur kann das etwas nerven. Bei einem Rechner in einem Rechenzentrum1, eventuell ohne Monitor und Tastatur, ist es allerdings mehr als nervig.
Anforderungen
- Das Entschlüsseln des Systemdatenträgers muss von einem Benutzer freigegeben werden.
- Das Entschlüsseln muss auch über das Netzwerk freigeben werden können.
- Eine Eingabe des Schlüssels an der Konsole muss weiterhin möglich sein.
- Die Lösung muss sicher sein. Das heißt, dass durch die Lösung die Verschlüsselung der Festplatte nicht umgangen werden kann.
- Die Lösung muss auf der Verschlüsselung durch das Betriebssystem aufsetzen (LUKS).
- Ein automatisch autorisierte Entschlüsselung soll möglich sein. (Zum Beispiel, solange ein Freigabeserver erreichbar ist)
Abgrenzungskriterien
- Das Ver- und Entschlüsseln beliebiger (insbesondere Wechsel-)Datenträger ist nicht vorgesehen. Das wird mit den üblichen Funktionen des Betriebssystems (CLI oder GUI) bearbeitet.
Recherche
Der Standardansatz ist:
- Packe einen SSH-Server ins initramfs.
- Beim Booten wird dieser SSH-Server gestartet.
- Der Administrator verbindet sich mit dem SSH-Server im initramfs und gibt die Passphrase zur Entschlüsselung ein.
- Das System wird vom entschlüsselten Datenträger gestartet.
Quellen die ich dazu gefunden habe sind:
- Keywan Tonekaboni: Aufsperren aus der Ferne. c’t 17/2021, S. 162 ff.
- Initial Ubuntu Server 22.04.2 LTS Install - LUKS - headless/remote decrypt (abgerufen am 2024-03-28)
- LUKS Verschlüsseltes Ubuntu 20.04 remote über SSH entschlüsseln (abgerufen am 2024-03-28)
- How to unlock LUKS using Dropbear SSH keys remotely in Linux (abgerufen am 2024-03-28)
- Remotely unlock a LUKS-encrypted Linux server using Dropbear (abgerufen am 2024-03-28)
- Decrypt LUKS partition remotely via SSH (abgerufen am 2024-03-28)
- Unattended/headless Ubuntu server with disk encryption - how to set it up? (abgerufen am 2024-03-28)
Bemerkenswert und merkwürdig finde ich, dass ich keine Vorgehensweise in der Server-Dokumentation von Canonical (abgerufen am 2024-03-28) gefunden habe.
Etwas versteckter ist Mandos zu finden. Es ist in Ubuntu seit 2009 und in Debian seit 2011 zu finden. Merkwürdig ist allerdings, dass kaum Sekundärquellen oder Howtos zu finden sind. Ich habe nur Booting an unattended / headless full disk encrypted server – Ubuntu server 16.04 setup (abgerufen am 2024-03-28) gefunden.
Mandos scheint meine Anforderungen gut abzudecken. Etwas irritiert mich der Verweis auf Systemd in der Mandos Einführung (abgerufen am 2024-03-28). Stark irritieren mich die Verweise auf “The Man”. Prinzipiell gilt das aber auch für normale Diebe.
Noch länger habe ich gebraucht um Network-based Disk Encryption (NBDE) (abgerufen am 2024-03-29) zu finden. Es kommt von Redhat. Hierfür gibt es aber einiges an Information, wenn man danach sucht:
- New Cryptography for Binding Data to Third Parties [Nathaniel McCallum], Vortrag auf DevConf.cz 2016 (abgerufen am 2024-03-29) - sehr gute Einführung in Clevis und Tang
- LISA16 - Network-Based LUKS Volume Decryption with Tang, Vortrag auf Usenix LISA16 (abgerufen 2024-03-29) - ziemlich langweilig vorgetragen
- Wie installiert man ein verschlüsseltes Ubuntu 20.04 mit automatisierter Entsperrung via tang und clevis (abgerufen am 2024-03-29) - schöne, deutsche Anleitung von meinem Lieblings-Hoster;)
- Chapter 11. Configuring automated unlocking of encrypted volumes by using policy-based decryption in der Redhat Enterprise Dokumentation (abgerufen am 2024-03-29)
- Clevis in Arch Linux Wiki (abgerufen 2024-03-29)
- 1000 Server verschlüsselt booten, Vortrag auf den Chemnitzer Linux-Tage 2023 (abgerufen am 2024-03-29)
Testaufbauten
Vor der weiteren Untersuchung der Lösungen, ist es sinnvoll sich erst einmal einen Eindruck von den Lösungen zu verschaffen und Erfahrungen damit zu sammeln. Schön wäre es den Testaufbau mit Vagrant einzurichten, aber ich habe auf die Schnelle keine Lösung für das Einrichten eines verschlüsselten Diskimages gefunden. Per Hand mit VirtualBox geht es aber auch recht flott…
Der Testablauf besteht aus den Schritten:
- Freigabe-Server einrichten
- Client mit Ubuntu-Server 22.04 und Freigabe-Client einrichten, Reboot
- Client mit Ubuntu-Server 20.04 und Freigabe-Client einrichten, Reboot
- System auf 22.04 upgraden (ohne explizit updateramfs aufzurufen), Reboot
- Eventuell updateramfs aufrufen
- Client mit Debian 12 und Freigabe-Client einrichten, Reboot
Mandos
Der Test mit Mandos besteht aus den folgenden Schritten:
- Auf dem Freigabe-Server Mandos mit
sudo apt install mandos
installieren. Das gibt zwar eine Meldung, dass keine Client-Konfiguration existiert. Das werden wir aber noch nachholen. - Auf dem Freigabe-Client den Mandos-Client mit
sudo apt install mandos-client
installieren. - Auf dem Freigabe-Client
sudo mandos-keygen --password --type RSA --force > client.txt
aufrufen. - Die Datei
client.txt
mitscp client.txt <user>@<mandos-server>:~
auf den Mandos-Server kopieren. - Auf dem Mandos-Server als root
client.txt
mitcat client.txt >>/etc/mandos/clients.conf
an die Konfigurationsdatei anhängen. - Den Mandos-Service mit
sudo systemctl restart mandos
neu starten. - Den Mandos-Client rebooten.
Hat man 2. bis 7. für jeden Client-Rechner ausgeführt, sollten alle Clients ohne die Eingabe der Freigabe-Passphrase booten. Alternativ kann man auch die Passphrase direkt in der Konsole eingeben, wenn zum Beispiel der Mandos-Server nicht läuft.
Der Test hat mit Ubuntu-Server 22.04 (Jammy Jellyfish) und Debian 12 (Bookwork) einwandfrei funktioniert. Mit Ubuntu-Server 20.04 (Focal Fossa) hat es nicht funktioniert. Es fehlt setsid
im initramfs
. Der Fehler ist bekannt. Ich habe keine weiteren Reparaturversuche unternommen. Focal Fossa ist mir zu alt. Dummerweise habe ich den Mandos-Client auch nach einem do-release-upgrade
nicht zum Laufen bekommen.
NBDE
Der Test mit NBDE besteht aus den folgenden Schritten:
- Auf dem Freigabe-Server Tang mit
sudo apt install tang jose
installieren und den Dienst mitsudo systemctl enable tangd.socket
undsudo systemctl start tangd.socket
starten. - Auf dem Freigabe-Client den Mandos-Client mit
sudo apt install clevis clevis-luks clevis-initramfs
installieren. - Den Tang-Server als Freigabequelle mit
sudo clevis luks bind tang -d /dev/<partition> '{"url":"http://<ip address>"}'
hinzufügen. Dabei sollte man die Signatur des Servers überprüfen und danach bestätigen. - Den Mandos-Client rebooten.
Hat man 2. bis 4. für jeden Client-Rechner ausgeführt, sollten alle Clients ohne die Eingabe der Freigabe-Passphrase booten. Alternativ kann man auch die Passphrase direkt in der Konsole eingeben, wenn zum Beispiel der Tang-Server nicht läuft.
Der Test hat mit Ubuntu-Server 22.04 (Jammy Jellyfish) und Debian 12 (Bookwork) einwandfrei funktioniert. Mit Ubuntu-Server 20.04 (Focal Fossa) hat es ebenfalls funktioniert. Auch nach einem do-release-upgrade
auf Jammy Jellyfish läuft das System weiter.
Fazit
Mandos funktioniert mit den aktuellen Versionen von Debian und Ubuntu gut. Das Scheitern mit Focal Fossa löst allerdings Zweifel aus.
NBDE ist einfach aufzusetzen und wirkt sehr stabil. Es funktioniert wie erwartet. Ein großer Vorteil ist, dass Redhat hinter dem System steht. Der Nachteil ist, dass keine Möglichkeit vorgesehen ist, einen Freigabe-Client (temporär) auszuschließen. Bringt ein Angreifer eine Maschine unter seine Kontrolle, modifiziert das initramfs und startet die Maschine in Netzwerk neu, so wird der Datenträger entschlüsselt. Hier punktet Mandos mit seiner Überwachung der Freigabe-Clients und der Möglichkeit einzelne Freigabe-Clients (temporär) zu sperren.
-
Ist etwas Angeberei. Eigentlich ist nur ein Schrank mit dem Server gemeint. ↩︎