¿Cómo puedo eliminar de forma segura el contenido de una memoria USB para que no se puedan recuperar los datos?

32

Si es posible, me gustaría saber cómo eliminar una unidad flash USB a través del terminal para que no se puedan recuperar los datos.

usuario
fuente
31
¿Una unidad flash? Abre la cosa, saca todos los chips de la placa de circuito verde y aplástalos en pedacitos pequeños y brillantes, luego ve a comprar otro. La destrucción física es realmente la única forma de estar seguro, porque todos los niveles de desgaste y demás. En el futuro, use el cifrado de disco completo y pierda las claves | contraseña cuando ya no la desee.
Blacklight Shining
1
@BlacklightShining: esa es la única respuesta real. Muchos de los palos baratos también son reciclados.
mikeserv
1
@BlacklightShining Convertirlo en plasma también funciona bien.
PyRulez el
3
Si es importante para usted que los datos sean irrecuperables, la única solución "segura" es la destrucción física. Si es suficiente ser simplemente difícil de recuperar, entonces realmente no hay necesidad de formatear / sobrescribir.
Sobrique
Quémalo en un fuego de carbón, asegurándote de que todas las partes alcancen un calor rojo.
Ben

Respuestas:

47

TL / DR: asegúrese de obtener el nombre correcto del dispositivo, asegúrese de que no esté montado y realice todas las sobrescrituras aleatorias que pueda pagar. Puede seguirlo con un comando de borrado diseñado para hardware flash, si tiene una distribución lo suficientemente reciente. En estas comprobaciones, use siempre la unidad (como / dev / sd h ) y no el nombre de la partición (que sería / dev / sd h1 )

# dmesg|grep sdXX
[3600.000001] sd 6:0:0:0: [sdXX] 125106176 512-byte logical blocks: (64.0 GB/59.6 GiB)
# blkid|grep sdXX
/dev/sdXX1: PARTUUID="88a03bb2-ced8-4bb2-9883-0a51b4d460a8"
# df|grep /dev/sdXX
# shred -vzn8 /dev/sdXX
shred: /dev/sdXX: pass 1/9 (random)...
shred: /dev/sdXX: pass 1/9 (random)...46MiB/3.8GiB 1%
...
shred: /dev/sdXX: pass 9/9 (000000)...3.8GiB/3.8GiB 100%
# blkdiscard -s /dev/sdXX
blkdiscard: /dev/sdXX: BLKSECDISCARD ioctl failed: Operation not supported
# blkdiscard /dev/sdXX
blkdiscard: /dev/sdXX: BLKDISCARD ioctl failed: Operation not supported
#

En teoría, sobrescribir con cero con dd está bien. Sin embargo, debido a cómo se construyen los componentes internos de una unidad flash, si usa una sola pasada de sobrescritura, puede haber varias capas de datos ocultas detrás de los bloques reales que aún almacenan la información restante.

Por lo general, una parte del almacenamiento flash es defectuosa y se marca durante la fabricación. También hay otros bits que pueden salir mal (volviéndose inmutables, inestables o ilegibles), estas partes también deben marcarse como defectuosas durante la vida útil. Esta información se almacena en un espacio reservado, en los mismos chips que sus datos. Esta es una de las varias razones por las que una unidad de memoria USB de 4 GB no muestra una capacidad de 2 ^ 32 bytes.

El almacenamiento flash también se organiza internamente en bloques más grandes, a veces mucho más grandes que los sistemas de archivos que trabajan en la unidad. Un tamaño de bloque típico del sistema de archivos es 4KB, y los segmentos flash que se pueden borrar de una vez pueden variar desde 64 KB hasta varios megabytes. Estos bloques grandes solo se pueden borrar en su totalidad, lo que restablece todo el bloque a un estado conocido (todos los 1 o todos los 0). Posteriormente, una escritura de datos puede alterar cualquiera de los bits (cambiar los 1s predeterminados a 0s donde sea necesario, o cambiar los 0s predeterminados a 1s), pero solo una vez . Para volver a cambiar cualquiera de los bits al valor predeterminado, ¡todo el segmento debe borrarse nuevamente!

Entonces, cuando desee cambiar un bloque de 4KB (se le pide al sistema de archivos que cambie un solo carácter en el medio de un archivo), el controlador de flash necesitaría leer y almacenar en memoria intermedia todos los 64 KB de datos antiguos, borrarlos todos y escribir de nuevo los nuevos contenidos. Esto sería muy lento, borrar segmentos es la operación más lenta. Además, un segmento solo puede borrarse por un tiempo limitado (decenas de miles es típico), por lo que si realiza demasiados cambios en un solo archivo, eso puede deteriorar rápidamente la unidad.

Pero no es así como se hace. Los controladores de flash inteligentes simplemente escriben los nuevos datos de 4KB en otro lugar y hacen una nota para redirigir las lecturas a estos 4KB de datos en el medio del bloque anterior. Necesitan más espacio, que no podemos ver para almacenar esta información sobre redireccionamientos. También intentan asegurarse de pasar por todos los segmentos accesibles para almacenar datos, esto se llama nivelación de desgaste .

