Workshop: Open Source-Tipp

Reisesicherheit für Daten

Kommt ein Notebook auf der Dienstreise abhanden, so liegen die Daten auf dem Gerät hoffentlich nicht im Klartext, sondern verschlüsselt vor. Unser Open Source-Tipp zeigt auf, wie eine solche Verschlüsselung mit Bordmitteln gelingt.
Mit dem Heftschwerpunkt 'IT-Support & Troubleshooting' startet IT-Administrator ins neue Jahr. Dabei zeigen wir Ihnen, auf welchem Weg Sie Ihr eigenes ... (mehr)

Im Linux-Umfeld hat sich für den Schutz von Festplatten das Krypto-Modul dm-crypt durchgesetzt. Es basiert auf dem Device-Mapper-Subsystem des Linux-Kernels und kommt üblicherweise zusammen mit der Erweiterung LUKS (Linux Unified Key Setup) zum Einsatz. LUKS spendiert dm-crypt eine Schlüsselerweiterung und schreibt Informationen über die Art der Verschlüsselung in einen Header des verschlüsselten Gerätes.

Mit LUKS verschlüsseln

Diese Daten lassen sich dann von dort auslesen. Beim alleinigen Einsatz von dm-crypt wären diese Informationen bei jedem Einhängen des Gerätes immer wieder aufs Neue anzugeben. Beispielsweise ist hier der Schlüssel, der zur Entschlüsselung eines Gerätes benötigt wird, mittels dmsetup in eine Device-Mapper-Tabelle des Kernels zu schreiben. Beim Einsatz von LUKS wird der Schlüssel entweder interaktiv abgefragt oder von einer externen Quelle eingelesen, beispielsweise von einem USB-Stick. Genau genommen handelt es sich bei den Schlüsseln um unterschiedliche Passphrases, die dazu dienen, einen einzelnen Master-Schlüssel freizuschalten. Die LUKS-Erweiterung bietet acht Slots zum Speichern dieser Passphrases an. Somit besteht etwa die Möglichkeit, einen globalen Recovery-Schlüssel zu erzeugen, mit dem sich ein Gerät auch dann noch entschlüsseln lässt, wenn ein Schlüssel aus einem anderen Slot verloren gegangen ist.

Da der LUKS-Header natürlich im Klartext vorliegen muss, bietet dieser jedoch auch eine potenzielle Angriffsfläche, da der Header die eingesetzten Algorithmen und auch den verschlüsselten Master-Schlüssel enthält. Wie beim Einsatz von Security-relevanten Produkten üblich, muss hier jeder für sich selbst zwischen dem Komfort und der benötigten Sicherheit abwägen. Um den Master-Schlüssel vor Brute Force-Angriffen zu schützen, kommt die Password-Based Key Derivation Function 2 (PBKDF2) zum Einsatz. Diese Funktion leitet aus einer Passphrase den eigentlichen Master-Schlüssel ab.

LUKS in der Praxis

Die meisten Linux-Distributionen bieten mittlerweile eine Verschlüsselung der einzelnen Festplatten-Partitionen als Teil der Systeminstallation an. Das folgende Beispiel zeigt, wie dies manuell funktioniert. Diese Vorgehensweise bietet sich vor allem dann an, wenn es um die Verschlüsselung von Wechselmedien geht, also beispielsweise externen Festplatten oder USB-Sticks.

Das Device-Mapper Target dm-crypt ist Teil des Linux-Kernels und steht somit automatisch zur Verfügung. Um nun auch auf die LUKS-Erweiterung zurückgreifen zu können, benötigen Sie zusätzlich das Paket cryptsetup, das Sie aus dem Software-Repository Ihrer Distribution beziehen.

