19.14. Partitionen verschlüsseln

Beigetragen von Lucky Green.

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 17, 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 schwerfälligen Systemen, die einzelne Dateien verschlüsseln, verschlüsseln gbde und geli transparent ganze Dateisysteme. Auf der Festplatte werden dabei keine Daten im Klartext gespeichert.

19.14.1. Plattenverschlüsselung mit gbde

  1. Sie benötigen Superuser-Rechte, um gbde einzurichten.

    % su -
    Password:
  2. Wird eine angepasste Kernelkonfigurationsdatei verwendet, stellen Sie sicher, dass folgende Zeile enthalten ist:

    options GEOM_BDE

    Wenn der Kernel diese Unterstützung bereits enthält, verwenden Sie kldload um gbde(4) zu laden:

    # kldload geom_bde

19.14.1.1. Einrichten einer verschlüsselten Festplatte

Das folgende Beispiel beschreibt, wie eine Partition auf einer neuen Festplatte verschlüsselt wird. Die Partition wird in /private eingehangen. Mit gbde könnten auch /home und /var/mail verschlüsselt werden. Die dazu nötigen Schritte können allerdings in dieser Einführung nicht behandelt werden.

  1. Installieren der Festplatte

    Installieren Sie die Festplatte wie in Abschnitt 19.3, „Hinzufügen von Laufwerken“ beschrieben. Im Beispiel verwenden wir die Partition /dev/ad4s1c. 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
  2. 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.

  3. Vorbereiten der gbde-Partition

    Eine von gbde benutzte Partition muss einmalig vorbereitet werden:

    # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock

    gbde(8) öffnet eine Vorlage im Standard-Editor, um verschiedene Optionen einstellen zu können. Setzen Sie sector_size auf 2048, wenn Sie UFS1 oder UFS2 benutzen.

    # $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
    [...]

    gbde(8) fragt zweimal die Passphrase zum Schutz der Daten ab. 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 Diceware Passphrase beschrieben.

    Mit gbde init wurde im Beispiel auch die Lock-Datei /etc/gbde/ad4s1c.lock angelegt. gbde-Lockdateien müssen die Dateiendung .lock aufweisen, damit sie von /etc/rc.d/gbde, dem Startskript von gbde, erkannt werden.

    Achtung:

    Sichern Sie die Lock-Dateien von gbde immer zusammen mit den verschlüsselten Dateisystemen. Ein entschlossener Angreifer kann die Daten vielleicht auch ohne die Lock-Datei entschlüsseln. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen. Dies ist nur noch mit erheblichem manuellen Aufwand möglich, der nicht gbde(8) wird.

  4. 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
  5. Dateisystem auf dem verschlüsselten Gerät anlegen

    Nachdem die verschlüsselte Partition im Kernel eingebunden ist, kann mit newfs(8) ein Dateisystem erstellt werden. Dieses Beispiel erstellt ein UFS2-Dateisystem mit aktivierten Soft Updates.

    # newfs -U -O2 /dev/ad4s1c.bde

    Anmerkung:

    newfs(8) muss auf einer eingebundenen gbde-Partition ausgeführt werden, welche durch das Suffix *.bde identifiziert wird.

  6. Einhängen der verschlüsselten Partition

    Legen Sie einen Mountpunkt für das verschlüsselte Dateisystem an:

    # mkdir /private

    Hängen Sie das verschlüsselte Dateisystem ein:

    # mount /dev/ad4s1c.bde /private
  7. Überprüfen des verschlüsselten Dateisystems

    Das verschlüsselte Dateisystem sollte jetzt von df(1) erkannt werden 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

19.14.1.2. Einhängen eines existierenden verschlüsselten Dateisystems

Nach jedem Neustart müssen verschlüsselte Dateisysteme dem Kernel wieder bekannt gemacht werden, auf Fehler überprüft werden und eingehangen werden. Die dazu nötigen Befehle müssen als root durchgeführt werden.

  1. gbde-Partition im Kernel bekannt geben

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock

    Dieses Kommando fragt nach der Passphrase, die während der Initialisierung der verschlüsselten gbde-Partition festgelegt wurde.

  2. Prüfen des Dateisystems

    Das verschlüsselte Dateisystem kann noch nicht automatisch über /etc/fstab eingehangen werden. Daher muss es vor dem Einhängen mit fsck(8) geprüft werden:

    # fsck -p -t ffs /dev/ad4s1c.bde
  3. Einhängen des verschlüsselten Dateisystems

    # mount /dev/ad4s1c.bde /private

    Das verschlüsselte Dateisystem steht danach zur Verfügung.

19.14.1.2.1. Verschlüsselte Dateisysteme automatisch einhängen

Mit einem Skript können verschlüsselte Dateisysteme automatisch bekannt gegeben, geprüft und eingehangen werden. Wir raten Ihnen allerdings aus Sicherheitsgründen davon ab. Starten Sie das Skript manuell an der Konsole oder in einer ssh(1)-Sitzung.

Alternativ existiert ein rc.d-Skript, an das über Einträge in rc.conf(5) Argumente übergeben werden können:

