Wie kann ich den Inhalt eines USB-Sticks sicher löschen, damit keine Daten wiederhergestellt werden können?

32

Ich möchte wissen, wie man ein USB-Flash-Laufwerk nach Möglichkeit über das Terminal löscht, damit keine Daten wiederhergestellt werden können.

Benutzer
quelle
31
Ein Flash-Laufwerk? Knacken Sie das Ding auf, hebeln Sie alle Chips von dem grünen Platinen-Ding ab und zerdrücken Sie sie zu klitzekleinen, glänzenden Stücken, und kaufen Sie dann noch einen. Physische Zerstörung ist wirklich der einzige Weg, um sicher zu sein, da all die Abnutzungserscheinungen und Sachen. Verwenden Sie in Zukunft die Festplattenverschlüsselung und verlieren Sie die Schlüssel |, wenn Sie sie nicht mehr benötigen.
Blacklight Shining
1
@BlacklightShining - das ist die einzig richtige Antwort. viele der billigen sticks sind auch recycelt.
mikeserv
1
@BlacklightShining Es funktioniert auch gut, daraus Plasma zu machen.
PyRulez
3
Wenn es für Sie wichtig ist, dass die Daten nicht wiederherstellbar sind, ist die einzige "sichere" Lösung die physische Zerstörung. Wenn es ausreicht, sich nur schwer wiederherstellen zu lassen, ist es wirklich nicht nötig, mehr als nur zu formatieren / zu überschreiben.
Sobrique
Brennen Sie es in einem Holzkohlefeuer und stellen Sie sicher, dass alle Teile eine rote Hitze erreichen.
Ben

Antworten:

47

TL / DR: Vergewissern Sie sich, dass Sie den richtigen Gerätenamen erhalten, dass dieser nicht aktiviert ist, und führen Sie so viele zufällige Überschreibungen durch, wie Sie sich leisten können. Sie können einen Löschbefehl für Flash-Hardware ausführen, wenn Sie über eine ausreichend aktuelle Distribution verfügen. Verwenden Sie bei diesen Überprüfungen immer das Laufwerk (wie / dev / sd h ) und nicht den Partitionsnamen (das wäre / dev / sd h1 ).

# dmesg|grep sdXX
[3600.000001] sd 6:0:0:0: [sdXX] 125106176 512-byte logical blocks: (64.0 GB/59.6 GiB)
# blkid|grep sdXX
/dev/sdXX1: PARTUUID="88a03bb2-ced8-4bb2-9883-0a51b4d460a8"
# df|grep /dev/sdXX
# shred -vzn8 /dev/sdXX
shred: /dev/sdXX: pass 1/9 (random)...
shred: /dev/sdXX: pass 1/9 (random)...46MiB/3.8GiB 1%
...
shred: /dev/sdXX: pass 9/9 (000000)...3.8GiB/3.8GiB 100%
# blkdiscard -s /dev/sdXX
blkdiscard: /dev/sdXX: BLKSECDISCARD ioctl failed: Operation not supported
# blkdiscard /dev/sdXX
blkdiscard: /dev/sdXX: BLKDISCARD ioctl failed: Operation not supported
#

Theoretisch ist das Überschreiben mit Null in ddOrdnung. Aufgrund der Art und Weise, wie die Interna eines Flash-Laufwerks aufgebaut sind, können bei Verwendung eines einzelnen Überschreibdurchgangs mehrere Datenebenen hinter den eigentlichen Blöcken verborgen sein, in denen noch verbleibende Informationen gespeichert sind.

In der Regel ist ein Teil des Flash-Speichers fehlerhaft und wird während der Herstellung entsprechend gekennzeichnet. Es gibt auch andere Teile, die schief gehen können (unveränderlich, unsetzbar oder unklar werden). Diese Teile müssen auch während der Lebensdauer als fehlerhaft markiert werden. Diese Informationen werden in einem reservierten Bereich auf denselben Chips wie Ihre Daten gespeichert. Dies ist einer der Gründe, warum ein 4-GB-USB-Stick keine Kapazität von 2 ^ 32 Byte aufweist.

Der Flash-Speicher ist auch intern in größeren Blöcken organisiert, manchmal viel größer als die Dateisysteme, die auf dem Laufwerk arbeiten. Eine typische Blockgröße des Dateisystems beträgt 4 KB. Die Flash-Segmente, die auf einmal gelöscht werden können, reichen von 64 KB bis hin zu mehreren Megabyte. Diese großen Blöcke können nur vollständig gelöscht werden, wodurch der gesamte Block auf einen bekannten Zustand zurückgesetzt wird (alle Einsen oder alle Nullen). Danach kann ein Datenschreibvorgang jedes der Bits ändern (ändern Sie die Standard-Einsen in Nullen, falls erforderlich, oder ändern Sie die Standard-Einsen in Einsen), jedoch nur einmal . Um eines der Bits wieder auf den Standardwert zurückzusetzen, muss das gesamte Segment erneut gelöscht werden!

Wenn Sie also einen 4-KB-Block ändern möchten (das Dateisystem wird aufgefordert, ein einzelnes Zeichen in der Mitte einer Datei zu ändern), muss der Flash-Controller alle 64 KB der alten Daten lesen und puffern, alle löschen und schreibe den neuen Inhalt zurück. Dies wäre sehr langsam, das Löschen von Segmenten ist die langsamste Operation. Außerdem kann ein Segment nur zeitlich begrenzt gelöscht werden (Zehntausende sind typisch). Wenn Sie also zu viele Änderungen an einer einzelnen Datei vornehmen, kann dies das Laufwerk schnell beschädigen.

Aber so wird es nicht gemacht. Intelligente Flash-Controller schreiben die neuen 4-KB-Daten einfach an eine andere Stelle und notieren, dass die Lesevorgänge auf diese 4-KB-Daten in der Mitte des alten Blocks umgeleitet werden sollen. Sie benötigen mehr Speicherplatz, als wir sehen können, um diese Informationen über Weiterleitungen zu speichern. Sie versuchen auch sicherzustellen, dass sie alle zugänglichen Segmente durchlaufen, um Daten zu speichern. Dies wird als Verschleißausgleich bezeichnet .

Dies bedeutet, dass sich normalerweise noch alte Daten auf dem Laufwerk befinden ! Wenn Sie gerade alle zugänglichen Blöcke gelöscht haben, behalten alle ausgeblendeten Blöcke immer noch eine recht aktuelle Version der Daten. Ob dies für einen Angreifer möglich ist, vor dem Ihre Daten geschützt werden sollen, ist eine andere Frage.

Wenn Sie eine ausreichend aktuelle Distribution haben und das USB-Laufwerk so programmiert ist, dass es sich um ein Flash-Laufwerk handelt, blkdiscardkönnen Sie den zugrunde liegenden TRIMVorgang verwenden, bei dem es sich um das oben beschriebene Segmentlöschen handelt. Es hat auch ein zusätzliches Flag, um sicherzustellen, dass selbst die unsichtbaren versteckten Daten von der Hardware vollständig gelöscht werden:

# blkdiscard -s /dev/myusbdevice

-s, --secure Führt eine sichere Löschung durch. Ein sicheres Verwerfen entspricht einem normalen Verwerfen, mit der Ausnahme, dass alle Kopien der verworfenen Blöcke, die möglicherweise durch die Garbage Collection erstellt wurden, ebenfalls gelöscht werden müssen. Dies erfordert Unterstützung vom Gerät.

Es wird nicht unbedingt funktionieren, wie ich oben gezeigt habe. Wenn Sie erhalten Operation not supported, unterstützen entweder Ihr Kernel, Ihre Dienstprogramme oder der USB-Gateway-Chip (der es dem Flash-Controller ermöglicht, über USB wie ein Laufwerk auszusehen) das Übergeben von TRIMBefehlen nicht. (Der Flash-Controller muss weiterhin in der Lage sein, Segmente selbstständig zu löschen.) Wenn dies vom Hersteller Ihres Laufwerks unterstützt wird, ist dies der sicherste Weg.

Eine andere, weniger sichere Möglichkeit, um sicherzustellen, dass weniger der alten Daten irgendwo verweilen, besteht darin, sie mehrmals mit zufälligen Werten zu überschreiben, sofern dies möglich ist.

Warum zufällig, fragst du? Stellen Sie sich vor, das USB-Laufwerk wäre zu intelligent und Sie hätten festgestellt, dass Sie einen Sektor löschen möchten, und hätten nur eine Änderung an einer Bitmap vorgenommen, die besagt, dass dieser Sektor jetzt frei ist und später gelöscht werden muss. Dies bedeutet, dass das Schreiben von Nullen beschleunigt werden kann, sodass ein Pendrive effizienter erscheint , oder? Ob Ihr Laufwerk es tut, ist schwer zu sagen.

Im Extremfall kann sich das Laufwerk von Anfang an daran erinnern, wie viel Sie gelöscht haben, und es muss lediglich etwa 4 Byte an Informationen gespeichert werden, um dies zu tun, und nichts aus den Daten löschen, die Sie löschen möchten. Alles so, dass es sehr schnell aussehen könnte.

Wenn Sie die Daten mit zufälligen, nicht vorhersehbaren Werten überschreiben, sind diese Optimierungen nicht möglich. Das Laufwerk muss also sicherstellen, dass die Daten in den Flash-Chips gespeichert werden. Sie können jedoch immer noch nicht ausschließen, dass einige der zuvor verwendeten Sektoren noch alte Daten enthalten. Das Löschen des Laufwerks war jedoch noch nicht wichtig, da es normalerweise nicht verfügbar ist. Nur der tatsächliche TRIMBefehl kann das garantieren.

Um das Überschreiben mit zufälligen Werten zu automatisieren, sollten Sie folgende Aspekte untersuchen shred:

# shred -vzn88 /dev/myusbdrive

Die verwendeten Optionen:

  • -v dafür, dass es den Fortschritt anzeigt
  • -z, um es als letzte Phase auf Null zu setzen
  • -n8 führt 8 zufällige Überschreibungsdurchläufe durch

Verwenden Sie nach Möglichkeit beide, blkdiscardund shredwenn blkdiscard -sdies von Ihrem Laufwerk unterstützt wird, ist dies die optimale Lösung, aber es kann nicht schaden, shredvorher einen Fehler in der Firmware auszuschließen.

Oh, und überprüfen Sie das Gerät, das Sie löschen möchten, immer doppelt und dreifach! dmesg kann Ihnen dabei helfen, das zuletzt eingefügte Gerät zu ermitteln, und es lohnt sich, den Gerätenamen, mit dem Sie löschen möchten ls -al, auch für die Knotennummern des Geräts und die blkidAusgabe zu überprüfen, um festzustellen , welche Partitionen möglicherweise verfügbar sind, die Sie NICHT verwenden will klären.

Verwenden Sie diese Befehle niemals auf einem internen Laufwerk, das Sie weiterhin verwenden möchten - blkdiscardfunktioniert nur auf Solid-State-Laufwerken, aber es lohnt sich nicht, Daten zu verlieren!

Es kann andere Möglichkeiten geben, Daten im Laufe der Technologie sicher zu löschen.

Eine andere Möglichkeit ist der ATA- SECURITY ERASEBefehl, der über hdparmBefehle ausgegeben werden kann. Nach meiner Erfahrung wird es auf Flash-Laufwerken nicht wirklich unterstützt. Es wurde für Enterprise-Festplatten entwickelt und ist nicht immer in kostengünstigen Speichergeräten implementiert.

Die TRIM/ DISCARD-Operation ist viel neuer als der SECURITY ERASEBefehl und wurde als Reaktion auf die Flash-Funktionen erstellt. Daher ist die Wahrscheinlichkeit, dass sie auch auf billigen USB-Laufwerken implementiert wird, sehr viel höher, sie ist aber immer noch nicht allgegenwärtig. Wenn Sie eine SD- / Micro-SD-Karte in einem USB-Dongle löschen möchten und melden, dass blkdiscardsie nicht unterstützt wird, können Sie einen anderen Dongle / Kartenleser verwenden und / oder dies in einem Gerät mit einem direkten SD- / MMC-Steckplatz tun .

chexum
quelle
Vielen Dank für die neuesten Informationen. blkdiscardist in Debian Jessie und nur in den letzten beiden Versionen von Ubuntu enthalten, nicht jedoch in Ubuntu LTS 14.04. blkdiscardwurde der Paketversion util-linux2.23 hinzugefügt .
RobertL
Wissen Sie, wie blkdiscardman die hdparmLösung in einem anderen Kommentar von @zhenech vergleicht (speziell der Link: ata.wiki.kernel.org/index.php/ATA_Secure_Erase ) ?
RobertL
Ich bin
mir
1
@RobertL Gleich, auf eine schlechte Art und Weise. Die meisten billigen Flash-Laufwerke implementieren weder ATA Secure Erase noch TRIM, sodass beide Methoden wahrscheinlich fehlschlagen werden.
Duskwuff
27

Mir ist klar, dass dies keine wirkliche Antwort auf Ihre Frage ist, aber der einfachste Weg besteht darin, das Laufwerk physisch zu zerstören. Wenn Sie sich genug Sorgen um die Sicherheit machen, um sicherzustellen, dass die Daten nicht wiederherstellbar sind, ist der Wert dieser Daten wahrscheinlich um ein Vielfaches höher als die Kosten des Laufwerks selbst, und die physische Methode ist billig und zuverlässig.

MPLewis
quelle
5
Wenn es sich um ein billiges, austauschbares Flash-Laufwerk handelt, gehen Sie auf jeden Fall mit physischer Zerstörung einher. Wenn Sie einen Hammer verwenden, stellen Sie sicher, dass Sie den tatsächlichen Speicherchip erhalten. Ich habe vor ein paar Wochen ein altes Flash-Laufwerk zum Spaß aufgeschlagen, und der größte Teil des physischen Volumens bestand aus Gehäuse und Luft.
Blacklight Shining
1
Abgesehen von meiner Antwort stimme ich voll und ganz zu - es ist einfach schwierig, sie über ssh-Zugriff in Stücke zu zerschlagen :) Angesichts der Unzuverlässigkeit dieser Dongles für die Datenspeicherung ist es überraschend schwierig, dieselben Daten tatsächlich loszuwerden.
Chexum
Einverstanden - Wenn es Ihnen wichtig ist, dass die Daten nicht wiederhergestellt werden können, ist die physische Zerstörung die einzige Option. Seien wir ehrlich, im Vergleich zum kommerziellen Wert der darauf gespeicherten Daten sind selbst die teuersten Laufwerke wahrscheinlich nicht so bedeutend. Wenn es nicht so wichtig ist, ist fast jedes Wischen / Überschreiben "gut genug".
Sobrique
1
Diese Methode ist nicht nur am effektivsten, sie macht auch am meisten Spaß. Verpassen Sie niemals die Gelegenheit, einen Vorschlaghammer zu benutzen und dafür bezahlt zu werden.
zetetic
2

Fast alle verfügbaren Funktionen zum sicheren Löschen wurden für das Drehen von Magnetmedien entwickelt, bei denen der Computer normalerweise den physischen Speicherort [1] der für die Datei verwendeten Blöcke bestimmen und über dieselben Blöcke schreiben kann. Solid-State-Speichercontrollerchips abstrahieren den physischen Speicherort der Daten vom System und verschieben sie gern.

Ihre Frage hängt wirklich davon ab, wer Ihre Daten sucht. Wenn Sie sich Gedanken über zufällige Verluste oder zufälligen Diebstahl machen, ist ein reguläres Format in Ordnung. Wenn Sie befürchten, von einem hochmotivierten, technisch kompetenten Benutzer mit erheblichen Ressourcen angesprochen zu werden [2], verbrennen Sie das Laufwerk einfach und geben Sie 10 USD für ein neues aus.

  1. Ja, es gibt eine logische Blockzuordnung. Der logische Block A wird jedoch immer dem physischen Block B zugeordnet.

  2. Diese Person öffnete das Laufwerk, zog den Speicherchip von der Karte und las den Flash-Speicher direkt unter Umgehung des Controllers

user149598
quelle
1

Der einfachste und schnellste Weg, den ich kenne, besteht darin, Nullen (0) auf das gesamte Laufwerk zu schreiben:

dd if=/dev/zero of=/dev/sdX

Wo /dev/sdXbefindet sich der Geräteknoten Ihres USB-Sticks?

Einige schlagen einen gründlicheren Prozess mit mehr Iterationen und anderen Mustern vor. Hierzu stehen spezielle Dienstprogramme zur Verfügung. Das GNU-Paket coreutils enthält den shredBefehl speziell für diesen Zweck. Viele Leute nutzen auch badblocks -w, was Teil des e2fsprogs-Pakets ist. Unter FreeBSD wird das shredDienstprogramm aufgerufen gshredund sollte entweder in den Ports /usr/ports/sysutils/coreutilsoder verfügbar sein /usr/ports/sysutils/fileutils.

RobertL
quelle
Dies reicht nicht aus, um ein sicheres Löschen durchzuführen. Ich würde für mindestens 20 Serien von Schreibvorgängen von zufälligen Sachen gehen. Am besten würde ich ein Werkzeug zum sicheren Abwischen verwenden, zB Shred. Auch wenn manche Leute sagen, dass es keinen Sinn macht und dass Nullstellen genug ist - ich würde dem nicht vertrauen.
Monsun,
4
@ Monsune Das ist nur eine urbane Legende. Während einige Standards dies erfordern, scheint es keinen praktischen Angriff zu geben.
Gilles 'SO- hör auf, böse zu sein'
Flash-Laufwerke verwenden Verschleißausgleich, um die Flash-Zellen nicht zu schnell zu zerstören. Stellen Sie sich vor, das Laufwerk verfügt über 1200 Zellen, teilt Ihnen jedoch nur mit, dass 1000 Zellen vorhanden sind, und der Controller wählt aus, in welche Zelle er tatsächlich schreibt. Nach einem Tag haben Sie also 1000 Zellen gelöscht, aber nicht die 200 in Reserve. Diese können möglicherweise gelesen werden, indem Sie den eigentlichen Blitz an einen Controller ohne Reserve anschließen. Ich würde vorschlagen, ein sicheres Löschen nach der dd durchzuführen, aber nicht alle Flash-Medien unterstützen dies.
Zhenech
@ Shenzhenech, was ist "sicheres Löschen"?
RobertL
0

Dies sollte in der Lage sein, Ihr Flash-Laufwerk sicher zu löschen, wenn Sie es wiederverwenden möchten: http://linux.die.net/man/1/scrub Wenn nicht, dann schmelzen Sie es ...

Nathaniel Suchy
quelle