Daten sicher löschen
Die Hauptaufgabe eines Systemadministrators sind Schutz und Verfügbarmachung von Daten. Doch Daten müssen teilweise wieder sicher vernichtet werden. Dies ist beispielsweise der Fall, wenn alte Rechner oder Datenträger ausgesondert werden oder gesetzliche Aufbewahrungsfristen überschritten werden. In diesem Artikel wird gezeigt, welche Methoden zur sicheren Datenlöschung existieren, was bei den verschiedenen Datenträgern zu beachten ist und wie man die Datenvernichtung bereits im Vorfeld plant.
Möchte man sicherstellen, dass alle Daten auf einer Festplatte - oder zumindest einer Partition - überschrieben werden, muss man zu des Administrators Superwaffe dd(1) greifen. Man kann dd verwenden, um direkt auf Raw-Geräte zu schreiben, also unterhalb des Dateisystems. Ein simples dd if=/dev/wd0h of=/tmp/wd0h.dd schreibt den gesamten Inhalt der Partition wd0h in eine Datei. Umgekehrt kann man mit dd if=/tmp/container of=/dev/wd0h eine Datei auf die Partition schreiben lassen. Mithilfe der beiden Geräte /dev/zero und /dev/urandom kann man eine unendliche Folge von Nullen bzw. Pseudozufallsdaten erzeugen und auf eine Partition oder Festplatte schreiben lassen. Mit den Befehlen dd if=/dev/zero of=/dev/wd0h; dd if=/dev/urandom of=/dev/wd0h wird die Partition wd0h zuerst mit Nullen und dann mit Zufallsdaten überschrieben. Dabei wird jeder Block der Partition, auf den die Festplatte Zugriff hat, überschrieben. Ein derartiges Verfahren ist von der Technik her das sicherste, da die Daten direkt über das Raw-Gerät überschrieben werden. Es müssen lediglich hinreichend viele Durchläufe benutzt werden, wie beispielsweise in Abbildung dd-wipe gezeigt wird. Hierbei wird eine Schleife eingesetzt, die fünfmal durchlaufen wird.
In der Schleife wird die gesamte zweite IDE-Festplatte (wd1 ist die zweite Platte, die Partition d die gesamte Platte) dreimal mittels dd(1) beschrieben. Zuerst mit Nullen aus /dev/zero, dann mit Pseudozufallsdaten aus /dev/urandom und abschließend mit wipe(1) als Pseudozufallsgenerator. Die Option bs=2m setzt die Blockgröße auf 2 Megabyte. Dies erhöht den Schreibdurchsatz auf die Festplatte erheblich, als Wert sollte hier immer die Größe des Platten-Caches verwendet werden. Die Option progress gibt alle 50 Blöcke (also 50 * 2 MB = 100 MB) einen kleinen Punkt als Fortschrittsanzeige aus. In der letzten Zeile wird das Programm wipe(1) als Zufallsgenerator verwendet, da es wesentlich schneller ist als /dev/urandom. Die Option -o 2097152 setzt zwar die Größe der zu erzeugenden Zufallsdaten auf 2097152 Byte, also genau 2 MB, aber die Option -a überlädt -o und generiert solange Daten, bis das Gerät voll ist und dd(1) abbricht. Die meisten Festplatten lassen sich schneller schrubben, wenn beide Programme mit einer Blockgröße von 2 MB arbeiten.
# for i in `seq 1 5` > do > dd if=/dev/zero of=/dev/wd1d bs=2m progress=50 > dd if=/dev/urandom of=/dev/wd1d bs=2m progress=50 > wipe -T -x 1 -o 2097152 -a | dd of=/dev/wd1d bs=2m > done
Abbildung dd-wipe2 zeigt ein einfaches Shellskript, das insgesamt 33-mal eine Festplatte mit Zufallsdaten überschreibt. Dazu wird wipe(1) als Quelle für Zufallsdaten verwendet. Mit der Option -o 2097152 wird wipe(1) angewiesen, 2 MB große Blöcke zu schreiben. Dies erhöht den Durchsatz dramatisch gegenüber anderen Einstellungen. Auf meinem »IBM Thinkpad X24«-Laptop steigt der Schreibdurchsatz von 6 MB auf 10 MB, wenn die Blockgröße auf 2 MB gesetzt wird. Der einzustellende Wert hängt jedoch von der verwendeten Festplatte ab, sodass man ein paar Blockgrößen ausprobieren sollte. Das Programm dd(1) gibt beim Beenden immer die durchschnittlich geschriebenen Bytes je Sekunde aus, sodass sich etwas Experimentieren lohnt. Außerdem wird im Skript der Schreibcache jeder Platte abgeschaltet und zusätzlich nach jedem Durchlauf auf die Platte geschrieben. Die Maßnahme ist notwendig, da nicht alle IDE-Platten den Schreibcache wirklich abschalten.
#!/bin/sh if [ ! $DURCHLAEUFE ]; then DURCHLAEUFE=33 fi for i in $@ do if [ ! -b /dev/$i ]; then printf "\nDas Geraet /dev/$i existiert nicht!\n\n" else /sbin/dkctl $i setcache r for j in `seq 1 $DURCHLAEUFE` do printf "\n$j. Durchlauf auf Platte /dev/$i" /usr/pkg/bin/wipe -T -x1 -o 2097152 -a | \ /bin/dd of=/dev/$i bs=2m /sbin/dkctl $i synccache force done fi done
neb-wipe(1)
NetBSD-Wipe ist über Pkgsrc-WIP erhältlich. Es schreibt direkt auf ein Raw-Gerät. Dazu kann es Gutmann-Bitmuster verwenden oder Zufallsdaten erzeugen. Es können beliebig viele Durchläufe geschrieben werden. Der verwendete Pseudozufallszahlengenerator ist wesentlich schneller als /dev/urandom. Mit neb-wipe -r 33 /dev/sd0d überschreibt man die erste SCSI-Platte 33-mal mit Zufallsdaten.
buffer(1)
Buffer ist ein Zwischenpuffer, der für Magnetbänder entworfen wurde. Der Eingabefluss wird geglättet und zwischengespeichert, so dass das Bandlaufwerk nicht ständig vor- und zurückspulen muss, falls gelesene Daten ausbleiben.
Anstatt dd(1) sollte man buffer(1) verwenden, um direkt auf Bänder zu schreiben, insbesondere wenn erst Zufallsdaten generiert werden müssen. Bei schnellen Bändern empfiehlt es sich, die Zufallsdaten erst in eine Datei zu schreiben und diese dann auf das Band zu bringen.
Mit wipe -T -x1 -o 20971520 -a | dd of=wipedatei bs=1m count=2048; buffer -i wipedatei -o /dev/nrst0 wird zuerst eine 2 GB große Datei mit Zufallsdaten generiert und anschließend mit buffer auf das erste Bandlaufwerk geschrieben.
Darik's Boot and Nuke
Darik's Boot and Nuke (DBAN) ist eine Bootdiskette, die keine weiteren Komponenten benötigt und zum sicheren Löschen von Festplatten dient.
Die NetBSD/Schrubber Live-CD
Um eine Festplatte komplett zu putzen, benötigt man ein System mit bestimmten Werkzeugen. Zu diesem Zwecke habe ich eine NetBSD/Live-CD erstellt, die auf einem minimalistischen NetBSD 3.1 basiert und alle notwendigen Werkzeuge mitbringt. Das ISO-Image findet sich unter [12].
Mit der CD kann man einen beliebigen PC booten und zum Schrubben der Platten einsetzen. Einzige Voraussetzung ist ein bootfähiges CDROM-Laufwerk und unterstützte IDE- bzw. SCSI-Controller, was aber meist der Fall ist. Das System ist sehr minimalistisch, es gibt keine Manpages, keine einkompilierten Netzwerkkarten und sonstige Hardware, die nicht benötigt wird. Im Kernel sind alle verfügbaren IDE- und SCSI-Controller aktiviert, sodass nahezu jedes Massenspeichergerät angesprochen werden kann.

