Verschlüsselung von Block-Devices

alexmit, 123RF

In den Safe

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.
Sicher verstaut - Deduplizierung spart Platz, Cloud-Backup für Windows, Areca sichert kostenlos. ADMIN 01/14 stellt Backups für Profis mit und ohne Cloud ... (mehr)

Für die Verschlüsselung von Daten gibt es prinzipiell zwei Möglichkeiten: Hardware-basiert oder rein in Software. Beide Lösungen lassen sich auch kombinieren, aber das wäre wohl zuviel des Guten – angesichts des aktuellen Zeitgeists vielleicht aber auch nicht.

Hardware-basierte Verschlüsselung erfordert spezielle Hardware, etwa eine Self Encrypting Disk (SED). Die Idee dahinter ist einfach: Der Hersteller nimmt ein normales Laufwerk, versieht es mit einem Crypto-Prozessor sowie Authentifizierungsmechanismen in der Firmware, und fertig ist das SED.

Das bringt dem Anwender einige Vorteile: So ist die Verschlüsselung immer eingeschaltet, es werden also stets nur verschlüsselte Daten gespeichert. Die Authentifizierung ist unabhängig vom Betriebssystem. Man muss sich nicht um die Verwaltung der Schlüssel kümmern, die gleichzeitig nie die Hardware verlassen. Schließlich ist auch die Performance sehr gut, da die Verschlüsselung und Entschlüsselung in Hardware ablaufen. Typischerweise wird für solche Lösungen AES (Advanced Encryption Standard) mit 128 oder 256 Bit verwendet, von dem zumindest Letzteres ziemlich guten Schutz bietet.

Im praktischen Einsatz sind SEDs oft ein bisschen umständlich, weil man sich zum Beispiel erst authentifizieren muss, bevor das Betriebssystem von der Platte booten kann. Wenn man also in einem Netzwerk auf Servern SEDs einsetzt, können Reboots ziemlich umständlich werden. Auch SED-Lösungen sind nicht völlig immun gegen Angriffe, die meisten erfordern aber physischen Zugriff auf die Hardware.

Dateien verschlüsselt

Bei Software-Ansätzen gibt es drei Optionen, Daten zu verschlüsseln: einzelne Dateien, Verzeichnisse und Dateisysteme oder komplette physische Datenträger. Dateiverschlüsselung ist ziemlich einfach und mit diversen Tools zu bewerkstelligen, etwa Bcrypt, Ncrypt und 7-Zip, die Dateien komprimieren und auf Wunsch mit AES-256 verschlüsseln. Das am weitesten verbreitete Tool ist vermutlich GnuPG, das Teil jeder Linux-Distribution ist.

Verzeichnisse beziehungsweise Dateisysteme werden meist über sogenannte Stacked Filesystems verschlüsselt. Ansätze wie EncFS und eCryptFS implementieren einen zusätzlichen Layer über die eigentlich verschüsselten Daten, der dem Anwender eine unverschlüsselte Sicht der Dinge bietet.

Verschlüsselung auf Datei- oder Dateisystemebene bietet die größte Flexibilität, aber eine Festplatte komplett zu verschlüsseln, besitzt ebenso Vorteile. Die dabei eingesetzte Block-Verschlüsselung macht aus den Daten eine einzige verschlüsselte Einheit. Ist die Verschlüsselung aktiviert, verwendet man das Block-Device wie üblich und legt etwa ein Dateisystem darauf an. Damit ist das Dateisystem automatisch auch verschlüsselt.

Der große Vorteil dieses Ansatzes liegt darin, dass die Verschlüsselung alle Daten auf dem Device betrifft. Als Administrator muss man sie also nur einmal konfigurieren, damit sie allen Benutzern zugutekommt. Block-Verschlüsselung bedeutet, dass nicht nur der Datei-Inhalt verschlüsselt wird, sondern auch Datei- und Verzeichnisnamen, freier Speicherplatz und Metadaten.

Im weiteren Verlauf dieses Artikels geht es darum, mit Linux-Tools Block-Verschlüsselung für Devices zu implementieren. Wer das mit den eigenen Daten nachvollziehen möchte, sollte aber daran denken: Wer seinen Schlüssel oder die Passphrase vergisst, kann Abschied von allen auf der verschlüsselten Platte gespeicherten Daten nehmen!

DMCrypt

Der Device-Mapper ist eine der wichtigsten Schaltstellen im Linux-Kernel, der es zum Beispiel ermöglicht, ein Block-Device auf ein anderes abzubilden. DMCrypt [1] ist Teil dieses Frameworks und verwendet die kryptografischen Funktionen der Crypto-API im Linux-Kernel [2]. Es ist ein sogenanntes Device-Target, das sich auf andere Transformationen des Device-Mappers packen lässt. Dank der Flexibilität des Device-Mappers ist es möglich, DMCrypt sozusagen unterhalb wie auch oberhalb von LVM-Devices zu nutzen. Damit können komplette Disks, einzelne Partitionen, aber auch Software-RAIDs mit dieser Technologie verschlüsselt werden.

Administratoren können das Tool »dmsetup« verwenden, um das gewünschte Device-Mapping einzurichten. Ein Beispiel dafür ist auf der Konfigurationsseite der DMCrypt-Homepage zu sehen. Allerdings ist der Einsatz des Tools relativ komplex und erfordert einiges an Wissen zum Device-Mapper. Als Alternative verwenden deshalb viele Administratoren das Programm »cryptsetup« , das DMCrypt zusammen mit LUKS (Linux Unified Key Setup) verwendet. LUKS [3] ist der Standard für die Festplattenverschlüsselung unter Linux und bietet ein Standardformat dafür, das das Schlüssel-Management erheblich vereinfacht: Alle nötigen Informationen stecken im Partitions-Header.

