SDelete v2.05

Di Mark Russinovich

Pubblicato: 29 settembre 2023

DownloadScarica SDelete(304 KB)

Introduzione

Una delle funzionalità della conformità C2 di Windows NT/2000 (Win2K) è l'implementazione della protezione del riutilizzo degli oggetti. Ciò significa che quando un'applicazione alloca spazio per i file o la memoria virtuale non è in grado di visualizzare i dati archiviati in precedenza nelle risorse allocate da Windows NT/2K. Windows NT azzera la memoria e azzera i settori del disco in cui viene inserito un file prima di presentare uno dei due tipi di risorse a un'applicazione. Tuttavia, il riutilizzo degli oggetti non impone l'azzeramento dello spazio occupato da un file prima della sua eliminazione. Questo perché Windows NT/2K è stato progettato partendo dal presupposto che il sistema operativo controlla l'accesso alle risorse del sistema. Tuttavia, quando il sistema operativo non è attivo, è possibile usare editor e strumenti di recupero dei dischi non elaborati per visualizzare e ripristinare i dati deallocati dal sistema operativo. Anche quando si crittografano i file con il sistema di Encrypting File System (EFS) di Win2K, i dati originali non crittografati di un file rimangono sul disco dopo la creazione di una nuova versione crittografata del file.

L'unico modo per garantire che i file eliminati, così come quelli crittografati con EFS, siano al sicuro dal ripristino è usare un'applicazione di eliminazione sicura. Le applicazioni di eliminazione sicura sovrascrivono i dati di un file eliminato sul disco usando tecniche che hanno dimostrato di rendere i dati del disco irrecuperabili, anche usando una tecnologia di ripristino in grado di leggere i modelli dei supporti magnetici che rivelano i file eliminati in modo debole. SDelete (Secure Delete) è un'applicazione di questo tipo. È possibile usare SDelete sia per eliminare in modo sicuro i file esistenti, sia per cancellare in modo sicuro i dati dei file presenti nelle porzioni non allocate di un disco (inclusi i file già eliminati o crittografati). SDelete implementa lo standard di cancellazione e sanificazione DOD 5220.22-M del Dipartimento della Difesa, per garantire che una volta eliminati con SDelete, i dati dei file spariscano per sempre. Si noti che SDelete elimina in modo sicuro i dati dei file, ma non i nomi dei file situati nello spazio libero del disco.

Usare SDelete

SDelete è un'utilità a riga di comando che accetta diverse opzioni. In ogni caso, consente di eliminare uno o più file e/o directory o di ripulire lo spazio libero su un disco logico. SDelete accetta i caratteri jolly come parte dell’identificatore di directory o di file.