Im Anschluss sollten Sie das zu verschlüsselnde Gerät mit zufälligen Daten beschreiben. Das erhöht die Güte der Verschlüsselung, da somit keine unverschlüsselten Daten mehr vorliegen und es auch nicht mehr möglich ist, herauszubekommen, wie viel Platz auf dem Gerät tatsächlich beansprucht wird und wie viel Platz noch frei ist. Grundsätzlich gibt es mehrere Möglichkeiten für diesen Vorgang, die sich in der benötigten Zeit und der Güte der zufälligen Daten, die auf das Gerät geschrieben werden, unterscheiden. Das erste Beispiel erzeugt sehr gute zufällige Daten, braucht dafür aber sehr lange – was natürlich auch von der Größe des zu verschlüsselnden Gerätes abhängt. Das zweite Beispiel greift auf das Tool badblocks zurück, das sehr schnell arbeitet, dafür aber weniger gute zufällige Daten liefert:

dd if=/dev/urandom of=Gerät
badblocks -c 10240 -s -w -t random -v Gerät

Im nächsten Schritt formatieren Sie das Gerät (in diesem Beispiel die Partition "/dev/sdb1"), wobei auch der LUKS-Header geschrieben wird:

cryptsetup --verbose -c aes-cbc-essiv:sha256 --verify-passphrase luksFormat /dev/sdb1

Wie Sie sehen, können Sie mittels der Option"-c" die gewünschten Crypto-Algorithmen selbst bestimmen. In diesem Beispiel kommt zur Verschlüsselung der AES-Algorithmus zum Einsatz. Hierbei handelt es sich um eine Blockchiffre. Diese unterstützt unterschiedliche Modi zur Verschlüsselung von Daten, von denen dm-crypt auf die folgenden Varianten zurückgreifen kann: ECB (Electronic Code Book) und CBC (Cipher Block Chaining).

Cipher Block Chaining bietet eine höhere Güte der Verschlüsselung, weshalb es in diesem Beispiel zum Einsatz kommt. Die Methode ESSIV bestimmt einen Initialisierungs-Vektor für Blockchiffre und mittels sha256 bestimmen Sie schließlich einen Passwort-Hash-Algorithmus, den PBKDF2 verwendet. Die hier genutzten Crypto-Algorithmen stellen jedoch die Default-Werte dar, sodass Sie diese nicht bei jedem Formatieren eines Gerätes immer wieder erneut angeben müssen.

Rufen Sie "cryptsetup" wie im obigen Beispiel auf, so werden Sie schließlich nach einer Passphrase gefragt. Hierbei handelt es sich um einen von acht möglichen Benutzer-Schlüsseln. Mittels der Option "--key-slot" können Sie bestimmen, in welchem Slot (0-7) dieser Schlüssel gespeichert werden soll. Über

cryptsetup luksAddKey Gerät

können Sie später weitere Schlüssel hinzufügen. Anstatt den Schlüssel interaktiv einzugeben, können Sie diesen natürlich auch aus einer Datei einlesen lassen. Geben Sie hierfür dann einfach den Namen der Datei beim Aufruf von cryptsetup an:

cryptsetup --verbose -c aes-cbc-essiv:sha256 --verify-passphrase luksFormat /dev/sdb1 /root/keyfile

Stellen Sie im Anschluss sicher, dass Sie die Schlüssel-Datei wieder sicher löschen – beispielsweise mit dem Tool "shred". Sollten Sie einen schwachen Schlüssel verwenden, weigert sich "cryptsetup", ihn anzunehmen. Mit der Option "--force-password" können Sie dessen Einsatz jedoch erzwingen. Den LUKS-Header können Sie sich nun bereits anzeigen lassen (Listing "LUKS-Header").

Um nun Daten auf der Partition ablegen zu können, muss zuerst ein Mapping für ein virtuelles Block-Gerät erfolgen. Das erforderliche Kommando fragt einen zuvor eingerichteten Benutzer-Schlüssel ab und erzeugt im Anschluss eine neue Geräte-Datei im Verzeichnis »/dev/mapper/« . Wie diese Datei heißen sollen, bestimmen Sie selbst. Überlicherweise kommt ein Name bestehend aus dem Suffix "luks" und der UUID des Gerätes (diese steht im LUKS-Header) zum Einsatz:

