Sicheres löschen von Dateien und Partitionen

Trotz der Tatsache, dass bei den aktuellen Linux-Dateisystemen ext3 und ext4 eine Wiederherstellung von gelöschten Dateien im Vergleich zu ext2 nur schwer möglich ist, gibt es dennoch welche, bei denen auch das kleinste Risiko schon zu groß ist. Wie lassen sich also Daten so löschen, dass sie nicht wiederhergestellt werden können?

Wird eine Datei gelöscht, dann wird der eigentliche Inhalt, der in Datenblöcken gespeichert ist, nicht vernichtet, sondern nur als frei markiert und die Einträge in den Verzeichnisdateien, in denen die Zuordnungen der Dateinamen zu den Inodes zu finden sind, entfernt. Bei den Dateisystemen ext3 und ext4 werden zusätzlich auf Verwaltungsebene, den Inodes, auch die Zeiger auf die Datenblöcken überschrieben. Damit ist das Wiederherstellen von Dateien unter aktuellen Linux-Dateisystemen zwar komplizierter, aber bei Weitem nicht unmöglich. Erst wenn die Datenblöcke überschrieben wurden, kann die ursprüngliche Datei nicht wiederhergestellt werden. Dieses geschieht zwar auch automatisch, wenn das Betriebssystem den Speicher z.B. für eine neue Datei braucht, kann aber je nach Größe der Festplatte sehr lange dauern.

Sicheres löschen von Dateien

Zum sicheren Löschen einzelnen Dateien gibt es für Linux zwei sehr bekannte Programme, die auch bei Debian und Ubuntu in den offiziellen Paketquellen vorhanden sind. Diese überschreiben die Dateien vor dem löschen mehrmals mit Zufallsdaten oder Nullen, sodass diese anschließend weder per Programm, noch per forensischer Analyse wiederherstellen werden können.

shred

Installation unter Debian:

Eine Datei mit shred 25 Mal überschreiben und anschließend löschen:

Mit dem Parameter –n lässt sich die Anzahl der Schreibzyklen anpassen. Im nachfolgenden Beispiel wurde der Wert auf 3 gesenkt. Außerdem wird durch Hinzufügen des Parameters –v ein Fortschrittsbalken angezeigt.

Mit dem Parameter –z wird die Datei am Ende noch einmal mit Nullen überschrieben. Damit kann das Überschreiben nicht nur verschleiert werden, sondern in Verbindung mit dem Herabsetzen auf null Zyklen auch ausschließlich mit Nullen überschreiben werden. Alternativ kann dafür auch das Programm dd genutzt werden, welches im Kapitel „Sicheres löschen von Partitionen“ vorgestellt wird.

wipe

Das Programm wipe bietet im Vergleich zu shred nicht nur wesentlich mehr Einstellungsmöglichkeiten, sondern auch die Möglichkeit ganze Ordner zu überschreiben. Dieses lässt sich bei shred zwar auch in Verbindung mit find realisieren, ist dadurch aber komplizierter.

Installation unter Debian:

Eine Datei mit wipe Überschreiben und Löschen:

Durch den Parameter –r lassen sich rekursiv auch Ordner mit all ihren Unterordnern und Dateien überschreiben und löschen. Mit dem Parameter –f lässt sich zudem das Nachfragen, ob die Datei wirklich gelöscht werden soll, unterbinden.

Einschränkungen bei SSDs

Da die einzelnen Speicherzellen des bei SSDs verwendeten Flash-Speichers nur über eine begrenzte Anzahl an Schreibzyklen verfügen, werden die Schreibvorgänge mittels der Wear-Leveling-Algorithmen durch den Controller auf alle Zellen gleichmäßig verteilt. Das sorgt zwar für eine längere Lebensdauer der SSD, verhindert aber auch, dass beim Überschreiben einer Datei tatsächlich die ursprünglichen Speicherzellen genutzt werden. Weshalb ein sicheres Löschen mit den oben genannten Programmen bei SSDs nicht möglich ist.

Sicheres löschen von Partitionen

Zwar lassen sich auch ganze Partitionen mit den bereits vorgestellten Programmen überschreiben, da diese jedoch um einiges größer sind und das Überschreiben sehr lange dauern würde, ist hier das nutzen schnellerer Methoden ratsam. Zudem haben 2008 die Forensikexperten Craig Wright, Dave Kleiman und Shyaam Sundhar R.S. nachgewiesen, dass bereits nach einmaligem Überschreiben gelöschte Daten nicht wiederhergestellt werden können (siehe Overwriting Hard Drive Data: The Great Wiping Controversy).

Am einfachsten und schnellsten geht das Überschreiben von Partitionen mit dem Programm dd. Als Parameter werden die Eingabedatei (if=/dev/zero) und Ausgabedatei (of=PARTITION) angegeben. Bei der Eingabedatei wird im Beispiel /dev/zero verwendet, welches bei jedem Lesezugriff ein Nullzeichen zurückliefert, und als Ausgabedatei die zu überschreibende Partition (z.B. /dev/sda).

Außerdem kann auch die Größe der Blöcke, die standardmäßig bei 512 liegt, mit dem Parameter bs vergrößert werden, wodurch ein schnelleres lesen und schreiben möglich ist. Für den idealen Wert sollte zunächst mit dem Programm hdparm die Größe des internen Zwischenspeichers der Festplatte ermittelt werden. Dieser kann dann als Wert für die Blockgröße (bs) genutzt werden.