Ab und zu kommt man in die Verlegenheit, einen USB-Stick oder eine SD-Karte verkaufen zu wollen. Wie inzwischen allseits bekannt sein sollte, reicht ein einfaches Formatieren des betreffenden Flash-Speichers nicht aus, da die Dateien mit einfachsten Mitteln wieder herstellbar sind. Das hat damit zu tun, dass beim Formatieren lediglich die Partitionsstruktur verändert wird, nicht aber die Daten an sich gelöscht oder gar überschrieben werden.
Damit die Daten wirklich verschwinden und auch mit spezieller Software nicht mehr herstellbar sind, müssen diese überschrieben werden. Genau das kann das kleine Progrämmchen dd, das unter Ubuntu bereits vorinstalliert ist. Der Befehl, um den ganzen Bereich des Flash-Speichers mit Nullen zu überschreiben, lautet folgendermaßen:
sudo dd if=/dev/zero of=/dev/sdX
Um die Bezeichnung in der Form /dev/sdX für das zu löschende Wechselmedium herauszufinden, kann z.B. die Laufwerksverwaltung genutzt werden.
An dieser Stelle ist anzumerken, dass das Tool dd keinerlei Rückmeldung über den Status ausgibt. Es ist also Warten angesagt. Wer zumindest angezeigt bekommen möchte bei welchen Blöcken das Tool gerade dran ist, der kann das Tool Buffer nutzen. Dieses muss mit folgendem Befehl heruntergeladen werden:
sudo apt-get install buffer
Jetzt könnt ihr euch den Fortschritt zum Beispiel in 100er-Schritten anzeigen lassen:
sudo dd if=/dev/zero | buffer -S 100k | sudo dd of=/dev/sdX
Wichtige Anmerkung
Dieses Verfahren ist grundsätzlich auch auf Magnetspeicher, sprich normale Festplatten, anwendbar. Allerdings reicht wegen der Funktionsweise von Magnetspeichern ein einfacher Durchgang möglicherweise nicht aus. Ich besitze hier nicht die nötigen Kenntnisse, um die Lage einzuschätzen. Wer sich durchs WWW liest, findet zu diesem Thema genauso viele Meinungen wie Seiten
Ich persönlich konnte meine Daten nach einem Durchgang nicht mehr wiederherstellen!

29. März 2012 um 19:17 Uhr
Hallo!
Nimm statt /dev/zero einfach /dev/urandom. Das sind “Zufallszahlen”.
darf es gerne auch 3x sein.
1x genügt meistens aber für paranoide (wie mich
Gruß
Tim
29. März 2012 um 19:25 Uhr
Danke für den Tipp!
29. März 2012 um 19:25 Uhr
Auf Grund des Wear-Levelings (https://en.wikipedia.org/wiki/Wear_leveling) kann man mit normalen Möglichkeiten USB-Sticks und SD-Karten nicht sicher löschen. Selbst wenn der gesamte Platz mit Nullen überschrieben wird, kann man einfach die Flash-Chips ausbauen und die (immer noch) vorhandenen Daten mit einem speziellen Gerät auslesen.
Für SSDs gibt es spezielle Secure-Erase Hardware-Befehle die die gesamte Festplatte löschen, aber für USB-Sticks und SD-Karten ist mir keine derartige Möglichkeit bekannt.
Wenn man wirklich auf Nummer sicher gehen will, darf man auf den Stick/die Karte von vornherein keine unverschlüsselten Daten speichern.
29. März 2012 um 19:29 Uhr
Die Problematik war mir bislang völlig unbekannt. Dennoch denke ich, dass die Daten mit “normalen” Methoden nicht wiederherstellbar sind. Wer lediglich ein paar Fotos löschen möchte, für den reicht die beschriebene Methode sicherlich aus. Wer geheime Dokumente gespeichert hat, sollte den Flash-Speicher wohl besser physisch zerstören
29. März 2012 um 20:11 Uhr
Magnetspeicher sind wesentlich einfacher zu überschreiben als Flash-Speicher, dort reicht ein einmaliges überschreiben aus. Bei Flash-Speichern ist das Ganze leider schwieriger, aber da dort die Reserveblöcke nur einen kleinen Anteil am gesamten Speicher ausmachen sind nach dem Überschreiben mit dd ebenfalls die meisten Daten nicht mehr zu rekonstruieren.
Generell sollte man hoch sensible Daten auf externen Datenträgern nur verschlüsselt ablegen.
30. März 2012 um 08:28 Uhr
Da mir dd zu wenig “gesprächig” ist, nutze ich dcfldd. Kann man über die Standardrepositories nachinstallieren.
30. März 2012 um 09:50 Uhr
pv ist deutlich hübscher als buffer, z.B. kann man mit pv -s xxG auch einen Fortschrittsbalken bis zur angegebenen Größe anzeigen, gleichzeitig werden Übertragungsgeschwindigkeit und ETA angezeigt
30. März 2012 um 10:12 Uhr
Hi Marius,
ich lesen den Fortschritt des dd Befehls mit dem “kill -SIGUSR1 ” aus.
Hierzu muss man nur herausfinden was die ps des dd Befehls ist:
$ ps -ef | grep dd
Anschließend auf die ProzessID deines dd Befehls den kill Befehl absetzen:
$ kill -10
Und in dem Terminal in dem der dd läuft wird eine Fortschrittsanzeige dargestellt
Gruß
Thorsten
30. März 2012 um 10:14 Uhr
Hm, hab nen kleinen Fehler, der zweite Code sollte heißen:
$ kill -10 PID
Hier hat es die “” Zeichen die ich um die PID gesetzt hatte weggenommen
30. März 2012 um 17:15 Uhr
Man kann auch killall verwenden, wenn nur eine Instanz von dd läuft. Das erspart die Bestimmung der PID:
$ dd if=/dev/null of=/dev/zero &
$ killall -USR1 dd
19648202+0 Datensätze ein
19648202+0 Datensätze aus
10059879424 Bytes (10 GB) kopiert, 4,9406 s, 2,0 GB/s
Wenn man einen Prozess mit & im Hintergrund startet wird einem übrigens die PID angezeigt. Das ist recht nützlich.
31. März 2012 um 15:27 Uhr
Hier in diesem Artikel ist beschrieben wieso einmaliges überschreiben reicht
http://www.heise.de/security/meldung/Sicheres-Loeschen-Einmal-ueberschreiben-genuegt-198816.html
31. März 2012 um 15:59 Uhr
Ja, wie ich bereits sagte
Im Internet findet man unzählige Meinungen zu diesem Thema. Für den normalen Benutzer dürfte das einmalige Überschreiben auf jeden Fall reichen.
Open-Source-Blog-Netzwerk
Themen
Tags