Securely wipe disk (Español)

From ArchWiki
Estado de la traducción: esta traducción de Securely wipe disk fue revisada el 2019-11-01. Si existen cambios puede actualizarla o avisar al equipo de traducción.

La limpieza de un disco se realiza escribiendo nuevos datos sobre cada bit.

Nota: las referencias a «discos» en este artículo también se aplican a los dispositivos loopback.

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.

Advertencia: si el cifrado del dispositivo de bloque se usa en una partición que contiene algo distinto que datos aleatorios/cifrados, será posible revelar los patrones de uso en la unidad cifrada, lo cual debilita el cifrado al ser comparable con el cifrado a nivel del sistema de archivos. No utilice nunca /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:

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
Advertencia: estos métodos muestran el tamaño de bloque que la unidad informa al kernel. Sin embargo, muchas unidades de formato avanzado subestiman incorrectamente el tamaño del bloque físico dándolo como 512.
Sugerencia: este script, genwipe.shAUR, ayuda a calcular los parámetros para borrar un dispositivo/partición con dd, por ejemplo 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".

Nota:
  • 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
Nota: la opción 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.

Advertencia: una unidad que es anormalmente rápida en la escritura de patrones o puesta a cero podría estar haciendo una compresión transparente. Es obviamente presumible que no todos los bloques se limpiarán de esta manera. Algunos dispositivos de #Memoria flash tienen dicha «característica».

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.

Nota: los datos que son difíciles de comprimir (datos aleatorios) se escribirán más lentamente, si la lógica de la unidad mencionada en la advertencia de #Datos no aleatorios intenta comprimirlos. Sin embargo, esto no debería conducir a #Remanencia de datos. Como la velocidad máxima de escritura no es el cuello de botella en el rendimiento, puede obviarse completamente mientras se limpian discos con datos aleatorios.

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.

Advertencia: no hay confirmación con respecto a la ejecución de esta orden, así que verifique repetidamente que la unidad o partición correcta ha sido seleccionada. Asegúrese de que la opción 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:

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

Advertencia: no intente emitir una orden Secure Erase ATA en un dispositivo conectado a través de USB; vea https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase y https://web.archive.org/web/20180711170859/http://www.tomshardware.co.uk/answers/id-1984547/secure-erase-external-usb-hard-drive.html para detalles.

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.

Véase también