SDelete v2.05

Av Mark Russinovich

Publicerad: 29 september 2023

DownloadLadda ned SDelete(304 KB)

Introduktion

En funktion i Windows NT/2000-talets (Win2K) C2-efterlevnad är att den implementerar skydd mot återanvändning av objekt. Det innebär att när ett program allokerar filutrymme eller virtuellt minne kan det inte visa data som tidigare lagrats i de resurser som Windows NT/2K allokerar för det. Windows NT nollfyller minne och nollar de sektorer på disken där en fil placeras innan någon av resurstyperna presenteras för ett program. Återanvändning av objekt kräver dock inte att det utrymme som en fil upptar innan den tas bort nollställs. Det beror på att Windows NT/2K är utformat med antagandet att operativsystemet styr åtkomsten till systemresurser. Men när operativsystemet inte är aktivt är det möjligt att använda rådatadiskredigerare och återställningsverktyg för att visa och återställa data som operativsystemet har frigjort. Även när du krypterar filer med Win2K:s krypterande filsystem (EFS) lämnas en fils ursprungliga okrypterade fildata kvar på disken efter att en ny krypterad version av filen har skapats.

Det enda sättet att se till att borttagna filer samt filer som du krypterar med EFS är säkra från återställning är att använda ett säkert borttagningsprogram. Säkra borttagningsprogram skriver över en borttagen fils data på disk med hjälp av tekniker som visas för att göra diskdata oåterkalleliga, även med hjälp av återställningsteknik som kan läsa mönster i magnetiska medier som avslöjar svagt borttagna filer. SDelete (Säker borttagning) är ett sådant program. Du kan använda SDelete både för att ta bort befintliga filer på ett säkert sätt, samt för att på ett säkert sätt radera alla fildata som finns i de oallokerade delarna av en disk (inklusive filer som du redan har tagit bort eller krypterat). SDelete implementerar department of defense clearing and sanitizing standard DOD 5220.22-M, för att ge dig förtroende för att dina fildata är borta för alltid när de har tagits bort med SDelete. Observera att SDelete tar bort fildata på ett säkert sätt, men inte filnamn som finns i ledigt diskutrymme.

Använda SDelete

SDelete är ett kommandoradsverktyg som tar ett antal alternativ. Vid varje given användning kan du ta bort en eller flera filer och/eller kataloger, eller rensa det lediga utrymmet på en logisk disk. SDelete accepterar jokertecken som en del av katalogen eller filspecificeraren.

Användning:

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 Beskrivning
-C Rensa ledigt utrymme.
-F Framtvinga argument som endast innehåller bokstäver som ska behandlas som en fil/katalog i stället för en disk.
Krävs inte om argumentet innehåller andra tecken (sökvägsavgränsare eller filnamnstillägg till exempel).
-P Anger antalet överskrivningspass (standardvärdet är 1).
-F Tyst läge.
-R Ta bort skrivskyddat attribut.
-S Recurse-underkataloger.
-Z Inget ledigt utrymme (bra för optimering av virtuella diskar).
-nobanner Visa inte startbanderollen och copyrightmeddelandet.
  • Diskar får inte ha några volymer för att kunna rensas.
  • För enhetsbeteckningar inkluderar du :, till exempel D:.

Så här fungerar SDelete

Det är relativt enkelt att ta bort en fil som inte har några särskilda attribut på ett säkert sätt: det säkra borttagningsprogrammet skriver helt enkelt över filen med mönstret för säker borttagning. Vad som är svårare är att på ett säkert sätt ta bort Windows NT/2K-komprimerade, krypterade och glesa filer och rensa diskutrymmen på ett säkert sätt.

Komprimerade, krypterade och glesa hanteras av NTFS i 16 klusterblock. Om ett program skriver till en befintlig del av en sådan fil allokerar NTFS nytt utrymme på disken för att lagra nya data och när de nya data har skrivits frigör de kluster som tidigare upptogs av filen. NTFS använder den här konservativa metoden av orsaker som rör dataintegritet, och när det gäller komprimerade och glesa filer, om en ny allokering är större än vad som finns (de nya komprimerade data är större än de gamla komprimerade data). Att skriva över en sådan fil kommer därför inte att lyckas ta bort filens innehåll från disken.