Zum Test haben wir eine Intel X25-E SLC SSD (64 GByte) mit einer einzigen Partition versehen, die »/dev/sdb1« heißt. Die Konfiguration findet mit »cryptsetup« statt. Der erste Schritt konfiguriert die LUKS-Partition (Listing 1). Dieser Befehl initialisiert die Volumes und liest die Passphrase ein. Man sollte sich dazu etwas Gutes ausdenken, was man gleichzeitig im Kopf behalten kann, aber für Angreifer schwer zu erraten ist, also am besten keine bekannten Zitate oder Ähnliches.

Listing 1

LUKS-Partition konfigurieren

[root@test8 ~]# cryptsetup -y -v luksFormat /dev/sdb1
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

Der nächste Schritt besteht darin, das Mapping für das Volume einzurichten und sich mit dem Device-Mapper vertraut zu machen (Listing 2). Für das Mapping muss man bereits die Passphrase eingeben. Im Beispiel heißt der Mapper »data« , aber es ist natürlich auch jeder andere Name möglich. Der zweite Befehl zeigt das Mapping, das im Beispiel »dm-0« heißt. Der dritte Aufruf gibt den Status des gemappten Volumes aus, einschließlich des Volumes, des Verschlüsselungsalgorithmus, der Schlüssellänge, der Anzahl Sektoren und des Mode. Auf Wunsch gibt der Befehl »cryptsetup« einen kompletten Dump des LUKS-Header aus (Listing 3).

Listing 2

Volume-Mapping

[root@test8 ~]# cryptsetup luksOpen /dev/sdb1 data
Enter passphrase for /dev/sdb1:
[root@test8 ~]# ls -l /dev/mapper/data
lrwxrwxrwx. 1 root root 7 Sep 28 13:17 /dev/mapper/data -> ../dm-0
[root@test8 ~]# cryptsetup -v status data
/dev/mapper/data is active.
  type:  LUKS1
  cipher:  aes-cbc-essiv:sha256
  keysize: 256 bits
  device:  /dev/sdb1
  offset:  4096 sectors
  size:    125029736 sectors
  mode:    read/write
Command successful.

Listing 3

Dump des LUKS-Header

[root@test8 ~]# 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:      40 18 71 8f 97 00 9b 83 4f 9b 32 79 31 8d da 74 c8 35 53 f5
MK salt:        84 12 5d dc b8 02 73 fd f3 e0 65 bf 17 ba 40 cb
                92 2d e6 7a 50 6f 97 07 33 12 76 92 53 a7 a1 a2
MK iterations:  35750
UUID:           648accb3-19ce-4da7-8fc6-43ed1dd4a908
Key Slot 0: ENABLED
        Iterations:             143012
        Salt:                   4a 03 0c dd 17 b9 2c fd 3d 39 1e d9 1b 3f c5 33
                                c7 07 95 bc 46 d9 76 c9 a6 ed a6 fd 19 a1 63 ad
        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

Jetzt ist im Prinzip fast alles vorbereitet, um das Dateisystem anzulegen, aber erst wird noch das Volume initialisiert, indem man es mit Nullen füllt (Listing 4). Weil wegen der Verschlüsselung alle Daten transformiert werden, landen im Endeffekt zufällige Werte auf der Festplatte. Jetzt legt ein Befehl wie in Listing 5 das Dateisystem an.

Listing 4

Volume initialisieren

[root@test8 ~]# dd if=/dev/zero of=/dev/mapper/data
dd: writing to `/dev/mapper/data': No space left on device
125029737+0 records in
125029736+0 records out
64015224832 bytes (64 GB) copied, 2761.06 s, 23.2 MB/s

Listing 5

Dateisystem anlegen

[root@test8 ~]# mkfs.ext4 /dev/mapper/data
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3907584 inodes, 15628717 blocks
781435 blocks (5.00%) reserved for the super user
....

Nach dem Mounten (Listing 6) können Anwender das Dateisystem wie gewohnt verwenden. Alle Dateien werden automatisch verschlüsselt. Beim Aushängen des Filesystems gibt es allerdings einen zusätzlichen Schritt:

Listing 6

Mounten des Dateisystems

[root@test8 ~]# mkdir /data
[root@test8 ~]# mount /dev/mapper/data /data
[root@test8 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              97G  4.8G   87G   6% /
tmpfs                 3.6G  512K  3.6G   1% /dev/shm
/dev/sda1             485M   30M  430M   7% /boot
/dev/sda5             355G   24G  313G   7% /home
/dev/mapper/data       59G  180M   56G   1% /data
# umount /data
# cryptsetup luksClose data

Ohne den letzten Befehl ist es weiterhin möglich, das Dateisystem ohne die Eingabe der Passphrase zu mounten. Nach einem »luksClose« führt ein Mount-Versuch dagegen – wie gewünscht – zu einer Fehlermeldung: Das Dateisystem kann nicht gefunden werden.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Systeme mit Vamigru verwalten

Auch wer nur kleine Flotten von Linux-Servern verwaltet, freut sich über Werkzeuge, die ihm diese Arbeit erleichtern. Vamigru tritt mit diesem Versprechen an. Wir verraten, was es leistet und wie Sie es in der eigenen Umgebung in Betrieb nehmen. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite