Securely wipe disk (Español)
La limpieza de un disco se realiza escribiendo nuevos datos sobre cada bit.
Casos de uso comunes
Borrar todos los datos que quedan en el dispositivo
El caso de uso más común para limpiar un dispositivo de forma completa e irrevocable será cuando el dispositivo se va a regalar o vender. Es posible que queden datos (sin cifrar) en el dispositivo y que desee protegerlos contra una investigación forense simple que puede ser un juego de niños con, por ejemplo, el software recuperación de archivos.
Si desea borrar rápidamente todo del disco, utilidades como /dev/zero
o patrones simples, permiten un rendimiento aceptable, en tanto que una aleatoriedad adecuada puede ser ventajosa en algunos casos que deberían tratarse para #Remanencia de datos.
Cada bit sobrescrito significa proporcionar un nivel de borrado de datos que no permite la recuperación con funciones normales del sistema (como las órdenes estándar ATA/SCSI) e interfaces de hardware. Cualquier software de recuperación de archivos mencionado anteriormente debería estar especializado con funcionalidades propietarias de hardware de almacenamiento.
En el caso de un disco HDD, la recreación de datos no será posible sin, al menos, órdenes de disco no documentadas o alterando el controlador o el firmware del dispositivo para que se lean, por ejemplo, sectores reasignados (bloques defectuosos que S.M.A.R.T. retiró de su uso).
Existen diferentes problemas de borrado relacionados con ciertas tecnologías de almacenamiento físico, en particular todos los dispositivos basados en memoria flash y almacenamiento magnético más antiguo (discos duros antiguos, disquetes, cintas).
Preparativos para el cifrado de dispositivos de bloque
Si desea preparar su unidad para configurar de forma segura el cifrado de dispositivo de bloque dentro del área borrada, debe usar #Datos aleatorios generados por una cadena de números aleatorios criptográficamente segura (denominado RNG en este artículo en adelante).
Véase también Wikipedia:Random number generation.
/dev/zero
, patrones simples (badblocks, por ejemplo) u otros datos no aleatorios antes de configurar el cifrado de un dispositivo de bloque, si quiere hacerlo bien.Remanencia de datos
Véase también Wikipedia:es:Persistencia de datos.
La representación residual de los datos puede permanecer incluso después de que se hayan hecho intentos para eliminar o borrar los datos.
Los datos residuales pueden borrarse escribiendo datos (aleatorios) en el disco con una o más iteraciones. Sin embargo, más de una iteración puede no disminuir significativamente la posibilidad de reconstruir los datos de las unidades de disco duro. Vea #Magnetismo residual.
Sistema operativo, programas y sistema de archivos
El sistema operativo, los programas ejecutados o los sistemas de archivos journaling pueden copiar sus datos no cifrados en todo el dispositivo de bloque. Al escribir en discos planos, esto solo debería ser relevante en conjunción con uno de los anteriores.
Si los datos pueden ubicarse exactamente en el disco y nunca se copiaron en ningún otro lugar, el borrado con datos aleatorios puede ser exhaustivo e impresionantemente rápido siempre que haya suficiente entropía en el agrupamiento.
Un buen ejemplo es cryptsetup utilizando /dev/urandom
para limpiar los espacios de keyslots de LUKS.
Problemas específicos de hardware
Memoria flash
La amplificación de la escritura y otras características hacen de la memoria flash (donde se incluye explícitamente SSD) un objetivo obstinado para un borrado confiable. Como hay mucha abstracción transparente entre los datos tal y como se ven en el chip de la controladora del dispositivo y los datos expuestos en el sistema operativo, nunca se sobrescribe la posición y borrar bloques o archivos particulares no es fiable.
Otras «características» como la compresión transparente (todos los SSD SandForce) pueden comprimir su /dev/zero o patrón de flujo, por lo que si el borrado es rápido más allá de lo razonable, este podría ser el caso.
Desensamblar dispositivos de memoria flash, desoldar los chips y analizar el contenido de datos sin la controladora de por medio es posible sin dificultad utilizando hardware simple. Las empresas de recuperación de datos lo hacen por poco dinero.
Para más información, vea:
- Solid state drive/Memory cell clearing
- Borrado fiable de datos de unidades de estado sólido basadas en flash.
- #Seleccionar un objetivo
Sectores defectuosos marcados
Si un disco duro marca un sector como defectuoso, lo acordona y la sección se vuelve imposible de escribir a través del software. Por lo tanto, una sobrescritura completa no lo alcanzaría. Sin embargo, debido al tamaño de los bloques, estas secciones solo equivaldrían a unos pocos KB teóricamente recuperables.
Magnetismo residual
Una sola sobrescritura completa con ceros o datos aleatorios no genera datos recuperables en un dispositivo de almacenamiento moderno de alta densidad.[1] No obstante, las indicaciones se refieren a bits residuales únicos; la reconstrucción de los patrones de bytes generalmente no es factible.[2] Consulte también [3], [4] y [5].
Seleccionar un objetivo
Utilice fdisk (Español) para localizar todos los dispositivos de lectura/escritura a los que el usuario tiene acceso de lectura.
Verifique en la salida las líneas que comienzan con dispositivos como /dev/sd"X"
.
Este es un ejemplo para un disco HDD formateado para arrancar un sistema Linux:
# fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes, 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00ff784a Device Boot Start End Blocks Id System /dev/sda1 * 2048 206847 102400 83 Linux /dev/sda2 206848 488397167 244095160 83 Linux
O la imagen de instalación de Arch escrita en una memoria USB de 4GB:
# fdisk -l
Disk /dev/sdb: 4075 MB, 4075290624 bytes, 7959552 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x526e236e Device Boot Start End Blocks Id System /dev/sdb1 * 0 802815 401408 17 Hidden HPFS/NTFS
Si le preocupa causar un daño involuntario a datos importantes del equipo principal, considere usar un entorno aislado como un entorno virtual (VirtualBox, VMWare, QEMU, etc...) con unidades de disco conectadas directamente a él o un único equipo con un solo disco de almacenamiento que necesita limpiar arrancado desde un soporte Live (USB, CD, PXE, etc.) o utilice un script para evitar limpiar particiones montadas por un error tipográfico.
Seleccionar un tamaño de bloque
Vea también Wikipedia:Dd (Unix)#Block size, blocksize io-limits.
Si tiene un disco duro de formato avanzado, se recomienda que especifique un tamaño de bloque mayor que los 512 bytes predeterminados. Para acelerar el proceso de sobrescritura, elija un tamaño de bloque que coincida con la geometría física de su unidad, agregando la opción de tamaño de bloque a la orden dd (es decir, bs=4096
para 4KB).
fdisk muestra el tamaño del sector físico y lógico para cada disco. Alternativamente, sysfs expone información:
/sys/block/sdX/size /sys/block/sdX/queue/physical_block_size /sys/block/sdX/queue/logical_block_size /sys/block/sdX/sdXY/alignment_offset /sys/block/sdX/sdXY/start /sys/block/sdX/sdXY/size
genwipe.sh /dev/sd"XY"
.Calcular bloques para borrar manualmente
A continuación, la determinación del área de datos a borrar se realiza en un ejemplo.
Un dispositivo de almacenamiento de bloque contiene sectores y un tamaño único para cada sector que puede usarse para calcular el tamaño completo del dispositivo en bytes. Puede hacerlo multiplicando el número de sectores con el tamaño del sector.
Como ejemplo, vamos a usar los parámetros con la orden dd para borrar una partición:
# dd if=fuente_datos of=/dev/sd"X" bs=tamaño_sector count=número_sector seek=sector_inicio_partición status=progress
Aquí verá solo una parte de la salida de la orden fdisk -l /dev/sdX
ejecutada con root, que muestra la información de la partición de ejemplo:
Device Boot Start End Sectors Size Id Type /dev/sd"XA" 2048 3839711231 3839709184 1,8T 83 Linux /dev/sd"XB" 3839711232 3907029167 67317936 32,1G 5 Extended
La primera línea de la salida de fdisk muestra el tamaño del disco en bytes y los sectores lógicos:
Disk /dev/sd"X": 1,8 TiB, 2000398934016 bytes, 3907029168 sectors
Para calcular el tamaño de un solo sector lógico, utilice echo $((2000398934016 / 3907029168))
o utilice los datos de la segunda línea de salida de fdisk:
Units: sectors of 1 * 512 = 512 bytes
Para calcular los sectores físicos que harán que funcione más rápido, podemos usar la tercera línea:
Sector size (logical/physical): 512 bytes / 4096 bytes
Para obtener el tamaño del disco en sectores físicos, necesitará el tamaño del disco conocido en bytes dividido por el tamaño de un solo sector físico echo $((2000398934016 / 4096))
, puede obtener el tamaño del dispositivo de almacenamiento o partición del mismo con la orden blockdev --getsize64 /dev/sd"XY"
.
- En los ejemplos siguientes utilizaremos el tamaño del sector lógico.
- Puede incluso borrar el espacio en disco no asignado con una orden
dd
calculando la diferencia entre el final de uno y el inicio de la siguiente partición.
Para borrar la partición /dev/sd"XA"
, los parámetros de ejemplo con sectores lógicos se usarían así:
Start=2048 End=3839711231 BytesInSector=512
Para utilizar la dirección de inicio de la partición en el dispositivo para establecerla en la opción seek=
:
# dd if=data_source of=/dev/sd"X" bs=${BytesInSector} count=${End - Start} seek=${Start} status=progress
Para utilizar el tamaño de las particiones (en sectores lógicos):
LogicalSectors=3839709184
# dd if=data_source of=/dev/sd"XA" bs=${BytesInSector} count=${LogicalSectors} status=progress
O, para borrar todo el disco utilizando los sectores físicos:
AllDiskPhysicalSectors=488378646 PhysicalSectorSizeBytes=4096
# dd if=data_source of=/dev/sd"X" bs=${PhysicalSectorSizeBytes} count=${AllDiskPhysicalSectors} seek=0 status=progress
count=
no es necesaria al limpiar el área física limitada, por ejemplo sd"XY"
o sd"X"
, desde el principio hasta el final, pero mostrará un error de falta de espacio libre cuando intente escribir fuera de los límites.Seleccionar una fuente de datos
Como se acaba de decir si desea borrar datos confidenciales, puede usar cualquier opción que se ajuste a sus necesidades.
Si desea configurar el cifrado de dispositivos de bloque después, siempre debe borrar, al menos, con un algoritmo de cifrado como fuente o, incluso, con datos pseudoaleatorios.
Para datos que no son verdaderamente aleatorios, la velocidad de escritura de su disco debería ser el único factor limitante. Si necesita datos aleatorios, el rendimiento del sistema requerido para generarlos puede depender en gran medida de lo que elija como fuente de entropía.
Datos no aleatorios
La sobrescritura con /dev/zero
o patrones simples se considera segura en la mayoría de los recursos. En el caso de los discos duros actuales, debería ser suficiente para limpiar rápidamente los discos.
Prueba de escritura de patrón
#Badblocks puede escribir patrones simples en cada bloque de un dispositivo y luego leerlos y verificarlos buscando áreas dañadas (al igual que memtest86* hace con la memoria).
Como el patrón se escribe en cada bloque accesible, esto efectivamente borra el dispositivo.
Datos aleatorios
Para conocer las diferencias entre los datos aleatorios y pseudoaleatorios como fuente, consulte Random number generation.
Datos cifrados
Al preparar una unidad para el cifrado de disco completo, generalmente no es necesario obtener una entropía de alta calidad. La alternativa es usar un flujo de datos cifrado. Por ejemplo, si va a utilizar AES para su partición encriptada, debe limpiarla con un cifrado de encriptación equivalente antes de crear el sistema de archivos para hacer que el espacio vacío no se distinga del espacio utilizado.
Sobrescribir el objetivo
La unidad elegida se puede sobrescribir con varias utilidades, haga su elección. Si solo desea borrar un solo archivo, Securely wipe disk/Tips and tricks#Wipe a single file tiene consideraciones adicionales además de las utilidades mencionadas a continuación.
Redirigir la salida
La salida redirigida se puede usar tanto para la creación de los archivos como para reescribir el espacio libre en la partición, borrar todo el dispositivo o una sola partición.
A continuación se presentan ejemplos que se pueden usar para reescribir la partición o un dispositivo de bloque al redirigir stdout (salida estándar) desde otras utilidades:
$ cat /dev/urandom > /dev/sd"XY"
cat: write error: No space left on device
$ xz -z0 /dev/urandom -c > /dev/sd"XY"
xz: (stdout): Write error: No space left on device
$ dd if=/dev/urandom > /dev/sd"XY"
dd: writing to ‘standard output’: No space left on device 20481+0 records in 20480+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 2.29914 s, 4.6 MB/s
La orden de copia de archivos cp
también se puede utilizar para reescribir el dispositivo, ya que ignora el tipo de destino:
$ cp /dev/urandom /dev/sd"XY"
cp: error writing ‘/dev/sd"XY"’: No space left on device cp: failed to extend ‘/dev/sd"XY"’: No space left on device
Para mostrar la velocidad y el tiempo, puede usar pv:
# pv --timer --rate --stop-at-size -s "$(blockdev --getsize64 /dev/sd"XY" )" /dev/zero > /dev/sd"XY"
dd
Consulte también Core utilities (Español)#Esenciales.
of=...
apunta a la unidad de destino y no a un disco del sistema.Rellene con ceros el disco escribiendo un byte de cero en cada ubicación dirigida al disco utilizando la secuencia /dev/zero.
# dd if=/dev/zero of=/dev/sdX bs=4096 status=progress
O la secuencia /dev/urandom:
# dd if=/dev/urandom of=/dev/sdX bs=4096 status=progress
El proceso finaliza cuando dd informa No space left on device
y devuelve el control:
dd: writing to ‘/dev/sdb’: No space left on device 7959553+0 records in 7959552+0 records out 4075290624 bytes (4.1 GB, 3.8 GiB) copied, 1247.7 s, 3.3 MB/s
Para acelerar la limpieza de una unidad grande, consulte también:
- Securely wipe disk/Tips and tricks#dd - advanced example que utiliza OpenSSL;
- Securely wipe disk/Tips and tricks#Using a template file que borra datos preestablecidos no aleatorios (por ejemplo, sobrescribe un disco completo con un solo archivo) pero es muy rápido;
- Dm-crypt/Drive preparation#dm-crypt specific methods que utiliza dm-crypt.
wipe
Especializado en borrar archivos, está disponible como el paquete wipe. Para borrar rápidamente un destino, puede usar algo como:
$ wipe -r /path/to/wipe
Vea también wipe(1). La herramienta se actualizó por última vez en 2009. Su página SourceForge sugiere que está actualmente sin mantenimiento.
shred
shred (del paquete coreutils) es una orden de Unix que se puede usar para eliminar de forma segura archivos individuales o dispositivos completos de modo que puedan recuperarse solo con hardware especializado no sin gran dificultad, si es que lo hacen. Por defecto, shred usa tres pasadas, escribiendo datos pseudoaleatorios en el dispositivo durante cada pasada. Esto se puede reducir o aumentar.
La siguiente orden invoca shred con su configuración predeterminada y muestra el progreso.
# shred -v /dev/sdX
Alternativamente, se le puede indicar a shred que haga solo una pasada, con entropía de, por ejemplo, /dev/urandom
.
# shred --verbose --random-source=/dev/urandom -n1 /dev/sdX
Badblocks
Para permitir que badblocks (del paquete e2fsprogs) realice una limpieza de disco, se debe realizar una prueba de lectura-escritura destructiva:
# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive>
hdparm
hdparm admite ATA Secure Erase, que es funcionalmente equivalente a llenar un disco con ceros. Sin embargo, es manejado por el firmware del disco duro e incluye «áreas de datos ocultos». Como tal, puede verse como una orden moderna de «formato de bajo nivel». Según los informes, las unidades SSD alcanzan el rendimiento de fábrica después de emitir esta orden, pero es posible que no se borren lo suficiente (consulte #Memoria flash).
Algunas unidades admiten Enhanced Secure Erase, que utiliza distintos patrones definidos por el fabricante. Si la salida de hdparm -I
para el dispositivo indica una ventaja de tiempo múltiple para el borrado Enhanced, el dispositivo probablemente tenga una función de cifrado por hardware y el borrado se realizará con las claves de dicho cifrado solamente.
Para obtener instrucciones detalladas sobre el uso de ATA Secure Erase, consulte Solid state drive/Memory cell clearing y la Linux ATA wiki.