SDelete v2.04

Von Mark Russinovich

Veröffentlicht: 25. November 2020

DownloadSDelete(518 KB)

Einführung

Ein Feature der C2-Compliance von Windows NT/2000 (Windows NT/2000) besteht darin, dass der Objektwiederverwendungsschutz implementiert wird. Dies bedeutet, dass, wenn eine Anwendung Dateispeicher oder virtueller Arbeitsspeicher zuweist, keine Daten anzeigen können, die zuvor in den Ressourcen von Windows NT/2K gespeichert wurden. Windows NT füllt Arbeitsspeicher null und nullt die Sektoren auf dem Datenträger, in denen eine Datei platziert wird, bevor eine Art von Ressource einer Anwendung angezeigt wird. Die Objektwiederverwendung diktieren jedoch nicht, dass der Leerraum, den eine Datei belegt, bevor sie gelöscht wird, nulliert wird. Dies liegt daran, dass Windows NT/2K mit der Annahme konzipiert ist, dass das Betriebssystem den Zugriff auf Systemressourcen steuert. Wenn das Betriebssystem jedoch nicht aktiv ist, ist es möglich, unformatierte Datenträger-Editoren und Wiederherstellungstools zu verwenden, um Daten anzuzeigen und wiederherzustellen, die das Betriebssystem zugewiesen hat. Auch wenn Sie Dateien mit dem Verschlüsseln des Dateisystems (Encrypting File System, EFS) von Win2K verschlüsseln, bleibt die ursprüngliche unverschlüsselte Dateidaten auf dem Datenträger übrig, 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, sicher vor der Wiederherstellung sind, besteht darin, eine sichere Löschanwendung zu verwenden. Sichere Löschanwendungen überschreiben die On-Disk-Daten einer gelöschten Datei mithilfe von Techniken, die gezeigt werden, dass Datenträgerdaten nicht wiederhergestellt werden können, auch mithilfe der Wiederherstellungstechnologie, die Muster in magnetischen Medien lesen kann, die schwach gelöschte Dateien anzeigen. SDelete (Secure Delete) ist eine solche Anwendung. Sie können SDelete sowohl zum sicheren Löschen vorhandener Dateien als auch zum sicheren Löschen von Dateidaten verwenden, die in den nicht zugewiesenen Teilen eines Datenträgers vorhanden sind (einschließlich Dateien, die Sie bereits gelöscht oder verschlüsselt haben). SDelete implementiert das Department of Defense clearing and sanitizing Standard DOD 5220.22-M, um Ihnen vertrauen zu können, dass Ihre Dateidaten nach dem Löschen mit SDelete für immer verschwunden sind. Beachten Sie, dass SDelete Dateidaten sicher löscht, aber nicht Dateinamen, die sich im freien Speicherplatz befinden.

Verwenden von SDelete

SDelete ist ein Befehlszeilenprogramm, das eine Reihe von Optionen verwendet. In jeder bestimmten Verwendung können Sie eine oder mehrere Dateien und/oder Verzeichnisse löschen oder den freien Speicherplatz auf einem logischen Datenträger bereinigen. SDelete akzeptiert Wildcardzeichen als Teil des Verzeichnis- oder Dateibezeichners.

Syntax:

sdelete [-p pass] [-r] [-r] [-s] [-q] <Datei oder Verzeichnis> [...]

sdelete [-p pass] [-z|-c [prozentfreie]] <Laufwerkbuchstaben [...]>

sdelete [-p pass] [-z|-c] <physische Datenträgernummer>

Parameter BESCHREIBUNG
-c Sauberer freier Platz. Geben Sie eine Option an, die frei für die Verwendung durch ein ausgeführtes System bleiben soll.
-p Gibt die Anzahl der Überschreibungsdurchläufe an (Standard ist 1).
-r Entfernen Sie Read-Only Attribut.
-s Rekursieren von Unterverzeichnissen.
-z Null freier Speicherplatz (gut für die Optimierung virtueller Datenträger).
-nobanner Zeigen Sie nicht das Startbanner und die Copyrightnachricht an.

Funktionsweise von SDelete

Das sichere Löschen einer Datei, die keine speziellen Attribute aufweist, ist relativ gerade: Das sichere Löschprogramm überschreibt die Datei einfach mit dem muster für sicheres Löschen. Was noch schwieriger ist, ist das sichere Löschen von komprimierten, verschlüsselten und sparsamen Dateien von Windows NT/2K und sicheres Reinigen von freien Speicherplatz auf Datenträgern.

Komprimierte, verschlüsselte und sparse werden von NTFS in 16-Clusterblöcken verwaltet. Wenn ein Programm in einen vorhandenen Teil einer solchen Datei NTFS schreibt, wird neuer Speicherplatz auf dem Datenträger zugewiesen, um die neuen Daten zu speichern, und nachdem die neuen Daten geschrieben wurden, werden die Cluster, die zuvor von der Datei belegt wurden, zugeordnet. NTFS nimmt diesen konservativen Ansatz aus Gründen im Zusammenhang mit der Datenintegrität und im Falle komprimierter und sparsamer Dateien ein, falls eine neue Zuordnung größer ist als das, was vorhanden ist (die neuen komprimierten Daten sind größer als die alten komprimierten Daten). Daher kann das Überschreiben einer solchen Datei nicht erfolgreich sein, wenn der Inhalt der Datei vom Datenträger gelöscht wird.

