LUKS Partition mit USB-Stick entschlüsseln

So schön ein verschlüsseltes System auch sein mag, eines stört immer: Die Passworteingabe beim Systemstart. Abhilfe schafft da ein USB-Stick. Ist er angesteckt, startet das System ohne Passwort Eingabe, was gerade beim Einsatz auf einem Server die wohl beste Lösung ist.
Diese Anleitung hebt sich dabei von anderen Anleitung insofern ab, als dass der Key nicht einfach auf dem Stick hinterlegt ist, sondern vor die erste Partition eingefügt wird. Auf den ersten Blick (und auch Zweiten) ist er für mögliche Angreifer nicht ersichtlich.

 

Hinweis: Diese Anleitung ist an den Artikel von Ubuntuusers angelehnt. Allerdings funktioniert das keyscript mit dem neuen systemd nicht mehr. Außerdem gibt es mittlerweile einen deutlich einfacheren Weg, das Problem zu lösen. Ich verwende Debian 9 (Stretch). Die Anleitung sollte damit auch für sämtliche Derivate (wie z.B. Ubuntu) funktionieren.

Benötigte Pakete für diese Anleitung installieren:

sudo apt-get install crypsteup dosfstools

 

Schritt 1: Partition mit LUKS formatieren

In meinem Fall liegt die betreffende Partition auf /dev/sdb1. Ich bitte euch, das dementsprechend anzupassen. Warnung: Hierbei gehen alle Daten auf der Partition verloren!


cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sdb1

Beim Ausführen des Befehls wird ein Passwort abgefragt, mit welchem eure Festplatte verschlüsslt wird. Bitte verwendet ein sicheres Passwort mit min. 12 Zeichen, am besten aus einem Zufallsgenerator.

Hinweis:
Auf LVM verzichte ich an dieser Stelle. Warum? Da ich BtrFS als Dateisystem verwende, benötige ich keine „virtuellen Partitionen“, sondern verwende die BtrFS Subvolume Funktion.

Schritt 2: Vorbereiten des USB-Sticks

In meinem Fall ist der betreffende USB-Stick /dev/sdd1. Warnung: Hierbei gehen alle Daten auf dm Datenträger verloren!

Partitionen löschen:


sudo fdisk /dev/sdd

Folgende Buchstaben jeweils einzeln eingeben und damit die entsprechenden Befehle ausführen:

  • Alte Partition löschen: d
  • Partitionstabelle neu erstellen: o
  • Neue Partition anlegen (Beginn soltte Sektor 2048 sein): n
  • Speichern und beenden: w

Dateisystem erzeugen (FAT32):


sudo mkfs.vfat -F 32 /dev/sdd1

Schlüssel anlegen:

Führen wir nun

sudo fdisk -l /dev/sdd

aus, so sollten wir solch eine ähnliche Ausgabe erhalten:

Disk /dev/sdd: 7,5 GiB, 8004304896 bytes, 15633408 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x948c2765


Device    Boot    Start         End     Sectors    Size    Id    Type
/dev/sdd1          2048    15633407    15631360    7,5G    83    Linux

Wir haben also bis Sektor 2048 Platz, bis die erste Partition beginnt. Das ist mehr als ausreichend für unseren Key, den wir wie folgt, mit Zufallszahlen erzeugen:

sudo dd if=/dev/urandom of=/dev/sdd bs=512 seek=1 count=2046

Wir füllen den kompletten Bereich mit Zufallszahlen auf. Der Vorteil: Der Key wir in den Zahlen versteckt. Das Stellt damit eine weitere Hürde für Angreifer dar.

Schritt 3: Schlüssel zur verschlüsselten Partition hinzufügen

Wir erstellen nun den Key aus den ersten 8 Sektoren des USB-Sticks. Dies entspricht einem 4096 Bit langen Key.

sudo dd if=/dev/sdd bs=512 skip=1 count=8 > tempKeyFile.bin

Nun füttern wir LUKS mit dem neuen Key. LUKS wird nach dem in Schritt 1 erstellten Passwort fragen.

sudo cryptsetup luksAddKey /dev/sdb1 tempKeyFile.bin

Anschließend entfernen wir noch den Schlüssel vom System:

sudo rm -f tempKeyFile.bin

Schritt 4: Dafür sorgen, dass der USB-Stick beim Systemstart zum Entschlüsseln verwendet wird

Nötige ID’s und UUID’s ermitteln

Zuerst benötigen wir die ID des USB-Sticks, damit er beim Systemstart zum entschlüsseln verwendet wird. Durch folgenden Befehl, erhalten wir die ID’s aller Laufwerke.
Ich verwende einen USB-Stick von SanDisk, den man dementsprechend sofort am Namen erkennt.

ls /dev/disk/by-id/

Ich verwende einen USB-Stick von SanDisk, den man dementsprechend sofort am Namen erkennt:

daniel@Test-Server:~$ ls /dev/disk/by-id/
usb-SanDisk_Cruzer_Blade_4C5320000XXXXXX16473-0:0
usb-SanDisk_Cruzer_Blade_4C5320000XXXXXX16473-0:0-part1

Wichtig: die ID des USB-Sticks, nicht der Partition (zu erkennen an „-partX“) verwenden!

Nun ermitteln wir noch die UUID der LUKS Partition:

daniel@Test-Server:~$ sudo blkid
/dev/sdb1: UUID="069e3cd6-XXXX-XXXX-XXXX-eff7b2ca072d" TYPE="crypto_LUKS" PARTUUID="9fc994f0-01"
/dev/sdd1: UUID="730C-XXXX" TYPE="vfat" PARTUUID="948c2765-01"

Man erkennt sie am Namen „crypto_LUKS“.

Anpassen von /etc/crypttab:

/etc/crypttab editiern:

sudo nano /etc/crypttab

Dort fügen wir folgenden Eintrag ein:

# <target name>    <source device>    <key file>    <options>
NAME UUID=EURE-UUID-OHNE-ANFÜHRUNGSZEICHEN /dev/disk/by-id/ID-EURES-USB-STICKS luks,tries=3,keyfile-size=4096,keyfile-offset=512

Initramfs neu erzeugen (Warum auch immer, es hilft!)


sudo update-initramfs -u -k all

Hinweis: Das kann euer System un-boot-bar machen. Also vorher von /boot ein Bachup machen!

Schritt 5: Neustart

Jetzt startet ihr euer System neu. Wenn alles gut geht, ohne Probleme 🙂
Ihr findet die entschlüsselte Festplatte nach einem Neustart unter /dev/mapper/NAME.

Abschließende Worte:

Der Nächste Schritt ist die Erstellung eines Dateisystems, was ich in einem späteren Artikel einmal behandle.
Bis dahin, gehabt euch gut !

Noch ein Hinweis in eigener Sache: Ich übernehme keinerlei Haftung, für die Richtigkeit dieses Artikels. Die Durchführung der Schritte erfolgt auf eigene Gefahr!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.