¿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.
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.
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:
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:
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:
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.
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:
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.
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.
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:
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).
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
En el umbral de una nueva era, la intersección entre la inteligencia artificial (IA) y…
El Directorio Activo (AD) de Microsoft es una de las implementaciones de servicios de directorio…
Las tecnologías cuánticas, una de las fronteras más emocionantes de la ciencia y la ingeniería…
¿Te has encontrado alguna vez con un correo electrónico, un mensaje de texto o una…
Hoy vamos a desglosar con profundidad un tema crítico: "Los peligros de las redes sociales…
En el ciberespacio, una guerra digital se libra entre delincuentes cibernéticos y defensores de la…