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.
Peter Gutmann
Peter Gutmann ist natürlich kein Standard, sondern Autor von [1]. In diesem Artikel analysiert er trefflich die Speichermethoden auf magnetischen Datenträgern. Sein Vorschlag zum sicheren Löschen ist ein 35-faches Überschreiben der Daten. Hierbei werden in den ersten und letzten vier Läufen Zufallsdaten geschrieben, ansonsten verwendet er spezielle Bitmuster. Diese speziellen Bitmuster sind an die Speicherverfahren der Festplatten (RLL, MFM) angepasst. Ziel ist es hierbei, mithilfe der Bitmuster das rekonstruierbare Signal der Nutzdaten zu verrauschen. Dabei werden beispielsweise erst die Folge 01010101 und danach das Komplement dazu, 10101010, geschrieben. Damit ist sichergestellt, dass jedes »Bit« einmal gedreht wurde.
Die Idee des Standards kann als sicher betrachtet werden. Allerdings ist die Implementierung durch die Einführung neuer Codierungsstandards veraltet, da nur MFM, (1,7)RLL und (2,7)RLL-kodierte Festplatten betrachtet werden. Anhand stochastischer Berechnungen (siehe [5]) kann man davon ausgehen, dass 33 Schreibvorgänge mit zufälligen Daten mit einer Wahrscheinlichkeit von 99% jedes Bit der Festplatte zweimal »umschalten«, die Nutzdaten also sehr sicher von der Platte schrubben. Sieben Durchläufe reichen aus, um jedes Bit der Platte einmal umzuorientieren. Abbildung dd-wipe2 zeigt ein Skript, das eine Festplatte 33-mal mit Zufallsdaten überschreibt. Dies kann mit den unten beschriebenen Programmen wipe(1) und dd(1) oder neb-wip(1) problemlos realisiert werden.
Programme zur Datenvernichtung
Im folgenden werde ich einige Programme vorstellen, die Daten durch mehrfaches Überschreiben löschen. Diese Verfahrensweise muss aber kritisch betrachtet werden, da es einige Probleme zu beachten gilt. Überschreibeverfahren funktionieren nicht, wenn das zugrunde liegende Dateisystem die Blockgröße dynamisch alloziert. Es ist schlicht nicht möglich, beim Überschreiben genau die Blöcke zu treffen, in denen die Nutzdaten liegen.
Empfehlenswert sind die angegebenen Löschprogramme im Dateisystem nur, wenn der Datenträger weiterhin unter physischer Kontrolle bleibt. Soll er ausgesondert werden, sind zerstörende Maßnahmen sinnvoller oder zumindest wie in oben beschrieben der Einsatz von dd(1), um direkt auf die Platte zu schreiben.
rm(1)
NetBSDs rm(1) kann mit der Option -P zu löschende Dateien mit 0xFF, 0x00 und Zufallsdaten überschreiben. Unter Linux leistet shred(1) Ähnliches. Damit können Daten gelöscht werden, die vor einfacher Wiederherstellung durch Software geschützt werden sollen. Der Standard schützt nicht vor Laboranalysen. Sicheres Löschen von Dateien im Dateisystem ist in NetBSD mit Bordmitteln nicht zu bewerkstelligen. Lediglich komplette Datenträger oder zumindest Partition lassen sich mit Zufallsdaten schrubben.
shred(1)
shred ist Bestandteil der GNU Fileutils und für Linux ungefähr das, was rm -P für NetBSD ist. Es besitzt einige Optionen, eigene Erfahrungen liegen jedoch nicht vor.
BCWipe
Dieses für nichtkommerzielle Zwecke kostenlose Programm implementiert das Löschen nach den DoD-Standards oder benutzerdefiniert. Zu finden auf jetico.com.
destroy(1)
In Pkgsrc findet sich das Programm destroy(1) von Shane Kinney. Destroy überschreibt Dateien je Durchlauf einmal mit Null und einmal mit Zufallsdaten. Es können 1 bis 20 Durchläufe durchgeführt werden. Dieses Verfahren kann bei hinreichend vielen Durchläufen (mindestens 7) als sicher angesehen werden.
wipe(1)
Wipe von Tom Vier ist als pkgsrc/sysutils/wipe installierbar. Es löscht komplette Verzeichnisbäume und ist wesentlich flexibler konfigurierbar als Destroy. Wichtige Optionen sind:
- -I unterbindet Bestätigungsanfrage an den Benutzer
- -r löscht rekursiv Verzeichnisse
- -s schaltet Fortschrittsanzeige aus
- -v zeigt Fortschrittsanzeige für jede Datei an
- -d löscht Dateien nach dem Überschreiben
- -D behält Dateien nach dem Überschreiben
- -n löscht spezielle Dateien (Fifos, Links, etc.)
- -N überspringt spezielle Dateien (Fifos, Links, etc.)
- -k oder -K sperrt Dateien während des Überschreibens bzw. sperrt sie nicht
- -o oder -O schreibt die Bitmuster an STDOUT oder in eine Datei
- -p x wiederholt alle Läufe x-mal
- -x x führt x Durchläufe mit Zufallsdaten durch, gilt pro Lauf, der mit -p festgelegt wurde, -p4 -x2 führt 4 * 2 = 8 Zufallsläufe durch
- -b überschreibt einmal mit angegebenem Byte
- -l x Sicherheitsstufe
- 0 Der Pseudozufallsgenerator wird nur einmal initialisiert
- 1 Der Pseudozufallsgenerator wird für jede Datei initialisiert
- 2 Der Pseudozufallsgenerator wird für jeden Durchlauf initialisiert
- -a oder -A überschreibt Daten, bis der Plattenplatz verbraucht ist. bzw. tut dies nicht
- -z oder -Z überschreibt Dateien einmal mit Nullen oder deaktiviert diesen Modus
- -t oder -T aktiviert oder deaktiviert statische Durchläufe
- -B und -S setzt die Anzahl und Größe der Sektoren eines Block-Gerätes
- -C maximale Dateipuffergröße
Standardmäßig läuft wipe mit den Optionen -ZdntVAkO -S512 -C4096 -l1 -x8 -p1, d.h. keine Nullen, löscht Dateien und spezielle Dateien, mit statischen Durchläufen, Fortschrittsanzeige, sperrt dabei die Dateien, schreibt in eine Datei mit Blockgröße von 512, Dateipuffergröße von 4096, der Pseudozufallsgenerator wird für jede Datei initialisiert, es wird achtmal mit Zufallsdaten überschrieben und das ganze Muster einmal durchlaufen.
Wipe kann auch als Quelle für andere Prozesse verwendet werden: So kann man mit wipe -T -x1 -o 20971520 | dd of=cont2 bs=20971520 20971520 Bytes, also 20 MB, Pseudozufallsdaten generieren und mit dd(1) in eine Datei schreiben lassen. Mit Wipe als Quelle dauert der Prozess knapp 1,5 Sekunden, mit /dev/urandom 26 Sekunden.
Ein Programm namens »wipe« ist auch in einigen Linux-Distributionen zu finden, doch handelt es sich offenbar um ein ganz anderes Programm, allerdings für den gleichen Zweck.
dd(1)
Wie bei wipe beschrieben, haben Überschreibe-Verfahren einige grundsätzliche Probleme. Sie funktionieren nicht auf Dateisystemen mit dynamischer Größenanpassung, können nicht-bekannte Kopien nicht überschreiben und erwischen keine Datei-Reste in Blöcken.

