Ein verschlüsseltes System (Ubuntu 16.04) über SSH starten

09.01.2017 23:09

Das Szenario sieht wie folgt aus: ein System, welches komplett verschlüsselt ist soll gestartet werden, jedoch gibt es keine Möglichkeit auf dieses System physikalisch zuzugreifen, um das Passwort einzugeben.

Ist das System bei einem externen Anbieter gehostet und soll es komplett verschlüsselt werden, so bleibt einem fast keine andere Möglichkeit als so eine Lösung zu verwenden.

Die Inspiration und viele Informationen habe ich mir von folgendem Blogeintrag geholt: How to remotely access the initial ramdisk to boot up an encrypted linux system?

Einige Hintergrundinformationen

Nachdem der Bootloader das System oder den Kernel angestupst hat zum starten, lädt dieser das initramfs. Dies ist ein Basissystem, welches Hilfsmittel enthält um das eigentliche System hochzuziehen. Darin befinden sich auch die Tools, um die verschlüsselten Partitionen zu öffnen und einzubinden.

Die Idee ist es nun, dieses initramfs so anzupassen, dass von aussen über SSH darauf zugegriffen und das Passwort für das Öffnen der Systempartitionen eingegeben werden kann. Dafür wird auch eine Netzwerkverbindung benötigt. In diesem Fall soll über DHCP die Konfiguration dazu geholt werden. Natürlich ist es jenachdem sinnvoll eine statische Netzwerkkonfiguration zu verwenden, falls der DHCP-Server einmal nicht erreichbar ist.

Installation durchführen

Als erster Schritt wird dropbear installiert. Dies ist ein leichtgewichtiger SSH-Server. Unter Ubuntu 16.04 integriert er sich automatisch in das initramfs. Falls schon ein openssh-server auf dem System vorhanden ist, wird dropbear deaktiviert und ist nur während des Bootvorganges aktiv.

dropbear ist über das Softwarerepository verfügbar und kann wie folgt installiert werden:

apt-get install dropbear

Danach soll der öffentliche Schlüssel (mehr Informationen zum Erstellen von SSH-Schlüssel) zu den authorisierten Schlüssel hinzugefügt werden:

cat my-public-key.pub > /etc/initramfs-tools/root/.ssh/authorized_keys

Es sollte nun alles bereit sein, um sich als Root beim hochfahren anzumelden. Nun ist es aber so, dass cryptroot - das Programm, welches das Passwort empfängt und die Partitionen öffnet - schon läuft und auf ein Passwort direkt am betroffenen Rechner wartet. Es müssen noch einige weitere Dinge getan werden, welche durch ein Skript automatisiert werden können. Dieses Skript wird durch einen Hook bei Aktualisieren des initramfs-Abbilds mit in das Abbild eingefügt:

cd /root/
wget https://raw.githubusercontent.com/alvinabad/initrd-utils/master/cryptroot.sh
chmod +x cryptroot.sh
cd /etc/initramfs-tools/hooks/
wget https://raw.githubusercontent.com/alvinabad/initrd-utils/master/my_initrd_hook
chmod +x my_initrd_hook

Nun muss noch das initramfs-Abbild mit update-initramfs -u neu erstellt werden.

Soll nun das Passwort eingegeben werden, kann man sich via SSH auf den betroffenen Rechner einloggen und das tun, indem /root/cryptroot.sh gestartet wird. Danach fährt der Rechner wie gewohnt hoch. Mit CTRL-D kann die Verbindung zu dropbear unterbrochen werden.