Los borrados seguros de datos… no tan seguros: Recuperación de datos de un disco duro sobrescrito
¿Son realmente tan seguros como dicen los borrados de información que se autoproclaman seguros? Tirando un poco más de la manta sobre todo lo que comentábamos en el post anterior, en el post de este jueves daremos un repaso al cómo y el porqué de los algoritmos y estándares de borrado seguro de información, comentaremos por qué —desde nuestro punto de vista— no son tan seguros, y, mediante una prueba de concepto, cuestionaremos el si merece la pena realizar 35 sobrescrituras al disco.
1. Por qué se realizan borrados seguros
Es habitual en empresas de todo el mundo —que se toman en serio la seguridad— el realizar borrados de información seguros a sus dispositivos de almacenamiento: cuando finaliza su vida útil, cuando se reutilizan los dispositivos, cuando los pendrives y los discos externos van de mano en mano, o cuando simplemente quieren cambiarlos por unos nuevos. El motivo, para las personas que trabajamos en estos ámbitos, es claro: Todos sabemos que enviar un fichero a la papelera de reciclaje no es borrar la información, pero no todos saben que borrarlo de la papelera o vaciar la papelera tampoco es borrar la información, ni que se pueden recuperar los datos una vez borrados de este modo.
¿Por qué no se borra la información si le hemos dicho al PC que la borre? Imaginemos que queremos borrar un fichero de vídeo, e.g. la película de Avatar en 3D 1080p con 10b por canal de color, que es como se llevan ahora. Eso puede suponer un fichero de alrededor de 25 GB de tamaño. Moverlo de un disco a otro puede suponer cosa de 10 minutos; sin embargo, borrarlo es cuestión de medio segundo. Veamos qué es lo que ocurre en un sistema de ficheros NTFS:
Lo que estamos viendo es uno de los registros de 1024 bytes de longitud de la tabla maestra de ficheros, o la $MFT de un sistema de ficheros NTFS. El valor hexadecimal 0x0001 (recuadrado en little endian en el disco) indica al driver NTFS del sistema operativo que el fichero fotos_your_birthday.zip está activo, y, por tanto, tiene un espacio asignado y reservado. En la imagen se puede ver asimismo su nombre corto (en formato 8.3 que se mantiene por retrocompatibilidad) y su nombre largo, ambos recuadrados.
Cuando el fichero se manda a la papelera de reciclaje, no se modifica este estado. En Windows XP y anteriores, se modificaba el nombre corto, asignándosele uno del tipo DXYY.EXT, siendo D de deleted, X la letra de la unidad (C, D…), YY un índice que empezaba por 01, y EXT la extensión del fichero. Pero nada más. Era el directorio especial $Recycle.bin o $RECYCLER el que se convertía en su padre, y eso es todo: el fichero seguía activo y con las mismas garantías de supervivencia. Sin embargo, si borramos el fichero directamente con Shift + Del, o lo borramos de la papelera de reciclaje, cambia una cosa:
Ahora, el flag ha cambiado al valor 0x0000, indicando al driver NTFS que ese fichero está borrado. El fichero en sí, ubicado en otra parte a la que apunta este registro, está intacto. El sistema operativo, por lo tanto, al navegar por su directorio padre, no lo mostrará, y, además, cuando haya que escribir un fichero que quepa en el “hueco” que ha dejado este fichero, no dudará en escribir en dicho hueco, sobrescribiendo todo o parte del contenido del anterior fichero, frustrando cualquier intento de recuperar los datos con herramientas que se basan precisamente en recorrer la $MFT en busca de ficheros con el flag a 0x0000.
Pues bien, el motivo de realizar un borrado seguro es precisamente que el utilizar técnicas de borrado convencionales como las que acabamos de mencionar no borra en absoluto los datos, sino que simplemente cambia flags que indican al sistema operativo que el fichero se ha borrado y que el espacio queda disponible, pero no borrado, para futuros ficheros.
2. Tipos de borrado seguro.
Para asegurar que el contenido se elimina definitivamente de un dispositivo, se inventaron varios mecanismos, más o menos complejos, que principalmente se pueden dividir en dos clases:
- Borrado seguro lógico. Consiste en la sobrescritura de todo el disco duro con algún patrón de bits, asegurando que toda la información anteriormente presente es pisada por datos nuevos.¿Toda? ¡No! Una aldea poblada por irreductibles galos…
- Destrucción física. Se pueden combinar varias técnicas, siendo las más seguras las que sumergen el disco en medio de una tormenta de potentes impulsos electromagnéticos —de hasta 1 Tesla de densidad—, que destruyen literalmente toda la información contenida en los platos magnéticos.
Contra una destrucción física lo bastante potente, obviamente, no podemos hacer nada. El problema es que muy pocas empresas lo hacen así; la mayoría suele usar técnicas de borrado lógico, que no requieren de maquinaria especializada.
Dentro de las técnicas de borrado lógico, nos encontramos varios mecanismos y estándares, de los que destacaremos:
- U.S. Navy Staff Office Publication, NAVSO P-5239-2. Hace tres sobrescrituras: la primera compuesta por un patrón de un único byte, la segunda del byte complementario, y la tercera de un patrón generado pseudoaleatoriamente.
- El algoritmo de Bruce Schneier. Escribe en primer lugar todo 1’s, luego todo 0’s, y por último realiza cinco sobrescrituras con patrones pseudoaleatorios.
- El algoritmo de Peter Gutmann. Escribe, combinando sobrescrituras de las anteriores (patrón de bits, 1’s, 0’s, patrones pseudoaleatorios) hasta 35 pasadas por el disco.
3. ¿Por qué tantas pasadas?
Los discos duros son aparatos mecánicos y, fundamentalmente, analógicos. Como tales, están sujetos a imprecisiones, vibraciones, y problemas típicos del mundo analógico y mecánico, como que juegan con niveles de señales eléctricas que, en los discos actuales, distan de ser claros y diferenciados unos y ceros. Además, las vibraciones propias del disco hacen que sea virtualmente imposible escribir dos veces exactamente en el mismo sitio. Todo esto en su conjunto, sin entrar en mucho detalle, significa que:
- Las cabezas de escritura inyectan una señal electromagnética para escribir, que va a provocar que el registro magnético en cuestión se oriente hacia un lado o hacia otro.
- Si el registro magnético ya estaba orientado en el mismo sentido que se ha escrito, se acentúa dicho sentido de magnetización, hasta acercarse a un límite.
- Si, por el contrario, el registro magnético se trata de orientar en sentido contrario, el estado anterior contrarresta en cierta medida el pulso que se escribe, dando lugar a un nivel de señal más bajo.
- Si la nueva escritura no tapa completamente la escritura anterior, debido a vibraciones, el nivel de señal se verá afectado en la medida en que se acentúe la diferencia de las distancias.
- Por cuestiones físicas relativas a la atenuación de la señal debido a las altas frecuencias a las que funciona, y dado que es un sistema con cierta memoria, hay que tener en cuenta que influye en la escritura de cada registro lo que se ha escrito en los registro anteriores.
Viéndolo gráficamente:
En el gráfico se puede observar que, al escribir un nuevo 1 en medio del rectángulo rojo [gráfico de abajo: un pequeño cuadradito gris], que anteriormente tenía varios ceros seguidos y con una señal potente, el 1 que nos queda es bastante flojo. El disco no va a tener problema en reconocerlo porque dista ya mucho de fijarse solo en valores absolutos, sino que hace un profundo análisis de la señal, y un valle positivo entre dos crestas aún más positivas es muy probablemente un valor negativo.
Esto mismo, con números, tal y como cuenta una entrada de la Wikipedia, podría verse como:
Analog signal: +11.1 -8.9 +9.1 -11.1 +10.9 -9.1 Ideal Digital signal: +10.0 -10.0 +10.0 -10.0 +10.0 -10.0 Difference: +1.1 +1.1 -0.9 -1.1 +0.9 +0.9 Previous signal: +11 +11 -9 -11 +9 +9
Lo que quiere decir que se puede intuir cuál era la señal anterior mirando las diferencias entre lo medido y el valor ideal o que se pretendió escribir.
Por tanto, escribir varias veces en un disco disimula notablemente lo que hubiera escrito en el disco con anterioridad, dificultando enormemente la tarea.
4. Tampoco hay que ser paranoico
Con una sola pasada ya no podemos recuperar datos del disco duro que se hayan sobrescrito
Lo cierto es que todo esto podría tener algo de sentido hace 30 o 40 años, cuando cada bit tenía el tamaño aproximado de una aceituna. En la actualidad, es teóricamente posible pero prácticamente inviable el sacar un osciloscopio o, ya puestos, un microscopio de fuerza magnética para recuperar los datos de un disco duro moderno, debido principalmente a tres factores:
- La densidad de bits es tal que solo con los microscopios de fuerza magnética más potentes del mundo se obtendría la resolución adecuada. Además, la señal ya hemos dicho que actualmente dista de ser “ideal”, por lo que se requeriría de un estudio aparte para buscar la mejor forma de analizar la señal recuperada.
- La técnica de escritura varía entre fabricantes, y entre discos duros de cada fabricante. Se utilizan distintas formas de registrar los datos (láminas monocapa o bicapa, y diversas técnicas de escritura, de las cuales algunas modernas utilizan fenómenos cuánticos como GMR), y distintas formas de codificarlos (RLL, PRML, etc.), y lo que es peor, el fabricante no suelta prenda fácilmente y sería difícil saber por dónde empezar.
- Los bits no se escriben a pelo. Si tuviéramos un disco nuevo, escrito todo a 0’s, y todos los registros magnéticos estuvieran orientados de la misma forma, tendríamos un superimán entre nuestras manos, y las cabezas de lectura se volverían literalmente locas. Por ello, el propio disco duro tiene un mecanismo de dispersión de los bits, que hace que el disco duro sea casi como un átomo desde cierta distancia: magnéticamente neutro. Este mecanismo bien podría ser consecuencia de un algoritmo tipo RLL o un simple XOR con una clave escrita en la ROM del disco, pero los fabricantes tampoco dicen nada.
Con todo ello, lo que quiero decir es que con una pasada basta para que nadie actualmente pueda recuperar información de un disco duro. Treinta y cinco son realmente demasiadas.
5. Sin embargo, tanta pasada y luego…
Volviendo a lo que comentábamos en el post anterior: Los discos duros se comunican con los demás sistemas informáticos, actualmente, mediante el sistema LBA. Eso quiere decir que los programas de borrado seguro de datos, fundamentalmente, funcionan de la siguiente manera:
for (i=0; i<MAX_LBA; i++) { byte [] sector = new byte[SECTOR_SIZE]; byte pattern = 0x00; //Puede ser cualquier valor fill_sector_with_pattern(sector, pattern); write_disk(sector, i); }
Lo cual quiere decir que de nuevo nos estamos olvidando de los sectores defectuosos, o que fueron marcados como defectuosos. Treinta y cinco pasadas, y nos dejamos unos cuantos sectores libres por ahí.
“Bueno, y qué, pero están defectuosos, ¿no?“
Seguramente lo estén, cierto es. Pero ello no nos impide categóricamente el poder sacar algo de ellos. Puede que haya que insistir en su lectura (el disco comprobó que los tiempos de lectura eran demasiado altos y los desterró), o puede que haya que ignorar la integridad del sector, obviando los errores de CRC y siendo incapaz de recuperarse con las técnicas de ECC. Al igual que en el post anterior, no debemos alarmarnos demasiado, pues las probabilidades de recuperar el sector sin que el disco colapse no son especialmente altas, y la probabilidad de que haya ido a parar información valiosa justo a los pocos cientos o miles de sectores que posteriormente se han marcado como defectuosos, es más bien baja, aunque proporcional a la cantidad de datos importantes que se manejen.
Importante es recalcar que si se usa cifrado, o como dice la prensa, encriptación, las posibilidades de extraer información real de estos sectores disminuyen drásticamente, de modo que sin clave y/o vectores de inicialización del algoritmo de cifrado, actualmente es inviable devolver los datos a su estado en claro.
6. Manos a la obra: recuperación de datos tras un borrado seguro
Hemos preparado un disco pequeño, con el que solemos trastear, para una prueba de concepto. Le hemos pasado una herramienta profesional y comercial de borrado seguro de datos, que no mencionaré por no parecer que me estoy metiendo con ellos.
Éste es el aspecto que tiene el disco actualmente:
Todos los LBA que nos entrega el disco están absolutamente igual (lo hemos comprobado, uno a uno). Sin embargo, tal y como la semana pasada, vamos a echar un ojo al área de servicio del disco duro, a ver qué nos tiene que contar sobre sus sectores defectuosos (recordamos que, aunque esto se puede hacer a través del terminal serie y/o usando comando específicos mediante el interfaz ATA, nos facilitamos la tarea usando herramientas profesionales de recuperación de datos). Los primeros defectos de la tabla, obtenidos mediante estas herramientas, se muestran a continuación:
Para ver si podemos leer algo de ellos, le vamos a indicar al disco duro que nos muestre esos sectores y les asigne un LBA. Para ello, basta con que los borremos de la tabla. Además, para aumentar nuestras posibilidades, vamos a indicar al disco que ignore la comprobación de errores de redundancia cíclica al leer de ellos, y vamos a acceder a ellos calculando su LBA.
Hemos escogido el sector marcado en la captura siguiente para la primera prueba:
Del área de servicio obtenemos los siguientes datos también:
- El cilindro 702 está en la zona 1.
- La zona 1 tiene 896 sectores por pista.
- Solo tenemos una cabeza, por lo que pista = cilindro.
Sabiendo además que en este disco el área de usuario comienza en el cilindro 8, vamos a calcular el LBA correspondiente al 702:0:495:
LBA = [C – (cilindros previos al área de usuario)]*H*SPT + S – 1 – (sectores previos defectuosos) = (702 – 8) * 896 + 495 -1 -3 = 622315
Puede que baile algo en la fórmula, porque solo tenemos una cabeza y no me he parado a darle muchas vueltas. Nótese que he usado 3 sectores defectuosos en el cálculo aunque en la tabla se ven 4 anteriores al #5. Esto es porque marqué el 2 y el 5 como defectuosos, para tener dos oportunidades ; ) aunque algo me dijo que debía probar con el 5 primero.
Muy bien, pues vamos al LBA 622315, y qué nos encontramos…
¡Un sector vivito y coleando, con todos sus datos! No he sido capaz de identificar el tipo de datos que son, y la estadística tampoco me ha ayudado…:
Pero lo que está claro es que algo hemos recuperado. ¡Y a la primera, lo juro!. Puede que con algún error de CRC, pero sucesivas lecturas me han devuelto el mismo sector, por lo que ruido no parece ser (además de que se observan ciertos patrones repetitivos: 0x26 0x7B 0x20 0x7D, y otros).
7. Para saber más…
Con esta prueba de concepto exitosa creo que se deja bastante en duda la validez de este tipo de borrados “seguros”. Puede que éste sea el motivo por el cual el Departamento de Defensa de los Estados Unidos haya desaconsejado su uso. Además, me reitero en la no necesidad de perder el tiempo realizando múltiples pasadas para borrar información, ya que con una es más que suficiente incluso si los datos que se borran valen decenas de millones.
Un tema interesante, que dejo abierto a comentarios y futuros hilos, es el de la validez forense del contenido de estos sectores…
¡Esperamos vuestros comentarios!
Un saludo a todos,
Hard2bit Data Forensics
Muy buen articulo con alto contenido tecnico.
Saludos desde Colombia
Lo primero, enhorabuena por el post; me ha gustado mucho y me parece MUY interesante.
Tengo una duda, ¿conoces alguna herramienta que sí sobreescriba sectores marcados como ‘defectuosos’? ¿O el firmware del disco ya no permiten su escritura en ese caso…?
Muchas gracias, y un saludo
Hola Saúl,
¿Una herramienta de destrucción de datos que haga sobrescritura de los sectores marcados como defectuosos? No, no conozco ninguna. Es complicado, y es difícil pensar en cómo podría funcionar alguna… por lo que antes de continuar, si quieres asegurarte de que tus datos son totalmente irrecuperables, lo mejor es la destrucción física. Y ya por extenderme un poco, ocurre lo siguiente: Para acceder a estos sectores defectuosos en la misma forma en que lo estoy haciendo en la prueba de concepto, hay que leer con un comando especial que ignora el error de redundancia cíclica, y este comando padece del límite de direccionamiento CHS: 128 GiB de información, por lo que para leer sectores fastidiados más allá del límite, hay que hacer un poco de magia. Por ejemplo, ir editando alguna tabla de defectos del disco para remapear sectores defectuosos lejanos a sectores dentro del área legible por este método. Además, cada operación requeriría de un ciclo de apagado y encendido para cargar la tabla en la memoria del disco. Y no solo eso: Intentar leer estos sectores a veces funciona, pero suele dejar al disco “frito”, en estado BSY, por lo que para que vuelva a responder, hay que estar mandándole comandos de reset del software, o incluso reset del hardware entero o ciclos de apagado y encendido. Son sectores defectuosos después de todo, y a veces hay suerte y se leen, y a veces no, por lo que no va a ser ni fácil ni fiable 😉
Un saludo
De acuerdo con que la mejor forma de destrucción de datos sea la física, pero con esto de la crisis, ¡hay que reutilizar! Creo que otra buena forma sería el cifrado del disco completo con una contraseña, keyfile, o con un módulo TPM…porque en este caso aunque se escriban datos en sectores defectuosos me imagino que irán cifrados. Y si la contraseña es robusta y el algoritmo también, serán…igual de inaccesibles (si nos ponemos puristas, *casi* igual 😉 que si se destruye físicamente. Pero claro, el cifrado se tendría que hacer ANTES de empezar a meter datos sensibles, trabajar con ellos, etc… Y en España esto de la anticipación lo llevamos mal. Todo esto contando con que nadie te robe la contraseña, claro.
Otra pregunta que se me ocurre; esto no es aplicable a memorias flash, ¿no? Porque no funcionan con discos magnéticos… pero, ¿hay algo aplicable a este tipo de memorias? ¿Tienen también “sectores (o celdas, en este caso) defectuosos”?
Saludos!
Hola,
Gracias por el comentario. En memorias Flash también hay algo parecido; publicaremos un artículo sobre memorias flash en general y otro específico de SSD, que tienen cosas similares 😉 aunque mucho más complicadas.
Y lo del cifrado, exactamente, justo como se comenta en el propio artículo, pero como bien dices, esto de la anticipación lo llevamos mal…
Un saludo!
Muy interesante el contenido de este artículo. La redacción está muy bien y el contenido es de calidad.
Gracias por compartir.