¡Esto significa que los datos típicamente antiguos todavía están en el disco en alguna parte! Si acaba de borrar todos los bloques accesibles, todos los bloques ocultos aún conservan una versión bastante reciente de los datos. Si esto es accesible para un atacante del que desea proteger sus datos, es una pregunta diferente.

Si tiene una distribución lo suficientemente reciente y la unidad USB está programada para revelar que es una unidad flash, blkdiscardpuede usar la TRIMoperación subyacente , que es el borrado de segmento del que hablamos anteriormente. También tiene un indicador adicional para asegurarse de que incluso el hardware oculto borre por completo los datos invisibles:

# blkdiscard -s /dev/myusbdevice

-s, --secure Realizar un descarte seguro. Un descarte seguro es lo mismo que un descarte regular, excepto que todas las copias de los bloques descartados que posiblemente fueron creados por la recolección de basura también deben borrarse. Esto requiere soporte del dispositivo.

No necesariamente funcionará, como lo demostré anteriormente. Si obtiene Operation not supported, ya sea su núcleo, sus utilidades o el chip de puerta de enlace USB (que permite que el controlador flash parezca una unidad a través de USB) no admite el pasoTRIM comando de . (El controlador de flash aún debe poder borrar segmentos por sí mismo). Si es compatible con el proveedor de su unidad, esta es la forma más segura.

Otra forma menos segura de asegurarse de permitir que menos datos antiguos permanezcan en algún lugar es sobrescribirlos varias veces, con valores aleatorios, si es posible.

¿Por qué al azar, preguntas? Imagínese si la unidad USB se hizo demasiado inteligente, y detectó que desea borrar un sector, y simplemente realizó un cambio en un mapa de bits de que este sector ahora está libre, y necesitará borrarlo más tarde. Como esto significa que puede acelerar las escrituras de ceros, por lo que resulta un pendrive que parece más eficiente, ¿verdad? Si su disco lo está haciendo, es difícil saberlo.

En el extremo, la unidad podría recordar cuánto ha borrado desde el principio, y todo lo que necesita almacenar es aproximadamente 4 bytes de información para hacer esto, y no borrar nada de los datos que desea que desaparezcan. Todo para que se vea muy rápido.

Si está sobrescribiendo los datos con valores aleatorios e impredecibles, estas optimizaciones son imposibles. Por lo tanto, la unidad debe asegurarse de que los datos terminen almacenados dentro de los chips flash. Pero aún no podrá descartar que algunos de los sectores utilizados anteriormente todavía estén allí con algunos datos antiguos suyos, pero la unidad simplemente no consideró importante borrarla todavía, ya que no es accesible normalmente. Solo el TRIMcomando real puede garantizar eso.

Para automatizar la sobrescritura con valores aleatorios, es posible que desee considerar el uso shred, como:

# shred -vzn88 /dev/myusbdrive

Las opciones utilizadas:

  • -v por hacer que muestre el progreso
  • -z para ponerlo a cero en una fase final
  • -n8 es hacer 8 pases aleatorios de sobrescrituras

Si es posible, use ambos blkdiscardy shred, si blkdiscard -ses compatible con su unidad, es la solución óptima, pero no puede hacer daño de shredantemano para descartar errores de firmware.

¡Ah, y siempre verifique dos veces el dispositivo que está intentando borrar! dmesg puede ayudar a ver cuál fue el dispositivo insertado más recientemente, y también vale la pena verificar el nombre del dispositivo con el que desea borrar ls -al, incluso para los números de nodo del dispositivo, y la blkidsalida para ver qué particiones pueden estar disponibles que NO quiero despejar.

Nunca use estos comandos en una unidad interna que quiera seguir usando; blkdiscardsolo funcionará en unidades de estado sólido, ¡pero no vale la pena intentar perder datos!

Puede haber otras formas de borrar datos de forma segura a medida que avanza la tecnología.

Otra forma mencionada es el SECURITY ERASEcomando ATA que puede emitirse a través de hdparmcomandos. En mi experiencia, no es realmente compatible con unidades flash. Fue diseñado para discos duros empresariales, y la función no siempre se implementa en dispositivos de almacenamiento de menor costo.

La operación TRIM/ DISCARDes mucho más nueva que el SECURITY ERASEcomando y se creó en respuesta a las funciones de flash, por lo que tiene muchas más posibilidades de implementarse, incluso en unidades USB baratas, pero aún no es omnipresente. Si desea borrar una tarjeta SD / micro SD en un dongle USB, e blkdiscardinforma que no es compatible, puede probar con un lector de dongle / tarjeta diferente, y / o hacerlo en una máquina con una ranura SD / MMC directa .