Utilizzo:

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 [...]>
Parametro Descrizione
-c Pulire lo spazio libero.
-f Forzare gli argomenti contenenti solo lettere a essere trattati come file/directory anziché come dischi.
Non obbligatorio se l'argomento contiene altri caratteri (ad esempio, separatori di percorso o estensioni di file).
-p Specifica il numero di passaggi di sovrascrittura (il valore predefinito è 1).
-q Modalità non interattiva.
-r Rimuovere l'attributo di sola lettura.
-s Ricorsione delle sottodirectory.
-z Zero spazio disponibile (valido per l'ottimizzazione del disco virtuale).
-nobanner Non visualizzare il banner di avvio e il messaggio di copyright.
  • I dischi non devono avere volumi per essere puliti.
  • Per le lettere delle unità, includere :, ad esempio D:.

Come funziona SDelete

L'eliminazione sicura di un file senza attributi speciali è relativamente semplice: il programma di eliminazione sicura sovrascrive semplicemente il file con il modello di eliminazione sicura. L'aspetto più complicato è l'eliminazione sicura dei file compressi, crittografati e sparsi di Windows NT/2K e la pulizia sicura degli spazi liberi del disco.

Compressi, crittografati e sparsi sono gestiti da NTFS in blocchi da 16 cluster. Se un programma scrive su una porzione esistente di un file di questo tipo, NTFS alloca nuovo spazio sul disco per archiviare i nuovi dati e, dopo che questi sono stati scritti, dealloca i cluster precedentemente occupati dal file. NTFS adotta questo approccio conservativo per ragioni legate all'integrità dei dati e, nel caso di file compressi e sparsi, nel caso in cui una nuova allocazione sia più grande di quella esistente (i nuovi dati compressi sono più grandi dei vecchi dati compressi). Pertanto, la sovrascrittura di un file di questo tipo non riuscirà a eliminarne il contenuto dal disco.

Per gestire questi tipi di file, SDelete si affida all'API di deframmentazione. Usando l'API di deframmentazione, SDelete è in grado di determinare con precisione quali cluster di un disco sono occupati da dati appartenenti a file compressi, sparsi e crittografati. Una volta che SDelete sa quali sono i cluster che contengono i dati del file, può aprire il disco per l'accesso non elaborato e sovrascrivere tali cluster.

La pulizia dello spazio libero rappresenta un'altra sfida. Poiché FAT e NTFS non forniscono alcuno strumento per gestire direttamente lo spazio libero, SDelete ha una delle due opzioni. Il primo è che può, come avviene per i file compressi, sparsi e crittografati, aprire il disco per l'accesso non elaborato e sovrascrivere lo spazio libero. Questo approccio soffre di un grosso problema: anche se SDelete fosse codificato per essere pienamente in grado di calcolare le porzioni di spazio libero delle unità NTFS e FAT (qualcosa che non è banale), correrebbe il rischio di collidere con le operazioni di file attive in corso nel sistema. Ad esempio, se SDelete determina che un cluster è libero e proprio in quel momento il driver del file system (FAT, NTFS) decide di allocare il cluster per un file che un'altra applicazione sta modificando. Il driver del file system scrive i nuovi dati nel cluster, quindi viene eseguito SDelete e sovrascrive i dati appena scritti: i nuovi dati del file non sono più disponibili. Il problema è anche peggiore se il cluster viene allocato per i metadati del file system, poiché SDelete danneggia le strutture del file system sul disco.

Il secondo approccio, quello adottato da SDelete, consiste nel sovrascrivere indirettamente lo spazio libero. Per prima cosa, SDelete alloca il file più grande possibile. SDelete lo fa usando I/O di file non memorizzati nella cache, in modo che il contenuto della cache del file system NT non venga gettato via e sostituito con dati inutili associati al file che richiedono spazio di SDelete. Poiché l'I/O dei file non memorizzati nella cache devono essere allineati ai settori (512 byte), è possibile che rimanga dello spazio non allocato per il file SDelete anche quando SDelete non può aumentare ulteriormente il file. Per recuperare tutto lo spazio rimanente, SDelete alloca il file più grande possibile nella memoria della cache. Per entrambi i file SDelete esegue una sovrascrittura sicura, assicurando che tutto lo spazio su disco precedentemente libero venga ripulito in modo sicuro.

Nelle unità NTFS il lavoro di SDelete non termina necessariamente dopo l'allocazione e la sovrascrittura dei due file. SDelete deve anche riempire qualsiasi porzione libera della MFT (Master File Table) NTFS con i file che rientrano in un record MFT. Un record MFT ha in genere una dimensione di 1 KB e ogni file o directory su un disco richiede almeno un record MFT. I file di piccole dimensioni vengono archiviati interamente all'interno del loro record MFT, mentre i file che non rientrano in un record vengono allocati in cluster esterni all'MFT. Tutto ciò che SDelete deve fare per occupare lo spazio libero MFT è allocare il file più grande possibile: quando il file occupa tutto lo spazio disponibile in un record MFT, NTFS impedisce che il file diventi più grande, poiché non ci sono più cluster liberi sul disco (sono occupati dai due file precedentemente allocati da SDelete). SDelete ripete quindi il processo. Quando SDelete non è più in grado di creare un nuovo file, sa che tutti i record precedentemente liberi nell'MFT sono stati completamente riempiti con file sovrascritti in modo sicuro.

Per sovrascrivere i nomi dei file eliminati, SDelete rinomina il file 26 volte, sostituendo ogni volta ogni carattere del nome del file con un carattere alfabetico successivo. Ad esempio, la prima ridenominazione di "pippo.txt" sarebbe "AAA.AAA".

Il motivo per cui SDelete non elimina in modo sicuro i nomi dei file quando pulisce lo spazio libero del disco è che la loro eliminazione richiederebbe la manipolazione diretta delle strutture delle directory. Le strutture di directory possono avere spazio libero contenente nomi di file cancellati, ma lo spazio libero della directory non è disponibile per l'allocazione di altri file. Di conseguenza, SDelete non ha modo di allocare questo spazio libero in modo da poterlo sovrascrivere in modo sicuro.

DownloadScarica SDelete(304 KB)

In esecuzione su:

  • Client: Windows 10 e versioni successive.
  • Server: Windows Server 2012 e versioni successive.
  • Nano Server: 2016 e versioni successive.