gbde_autoattach_all="YES"
gbde_devices="ad4s1c"
gbde_lockdir="/etc/gbde"

Durch diese Argumente muss beim Systemstart die gbde-Passphrase eingegeben werden. Erst nach Eingabe der korrekten Passphrase wird die gbde-verschlüsselte Partition automatisch in den Verzeichnisbaum eingehängt. Dieses Vorgehen ist nützlich, wenn gbde auf einem Laptop eingesetzt wird.

19.14.1.3. Kryptografische Methoden von gbde

gbde(8) benutzt den 128-Bit AES im CBC-Modus, um die Daten eines Sektors zu verschlüsseln. Jeder Sektor einer Festplatte wird mit einem unterschiedlichen AES-Schlüssel verschlüsselt. Weitere Informationen, unter anderem wie die Schlüssel für einen Sektor aus der gegebenen Passphrase ermittelt werden, finden Sie in gbde(4).

19.14.1.4. Kompatibilität

sysinstall(8) kann nicht mit verschlüsselten gbde-Geräten umgehen. Vor dem Start von sysinstall(8) sind alle *.bde-Geräte zu deaktivieren, da sysinstall(8) sonst bei der Gerätesuche abstürzt. Das im Beispiel verwendete Gerät wird mit dem folgenden Befehl deaktiviert:

# gbde detach /dev/ad4s1c

19.14.2. Plattenverschlüsselung mit geli

Beigetragen von Daniel Gerzo.

Mit geli ist eine alternative kryptografische GEOM-Klasse verfügbar. geli unterscheidet sich von gbde durch unterschiedliche Fähigkeiten und einen unterschiedlichen Ansatz für die Verschlüsselung.

Die wichtigsten Merkmale von geli(8) sind:

  • 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 beispielsweise 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.

  • geli erlaubt den Einsatz von zwei voneinander unabhängigen Schlüsseln, etwa einem privaten Schlüssel und einem Unternehmens-Schlüssel.

  • geli 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 Merkmale von geli finden Sie in geli(8).

Dieser Abschnitt beschreibt, wie geli im FreeBSD-Kernel aktiviert wird und wie ein geli-Verschlüsselungs-Provider angelegt wird.

Da der Kernel angepasst werden muss, werden root-Privilegien benötigt.

  1. Aufnahme der geli-Unterstützung in Ihre Kernelkonfigurationsdatei

    Stellen Sie bei einer angepassten Kernelkonfigurationsdatei sicher, dass diese Zeile enthalten ist:

    options GEOM_ELI
    device crypto

    Alternativ kann auch das geli-Kernelmodul beim Systemstart geladen werden, indem folgende Zeile in /boot/loader.conf eingefügt wird:

    geom_eli_load="YES"

    Ab sofort wird geli(8) vom Kernel unterstützt.

  2. Erzeugen des Master-Keys

    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.

    Um eine bessere Leistung zu erzielen, wird eine größere Sektorgröße, beispielsweise 4 KB, empfohlen.

    Der Master-Key wird durch eine Passphrase sowie, den Daten der Schlüsseldatei aus /dev/random geschützt. Die Sektorgröße des Providers /dev/da2.eli beträgt 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 Beispiel zeigt, dass auch mehr als eine Schlüsseldatei verwendet werden kann:

    # cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2
  3. Aktivieren des Providers mit dem erzeugten Schlüssel

    # geli attach -k /root/da2.key /dev/da2
    Enter passphrase:

    Dadurch wird die (Normaltext-)Gerätedatei /dev/da2.eli angelegt.

    # ls /dev/da2*
    /dev/da2  /dev/da2.eli
  4. Das neue Dateisystem erzeugen

    # dd if=/dev/random of=/dev/da2.eli bs=1m
    # newfs /dev/da2.eli
    # mount /dev/da2.eli /private

    Das verschlüsselte Dateisystem wird nun von df(1) angezeigt und kann ab sofort eingesetzt werden.

    # 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
  5. Das Dateisystem unmounten und den Provider deaktivieren

    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

Weitere Informationen zum Einsatz von geli finden Sie in geli(8).

19.14.2.1. Der Einsatz des geli- rc.d-Skripts

geli verfügt über ein rc.d-Skript, das den Einsatz von geli deutlich vereinfacht. Es folgt nun ein Beispiel, in dem geli über die Datei rc.conf(5) konfiguriert wird:

geli_devices="da2"
geli_da2_flags="-p -k /root/da2.key"

Durch diese Einträge wird /dev/da2 als geli-Provider festgelegt. Der Master-Key befindet sich in /root/da2.key. Beim Aktivieren des geli-Providers wird keine Passphrase abgefragt. Beachten Sie, dass dies nur dann möglich ist, wenn geli mit dem Parameter -P initialisiert wurde. Wird das System heruntergefahren, wird der geli-Provider zuvor deaktiviert.

Weitere Informationen zur Konfiguration der rc.d-Skripten finden Sie im Abschnitt rc.d des Handbuchs.

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>.