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

Pregunta:

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

Respuesta:

TL / DR: asegúrese de obtener el nombre de dispositivo correcto, asegúrese de que no esté montado y haga tantas sobrescrituras aleatorias como pueda. Puede seguirlo con un comando de borrado diseñado para hardware flash, si tiene una distribución lo suficientemente reciente. En estas comprobaciones, utilice 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 las partes internas 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 información sobrante.

Por lo general, una parte del almacenamiento flash es defectuoso y se marca así durante la fabricación. También hay otros bits que pueden salir mal (volviéndose inmutables, inestables o que no se pueden limpiar), estas partes también deben marcarse como defectuosas durante su 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 memoria USB de 4 GB no muestra una capacidad de 2 ^ 32 bytes.

El almacenamiento flash también está organizado internamente en bloques más grandes, a veces mucho más grandes que los sistemas de archivos que funcionan en la unidad. Un tamaño de bloque de sistema de archivos típico es 4 KB, y los segmentos flash que se pueden borrar de una vez pueden oscilar entre 64 KB e incluso 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 1 predeterminados a 0 cuando sea necesario, o cambiar los 0 predeterminados a 1), pero solo una vez . Para volver a cambiar cualquiera de los bits a los valores predeterminados, es necesario borrar todo el segmento.

Entonces, cuando desee cambiar un bloque de 4 KB (se le pide al sistema de archivos que cambie un solo carácter en el medio de un archivo), el controlador flash necesitaría leer y almacenar en búfer todos los 64 KB de los datos antiguos, borrarlos todos y escribir el nuevo contenido. Esto sería muy lento, borrar segmentos es la operación más lenta. Además, un segmento solo se puede borrar 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 flash inteligentes simplemente escriben los datos nuevos de 4 KB en otro lugar y toman nota para redirigir las lecturas a estos 4 KB de datos en el medio del bloque antiguo. 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, por lo general , los datos antiguos todavía se encuentran en algún lugar del disco . 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 que sus datos estén protegidos, es una cuestión diferente.

Si tiene una distribución lo suficientemente reciente y la unidad USB está programada para revelar que es una unidad flash, blkdiscard puede usar la operación TRIM subyacente, que es el borrado de segmento del que hablamos anteriormente. También tiene una bandera adicional para asegurarse de que incluso los datos ocultos invisibles sean borrados por completo por el hardware:

# blkdiscard -s /dev/myusbdevice

-s, –secure Realiza 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 creadas por la recolección de basura también deben borrarse. Esto requiere el apoyo del dispositivo.

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

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

¿Por qué aleatorio, preguntas? Imagínese si la unidad USB se hiciera demasiado inteligente y detectara que desea borrar un sector, y acaba de hacer un cambio en un mapa de bits que este sector ahora es libre y necesitará borrar más adelante. Como esto significa que puede acelerar la escritura de ceros, hace que un pendrive parezca más eficiente, ¿verdad? Es difícil saber si su disco lo está haciendo.

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

Si sobrescribe 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 usados ​​anteriormente todavía estén allí con algunos datos antiguos suyos, pero la unidad simplemente no consideró importante borrarlos todavía, ya que no es accesible normalmente. Solo el comando TRIM real puede garantizar eso.

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

# shred -vzn88 /dev/myusbdrive

Las opciones utilizadas:

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

Si es posible, use blkdiscard y shred , si su disco admite blkdiscard -s , es la solución óptima, pero no está de más hacer un shred antemano para descartar errores de firmware.

¡Ah, y siempre verifique dos veces y tres veces el dispositivo que está tratando de 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 que desea borrar con ls -al , incluso para los números de nodo de los dispositivos, y la salida blkid para ver qué particiones pueden estar disponibles. NO quieres borrar.

Nunca use estos comandos en una unidad interna que desee seguir usando; blkdiscard solo 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 comando ATA SECURITY ERASE que se puede emitir a través de comandos hdparm . 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 / DISCARD es mucho más nueva que el comando SECURITY ERASE y se creó en respuesta a las funciones 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 una llave USB y blkdiscard informa que no es compatible, puede probar con una llave / lector de tarjetas diferente y / o hacerlo en una máquina con una tarjeta SD / MMC directa. espacio.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım