SDelete v2.05

Por Mark Russinovich

Publicación: 29 de septiembre de 2023

DownloadDescargar SDelete(304 KB)

Introducción

Una característica de la compatibilidad con C2 de Windows NT/2000 (Win2K) es que implementa la protección contra la reutilización de objetos. Esto significa que cuando una aplicación asigna espacio de archivo o memoria virtual, no puede ver los datos que se almacenaron previamente en los recursos que Windows NT/2K le asigna. Windows NT llena la memoria con ceros y pone a cero los sectores en el disco donde se coloca un archivo antes de que presente cualquier tipo de recurso a una aplicación. Sin embargo, la reutilización de objetos no determina que el espacio que ocupa un archivo antes de que se elimine se ponga a cero. Esto se debe a que Windows NT/2K está diseñado con la suposición de que el sistema operativo controla el acceso a los recursos del sistema. Sin embargo, cuando el sistema operativo no está activo, es posible usar editores de discos sin procesar y herramientas de recuperación para ver y recuperar datos que el sistema operativo ha desasignado. Incluso cuando se cifran archivos con el sistema de cifrado de archivos (EFS) de Win2K, los datos originales del archivo sin cifrar se dejan en el disco después de crear una nueva versión cifrada del archivo.

La única manera de asegurarse de que los archivos eliminados, así como los archivos cifrados con EFS, estén a salvo de la recuperación es usar una aplicación de eliminación segura. Las aplicaciones de eliminación segura sobrescriben los datos en disco de un archivo eliminado mediante técnicas que se muestran para que los datos de disco sean irrecuperables, incluso mediante la tecnología de recuperación que puede leer patrones en medios magnéticos que revelan archivos eliminados débilmente. SDelete (Eliminación segura) es una aplicación de este tipo. Puede usar SDelete tanto para eliminar de forma segura los archivos existentes como para borrar de forma segura cualquier dato de archivo que exista en las partes no asignadas de un disco (incluidos los archivos que ya ha eliminado o cifrado). SDelete implementa el estándar DOD 5220.22-M de limpieza y saneamiento del Departamento de Defensa, para brindarle la confianza de que una vez eliminados con SDelete, los datos de sus archivos desaparecerán para siempre. Tenga en cuenta que SDelete elimina de forma segura los datos de los archivos, pero no los nombres de los archivos que se encuentran en el espacio libre del disco.

Uso de SDelete

SDelete es una utilidad de línea de comandos que admite una serie de opciones. En cualquier uso dado, le permite eliminar uno o más archivos y/o directorios, o limpiar el espacio libre en un disco lógico. SDelete acepta caracteres comodín como parte del directorio o especificador de archivo.

Uso:

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 [...]>
Parámetro Descripción
-c Espacio libre limpio.
-f Forzar que los argumentos que solo contienen letras sean tratados como un archivo o directorio en lugar de un disco.
No es necesario si el argumento contiene otros caracteres (separadores de ruta o extensiones de archivo, por ejemplo).
-p Especifica el número de pases de sobrescritura (el valor predeterminado es 1).
-q Modo silencioso.
-r Quite el atributo de solo lectura.
-s Subdirectorios recurse.
-z Espacio libre cero (adecuado para la optimización del disco virtual).
-nobanner No muestre el banner de inicio y el mensaje de copyright.
  • Los discos no deben tener ningún volumen para poder limpiarse.
  • Para las letras de unidad, incluya :, por ejemplo D:.

Funcionamiento de SDelete

Eliminar de forma segura un archivo que no tiene atributos especiales es relativamente sencillo: el programa de eliminación segura simplemente sobrescribe el archivo con el patrón de eliminación segura. Lo más complicado es eliminar de forma segura los archivos comprimidos, cifrados y dispersos de Windows NT/2K, y limpiar de forma segura los espacios libres de disco.

NTFS administra los bloques de 16 clústeres comprimidos, cifrados y dispersos. Si un programa escribe en una parte existente de este tipo de archivo NTFS asigna nuevo espacio en el disco para almacenar los nuevos datos y después de que se hayan escrito los nuevos datos, desasigna los clústeres ocupados previamente por el archivo. NTFS adopta este enfoque conservador por motivos relacionados con la integridad de los datos y, en el caso de archivos comprimidos y dispersos, en caso de que una nueva asignación sea mayor que la que existe (los nuevos datos comprimidos son mayores que los datos comprimidos antiguos). Por lo tanto, al sobrescribir este archivo no se eliminará correctamente el contenido del archivo del disco.

Para controlar estos tipos de archivos SDelete se basa en la API de desfragmentación. Con la API de desfragmentación, SDelete puede determinar con precisión qué clústeres en un disco están ocupados por datos pertenecientes a archivos comprimidos, dispersos y cifrados. Una vez que SDelete sabe qué grupos contienen los datos del archivo, puede abrir el disco para acceder sin procesar y sobrescribir esos grupos.

Limpiar el espacio libre presenta otro desafío. Dado que FAT y NTFS no proporcionan medios para que una aplicación aborde directamente el espacio libre, SDelete tiene una de dos opciones. La primera es que puede, como lo hace con archivos comprimidos, dispersos y cifrados, abrir el disco para acceso sin formato y sobrescribir el espacio libre. Este enfoque tiene un gran problema: incluso si SDelete estuviera codificado para ser totalmente capaz de calcular las porciones de espacio libre de las unidades NTFS y FAT (algo que no es trivial), correría el riesgo de colisionar con las operaciones de archivos activos que tienen lugar en el sistema. Por ejemplo, digamos que SDelete determina que un clúster está libre y, justo en ese momento, el controlador del sistema de archivos (FAT, NTFS) decide asignar el clúster a un archivo que está modificando otra aplicación. El controlador del sistema de archivos escribe los nuevos datos en el clúster, y luego aparece SDelete y sobrescribe los datos recién escritos: los nuevos datos del archivo desaparecen. El problema es aún peor si el clúster se asigna para metadatos del sistema de archivos, ya que SDelete corromperá las estructuras en disco del sistema de archivos.

El segundo enfoque, y el que adopta SDelete, es sobrescribir indirectamente el espacio libre. En primer lugar, SDelete asigna el archivo más grande que puede. SDelete hace esto utilizando E/S de archivos no almacenados en caché para que el contenido de la memoria caché del sistema de archivos NT no se elimine y se reemplace con datos inútiles asociados con el archivo que acapara espacio de SDelete. Dado que la E/S de archivos no almacenados en caché debe estar alineada con sectores (512 bytes), puede haber algo de espacio sobrante que no esté asignado para el archivo SDelete incluso cuando SDelete no puede aumentar más el archivo. Para tomar cualquier espacio restante SDelete luego asigna el archivo en caché más grande que puede. Para ambos archivos SDelete realiza una sobrescritura segura, lo que garantiza que todo el espacio en disco que antes estaba libre se limpie de forma segura.

En las unidades NTFS, el trabajo de SDelete no termina necesariamente después de que asigna y sobrescribe los dos archivos. SDelete también debe llenar las partes libres existentes de la MFT (tabla maestra de archivos) de NTFS con archivos que se ajusten a un registro de MFT. Un registro MFT suele tener un tamaño de 1 KB y cada archivo o directorio de un disco requiere al menos un registro MFT. Los archivos pequeños se almacenan completamente dentro de su registro MFT, mientras que los archivos que no caben dentro de un registro se asignan clústeres fuera de MFT. Todo lo que tiene que hacer SDelete para ocuparse del espacio MFT libre es asignar el archivo más grande que pueda, cuando el archivo ocupa todo el espacio disponible en un MFT Record NTFS evitará que el archivo crezca, ya que no quedan clústeres libres en el disco (están retenidos por los dos archivos SDelete previamente asignados). A continuación, SDelete repite el proceso. Cuando SDelete ya no puede ni siquiera crear un nuevo archivo, sabe que todos los registros previamente libres en la MFT se han llenado por completo con archivos sobrescritos de forma segura.

Para sobrescribir los nombres de archivo de un archivo que elimine, SDelete cambia el nombre del archivo 26 veces, reemplazando cada vez cada carácter del nombre del archivo con un carácter alfabético sucesivo. Por ejemplo, el primer cambio de nombre de "foo.txt" sería "AAA.AAA".

La razón por la que SDelete no elimina de forma segura los nombres de los archivos al limpiar el espacio libre del disco es que eliminarlos requeriría una manipulación directa de las estructuras de directorios. Las estructuras de directorio pueden tener espacio libre que contenga nombres de archivo eliminados, pero el espacio libre de directorios no está disponible para la asignación a otros archivos. Por lo tanto, SDelete no tiene forma de asignar este espacio libre para que pueda sobrescribirlo de forma segura.

DownloadDescargar SDelete(304 KB)

Se ejecuta en:

  • Cliente: Windows 10 y versiones posteriores.
  • Servidor: Windows Server 2012 y versiones posteriores.
  • Nano Server: 2016 y versiones posteriores.