För att hantera dessa typer av filer förlitar sig SDelete på API:et för defragmentering. Med hjälp av defragmenterings-API :et kan SDelete avgöra exakt vilka kluster på en disk som används av data som tillhör komprimerade, glesa och krypterade filer. När SDelete vet vilka kluster som innehåller filens data kan den öppna disken för rådataåtkomst och skriva över dessa kluster.

Rengöring av ledigt utrymme utgör en annan utmaning. Eftersom FAT och NTFS inte ger något sätt för ett program att direkt adressera ledigt utrymme har SDelete ett av två alternativ. Den första är att den, precis som för komprimerade, glesa och krypterade filer, kan öppna disken för rå åtkomst och skriva över det lediga utrymmet. Den här metoden lider av ett stort problem: även om SDelete kodades för att vara fullt kapabel att beräkna de lediga utrymmesdelarna av NTFS- och FAT-enheter (något som inte är trivialt), skulle det riskera att kollision med aktiva filåtgärder som äger rum i systemet. Anta till exempel att SDelete fastställer att ett kluster är kostnadsfritt, och just då bestämmer sig filsystemdrivrutinen (FAT, NTFS) för att allokera klustret för en fil som ett annat program ändrar. Filsystemdrivrutinen skriver nya data till klustret och sedan kommer SDelete och skriver över nyskrivna data: filens nya data är borta. Problemet är ännu värre om klustret allokeras för filsystemmetadata eftersom SDelete kommer att skada filsystemets på diskstrukturer.

Den andra metoden, och den som SDelete använder, är att indirekt skriva över ledigt utrymme. Först allokerar SDelete den största fil den kan. SDelete gör detta med icke-cachelagrad fil-I/O så att innehållet i NT-filsystemets cache inte kastas ut och ersätts med värdelösa data som är associerade med SDeletes space-hogging-fil. Eftersom icke-cachelagrad fil-I/O måste vara sektorjusterad (512 byte) kan det finnas lite överblivet utrymme som inte allokeras för SDelete-filen även när SDelete inte kan utöka filen ytterligare. Om du vill hämta återstående utrymme allokerar SDelete nästa den största cachelagrade filen som den kan. För båda dessa filer utför SDelete en säker överskrivning, vilket säkerställer att allt diskutrymme som tidigare var ledigt rensas på ett säkert sätt.

På NTFS-enheter är SDeletes jobb inte nödvändigtvis igenom när det allokerar och skriver över de två filerna. SDelete måste också fylla befintliga kostnadsfria delar av NTFS MFT (huvudfiltabell) med filer som passar i en MFT-post. En MFT-post är vanligtvis 1 KB i storlek, och varje fil eller katalog på en disk kräver minst en MFT-post. Små filer lagras helt i MFT-posten, medan filer som inte får plats i en post allokeras kluster utanför MFT. Allt SDelete behöver göra för att ta hand om det kostnadsfria MFT-utrymmet är att allokera den största fil den kan – när filen upptar allt tillgängligt utrymme i en MFT-post NTFS förhindrar att filen blir större, eftersom det inte finns några lediga kluster kvar på disken (de lagras av de två filerna SDelete tidigare allokerade). SDelete upprepar sedan processen. När SDelete inte längre ens kan skapa en ny fil vet den att alla tidigare kostnadsfria poster i MFT har fyllts helt med säkert överskrivna filer.

Om du vill skriva över filnamn för en fil som du tar bort byter SDelete namn på filen 26 gånger, varje gång varje tecken i filens namn ersätts med ett på varandra följande alfabetiskt tecken. Det första namnet på "foo.txt" skulle till exempel vara "AAA. AAA".

Anledningen till att SDelete inte tar bort filnamn på ett säkert sätt när diskutrymme rensas är att borttagning av dem kräver direkt manipulering av katalogstrukturer. Katalogstrukturer kan ha ledigt utrymme som innehåller borttagna filnamn, men det lediga katalogutrymmet är inte tillgängligt för allokering till andra filer. Därför har SDelete inget sätt att allokera det här lediga utrymmet så att det kan skriva över det på ett säkert sätt.

DownloadLadda ned SDelete(304 KB)

Körs på:

  • Klient: Windows 10 och senare.
  • Server: Windows Server 2012 och senare.
  • Nano Server: 2016 och senare.