Aus Linux-Magazin 10/2006

Workshop: Notebook-Platten mit DM-Crypt und LUKS komplett verschlüsseln

Auf einem Notebook das Homeverzeichnis verschlüsseln ist nur die halbe Miete: Auch aus Log- und Konfigurationsdateien ziehen Diebe und unehrliche Finder Rückschlüsse. Schützen Sie mit DM-Crypt und LUKS die gesamte Festplatte vor fremden Blicken – das kann aber keine Distribution out of the Box.

Einzelne Dateisysteme verschlüsseln ist keine große Herausforderung und bei einigen Distributionen schon während der Installation möglich. Aufwändig wird es, wenn Sie auch das Root-Dateisystem schützen wollen: Weder Suse noch Debian Linux bieten ein Hilfsprogramm, mit dem Sie dies bei der Installation (oder später) erledigen könnten. Darum ist Handarbeit nötig.

Seit Kernel 2.6.4 ist DM-Crypt [1] das bevorzugte Tool für die Verschlüsselung von Dateisystemen: Es nutzt die Device-Mapper-Infrastruktur [2] und verschlüsselt Blockgeräte transparent; dazu verwendet es das Crypto-API des Kernels. Linux Unified Key Setup (LUKS) steuert zusätzliche Verbesserungen bei, die ein früherer Linux-Magazin-Artikel [3] ausführlich beschreibt. Implementiert sind die LUKS-Konzepte im Konfigurationswerkzeug »cryptsetup-luks« [4].

In diesem Workshop installieren Sie zunächst ein Standard-Linux-System (Suse oder Debian), mit dem Sie dann schrittweise die vorhandenen Dateisysteme verschlüsseln. Die ungeschützte Partition löschen Sie am Schluss und verwenden sie für andere Aufgaben, zum Beispiel um das Verzeichnis »/home« auf eine eigene verschlüsselte Partition auszulagern.

Die ganze Festplatte

Bei einem verschlüsselten Root-Dateisystem ist allerdings eine besondere Hürde zu nehmen: Das Programm »init« (auf der initialen RAM-Disk »initrd«) muss beim Booten auf das Root-Dateisystem zugreifen können, um es zu mounten. Das macht eine Anpassung der »initrd« nötig. Dabei ist es ein Ziel, dass auch nach einem Kernelupdate noch ein bootfähiges Linux-System zur Verfügung steht.

Wegen des umfassenden Sicherheitsgewinns verschlüsselt dieser Workshop die gesamte Festplatte (bis auf die Partitionstabelle des Master Boot Record). Deshalb wandert die Bootpartition »/boot«, die unverschlüsselt bleiben muss, auf ein externes Medium, beispielsweise einen USB-Stick. Um davon booten zu können, ändern Sie die Einstellungen des Bios und des Bootloaders Grub.

Finden Sie diesen Ansatz unpraktisch, kann die Bootpartition auch auf der Festplatte bleiben. Wichtig ist dann aber, dass »/boot« auf einer eigenständigen, unverschlüsselten Partition landet. Keine Sorge: Auch nach der Komplettverschlüsselung können Sie Patches und Kernelupdates recht gelassen einbauen, auch die üblichen Backup- und Recovery-Werkzeuge arbeiten wie bisher.

Alternativ zur Neuinstallation ist es auch möglich, ein bestehendes System anzupassen, sofern auf der Festplatte noch ausreichend freier Platz vorhanden ist, um eine neue Partition für die zu verschlüsselnden Daten anzulegen.

Vorbereitung

Das Handwerkszeug besteht aus einem geeigneten Notebook, einem USB-Stick mit mindestens 64 MByte Speicher und Ihrer bevorzugten Linux-Distribution (ab Kernel 2.6.11), getestet wurden Suse Linux 9.3 und 10.0 sowie Debian Sarge. Im Bios des Notebooks prüfen Sie, ob es USB als Bootmedium unterstützt (Abbildung 1). Mit Hilfe einer Live-CD stellen Sie sicher, dass Linux das Notebook zufrieden stellend unterstützt; bei der Gelegenheit löschen Sie auch gleich die Notebook-Festplatte (siehe Kasten “Sicheres Löschen von Daten”).

Bei der Erstinstallation teilen Sie die Festplatte wie in der ersten Spalte von Tabelle 1 in vier Partitionen auf. (Wollen Sie auf das Booten mit dem USB-Stick verzichten, zeigt die zweite Tabellenspalte eine geeignete Alternativpartitionierung.) Das Linux-System landet dabei – zunächst unverschlüsselt – auf »/dev/hda4«. Abbildung 2 zeigt, wie Sie den Partitionierungsvorschlag auf einer 40-GByte-Festplatte umsetzen.

