USB-Sticks und SD-Karten sicher löschen

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.

Gerätebezeichnung finden

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!

Anzeige | ?

12 Kommentare zu “USB-Sticks und SD-Karten sicher löschen

  1. Hallo!

    Nimm statt /dev/zero einfach /dev/urandom. Das sind “Zufallszahlen”.
    1x genügt meistens aber für paranoide (wie mich ;-) darf es gerne auch 3x sein.

    Gruß
    Tim

  2. 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.

    • 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 :)

  3. 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.

  4. Da mir dd zu wenig “gesprächig” ist, nutze ich dcfldd. Kann man über die Standardrepositories nachinstallieren.

  5. 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

  6. 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

    • 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 ;-)

    • 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.

    • 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.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


4 − = drei

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>