chexum
fuente
Gracias por la información de vanguardia. blkdiscardestá en Debian Jessie, y solo en las dos versiones más recientes de Ubuntu, pero no en Ubuntu LTS 14.04. blkdiscardfue agregado a la util-linuxversión del paquete 2.23.
RobertL
¿Sabe cómo se blkdiscardcompara con la hdparmsolución en otro comentario de @zhenech (específicamente el enlace: ata.wiki.kernel.org/index.php/ATA_Secure_Erase ).
RobertL
No estoy seguro de si este también es el caso de las unidades flash, pero vale la pena leer howtogeek.com/234683/…
hhaslam11
1
@RobertL Igual, en el mal sentido. La mayoría de las unidades flash baratas no implementan ATA Secure Erase ni TRIM, por lo que ambos métodos probablemente fallarán.
duskwuff
27

Me doy cuenta de que esto no es realmente una respuesta a su pregunta, pero la forma más simple es destruir físicamente el disco (aplastarlo repetidamente con un mazo generalmente funciona, pero la trituración industrial o la incineración también son opciones). Si está lo suficientemente preocupado por la seguridad como para asegurarse de que los datos sean irrecuperables, es probable que el valor de esos datos sea muchas veces mayor que el costo del disco, y el método físico es barato y confiable.

MPLewis
fuente
55
Si es una unidad flash barata y reemplazable, definitivamente vaya con la destrucción física. Si usa un martillo, asegúrese de obtener el chip de almacenamiento real. Abrí una vieja unidad flash por diversión hace un par de semanas, y la mayor parte de su volumen físico era en realidad carcasa y aire.
Blacklight Shining el
1
Además de mi respuesta, estoy completamente de acuerdo: es difícil hacerlos pedazos a través del acceso ssh :) Dado lo poco confiables que son estos dongles para el almacenamiento de datos, es sorprendentemente difícil lograr que realmente eliminen los mismos datos.
chexum
De acuerdo: si es importante para usted que los datos sean irrecuperables, entonces la destrucción física es la única opción. Seamos realistas, en comparación con el valor comercial de los datos que contiene, incluso las unidades más caras probablemente no sean tan significativas. Si no es que importante casi cualquier reemplazo / sobreescritura es suficientemente buena.
Sobrique
1
Este método no solo es el más efectivo, también es el más divertido. Nunca dejes pasar la oportunidad de usar un mazo y que te paguen por ello.
Zetetic
2

Casi todas las funciones de borrado seguro disponibles fueron diseñadas para girar medios magnéticos, donde la computadora generalmente puede determinar la ubicación física [1] de los bloques utilizados para el archivo y escribir sobre esos mismos bloques. Los chips de controlador de almacenamiento de estado sólido resumen la ubicación física de los datos del sistema y le gusta moverlos.

Su pregunta realmente depende de quién va tras sus datos. Si le preocupa la pérdida aleatoria o el robo casual, entonces un formato regular estará bien. Si le preocupa ser el objetivo de un usuario altamente motivado y técnicamente competente con recursos sustanciales a su disposición [2], entonces incinere el disco y gaste $ 10 en uno nuevo.

  1. Sí, hay un mapeo lógico de bloques. Pero el bloque lógico A siempre se asignará al bloque físico B.

  2. esta persona abriría la unidad, sacaría el chip de memoria de la tarjeta y leería la memoria flash directamente, sin pasar por el controlador

usuario149598
fuente
1

La forma más simple y rápida que conozco es escribir ceros (0) en todo el disco:

dd if=/dev/zero of=/dev/sdX

donde /dev/sdXestá el nodo del dispositivo de tu memoria USB.

Algunos sugieren un proceso más completo con más iteraciones y otros patrones. Hay utilidades específicas disponibles para hacer esto. El paquete GNU coreutils contiene el shredcomando específicamente para este propósito. Muchas personas también usan badblocks -w, que es parte del paquete e2fsprogs. En FreeBSD shred, se llama a la utilidad gshredy debería estar disponible en los puertos /usr/ports/sysutils/coreutilso /usr/ports/sysutils/fileutils.

RobertL
fuente
Esto no es realmente suficiente para hacer un borrado seguro. Iría por al menos 20 series de escrituras de cosas al azar. Lo mejor de todo es que usaría una herramienta para limpiar con seguridad, por ejemplo, triturar. Aunque algunas personas dicen que no tiene sentido y que la reducción a cero es suficiente, no confiaría en eso.
monsune
44
@monsune Eso es solo una leyenda urbana. Si bien algunos estándares lo requieren , no parece haber ningún ataque práctico.
Gilles 'SO- deja de ser malvado'
Las unidades flash usan nivelación de desgaste para no destruir las celdas flash demasiado rápido. Imagínelo así: el disco tiene 1200 celdas pero solo le dice que tiene 1000 y el controlador selecciona en qué celda realmente escribe. Entonces, después de un dd, ha borrado 1000 celdas, pero no las 200 en reserva, y podrían leerse conectando el flash real a un controlador sin reserva. Sugeriría hacer un borrado seguro después del dd, pero no todos los medios flash lo admiten.
zhenech
@ Zhenech, ¿qué es "borrado seguro"?
RobertL