cryptsetup luksOpen /dev/sdb1 luks-b8cdc8d9-c03f-4444-b3dc-b27e50880272

Der Aufruf von

ls -l /dev/mapper/luks-b8cdc8d9-c03f-4444-b3dc-b27e50880272

sollte bestätigen, dass die Geräte-Datei angelegt wurde. Jetzt können Sie die Partition wie gewohnt mit einem Dateisystem versehen und anschließend einhängen:

mkfs.ext4 /dev/mapper/luks-b8cdc8d9-c03f-4444-b3dc-b27e50880272
mount /dev/mapper/luks-b8cdc8d9-c03f-4444-b3dc-b27e50880272 /mnt/crypto-stick/

Über den Einhängepunkt "/mnt/crypto-stick/" greifen Sie nun wie gewohnt auf die verschlüsselte Partition zu. Denken Sie dabei daran, dass ein Zugriff auf die Daten auch dann noch möglich ist, wenn Sie die Partition wieder aushängen. Erst durch das Entfernen des Geräte-Mappings sind Ihre Daten geschützt, da für einen erneuten Zugriff das Gerät erst wieder geöffnet werden muss, was wiederum die Eingabe eines Benutzer-Schlüssels erfordert. Das Mapping entfernen Sie einfach durch das Schließen des virtuellen Block-Gerätes:

cryptsetup luksClose /dev/mapper/luks-b8cdc8d9-c03f-4444-b3dc-b27e50880272

Natürlich können Sie durch einen Eintrag in der Datei »/etc/fstab« dafür sorgen, dass eine verschlüsselte Partition automatisch eingehängt wird. Hierfür ist es jedoch notwendig, dass Sie das Mapping zwischen virtuellem Block-Gerät und der LUKS-Partition zuvor in der Datei »/etc/crypttab« definieren:

/etc/crypttab:
luks-b8cdc8d9-c03f-4444-b3dc-b27e50880272 UUID=b8cdc8d9-c03f-4444-b3dc-b27e50880272
none

Die erste Zeile enthält den Namen des virtuellen Block-Geräts, die zweite gibt die LUKS-Partition an und die dritte kann den Benutzerschlüssel enthalten. Steht hier "none", so wird dieser interaktiv beim Bootvorgang abgefragt. Sie können an dieser Stelle jedoch auch einen absoluten Pfad zu einer Datei angeben, in der ein Benutzer-Schlüssel gespeichert ist. In diesem Fall würde die Partition automatisch entschlüsselt werden können. Beispielsweise bei einem USB-Stick, auf dem das Keyfile gespeichert wurde.

(jp)

 

Listing: LUKS-Header



### Der LUKS-Header enthält sämtliche Crypto-Informationen sowie die einzelnen Key-Slots.
# cryptsetup luksDump /dev/sdb1
LUKS header information for /dev/sdb1
Version: 1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Hash spec: sha1
Payload offset: 4096
MK bits: 256
MK digest: 6d 7d 41 47 f8 5e 31 26 fd 50 3d 26 79 fc 8b fb 59 a6 06 82
MK salt: 83 49 ec 44 d2 bf 46 b4 2f 67 cc 74 5b 1c 97 9e
                96 8a 1c 2d 23 02 a8 5c 78 a2 6f b8 ca 6c 90 ab
MK iterations: 55250
UUID: b8cdc8d9-c03f-4444-b3dc-b27e50880272
Key Slot 0: ENABLED
               Iterations: 222608
              Salt: 04 10 5e 18 1b 42 d1 e6 00 e6 c4 9a f1 7a c7 29
                      78 ee ee 67 26 d6 f6 06 85 93 0f c3 64 b3 fc 55
              Key material offset: 8
              AF stripes: 4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Ähnliche Artikel

comments powered by Disqus
Mehr zum Thema

Verschlüsselung von Block-Devices

Verschlüsselung ist nach wie vor das wirksamste Mittel gegen fremde Blicke auf eigene Daten. Um den kompletten Datenträger kryptografisch zu schützen, gibt es mit Linux einige Möglichkeiten.
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023