SDelete v2.04

Por Mark Russinovich

Publicado: 25 de noviembre de 2020

DescargarDescargar SDelete(518 KB)

Introducción

Una característica del cumplimiento de C2 de Windows NT/2000 (Win2K) es que implementa la protección de reutilización de objetos. Esto significa que cuando una aplicación asigna espacio de archivo o memoria virtual, no puede ver los datos almacenados anteriormente en los recursos que Windows NT/2K asigna para él. Windows NT llena la memoria y cero los sectores del disco donde se coloca un archivo antes de presentar 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 eliminarse sea 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, son seguros 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 para eliminar de forma segura los archivos existentes, así como para borrar de forma segura los datos de archivo que existan 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 del Departamento de Defensa para proporcionarle la confianza de que una vez eliminados con SDelete, los datos del archivo han desaparecido para siempre. Tenga en cuenta que SDelete elimina de forma segura los datos de archivo, pero no los nombres de archivo ubicados en espacio libre en disco.

Uso de SDelete

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

Uso:

sdelete [-p passes] [-r] [-s] [-q] <archivo o directorio> [...]

sdelete [-p passes] [-z|-c [porcentaje libre]] <letra de unidad [...]>

sdelete [-p passes] [-z|-c] <número de disco físico>

Parámetro Descripción
-c Espacio libre limpio. Especifique una cantidad de espacio de opción que se va a dejar libre para su uso por parte de un sistema en ejecución.
-p Especifica el número de pases de sobrescritura (el valor predeterminado es 1).
-r Quite Read-Only atributo.
-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.

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 de un disco están ocupados por datos pertenecientes a archivos comprimidos, dispersos y cifrados. Una vez que SDelete sabe qué clústeres contienen los datos del archivo, puede abrir el disco para el acceso sin procesar y sobrescribir esos clústeres.

Limpiar espacio libre presenta otro desafío. Dado que FAT y NTFS no proporcionan ningún medio para que una aplicación direccione directamente el espacio libre, SDelete tiene una de las dos opciones. La primera es que puede, al igual que para los archivos comprimidos, dispersos y cifrados, abra el disco para el acceso sin procesar y sobrescriba el espacio libre. Este enfoque sufre un gran problema: incluso si SDelete se codificaba para ser totalmente capaz de calcular las partes de espacio libre de unidades NTFS y FAT (algo que no es trivial), correría el riesgo de colisión con las operaciones de archivos activas que tienen lugar en el sistema. Por ejemplo, supongamos que SDelete determina que un clúster es gratuito y, en ese momento, el controlador del sistema de archivos (FAT, NTFS) decide asignar el clúster para un archivo que otra aplicación está modificando. El controlador del sistema de archivos escribe los nuevos datos en el clúster y, a continuación, SDelete viene y sobrescribe los datos escritos recién escritos: los nuevos datos del archivo han desaparecido. El problema es aún peor si el clúster se asigna para los metadatos del sistema de archivos, ya que SDelete dañará las estructuras del sistema de archivos en disco.

El segundo enfoque, y el que toma SDelete , es sobrescribir indirectamente el espacio libre. En primer lugar, SDelete asigna el archivo más grande que puede. SDelete lo hace con E/S de archivos no almacenados en caché para que el contenido de la caché del sistema de archivos NT no se inicie y reemplace por datos inútiles asociados con el archivo espaciado de SDelete. Dado que la E/S de archivos no almacenadas en caché debe estar alineada con el sector (512 bytes), es posible que haya algún espacio restante que no esté asignado para el archivo SDelete incluso cuando SDelete no pueda aumentar aún más el archivo. Para obtener cualquier espacio restante , SDelete siguiente asigna el archivo almacenado 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 se liberó anteriormente se limpia de forma segura.

En las unidades NTFS, el trabajo de SDelete no es necesariamente a través de después de asignar y sobrescribir los dos archivos. SDelete también debe rellenar todas las partes libres existentes de NTFS MFT (tabla de archivos maestros) con archivos que se ajusten a un registro 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 SDelete tiene que hacer para ocuparse del espacio libre de MFT es asignar el archivo más grande que puede , cuando el archivo ocupa todo el espacio disponible en un archivo NTFS de registro MFT impedirá que el archivo sea mayor, ya que no quedan clústeres libres en el disco (los dos archivos SDelete están asignados anteriormente). A continuación, SDelete repite el proceso. Cuando SDelete ya no puede crear un nuevo archivo, sabe que todos los registros anteriores libres en MFT se han rellenado completamente 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, cada vez que reemplaza cada carácter del nombre del archivo por 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 archivo al limpiar el espacio libre de disco es que eliminarlos requeriría la manipulación directa de las estructuras de directorio. 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.

DescargarDescargar SDelete(518 KB)

Se ejecuta en:

  • Cliente: Windows Vista y versiones posteriores
  • Servidor: Windows Server 2008 y versiones posteriores
  • Nano Server: 2016 y versiones posteriores