Um diese Dateitypen zu behandeln, basiert SDelete auf der Defragmentierungs-API. Mithilfe der Defragmentierungs-API kann SDelete genau bestimmen, welche Cluster auf einem Datenträger von Daten belegt werden, die zu komprimierten, sparsamen und verschlüsselten Dateien gehören. Sobald SDelete weiß, welche Cluster die Daten der Datei enthalten, kann er den Datenträger für rohen Zugriff öffnen und diese Cluster überschreiben.

Die Reinigung des freien Raums stellt eine weitere Herausforderung dar. Da FAT und NTFS keine Mittel für eine Anwendung bereitstellen, um freien Speicherplatz direkt zu adressieren, verfügt SDelete über eine von zwei Optionen. Der erste ist, dass er wie für komprimierte, sparsame und verschlüsselte Dateien den Datenträger für den rohen Zugriff öffnen und den freien Speicherplatz überschreiben kann. Dieser Ansatz leidet unter einem großen Problem: Selbst wenn SDelete codiert wurde, um voll in der Lage zu sein, die Freiraumbereiche von NTFS- und FAT-Laufwerken zu berechnen (etwas, das nicht trivial ist), würde es das Risiko einer Kollision mit aktiven Dateivorgängen ausführen, die auf dem System stattfinden. Angenommen, SDelete bestimmt, dass ein Cluster frei ist, und nur zu diesem Zeitpunkt entscheidet sich der Dateisystemtreiber (FAT, NTFS), den Cluster für eine Datei zuzuweisen, die eine andere Anwendung ändert. Der Dateisystemtreiber schreibt die neuen Daten in den Cluster und überschreibt dann SDelete die frisch geschriebenen Daten: Die neuen Daten der Datei sind nicht mehr vorhanden. Das Problem ist noch schlimmer, wenn der Cluster für Dateisystemmetadaten zugewiesen wird, da SDelete die Strukturen des Dateisystems beschädigt.

Der zweite Ansatz, und der SDelete nimmt, besteht darin, indirekt freien Speicherplatz zu überschreiben. Zuerst weist SDelete die größte Datei zu, die sie kann. SDelete führt dies mit nicht zwischengespeicherter Datei-I/O aus, sodass der Inhalt des NT-Dateisystemcaches nicht ausgelöst und durch unbrauchbare Daten ersetzt wird, die der Leertastendatei von SDelete zugeordnet sind. Da nicht zwischengespeicherte Datei-I/O Sektor (512-Byte) ausgerichtet sein muss, gibt es möglicherweise einen Linkenbereich, der nicht für die SDelete-Datei zugewiesen ist, auch wenn SDelete die Datei nicht weiter vergrößern kann. Um alle verbleibenden Speicherplatze zu erhalten, weist SDelete als nächstes die größte zwischengespeicherte Datei zu, die sie kann. Für beide Dateien führt SDelete eine sichere Überschreibung durch, um sicherzustellen, dass der gesamte speicherplatzfreie Speicherplatz sicher bereinigt wird.

Auf NTFS-Laufwerken erfolgt der Auftrag von SDelete nicht unbedingt, nachdem es die beiden Dateien zugewiesen und überschrieben hat. SDelete muss auch alle vorhandenen freien Teile der NTFS MFT (Master File Table) mit Dateien füllen, die in einen MFT-Eintrag passen. Ein MFT-Eintrag ist normalerweise 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 der MFT zugeordnet werden. Alle SDelete muss dafür sorgen, dass der freie MFT-Speicherplatz die größte Datei zugewiesen wird, die sie kann – wenn die Datei den gesamten verfügbaren Speicherplatz in einem MFT-Datensatz NTFS belegt, verhindert, dass die Datei größer wird, da auf dem Datenträger keine freien Cluster vorhanden sind (sie werden zuvor von den beiden Dateien SDelete zugewiesen). SDelete wiederholt dann den Prozess. Wenn SDelete keine neue Datei mehr erstellen kann, weiß es, dass alle zuvor kostenlosen Datensätze in der MFT vollständig mit sicher überschriebenen Dateien gefüllt wurden.

Wenn Sie Dateinamen einer datei überschreiben möchten, die Sie löschen, wird die Datei von SDelete jeweils 26 Mal umbenannt, wenn jedes Zeichen des Namens der Datei durch ein aufeinander folgendes alphabetisches Zeichen ersetzt wird. Beispielsweise wäre die erste Umbenennung von "foo.txt" auf "AAA" festgelegt. AAA".

Der Grund dafür, dass SDelete keine Dateinamen sicher löscht, wenn speicherplatzfrei gereinigt wird, besteht darin, dass das Löschen sie eine direkte Manipulation von Verzeichnisstrukturen erfordert. Verzeichnisstrukturen können freien Speicherplatz haben, der gelöschte Dateinamen enthält, aber der freie Verzeichnisspeicher ist nicht für die Zuordnung zu anderen Dateien verfügbar. Daher hat SDelete keine Möglichkeit, diesen freien Speicherplatz zu vererbenden, damit er es sicher überschreiben kann.

DownloadSDelete(518 KB)

Wird ausgeführt auf:

  • Client: Windows Vista und höher
  • Server: Windows Server 2008 und höher
  • Nano Server: 2016 und höher