Größe und Anzahl der Partitionen passen Sie an Ihre Notebook-Festplatte und den Verwendungszweck an, auch Dual- oder Multiboot-Konfigurationen sind denkbar. Legen Sie während der Installation noch keine Benutzer an; das erledigen Sie besser später auf dem komplett verschlüsselten System.

Ist die Installation abgeschlossen, liegt auf »/dev/hda4« ein voll funktionsfähiges Linux-System. Bei Kernelversionen unter 2.6.11 (zum Beispiel bei Debian Sarge) ist anschließend ein Update fällig. Für die folgenden Schritte benötigen Sie das Konfigurationstool »cryptsetup-luks«. Der Kasten “Updates für Debian Sarge” beschreibt die Aktualisierung eines Sarge-Systems; unter Suse Linux installieren Sie nur »cryptsetup-luks«. Auf der LUKS-Seite [4] gibt es eine vorkompilierte, statisch gelinkte Version, die Sie nach »/sbin/cryptsetup-luks« kopieren.

Booten vom USB-Stick

Einen USB-Stick erkennt Linux meist als SCSI-Gerät und spricht ihn (falls keine anderen SCSI-Platten angeschlossen sind) als »/dev/sda« an. Richten Sie darauf mit »fdisk« eine Partitionstabelle mit mindestens einer Partition ein und formatieren sie (»mkfs.ext2 /dev/sda1«). Anschließend kopieren Sie mit den beiden Befehlen

mount /dev/sda1 /mnt
cp -ax /boot/* /mnt

das Verzeichnis »/boot« auf den USB-Stick. Falls noch keiner vorhanden, legen Sie im Verzeichnis »/mnt« mit »ln -s . boot« einen symbolischen Link an, damit »grub-install« sich später nicht verschluckt.

Tabelle 1:
Partitionierung

 

Booten vom USB-Stick

Alternativ: Booten von der Festplatte

Inhalt

/dev/hda1

Bootpartition »/boot«

/dev/hda2

erweiterte Partition

/dev/hda1

/dev/hda5

verschlüsselte Swap-Partition

/dev/hda2

/dev/hda6

verschlüsseltes Dateisystem »/tmp«

/dev/hda3

/dev/hda7

verschlüsseltes Root-Dateisystem

/dev/hda4

/dev/hda8

unverschlüsseltes Root-Dateisystem (wird später
gelöscht)

Passen Sie auf dem USB-Stick die Konfiguration des Bootloaders Grub an: In der Devicemap »/mnt/grub/device.map« notiert Grub, wie es die Bios- und Linux-Gerätenamen einander zuordnet; hier ist der Eintrag »(hd0) /dev/sda« erforderlich. In der Konfigurationsdatei »/mnt/grub/menu.lst« ändern Sie für alle Einträge den Bios-Gerätenamen von »(hd0,3)« auf »(hd0,0)« (das entspricht »/dev/sda1«). Ein typischer Grub-Eintrag mit Angaben zum Kernelimage und der Initial RAM-Disk sieht wie folgt aus:

title Suse Linux 9.3 (USB-Boot)
    kernel (hd0,0)/vmlinuz root=/dev/hda4
    initrd (hd0,0)/initrd

Mit »grub-install –root-directory=/mnt /dev/sda« installieren Sie schließlich Grub im Master Boot Record des Memory Stick. Hat alles geklappt, können Sie das Notebook nun bei eingestecktem USB-Stick booten – dazu stellen Sie im Bios die Boot-Reihenfolge so um, dass der Rechner erst nach externen Bootmedien sucht (Abbildung 1).

F Abbildung 1: Vom USB-Stick booten - hier geht jedes Bios seinen eigenen Weg: Im Beispiel führt er über »Removable Drives« und »Generic Storage Device«. Tipp: Schließen Sie den Stick an, bevor Sie das Bios aufrufen.

F Abbildung 1: Vom USB-Stick booten – hier geht jedes Bios seinen eigenen Weg: Im Beispiel führt er über »Removable Drives« und »Generic Storage Device«. Tipp: Schließen Sie den Stick an, bevor Sie das Bios aufrufen.

Sicheres Löschen von
Daten

Löschen Sie Dateien mit »rm«, entfernt Linux lediglich den zur Datei gehörenden Inode aus dem Verzeichnis. Die eigentlichen Daten bleiben auf der Festplatte erhalten und sind mit wenig Aufwand rekonstruierbar. Auch eine Neuformatierung mit »mkfs« überschreibt nicht die Partition.

Für ein nachhaltigeres Beseitigen der Daten ändern Sie die Magnetisierung der betroffenen Sektoren aktiv (und vor allem geeignet). Die einfachste Variante ist ein Befehl der Form »dd if=/dev/zero of=/dev/hda«. Aber: So wie nach einem gleichmäßigen Schneefall die Umrisse der Landschaft noch zu erkennen sind, ist nach dem Überschreiben einer Datei mit Nullen noch eine Restmagnetisierung vorhanden. Diese kann ein Dieb mit entsprechend sensiblen Geräten auslesen, um die ursprünglichen Daten zu rekonstruieren.

Zeitlich aufwändiger, aber deutlich sicherer ist der Einsatz von »/dev/urandom« statt »/dev/zero«. Je nach Philosophie führen Sie diesen Vorgang zwischen drei- [5] und 35-mal [6] durch, bevor die Daten ziemlich sicher gelöscht sind. Geeignete Werkzeuge sind beispielsweise »shred« und »wipe« [8]. Aber Vorsicht: Diese Tools basieren auf einigen wichtigen Grundannahmen, die zum Beispiel bei Raid-Systemen, Journaling-Dateisystemen (wie Reiser-FS oder Ext 3) oder Festplattentreibern und Firmwares, die Daten puffern und mehrere Durchläufe in einem Rutsch auf die Festplatte schreiben, nicht mehr zutreffen müssen.

Kein vollständiger Schutz

Absoluten Schutz bieten letztlich nur die mechanische Zerstörung der Festplattenscheiben und eine gründliche Entsorgung. Diese Radikalkur können Sie sich aber guten Gewissens ersparen, wenn Sie die hier beschriebenen Mechanismen implementieren und einfach die LUKS-Passwörter vergessen.

Partitionen verschlüsseln

Wechseln Sie aus Sicherheitsgründen in den Single User Mode oder schließen alle nicht benötigten Anwendungen, stoppen Sie die Dienste und schließen eventuelle Benutzersitzungen. Mit dem installierten Linux-System verschlüsseln Sie nun schrittweise die Partitionen der Notebook-Platte; dafür sind »/dev/hda1« bis »/dev/hda3« vorgesehen. Die Partition »/dev/hda4«, die zurzeit noch das Root-Dateisystem enthält, benötigen Sie später nicht mehr. Sie können sie recyceln, zum Beispiel als verschlüsselte Partition für das Verzeichnis »/home«.

Abbildung 2: Bei dieser Plattenaufteilung installieren Sie Linux auf »hda4« und verschlüsseln die übrigen Partitionen (Swap, »/tmp« und neues »/«). »hda4« wird am Schluss gelöscht und zur verschlüsselten »/home«-Partition.

Abbildung 2: Bei dieser Plattenaufteilung installieren Sie Linux auf »hda4« und verschlüsseln die übrigen Partitionen (Swap, »/tmp« und neues »/«). »hda4« wird am Schluss gelöscht und zur verschlüsselten »/home«-Partition.

Grundsätzlich ist die Vorgehensweise (siehe Kasten “Device-Mapper, DM-Crypt und Cryptsetup”) dabei immer gleich: Mit »cryptsetup-luks« legen Sie ein virtuelles Blockdevice mit integrierter AES-Verschlüsselung an und bilden es auf ein zugehöriges physikalisches Blockdevice (auf der Notebook-Platte) ab. Dabei geben Sie eine Passphrase ein, mit der das Programm einen symmetrischen Schlüssel erzeugt. Dieser ist dann für die eigentliche Verschlüsselung der Daten zuständig. Anschließend formatieren Sie das virtuelle Blockdevice mit einem Dateisystem und mounten es.

Device-Mapper, DM-Crypt und
Cryptsetup

Die Device-Mapper-Infrastruktur [2] entkoppelt (wie auch Loopdevices) physikalische von virtuellen Blockdevices (siehe Abbildung 3). Diese Virtualisierung schafft eine Abstraktionsschicht, von der verschiedene Anwendungen profitieren. DM-Crypt [1] gehört zu denen, die über das virtuelle Blockdevice angelieferte Daten transparent verschlüsseln und auf dem physikalischen Blockdevice speichern – und umgekehrt.

Auf dem physikalischen Blockdevice ist also scheinbar nur Datenmüll – erst die korrekte Passphrase stellt über das virtuelle Blockdevice ein Dateisystem bereit, mit dem ein sinnvolles Arbeiten überhaupt möglich ist. Für die Konfiguration von DM-Crypt nutzen Sie das Userspace-Tool »cryptsetup«, die virtuellen Blockdevices finden Sie danach im Verzeichnis »/dev/mapper/«.

Cryptsetup-LUKS ist eine Weiterentwicklung von Cryptsetup und enthält Verbesserungen, die bereits [3] genauer vorgestellt hat. In Kurzform:

  • Die Verschlüsselung der Daten erfolgt mit einem
    randomisierten Schlüssel; dieser wird im so genannten
    LUKS-Header einer Partition gespeichert, verschlüsselt mit dem
    aus der Passphrase erzeugten Schlüssel. Somit können Sie
    nachträglich seine Passphrase ändern, ohne die gesamte
    Partition umzuschlüsseln.
  • Der Einsatz von Salting und Stretching erschwert typische
    Wörterbuchattacken auf Passphrasen von Benutzern.
  • ESSIV (Encrypted Salt Sector IV) erschwert den
    Watermarking-Angriff im Cipher-Block-Chaining-Modus; dieses Feature
    gibt es erst ab Kernel 2.6.11.

Updates für Debian
Sarge

Um Debian Sarge fit für die Verschlüsselung der Root-Partition zu machen, gehen Sie nach der Standardinstallation folgendermaßen vor: Fügen Sie die Apt-Quelle

deb http://http.us.debian.org/debian unstable contrib main

hinzu und kommentieren Sie alle übrigen in »/etc/apt/sources.list« aus. Mit »apt-get update« und »apt-get install -f« bringen Sie die Paketdatenbank auf den neusten Stand und installieren mit

apt-get install yaird linux-image-2.6.17-2-686
apt-get install cryptsetup

eine aktuelle Kernelversion sowie neben »cryptsetup« auch das Programm »yaird«, das (wie »mkinitrd«) Initial RAM-Disks erzeugt. (Die Versionsnummer des Kernelimage könnte sich bis zum Erscheinen des Artikels allerdings geändert haben, bei den ersten Tests lag noch Version 2.6.17-1 auf den Servern.) Booten Sie den Rechner anschließend mit dem neuen Kernel.

Aufwärmübung

Die Swap-Partition und das Verzeichnis »/tmp« sind geeignete Kandidaten für erste Gehversuche mit »cryptsetup-luks«: Diese Dateisysteme enthalten temporäre Daten, die – falls sie verloren gehen – keinen Verlust bedeuten.

Listing 1 zeigt für den Swap und »/tmp« die erforderlichen Befehlssequenzen zum manuellen Aktivieren und Deaktivieren der Verschlüsselung: Für den Swap legen Sie mit »cryptsetup-luks« ein virtuelles Blockdevice »/dev/mapper/swap« an, das Sie mit »mkswap« initialisieren und mit »swapon« aktivieren. Analog erzeugen Sie ein weiteres virtuelles Blockdevice »/dev/mapper/tmp«, das Sie mit »mkfs.ext2« als Ext-2-Dateisystem formatieren und nach »/tmp« mounten. Bei Debian ersetzen Sie in den Programmaufrufen den Eintrag »cryptsetup-luks« durch »cryptsetup« oder legen einen passenden Link an.

Listing 1: Swap und
»/tmp« anlegen

01 # swapoff -a
02 # cryptsetup-luks -s 256 -d /dev/urandom create swap /dev/hda1
03 # ls -l /dev/mapper/
04 total 124
05 crw-------   1 root root  10, 63 Apr  3  2006 control
06 brw-r-----   1 root root 253,  0 Apr  2 23:53 swap
07 # mkswap /dev/mapper/swap
08 Setting up swapspace version 1, size = 1019895 kB
09 # swapon /dev/mapper/swap
10 # cat /proc/swaps
11 Filename           Type        Size    Used   Priority
12 /dev/mapper/swap   partition   995988  0      -3
13 # swapoff /dev/mapper/swap
14 # cryptsetup-luks remove swap
15 # cat /proc/swaps
16 #
17 # cryptsetup-luks -s 256 -d /dev/urandom create tmp /dev/hda2
18 # mkfs.ext2 /dev/mapper/tmp
19 mke2fs 1.36 (05-Feb-2005)
20 [...]
21 # mount /dev/mapper/tmp /tmp
22 # ls -l /tmp/
23 total 17
24 drwx------   2 root root 12288 Apr  2 23:55 lost+found
25 # umount /tmp
26 # cryptsetup-luks remove tmp
27 # ls -l /dev/mapper/
28 total 124
29 crw-------   1 root root 10, 63 Apr  3  2006 control

In beiden Fällen verwendet »cryptsetup-luks« zufällige Passphrasen aus »/dev/urandom«; diese befinden sich im Hauptspeicher des Notebooks und gehen spätestens mit dem Ausschalten verloren. Da sonst niemand die Passphrasen kennt, sind auch die im Swap und in »/tmp« gespeicherten Daten damit unwiederbringlich verloren. Das ist aber erwünscht:

  • Der Swap enthält Auszüge aus dem Hauptspeicher und
    wird bei jedem Rechnerstart neu initialisiert. Ihn lesbar erhalten
    bringt keinen Vorteil, stellt aber ein Sicherheitsrisiko dar.
  • Temporäre Dateien behandelt jede Distribution anders.
    Allgemein dürfen Programme sich nicht darauf verlassen, dass
    Daten in »/tmp« Reboots oder längere Lagerung
    überleben.
Abbildung 3: Ein Dateizugriff läuft über mehrere Schichten. Durch die LUKS-Verschlüsselung kommt noch eine weitere hinzu, die sich zwischen logischem Dateisystem und (Hardware-)Plattenzugriff einordnet.

Abbildung 3: Ein Dateizugriff läuft über mehrere Schichten. Durch die LUKS-Verschlüsselung kommt noch eine weitere hinzu, die sich zwischen logischem Dateisystem und (Hardware-)Plattenzugriff einordnet.

Richtig temporär

Es bietet sich an, diese beiden Dateisysteme bei jedem Neustart automatisch anzulegen. Debian Linux macht es Ihnen besonders leicht: Hier setzen Sie in der Datei »/etc/defaults/cryptdisks« den Parameter »CRYPTDISKS_ENABLE=Yes« (falls das nicht bereits der Fall ist) und tragen in die Datei »/etc/crypttab« die folgenden Zeilen ein (mit Ziel- und Quell-Device, Schlüssel und Optionen):

swap  /dev/hda1  /dev/urandom  swap
tmp   /dev/hda2  /dev/urandom  tmp

Auch »/etc/fstab« passen Sie an; einen vorhandenen Eintrag für die Swap-Partition löschen Sie oder ändern ihn ab:

/dev/mapper/swap  none  swap  sw,pri=1  0 0
/dev/mapper/tmp   /tmp  ext2  defaults  0 0

Bei Suse Linux gibt es zwar auch eine Datei »/etc/cryptotab«, sie arbeitet aber mit Loopdevices. Hier bietet es sich an, »/tmp« und den Swap mit einem »init.d«-Skript zu aktivieren. Ein passendes Shellskript (»cryptfs«), das auf [9] basiert, finden Sie auf der Linux-Magazin-Homepage [10]. Nach dem Herunterladen (nach »/etc/init.d/«) legen Sie symbolische Links in »/etc/rcX.d« an, um es in den gewünschten Runlevels aufzurufen. Dann löschen Sie in »/etc/fstab« die Zeile für die bisher unverschlüsselte Swap-Partition.

Mit einem Neustart testen Sie, ob Linux die Dateisysteme anlegt und korrekt aktiviert. Ist alles in Ordnung, widmen Sie sich der Kernaufgabe: der Verschlüsselung des Root-Dateisystems.

Wurzelbehandlung

Anders als bei »/tmp« und beim Swap ist das Root-Dateisystem permanent, wird also nicht nach jedem Reboot neu erzeugt. Sie legen es einmal an und binden es bei jedem Neustart wieder ein. Hierfür sind die zusätzlichen LUKS-Funktionen (von »cryptsetup-luks«) nötig, und die Vorgehensweise weicht ab. Mit den folgenden Parametern erzeugt »cryptsetup-luks« auf »/dev/hda3« einen LUKS-Header, wobei es als Verschlüsselungsalgorithmus AES mit Schlüssellänge 256 Bit verwendet und eine Passphrase setzt:

cryptseup-luks -c aes-cbc-essiv:sha256 -y -s 256 luksFormat /dev/hda3

Dann erzeugen Sie ein virtuelles Blockdevice »/dev/mapper/dm-root«, das auf die Partition »/dev/hda3« abgebildet wird. Hier fragt »cryptsetup« nach der gerade festgelegten Passphrase. Anschließend formatieren Sie das virtuelle Blockdevice (im Beispiel im Ext-3-Format) und mounten es:

cryptsetup-luks luksOpen /dev/hda3 dm-root
mkfs.ext3 /dev/mapper/dm-root
mount /dev/mapper/dm-root /mnt

Das neue, verschlüsselte Root-Dateisystem ist jetzt unter »/mnt« eingebunden und noch leer. Für die folgenden Aktionen stecken Sie den bootfähigen Memory Stick ein. Kopieren Sie die komplette Installation des aktuellen Linux-Systems von der unverschlüsselten Partition »/dev/hda4« nach »/mnt«. Bei diesem Kopiervorgang landen die Daten verschlüsselt auf der Partition »/dev/hda3«. Die Verzeichnisse »/boot«, »/lost+found«, »/proc«, »/sys«, »/tmp« und natürlich »/mnt« lassen Sie beim Kopieren aus. Der Kopierbefehl, zum Beispiel

cd /; cp -ax bin dev etc home lib media opt root sbin usr var /mnt/

nimmt einige Zeit in Anspruch, da Sie hier – je nach Installation – zwischen 2 und 3 GByte Daten durch die Verschlüsselungsschicht schleusen.

Damit ist auf der Partition »/dev/hda3« ein verschlüsseltes Abbild des Root-Dateisystems von »/dev/hda4« zu finden, das Sie mit »umount /mnt; cryptsetup-luks luksClose dm-root« manuell deaktivieren und mit »cryptsetup-luks luksOpen /dev/hda3 dm-root; mount /dev/mapper/dm-root /mnt« wieder aktivieren können.

Ab jetzt im Crypto-Root

Arbeiten Sie von nun an mit »chroot« im verschlüsselten System weiter: Dort legen Sie zunächst die fehlenden Mountpoints an und mounten den Memory Stick nach »/boot«.

chroot /mnt
mkdir -p /boot /proc /sys /tmp /mnt
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount /dev/sda1 /boot

Ein Bootversuch vom USB-Stick mit dem Root-Dateisystem »/dev/hda3« oder »/dev/mapper/dm-root« würde bisher noch scheitern, da das Programm »init« als Bestandteil der »initrd« in beiden Fällen mit dem Root-Dateisystem nichts anzufangen wüsste: Auf der Partition »/dev/hda3« liegt scheinbar nur Datenmüll und das virtuelle Device »/dev/mapper/dm-root« gibt es noch nicht.

Die Füllung

Damit Linux von einem verschlüsselten Root-Dateisystem bootet, sind folgende Änderungen an der »initrd« erforderlich: »cryptsetup-luks« und die benötigten Kernelmodule müssen in der »initrd« enthalten sein. »init« muss die Kernelmodule laden und das virtuelle Blockdevice »/dev/mapper/dm-root« als tatsächliches Root-Dateisystem einbinden. Je nach dem Stand der Integration von »cryptsetup« in die jeweilige Distribution gehen Sie unterschiedlich vor.

Debians RAM-Disk

Debian Sarge bietet hierfür bereits eine sehr gute Unterstützung: In der Datei »/etc/mkinitd/modules« fügen Sie die Module »aes-i586« und »sha256« jeweils in einer eigenen Zeile hinzu. Die schon vorhandene »/etc/crypttab« ergänzen Sie um folgende Zeile:

dm-root /dev/hda3 none luks,cipher=aes-cbc-essiv:sha256

Analog ändern Sie in »/etc/fstab« das Root-Dateisystem auf »/dev/mapper/dm-root«. Mit dem Aufruf »yaird -o /boot/initrd« erzeugen Sie nun eine funktionsfähige »initrd« auf dem eingebundenen Memory Stick. »yaird« (yet another initrd) ersetzt das Standardprogramm »mkinitrd«, dessen Debian-Version nicht mit verschlüsselten Root-Dateisystemen klarkommt.

Bei Suse Linux binden Sie die erforderlichen Kernelmodule »dm-mod«, »dm-crypt«, »aes-i586«, »sha256« und »ext3« über den Parameter »INITRD_MODULES« in die Datei »/etc/sysconfig/kernel« ein. Trennen Sie die Modulnamen durch Leerzeichen.

Suses Init anpassen

Weitere Änderungen sind im Programm »/sbin/mkinitrd« nötig, von dem Sie vorsichtshalber eine Sicherheitskopie erstellen. In der Funktion »mkinitrd_kernel« suchen Sie nach den Programmzeilen, die die Datei »/sbin/insmod« in die RAM-Disk kopieren. Diese sehen je nach Suse-Version unterschiedlich aus. Bei Suse 10.1 lautet der Block zum Beispiel:

if ! cp_bin $initrd_insmod $tmp_mnt/sbin/insmod 2>/dev/null ; then
    error 5 "no static insmod"
fi

Gleich dahinter fügen Sie folgende zwei Zeilen ein:

cp_bin /sbin/cryptsetup-luks $tmp_mnt/sbin/ 2>/dev/null 
  || error 5 "no static cryptsetup-luks"

In der Funktion »udev_discover_root« ergänzen Sie als erste Befehlssequenz:

| echo "Setting up LUKS device $rootdev. Provide pass phrase now."
| /sbin/cryptsetup-luks luksOpen /dev/hda3 dm-root

Ändern Sie nun noch in »/etc/fstab« den Eintrag für das Root-Dateisystem auf »/dev/mapper/dm-root« mit Dateisystem »ext3«. Schließlich schreiben Sie mit »/sbin/mkinitrd -o /boot/initrd« eine neue Initial RAM-Disk auf den eingebundenen Memory Stick.

Vor dem Reboot passen Sie noch die Datei »/boot/grub/menu.lst« auf dem Memory Stick an: Beim Menü-Eintrag für den Start des Linux-Systems ändern Sie den Kernelparameter »root« in das virtuelle Blockdevice »/dev/mapper/dm-root«. Auch den »initrd«-Eintrag passen Sie an (»/boot/initrd«). Ein typischer Eintrag sieht so aus:

title Suse Linux 10 (USB-Boot, Crypto-Root)
kernel (hd0,0)/vmlinuz root=/dev/mapper/dm-root
initrd (hd0,0)/initrd

Booten Sie das Notebook neu. Spätestens jetzt muss in der Bios-Bootreihenfolge USB an erster Stelle stehen. »cryptsetup-luks« wird dann sehr bald nach der Passphrase für das Root-Dateisystem fragen und bei korrekter Eingabe bis zum Login-Bildschirm booten. Ein Aufruf von »mount« beseitigt letzte Zweifel (Abbildung 4). Wenn dies fehlschlägt, booten Sie ohne den Memory Stick: Auf der Festplatte liegt ja noch das unverschlüsselte Linux-System, mit dem Sie die Fehlersuche beginnen.</paragraph>

Abbildung 4: Nach der erfolgreichen Operation sehen Sie unter »/dev/mapper« und in der Mount-Tabelle drei verschlüsselte Dateisysteme. Wenn Sie jetzt noch auf »hda4« ein verschlüsseltes »/home« erzeugen, ist die Platte frei von Klartextinformationen.

Abbildung 4: Nach der erfolgreichen Operation sehen Sie unter »/dev/mapper« und in der Mount-Tabelle drei verschlüsselte Dateisysteme. Wenn Sie jetzt noch auf »hda4« ein verschlüsseltes »/home« erzeugen, ist die Platte frei von Klartextinformationen.

Feinschliff

Wenn alles funktioniert, benötigen Sie auch das unverschlüsselte Root-Dateisystem auf »/dev/hda4« nicht mehr. Löschen Sie die Daten auf dieser Partition und richten analog zur Vorgehensweise beim Root-Dateisystem mit »cryptsetup-luks« ein weiteres verschlüsseltes Dateisystem »/dev/mapper/dm-home« ein, formatieren Sie es und mounten es nach »/home«.
Jetzt ist der richtige Zeitpunkt, um weitere Benutzer anzulegen, deren Homeverzeichnisse dann verschlüsselt auf »/dev/hda4« landen.
Um »/home« beim Booten automatisch einzubinden, verwenden Sie die gleichen Mechanismen wie bei »/«. Unter Suse Linux ergänzen Sie im »init.d«-Skript die Array-Definitionen um »/dev/hda4«, »dm-home« und »/home«, bei Debian fügen Sie entsprechende Einträge in »/etc/cryptdisk« und »/etc/fstab« ein.

Kleines Einmaleins der
Sicherheit

Die Verschlüsselung der Notebook-Platte ist nur ein Teil einer durchgängigen Sicherheitspolitik – und ersetzt sie nicht, denn die Daten sind nur effektiv geschützt, solange der Rechner ausgeschaltet ist. Kommt ein eingeschaltetes Notebook abhanden, nachdem der alte Besitzer alle Passphrasen korrekt eingetippt und sich am Linux-System angemeldet hat, sind die Daten für Unbefugte genauso leicht zugänglich wie bei einem komplett ungeschützten Rechner. Das gilt auch für die üblichen Gefahren aus dem Internet, wenn das Notebook eine Internetverbindung hat: Schädliche Programme können, einmal im System verankert, unbehelligt auf die Daten zugreifen. Absoluten Schutz gibt es also auch hier nicht.

Mit den folgenden Regeln erreichen Sie aber ein hohes Maß an Sicherheit:

  • Bewahren Sie Notebook und Memory Stick getrennt auf.
  • Konfigurieren Sie im Bios ein Power-on-Passwort und ein
    Supervisor-Passwort; lassen Sie nur USB als Bootmedium zu.
  • Verwenden Sie schwierig zu erratende Passwörter und
    ändern Sie diese regelmäßig.
  • Arbeiten Sie nicht mit Root-Rechten.
  • Benutzen Sie eine restriktiv konfigurierte (Personal)
    Firewall.
  • Verwenden Sie mindestens einen Virenscanner mit aktuellen
    Virensignaturen.
  • Konfigurieren Sie einen Bildschirmschoner mit Passwortschutz,
    der sich automatisch aktiviert.
  • Untersuchen Sie regelmäßig Logdateien auf
    auffällige Einträge.
  • Überprüfen Sie regelmäßig, ob es für
    die eingesetzte Software sicherheitsrelevante Patches und Updates
    gibt. Wenn ja, installieren Sie diese.
  • Fertigen Sie regelmäßig Backups von Ihren Daten an
    und verwahren sie an einem sicheren Ort.

Kein Suspend to Disk

Ein Wermutstropfen ist, dass sich ein verschlüsselter Swap und Suspend to Disk gegenseitig ausschließen. Letzteres müssen Sie daher deaktivieren: Entfernen Sie auf dem Memory Stick in der Datei »/grub/menu.lst« den Kernelparameter »resume=/dev/hda1«, falls vorhanden. Eine Alternative ist Suspend2 [7], das die Kombination mit einer verschlüsselten Swap-Partition unterstützt; das erfordert allerdings das Patchen und Kompilieren des Vanilla-Kernels.

Der Memory Stick wird im laufenden Betrieb nicht benötigt; bei Kernelupdates hingegen muss er zwingend eingebunden sein, weil »mkinitrd« oder »yaird« die neue »initrd« dort speichert. Erstellen Sie aber sicherheitshalber vor dem Kernelupdate ein Backup des Memory Stick oder legen in der Grub-Konfiguration einen Eintrag für das alte, funktionierende System an: Mit Kernel 2.6.13 haben einige Änderungen bei »udev« Einzug gehalten, die möglicherweise dazu führen, dass die erzeugte »initrd« nicht wie gewünscht funktioniert; »yaird« hat dieses Problem nicht.

Wollen Sie ganz sicher sein, erstellen Sie zusätzlich eine Live-CD mit LUKS-Support. Mit dieser können Sie dann im schlimmsten Fall verschlüsselte Partitionen manuell einbinden und sichern. Vorsicht ist bei Suse Linux geboten, wenn Yast bei einem Update das Paket »mkinitrd« aktualisiert. Sichern Sie aus diesem Grund das LUKS-modifizierte »/sbin/mkinitrd«-Skript und vergleichen es nach einem »mkinitrd«-Update mit der neuen Version.

Tresor fest verschlossen

Bis auf den Master Boot Record ist nun die gesamte Notebook-Platte verschlüsselt, Booten ist nur mit dem Memory Stick möglich. Damit haben Sie ein hohes Maß an passiver Sicherheit für den mobilen Rechner erreicht. Trotzdem sollten Sie zusätzlich die gängigen Schutz- und Sicherheitsmaßnahmen beachten (siehe Kasten “Kleines Einmaleins der Sicherheit”). (hge)

Der Autor

Dr. Michael Nerb arbeitet bei T-Systems in München im Bereich Security und Open Source/Linux. Er ist Lehrbeauftragter an der Ludwig-Maximilians-Universität München.

Infos

[1] DM-Crypt: [http://www.saout.de/misc/dm-crypt]

[2] Device Mapper Resource Page: [http://sources.redhat.com/dm/]

[3] Clemens Fruhwirth und Markus Schuster, “Geheime Niederschrift – Festplattenverschlüsselung mit DM-Crypt und Cryptsetup-LUKS”: Linux-Magazin 08/05, S. 28

[4] Linux Unified Key Setup (LUKS): [http://luks.endorphin.org/dm-crypt]

[5] BSI IT-Grundschutz-Handbuch, M 2.167, “Sicheres Löschen von Datenträgern”: [http://www.bsi.bund.de/gshb/deutsch/m/m02167.html]

[6] Peter Gutmann, “Secure Deletion of Data from Magnetic and Solid-State Memory”: [http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html]

[7] Suspend2: [http://www.suspend2.net]

[8] Wipe – Secure File Deletion: [http://wipe.sourceforge.net]

[9] Luksopen-Skript im DM-Crypt-Wiki: [http://www.saout.de/tikiwiki/tiki-index.php?page=luksopen]

[10] Shellskript »cryptfs«: [https://www.linux-magazin.de/Service/Listings/2006/10/Cryptfs]

[11] Clemens Fruhwirth, “New Methods in Hard Disk Encryption”, theoretische Abhandlung zu LUKS: [http://clemens.endorphin.org/nmihde/nmihde-A4-ds.pdf]

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben