FreeBSD bietet ausgezeichnete Möglichkeiten, Daten vor unberechtigten Zugriffen zu schützen. Wenn das Betriebssystem läuft, schützen Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe Kapitel 15, Verbindliche Zugriffskontrolle) die Daten. Die Zugriffskontrollen des Betriebssystems schützen allerdings nicht vor einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine Festplatte in ein anderes System einbauen und dort die Daten analysieren.
Die für FreeBSD verfügbaren kryptografischen Subsysteme,
GEOM Based Disk Encryption
(gbde
) und geli
sind in
der Lage, Daten auf Dateisystemen auch vor hoch motivierten
Angreifern zu schützen, die über erhebliche Mittel verfügen.
Dieser Schutz ist unabhängig von der Art und Weise, durch die
ein Angreifer Zugang zu einer Festplatte oder zu einem Rechner
erlangt hat. Im Gegensatz zu anderen Verschlüsselungsmethoden,
bei denen einzelne Dateien verschlüsselt werden, verschlüsseln
gbde und geli
transparent ganze Dateisysteme. Auf der Festplatte werden dabei
keine Daten im Klartext gespeichert.
Dieses Kapitel zeigt, wie ein verschlüsseltes Dateisystem unter FreeBSD erstellt wird. Zunächst wird der Ablauf für gbde beschrieben und anschließend das gleiche Beispiel für geli.
Das Ziel von gbde(4) ist es, einen Angreifer vor eine große Herausforderung zu stellen, um an die Daten einer Festplatte zu gelangen. Falls jedoch der Rechner kompromittiert wurde, während er im Betrieb war und das Speichergerät aktiv verbunden war, oder wenn der Angreifer eine gültige Passphrase kennt, bietet dieses System keinen Schutz für die Daten der Festplatte. Daher ist es wichtig, für die physische Sicherheit zu sorgen, während das System im Betrieb ist. Außerdem muss die Passphrase für den Verschlüsselungsmechanismus geschützt werden.
gbde(4) besitzt einige Funktionen um die Daten, die in einem Sektor gespeichert sind, zu schützen. Es benutzt 128-Bit AES im CBC-Modus, um die Daten eines Sektors zu verschlüsseln. Jeder Sektor einer Festplatte wird mit einem anderen AES-Schlüssel verschlüsselt. Weitere Informationen zum kryptographischen Design und wie die Schlüssel für einen Sektor aus der gegebenen Passphrase ermittelt werden, finden Sie in gbde(4).
FreeBSD enthält ein Kernelmodul für gbde, das wie folgt geladen werden kann:
#
kldload geom_bde
Wenn Sie einen angepassten Kernel verwenden, stellen Sie sicher, dass folgende Zeile in der Kernelkonfigurationsdatei enthalten ist:
options GEOM_BDE
Das folgende Beispiel beschreibt, wie eine Partition
auf einer neuen Festplatte verschlüsselt wird. Die
Partition wird in /private
eingehangen.
Installieren der Festplatte
Installieren Sie die Festplatte wie in
Abschnitt 17.2, „Hinzufügen von Laufwerken“ beschrieben. Im Beispiel
wird die Partition /dev/ad4s1c
verwendet. Die Gerätedateien
/dev/ad0s1
sind Standard-Partitionen des FreeBSD-Systems.*
#
ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4
Verzeichnis für gbde-Lock-Dateien anlegen
#
mkdir /etc/gbde
Die Lock-Dateien sind für den Zugriff von gbde auf verschlüsselte Partitionen notwendig. Ohne die Lock-Dateien können die Daten nur mit erheblichem manuellen Aufwand wieder entschlüsselt werden (dies wird auch von der Software nicht unterstützt). Jede verschlüsselte Partition benötigt eine gesonderte Lock-Datei.
Vorbereiten der gbde-Partition
Eine von gbde benutzte
Partition muss einmalig initialisiert werden, bevor
sie benutzt werden kann. Das Programm öffnet eine Vorlage
im Standard-Editor, um verschiedene Optionen zu
konfigurieren. Setzen Sie sector_size
auf 2048
, wenn Sie
UFS benutzen:
#
gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock
$FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...]
Sobald die Änderungen gespeichert werden, wird der Benutzer zweimal aufgefordert, die zum Schutz der Daten verwendete Passphrase einzugeben. Die Passphrase muss beide Mal gleich eingegeben werden. Die Sicherheit der Daten hängt allein von der Qualität der gewählten Passphrase ab. Die Auswahl einer sicheren und leicht zu merkenden Passphrase wird auf der Webseite http://world.std.com/~reinhold/diceware.html beschrieben.
Bei der Initialisierung wird eine Lock-Datei für die
gbde-Partition erstellt. In
diesem Beispiel
/etc/gbde/ad4s1c.lock
. Lock-Dateien
müssen die Dateiendung „.lock“ aufweisen,
damit sie von /etc/rc.d/gbde
, dem
Startskript von gbde, erkannt
werden.
Lock-Dateien müssen immer zusammen mit den verschlüsselten Dateisystemen gesichert werden. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen.
Einbinden der verschlüsselten Partition in den Kernel
#
gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
Dieses Kommando fragt die Passphrase ab, die bei der
Initialisierung der verschlüsselten Partition eingegeben
wurde. Das neue verschlüsselte Gerät erscheint danach in
/dev
als
/dev/device_name.bde
:
#
ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde
Dateisystem auf dem verschlüsselten Gerät anlegen
Nachdem die verschlüsselte Partition im Kernel
eingebunden ist, kann ein Dateisystem erstellt werden.
Dieses Beispiel erstellt ein
UFS-Dateisystem mit aktivierten Soft
Updates. Achten Sie darauf, die Partition mit der
Erweiterung
zu benutzen:*
.bde
#
newfs -U -O2 /dev/ad4s1c.bde
Einhängen der verschlüsselten Partition
Legen Sie einen Mountpunkt für das verschlüsselte Dateisystem an. Hängen Sie anschließend das Dateisystem ein:
#
mkdir /private
#
mount /dev/ad4s1c.bde /private
Überprüfen des verschlüsselten Dateisystems
Das verschlüsselte Dateisystem sollte jetzt erkannt und benutzt werden können:
%
df -H
Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private
Nach jedem Neustart müssen verschlüsselte
Dateisysteme dem Kernel wieder bekannt gemacht werden,
auf Fehler überprüft werden und eingehangen
werden. Für die dazu nötigen Schritte fügen Sie folgende
Zeilen in /etc/rc.conf
hinzu:
gbde_autoattach_all="YES"
gbde_devices="ad4s1c
"
gbde_lockdir="/etc/gbde"
Durch diese Argumente muss beim Systemstart auf der Konsole die Passphrase eingegeben werden. Erst nach Eingabe der korrekten Passphrase wird die verschlüsselte Partition automatisch in den Verzeichnisbaum eingehängt. Weitere Bootoptionen von gbde finden Sie in rc.conf(5).
sysinstall ist nicht
kompatibel mit
gbde-verschlüsselten Geräten.
Bevor sysinstall gestartet
wird, müssen alle *.bde
Geräte vom
Kernel getrennt werden, da sonst der Kernel bei der
ersten Suche nach Geräten abstürzt. Um das verschlüsselte
Gerät aus dem Beispiel zu trennen, benutzen Sie das
folgende Kommando:
#
gbde detach /dev/
ad4s1c
Mit geli
steht eine alternative
kryptografische GEOM-Klasse zur Verfügung.
Dieses Werkzeug unterstützt unterschiedliche Fähigkeiten und
verfolgt einen anderen Ansatz für die Verschlüsselung.
geli bietet die folgenden
Funktionen:
Die Nutzung des crypto(9)-Frameworks. Wenn das
System über kryptografische Hardware verfügt, wird diese
von geli
automatisch verwendet.
Die Unterstützung verschiedener kryptografischer Algorithmen, wie AES, Blowfish, und 3DES.
Die Möglichkeit, die root-Partition zu verschlüsseln. Um auf die verschlüsselte root-Partition zugreifen zu können, muss beim Systemstart die Passphrase eingegeben werden.
Erlaubt den Einsatz von zwei voneinander unabhängigen Schlüsseln.
Es ist durch einfache Sektor-zu-Sektor-Verschlüsselung sehr schnell.
Die Möglichkeit, Master-Keys zu sichern und wiederherzustellen. Wenn ein Benutzer seinen Schlüssel zerstört, kann er über seinen zuvor gesicherten Schlüssel wieder auf seine Daten zugreifen.
geli
erlaubt es, Platten mit
einem zufälligen Einmal-Schlüssel einzusetzen,
was für Swap-Partitionen und
temporäre Dateisysteme interessant ist.
Weitere Funktionen und Anwendungsbeispiele finden Sie in geli(8).
Das folgende Beispiel beschreibt, wie eine
Schlüsseldatei erzeugt wird, die als Teil des Master-Keys für
den Verschlüsselungs-Provider verwendet wird, der unter
/private
in den Verzeichnisbaum
eingehängt wird. Die Schlüsseldatei liefert zufällige Daten,
die für die Verschlüsselung des Master-Keys benutzt werden.
Zusätzlich wird der Master-Key durch eine Passphrase
geschützt. Die Sektorgröße des Providers beträgt 4 KB.
Das Beispiel beschreibt, wie Sie einen
geli
-Provider aktivieren, ein vom ihm
verwaltetes Dateisystem erzeugen, es mounten, mit ihm arbeiten
und wie Sie es schließlich wieder unmounten und den Provider
deaktivieren.
geli
verschlüsselnLaden der
geli
-Unterstützung
Die Unterstützung für geli
wird
über ein ladbares Kernelmodul zur Verfügung gestellt.
Damit das Modul automatisch beim Booten geladen wird,
fügen Sie folgende Zeile in
/boot/loader.conf
ein:
geom_eli_load="YES"
Um das Modul direkt zu laden:
#
kldload geom_eli
Stellen Sie bei einer angepassten Kernelkonfigurationsdatei sicher, dass diese Zeilen enthalten sind:
options GEOM_ELI device crypto
Erzeugen des Master-Keys
Die folgenden Befehle erzeugen einen Master-Key
(/root/da2.key
), der durch eine
Passphrase geschützt ist. Die Datenquelle für die
Schlüsseldatei ist /dev/random
. Um
eine bessere Leistung zu erzielen beträgt die Sektorgröße
des Providers (/dev/da2.eli
)
4 KB:
#
dd if=/dev/random of=/root/da2.key bs=64 count=1
#
geli init -s 4096 -K /root/da2.key /dev/da2
Enter new passphrase: Reenter new passphrase:
Es ist nicht zwingend nötig, sowohl eine Passphrase als auch eine Schlüsseldatei zu verwenden. Die einzelnen Methoden können auch unabhängig voneinander eingesetzt werden.
Wird für die Schlüsseldatei „-“ angegeben, wird dafür die Standardeingabe verwendet. Das folgende Kommando erzeugt beispielsweise drei Schlüsseldateien:
#
cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2
Aktivieren des Providers mit dem erzeugten Schlüssel
Um den Provider zu aktivieren, geben Sie die Schlüsseldatei, den Namen des Laufwerks und die Passphrase an:
#
geli attach -k /root/da2.key /dev/da2
Enter passphrase:
Dadurch wird ein neues Gerät mit der Erweiterung
.eli
angelegt:
#
ls /dev/da2*
/dev/da2 /dev/da2.eli
Das neue Dateisystem erzeugen
Als nächstes muss das Gerät mit dem UFS-Dateisystem formatiert und an einen vorhandenen Mountpunkt eingehängt werden:
#
dd if=/dev/random of=/dev/da2.eli bs=1m
#
newfs /dev/da2.eli
#
mount /dev/da2.eli
/private
Das verschlüsselte Dateisystem sollte jetzt erkannt und benutzt werden können:
#
df -H
Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 89M 139M 38% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr /dev/ad0s1d 989M 1.5M 909M 0% /tmp /dev/ad0s1e 3.9G 1.3G 2.3G 35% /var /dev/da2.eli 150G 4.1K 138G 0% /private
Wenn Sie nicht mehr mit dem verschlüsselten Dateisystem
arbeiten und die unter /private
eingehängte Partition daher nicht mehr benötigen, sollten Sie
diese unmounten und den
geli
-Verschlüsselungs-Provider wieder
deaktivieren:
#
umount /private
#
geli detach da2.eli
FreeBSD verfügt über ein rc.d
-Skript,
das dass Einhängen von verschlüsselten Geräten beim Booten
deutlich vereinfacht. Für dieses Beispiel, fügen Sie
folgende Zeilen in /etc/rc.conf
hinzu:
geli_devices="da2
" geli_da2_flags="-p -k /root/da2.key
"
Dies konfiguriert /dev/da2
als
geli
-Provider mit dem Master-Key
/root/da2.key
. Das System wird den
Provider automatisch deaktivieren, bevor es heruntergefahren
wird. Während des Startvorgangs fordert das Skript die
Passphrase an, bevor der Provider aktiviert wird. Vor und
nach der Eingabeaufforderung für die Passphrase werden noch
weitere Kernelmeldungen angezeigt. Achten Sie sorgfältig
auf die Eingabeaufforderung zwischen den anderen Meldungen,
falls es zu Problemen beim Startvorgang kommt. Sobald die
richtige Passphrase eingegeben wurde, wird der Provider
aktiviert. Anschließend werden die Dateisysteme gemäß
/etc/fstab
eingehängt. Lesen Sie
Abschnitt 3.7, „Anhängen und Abhängen von Dateisystemen“ wenn Sie wissen möchten,
wie Sie ein Dateisystem konfigurieren, sodass es beim
booten automatisch gestartet wird.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.