Einleitung
Diese Beschreibung zeigt auf, wie man ganze Partitionen mit loopAES verschlüsselt. Die Authentifizierung erfolgt über ein Kennwort, da ich die nachfolgende Vorgehensweise für Server optimiert habe und es für diese normalerweise keine andere Möglichkeiten gibt. USB-Stick, biometrische Methoden oder CDs kommen nicht in Frage, da häufig nur ein ssh-Zugang vorhanden ist (kein physikalischer Zugang).
Nun fragen Sie sich, wieso man denn überhaupt auf einen Server verschlüsselte Festplatten benutzen sollte. Ganz einfach, weil Sie z.B. einen Root-Server gemietet haben, Ihr Server nicht bei Ihnen zu Hause oder in Ihrer Firma steht oder weil Sie sich vor physikalischen Diebstahl sichern wollen.
Vorgaben Software
- Fedora Core 5
- Vanilla Kernel 2.6.20
- loopAES 3.1f
- util-linux 2.12r
Vorgaben Eigenschaften
- zu verschlüsselndes Gerät: /dev/hda666
- verwendetes Dateisystem: ext3
- Verzeichnis, unter dem das Gerät gemountet wird (mount point): /mnt/sicher1
- Verschlüsselungsalgorithmus: AES128, AES192 und AES256
Software konfigurieren und installieren
Um loopAES zu kompilieren ist es erforderlich, dass die Kernel Quelldateien installiert sind. Wenn Sie den Fedora eigenen Kernel verwenden, müssen Sie hierfür das RPM Paket kernel-sourcecode installieren (mit dem Fedora-Kernel habe ich es nicht getestet, müsste aber funktionieren). Stellen Sie sicher, dass der Kernel auch aktiv ist, für den Sie das Loop Module erstellen wollen. Damit meine ich, dass mit diesem Kernel das System gestartet worden sein muss.
Um loopAES zu kompilieren und installieren, geben Sie folgende Befehle ein: (es wird vorausgesetzt, dass Sie loopAES heruntergeladen und im Verzeichnis /tmp gesichert haben.)
cd /usr/src
rm -rf loop-AES-v3.1f
tar xvfj /tmp/loop-AES-v3.1f.tar.bz2
cd loop-AES-v3.1f
make clean
make LINUX_SOURCE=/usr/src/linux-2.6.20
Wenn ein symbolischer Link names /usr/src/linux auf das Quellverzeichnis des Kernels verweisst, können Sie den Parameter LINUX_SOURCE für die make Ausführung weglassen.
Anmerkung: Linus Torvalds empfiehlt diesen Link nicht zu setzen, sondern stattdessen die Header-Dateien zu benutzen, mit denen die glibc übersetzt worden ist. Bei der Distribution Fedora sollte dafür das RPM Paket glibc-headers installiert sein (dies ist aber keine Voraussetzung für loopAES).
Alternativ kann auch der Kernel-Patch verwendet werden. Der Vorteil liegt darin, dass man nicht das loop Modul einzeln kompilieren und installieren muss, wenn man den Kernel neu übersetzt hat. Wenn man mit dem Gedanken spielt, seine root-Partition auch zu verschlüsseln, vereinfacht dies die Sache ungemein:
cd /usr/src/linux
rm -f drivers/block/loop.c include/linux/loop.h
cd /usr/src/
rm -rf loop-AES-v3.1f
tar xvfj /tmp/loop-AES-v3.1f.tar.bz2
cd /usr/src/linux
cat /usr/src/loop-AES-v3.1f/kernel-2.6.20.diff | patch -p1
make menuconfig
Wenn Sie die zweite Methode gewählt haben, müssen Sie nun den Kernel neu übersetzen.
Nun müssen noch einige Programme von util-linux kompiliert werden: (es wird vorausgesetzt, dass Sie util-linux heruntergeladen und im Verzeichnis /tmp gesichert haben.)
Anmerkung: Falls Sie die Mindestlänge für ein Kennwort von 20 Zeichen auf z.B. 12 Zeichen verringern wollen, ersetzen Sie die Zeile “CFLAGS=-O2 ./configure “ mit “CFLAGS=-O2 -DLOOP_PASSWORD_MIN_LENGTH=12 ./configure”. Bedenken Sie dabei, dass die Sicherheit erheblich darunter leidet und ich davon nur abraten kann.
tar xvfj /tmp/util-linux-2.12r.tar.bz2
cd util-linux-2.12r
patch -p1 <../util-linux-2.12r.diff
CFLAGS=-O2 ./configure
make SUBDIRS="lib mount"
cd mount
install -m 4755 -o root mount umount /bin
install -m 755 losetup swapon /sbin
rm -f /usr/share/man/man8/{mount,umount,losetup,swapon,swapoff}.8*
rm -f /sbin/swapoff && ( cd /sbin && ln -s swapon swapoff )
install -m 644 mount.8 umount.8 losetup.8 /usr/share/man/man8
install -m 644 swapon.8 swapoff.8 /usr/share/man/man8
rm -f /usr/share/man/man5/fstab.5*
install -m 644 fstab.5 /usr/share/man/man5
Durch die Ausführung der obigen Befehle werden die relevanten Programm aus dem util-linux Paket installiert, die loop-AES für die Authentifikation benötigt. Installieren Sie auf keinen Fall alle Programme, die mit util-linux einherkommen. Viele davon wurden speziell distributionsabhängig erweitert. Auch eine Deinstalltion des RPM-Paketes utils-linux darf unter keinen Umständen durchgeführt werden.
Nun verifizieren wir, ob der neue loop-device ohne Fehler arbeitet:
cd /usr/src/loop-AES-v3.1f
make tests
Falls Sie als letzte Meldung “Test results ok” erhalten, sollte alles ohne Probleme funktionieren. Falls nicht, stellen Sie sicher, dass der neue loop device geladen wurde. Möglicherweise war schon der alte geladen. Um den alten zu entladen, müssen Sie alle Geräte unmounten, die auf den Loop-device zugreifen und anschliessend ein “rmmod loop” eingeben.
Ok, das wars, jetzt sollte der loopAES einsatzbereit sein. Falls der Kernel irgendwann neu übersetzt werden sollte, müssen Sie danach das loopAES Modul neu installieren, anderfalls kann nicht mehr auf die verschlüsselten Laufwerke zugegriffen werden.
Festplatte verschlüsseln:
Alle Daten, die sich auf der ausgewählten Partition befinden, werden gelöscht! Sichern Sie also vorher alle Daten, die sich auf dieser Partition befinden, irgendwo anders hin (z.B. auf eine andere Festplatte, Partition oder auf ein Netzwerklaufwerk)
Zuerst wird der alte Inhalt der Partition mit Zufallswerten und einer anschliessenden 0 überschrieben. (näheres dazu gibt es von Peter Gutmann)
shred -n 1 -z -v /dev/hda666
Nun lassen wir uns einen Anfangswert für den Zufallsgenerator erstellen:
dd if=/dev/urandom bs=18 count=1 2>/dev/null | uuencode -m - | head -n 2 | tail -n 1
Ich habe hier “TucYOrUkE1I+CdyY4I0JWBls” erhalten; Sie erhalten einen anderen Wert. Setzen Sie in den nachfolgenden Anweisungen Ihren Wert ein!
Um Wörterbuchangriffe zu erschweren, wird eine Iternation von 100 verwendet, bei älteren Rechnern sollte hier ein kleinere Wert gewählt werden (bei einem 486 wäre 10 eine ganz gute Wahl).
losetup -e AES128 -T -S TucYOrUkE1I+CdyY4I0JWBls -C 100 /dev/loop0 /dev/hda666
mke2fs -j /dev/loop0
losetup -d /dev/loop0
mkdir /mnt/sicher1
Wenn Sie losetup ausführen, müssen Sie ein Kennwort vergeben. Dieses Kennwort muss mindestens 20stellig sein und es muss immer dann angegeben werden, wenn Sie diese Partition mounten wollen. Die Stärke des Verschlüsselungsalgorithmus ist im oben aufgeführten Beispiel 128 Bit. Wenn Sie eine stärkere Verschlüsselung bevorzugen, ersetzen Sie AES128 mit AES192 oder AES256 (beachten Sie: um so stärker die Verschlüsselung, um so mehr CPU Last wird benötigt - für AES256 benötigt man ca. 25% mehr Leistung als mit AES128).
/etc/fstab anpassen
/dev/hda666 /mnt/sicher1 ext3 defaults,noauto,loop=/dev/loop0,encryption=AES128,itercountk=100,pseed=TucYOrUkE1I+CdyY4I0JWBls 0 0
Anwendung
Nach dieser Beschreibung werden die verschlüsselten Festplatten nicht automatisch gemounted, wenn das System hochfährt (da man des öfteren nur einen ssh-Zugang zum Rechner hat). Man muss also die verschlüsselten Partitionen von Hand mounten. In meinem Beispiel also:
Script zum mounten mehrerer Partitionen
#!/bin/sh
#
echo -n "Kennwort: "
read passwd
stty echo
if [ "" != "" ]; then
echo | mount -p 0 /mnt/sicher1
# echo | mount -p 0 /mnt/sicher2
# echo | mount -p 0 /mnt/sicher3
exit 0
else
echo -e "
Fehler: Geben Sie als Parameter das Kennwort für die Entschluesselung an.
"
exit 1
fi
chmod u+x scriptname ausführbar. Passen Sie die jeweiligen Mount Points an, die Sie für die verschlüsselten Partitionen in der /etc/fstab angelegt haben.
Wenn einer Regierung eine Nachricht 10 Billionen Dollar Wert ist (bezogen auf die Rechnerleistung) , dann kompromittiert sie einen 64-Bit-Schüssel (DES) mit einer Brute-Force-Attacke in 1 ms. Mit dem gleichen finanziellen Einsatz würde sie für einen 128-Bit-Schlüssel 100 Milliarden Jahre brauchen. Christian Thöing