Linux

ID #1084

Sicheres löschen von Daten

Quelle: http://www.pro-linux.de/berichte/sicheres-loeschen.html

 

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
o 0 Der Pseudozufallsgenerator wird nur einmal initialisiert
o 1 Der Pseudozufallsgenerator wird für jede Datei initialisiert
o 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.

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

 

Tags: dd wipe löschen secure sicher

Verwandte Artikel:

Letzte Änderung des Artikels: 2009-05-13 17:17
Verfasser des Artikels: Florian Schrön
Revision: 1.0

Digg it! Artikel ausdrucken Artikel weiterempfehlen Als PDF-Datei anzeigen
Übersetzungsvorschlag für Übersetzungsvorschlag für
Bewertung der Nützlichkeit dieses Artikels:

Durchschnittliche Bewertung: 0 von 5 (0 Bewertungen)

vollkommen überflüssig 1 2 3 4 5 sehr wertvoll

Kommentieren nicht möglich