SDelete v2.05
Von Mark Russinovich
Datum der Veröffentlichung: 29. September 2023
SDelete herunterladen (304 KB)
Ein Feature der C2-Compliance von Windows NT/2000 (Win2K) ist die Implementierung Schutzes für die Wiederverwendung von Objekten. Dies bedeutet, dass eine Anwendung, wenn sie Dateispeicher oder virtuellen Arbeitsspeicher zuweist, keine Daten anzeigen kann, die zuvor in den Ressourcen gespeichert wurden, die Windows NT/2K dafür zugewiesen hat. Windows NT füllt den Arbeitsspeicher und die Sektoren auf dem Datenträger, auf dem eine Datei gespeichert wird, mit Nullen, bevor das Betriebssystem einer Anwendung einen der Ressourcentypen anzeigt. Die Wiederverwendung von Objekten schreibt jedoch nicht vor, dass der Speicherplatz, den eine Datei belegt, vor dem Löschen mit Nullen überschrieben wird. Dies liegt daran, dass Windows NT/2K unter der Annahme konzipiert ist, dass das Betriebssystem den Zugriff auf Systemressourcen steuert. Wenn das Betriebssystem jedoch nicht aktiv ist, ist es möglich, Editoren für Rohdaten und Wiederherstellungstools zu verwenden, um Daten anzuzeigen und wiederherzustellen, deren Zuweisung das Betriebssystem aufgeboben hat. Selbst wenn Sie Dateien mit dem verschlüsselnden Dateisystem (Encrypting File System, EFS) von Win2K verschlüsseln, bleiben die ursprünglichen unverschlüsselten Dateidaten einer Datei auf dem Datenträger vorhanden, nachdem eine neue verschlüsselte Version der Datei erstellt wurde.
Die einzige Möglichkeit, um sicherzustellen, dass gelöschte Dateien sowie Dateien, die Sie mit EFS verschlüsseln, vor der Wiederherstellung geschützt sind, besteht darin, eine Anwendung für sicheres Löschen zu verwenden. Anwendungen für sicheres Löschen überschreiben die Daten einer gelöschten Datei auf dem Datenträger mithilfe von Techniken, die dafür sorgen, dass Datenträgerdaten selbst mithilfe von Wiederherstellungstechnologie, die Muster in magnetischen Medien lesen kann, um schwach gelöschte Dateien wiederherzustellen, nicht wiederhergestellt werden können. SDelete (Secure Delete) ist eine solche Anwendung. Sie können SDelete sowohl zum sicheren Löschen vorhandener Dateien als auch zum sicheren Löschen aller Dateidaten verwenden, die in den nicht zugeordneten Bereichen eines Datenträgers vorhanden sind (einschließlich Dateien, die Sie bereits gelöscht oder verschlüsselt haben). SDelete implementiert den „Clearing and Sanitizing“-Standard DOD 5220.22-M des Verteidigungsministeriums, um Ihnen die Sicherheit zu geben, dass Ihre Dateidaten nach dem Löschen mit SDelete für immer gelöscht sind. Beachten Sie, dass SDelete Dateidaten sicher löscht, nicht aber Dateinamen, die sich im freien Speicherplatz befinden.
SDelete ist ein Befehlszeilenhilfsprogramm, das eine Reihe von Optionen bietet. Sie können eine oder mehrere Dateien und/oder Verzeichnisse löschen oder den freien Speicherplatz auf einem logischen Datenträger bereinigen. SDelete akzeptiert Platzhalterzeichen als Teil des Verzeichnis- oder Dateibezeichners.
Syntax:
sdelete [-p passes] [-r] [-s] [-q] [-f] <file or directory [...]>
sdelete [-p passes] [-q] [-z|-c] <drive letter [...]>
sdelete [-p passes] [-q] [-z|-c] <physical disk number [...]>
Parameter | Beschreibung |
---|---|
-c | Bereinigt den freien Speicherplatz. |
-f | Erzwingen Sie, dass Argumenten, die nur Buchstaben enthalten, nicht als Datenträger, sondern als Datei/Verzeichnis behandelt werden. Dies ist nicht erforderlich, wenn das Argument andere Zeichen enthält (z. B. Pfadtrennzeichen oder Dateierweiterungen). |
-p | Gibt die Anzahl der Überschreibungsdurchläufe an (standardmäßig 1). |
-q | Stiller Modus. |
-r | Entfernt ein schreibgeschütztes Attribut. |
-s | Rekurs auf Unterverzeichnisse. |
-z | Kein (Zero) freier Speicherplatz (gut für die Optimierung virtueller Datenträger). |
-nobanner | Zeigt kein Startbanner und keine Copyrightmeldung an. |
- Datenträger dürfen keine Volumes haben, um bereinigt werden zu können.
- Schließen Sie für Laufwerkbuchstaben
:
ein, z. BD:
.
Das sichere Löschen einer Datei ohne besondere Attribute ist relativ einfach: Das Programm zum sicheren Löschen überschreibt die Datei einfach mit dem Muster des sicheren Löschvorgangs. Schwieriger ist das sichere Löschen von komprimierten, verschlüsselten und Sparse-Windows NT/2K-Dateien sowie das sichere Bereinigen von freiem Speicherplatz auf Datenträgern.
Komprimierte, verschlüsselte und Sparsedaten werden von NTFS in Blöcken mit 16 Clustern verwaltet. Wenn ein Programm in einen vorhandenen Bereich einer solchen Datei schreibt, weist NTFS neuen Speicherplatz auf dem Datenträger zu, um die neuen Daten zu speichern, und nachdem die neuen Daten geschrieben wurden, wird die Zuweisung auf die Cluster aufgehoben, die zuvor von der Datei belegt wurden. NTFS verfolgt diesen konservativen Ansatz aus Gründen der Datenintegrität, und bei komprimierten und Sparsedaten, wenn eine neue Zuordnung größer ist als die vorhandene (die neuen komprimierten Daten sind größer als die alten). Daher ist das Überschreiben einer solchen Datei, um den Inhalt der Datei vom Datenträger zu löschen, keinen Erfolg.
Für solche Dateitypen benötigt SDelete die Defragmentierungs-API. Mithilfe der Defragmentierungs-API kann SDelete genau bestimmen, welche Cluster auf einem Datenträger mit Daten belegt sind, die zu komprimierten, Sparse- und verschlüsselten Dateien gehören. Sobald SDelete weiß, welche Cluster die Daten der Datei enthalten, kann es den Datenträger für den Rohzugriff öffnen und diese Cluster überschreiben.
Eine weitere Herausforderung stellt die Bereinigung von freiem Speicher dar. Da FAT und NTFS einer Anwendung keine Möglichkeit bieten, freien Speicherplatz direkt zu adressieren, hätte SDelete prinzipiell zwei Möglichkeiten. Die erste würde darin bestehen, dass es, wie bei komprimierten, Sparse- und verschlüsselten Dateien, den Datenträger für den Rohzugriff öffnet und den freien Speicherplatz überschreibt. Dieser Ansatz leidet unter einem großen Problem: Selbst wenn SDelete so codiert wäre, dass das Tool die freien Speicherplatzanteile von NTFS- und FAT-Laufwerken vollständig berechnen könnte (etwas, das nicht trivial ist), würde das Risiko einer Kollision mit aktiven Dateibearbeitungsvorgängen bestehen, die auf dem System stattfinden. Angenommen, SDelete bestimmt, dass ein Cluster frei ist, und gerade in diesem Moment entscheidet sich der Dateisystemtreiber (FAT, NTFS), den Cluster für eine Datei zuzuweisen, die eine andere Anwendung ändert. Dann würde der Dateisystemtreiber die neuen Daten in den Cluster schreiben, und SDelete die frisch geschriebenen Daten überschreiben. Damit wären die neuen Daten der Datei verloren. Das Problem ist noch schlimmer, wenn der Cluster für Dateisystemmetadaten zugeordnet wird, da SDelete die Strukturen des Dateisystems auf dem Datenträger beschädigen würde.
Der zweite Ansatz, das ist der, den SDelete tatsächlich verwendet, besteht darin, den freien Speicherplatz indirekt zu überschreiben. Zunächst weist SDelete die größte Datei zu, die es zuweisen kann. SDelete führt dies mithilfe von nicht zwischengespeicherten Datei-E/A aus, sodass der Inhalt des NT-Dateisystemcaches nicht gelöscht und durch nutzlose Daten der SDelete-Datei ersetzt wird. Da nicht zwischengespeicherte Datei-E/A nach Sektoren (512 Byte) ausgerichtet sein muss, kann es sein, dass für die SDelete-Datei noch Speicherplatz frei bleibt, auch wenn SDelete die Datei nicht weiter vergrößern kann. Um jeglichen verbleibenden Speicherplatz zu überschreiben, weist SDelete als Nächstes die größte zwischengespeicherte Datei zu, die es zuweisen kann. Für beide Dateien führt SDelete eine sichere Überschreibung durch, um sicherzustellen, dass der gesamte zuvor freie Speicherplatz sicher bereinigt wird.
Auf NTFS-Laufwerken ist der Auftrag von SDelete damit noch nicht unbedingt abgeschlossen, nachdem die beiden Dateien zugeordnet und überschrieben wurden. SDelete muss auch alle vorhandenen freien Bereiche des NTFS MFT (Master File Table) mit Dateien füllen, die in einen MFT-Datensatz passen. Ein MFT-Datensatz ist in der Regel 1 KB groß, und jede Datei oder jedes Verzeichnis auf einem Datenträger erfordert mindestens einen MFT-Eintrag. Kleine Dateien werden vollständig in ihrem MFT-Datensatz gespeichert, während Dateien, die nicht in einen Datensatz passen, Cluster außerhalb des MFT zugeordnet werden. Alles, was SDelete tun muss, um den freien MFT-Speicherplatz zu überschreiben, ist, die größte Datei zuzuweisen, die es zuweisen kann. Wenn die Datei den gesamten verfügbaren Speicherplatz in einem MFT-Datensatz belegt, verhindert NTFS, dass die Datei größer wird, da keine freien Cluster mehr auf dem Datenträger vorhanden sind (sie werden von den beiden Dateien besetzt, die zuvor von SDelete zugewiesen wurden). SDelete wiederholt dann den Vorgang. Wenn SDelete nicht einmal mehr eine neue Datei erstellen kann, weiß es, dass alle zuvor freien Datensätze im MFT vollständig mit sicher überschriebenen Dateien gefüllt wurden.
Um die Dateinamen einer Datei zu überschreiben, die Sie löschen wollen, benennt SDelete die Datei 26 Mal um, wobei jedes Zeichen des Dateinamens durch ein aufeinanderfolgendes alphabetisches Zeichen ersetzt wird. Beispielsweise würde die erste Umbenennung von „foo.txt“ „AAA.AAA“ lauten.
Der Grund dafür, dass SDelete Dateinamen beim Bereinigen des freien Speicherplatzes nicht sicher löscht, besteht darin, dass das Löschen eine direkte Manipulation der Verzeichnisstrukturen erfordern würde. Verzeichnisstrukturen können freien Speicherplatz haben, der gelöschte Dateinamen enthält. Der freie Verzeichnisspeicherplatz ist aber nicht für die Zuordnung zu anderen Dateien verfügbar. Daher hat SDelete keine Möglichkeit, diesen freien Speicherplatz so zuzuweisen, dass er sicher überschrieben werden kann.
SDelete herunterladen (304 KB)
Läuft auf:
- Client: Windows 10 und höher.
- Server: Alle Windows Server 2012 (x64) und höher.
- Nano Server: 2016 und höher.