Archivos pasados ​​de esteganografía: ocultamos datos directamente en sectores

Breve introducción


La esteganografía, si alguien no lo recuerda, es el ocultamiento de información en cualquier contenedor. Por ejemplo, en imágenes (discutidas aquí y aquí ). También puede ocultar datos en las tablas de servicio del sistema de archivos (esto se escribió aquí ) e incluso en los paquetes de servicio del protocolo TCP . Desafortunadamente, todos estos métodos tienen un inconveniente: para "intercalar" silenciosamente la información en un contenedor, necesita algoritmos complicados que tengan en cuenta las características de la estructura interna del contenedor. Sí, y con la resistencia del contenedor a la manipulación, surgen problemas: por ejemplo, si edita ligeramente la imagen, se pierde información oculta.

¿Es posible prescindir de algún modo de algoritmos astutos y manipulaciones sutiles de datos, mientras se garantiza el rendimiento del contenedor y un nivel aceptable de seguridad para los datos ocultos? Mirando hacia el futuro, diré: ¡sí, puedes! E incluso ofreceré una utilidad.

Detalles del método sangriento


La idea básica es tan simple como un golpe de garrote en la frente: hay áreas en el disco en las que el sistema operativo nunca escribe (o escribe en casos excepcionales). Para no tener que buscar estas áreas con algoritmos astutos, usaremos redundancia, es decir, duplicaremos nuestra información oculta en todos los sectores del disco muchas, muchas veces. Luego, justo encima de toda esta grandeza, puede crear las particiones necesarias, formatear sistemas de archivos, escribir archivos e instalar el sistema operativo; de todos modos, parte de los datos secretos se guardarán y se pueden extraer, y la duplicación repetida nos ayudará a componer el todo original a partir de piezas.

La ventaja de este método es obvia: no dependemos del formato de archivo, ni siquiera del tipo de sistema de archivos utilizado.

Las desventajas también son, creo, obvias:

  • Los datos secretos solo pueden cambiarse reescribiendo completamente todo el disco, con la posterior reconstrucción de los contenidos visibles para el usuario. Al mismo tiempo, no puede usar un software que recrea un disco a partir de una imagen: recreará datos secretos anteriores.
  • Cuanto mayor sea la cantidad de datos clasificados, mayor será la probabilidad de perder parte de la información.
  • Recuperar datos del disco puede llevar mucho tiempo. De varios minutos a varios días (los discos modernos son grandes).

Ahora pasemos a los detalles.

Está claro que si simplemente difunde datos secretos en todo el disco, se ocultarán solo a simple vista. Si equipa sus ojos con, por ejemplo, un editor de discos, los datos aparecerán en todo su esplendor. Por lo tanto, sería bueno encriptar los datos para que no parpadeen. Encriptaremos simple, pero con gusto: de acuerdo con el algoritmo aes256-cbc. Le pedimos al usuario la clave de cifrado, déjelo pensar una buena contraseña.

La siguiente pregunta es cómo podemos distinguir los datos "correctos" de los datos corruptos. Aquí la suma de comprobación nos ayudará, pero no es simple, sino SHA1. Que? Para git, es lo suficientemente bueno, lo que significa que nos conviene. Se decidió: suministramos cada suma de información guardada con una suma de verificación, y si después del descifrado coincidió, entonces el descifrado fue exitoso.

También necesita el número de fragmento y la longitud total de los datos secretos. Número de fragmento: para realizar un seguimiento de las piezas que ya hemos descifrado y cuáles permanecieron. La longitud total es útil para nosotros cuando procesamos el último fragmento, para no escribir datos adicionales (en otras palabras, relleno). Bueno, como todavía tenemos un titular, agregaremos el nombre del archivo secreto allí. Será útil después del descifrado para no adivinar cómo abrirlo.

Comprueba el método en la práctica


Para la verificación, tomamos los medios más comunes: una unidad flash. Encontré uno viejo de 1 GB, que es bastante adecuado para experimentos. Si usted, como yo, tuvo la idea de no tomar un baño de vapor con medios físicos, sino probar en un archivo, una imagen de disco, diré de inmediato: no funcionará. Al formatear dicho "disco", Linux crea el archivo nuevamente, y todos los sectores no utilizados se rellenarán con ceros.

Como una máquina Linux, desafortunadamente, tuve que usar la estación meteorológica en el Raspberry Pi 3 que estaba en el balcón. No hay mucha memoria allí, por lo que no ocultaremos archivos grandes. Nos limitamos a un tamaño máximo de 10 megabytes. Tampoco tiene sentido ocultar archivos demasiado pequeños: la utilidad escribe datos en el disco en grupos de 4 Kb. Por lo tanto, desde abajo nos restringimos a un archivo de 3 kb: cabe en uno de esos grupos.

Nos burlaremos de la unidad flash por etapas, comprobando después de cada etapa si se lee información oculta:

  1. Formateo rápido en formato FAT16 con un tamaño de clúster de 16 kb. Esto es lo que Windows 7 propone hacer con una unidad flash que no tiene un sistema de archivos.
  2. Llenar una unidad flash con todo tipo de basura en un 50%.
  3. Llenar la unidad flash con todo tipo de basura es 100%.
  4. Formato "largo" en formato FAT16 (sobrescribiendo todo).

Las dos primeras pruebas, como era de esperar, terminaron en una victoria completa: la utilidad pudo extraer con éxito 10 megabytes de datos confidenciales de una unidad flash. Pero después de que la unidad flash se llenó con archivos en los globos oculares, se produjo un error:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile


Como puede ver, solo se descifraron exitosamente 158 clústeres (632 kilobytes de datos sin procesar, lo que produce 636424 bytes de carga útil). Está claro que no hay forma de obtener 10 megabytes, y obviamente hay duplicados entre estos grupos. Incluso 1 megabyte no se puede restaurar de esta manera. Pero se puede garantizar que recuperaremos 3 kilobytes de datos confidenciales de una unidad flash incluso después de formatearla y escribirla en los globos oculares. Sin embargo, los experimentos muestran que es muy posible extraer un archivo de 120 kilobytes de dicha unidad flash.

La última prueba, desafortunadamente, mostró que la unidad flash se sobrescribió todo:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile


Ni un solo grupo ha sobrevivido ... ¡Tristemente, pero no trágicamente! Intentemos crear una partición en la unidad flash antes de formatear, y ya en ella, el sistema de archivos. Por cierto, ella vino de la fábrica con este formato, por lo que no estamos haciendo nada sospechoso.
Se espera que el espacio disponible en la unidad flash se reduzca ligeramente.

También se espera que 10 megabytes aún no se puedan ocultar en una unidad completamente obstruida. ¡Pero ahora el número de clústeres descifrados con éxito se ha más que duplicado!

Total clusters read: 250752, decrypted: 405

Desafortunadamente, un megabyte no se puede ensamblar a partir de piezas, pero doscientos kilobytes es fácil.

Bueno, la noticia de la última cuarta comprobación, esta vez es alegre: ¡el formateo completo de una unidad flash de este tipo no condujo a la destrucción de toda la información! 120 kilobytes de datos secretos encajan perfectamente en el espacio no utilizado.

Tabla resumen para pruebas:



Un poco de teorización: sobre el espacio libre y los sectores no utilizados


Si alguna vez particionó un disco duro, puede notar que no siempre es posible asignar todo el espacio libre en el disco. La primera sección siempre comienza con alguna sangría (generalmente 1 megabyte, o 2048 sectores). Detrás de la última sección, también, sucede, sigue habiendo una pequeña "cola" de sectores no utilizados. Y a veces hay espacios entre las secciones, aunque rara vez.

En otras palabras, hay sectores en el disco a los que no se puede acceder durante el trabajo normal con el disco, ¡pero puede escribir datos en estos sectores! Lo que significa leer también. Ajustado por el hecho de que también hay una tabla de partición y un código de gestor de arranque, que se encuentran en un área vacía al comienzo del disco.

Vamos a distraernos de las particiones por un tiempo y mirar el disco desde la altura, por así decirlo, del vuelo de un pájaro. Aquí tenemos una partición vacía en el disco. Crea un sistema de archivos en él. ¿Es posible decir que algunos sectores en el disco han permanecido desbloqueados?

¡Y-y-y - redoble de tambores! La respuesta casi siempre será: ¡sí! De hecho, en la mayoría de los casos, la creación de un sistema de archivos se reduce al hecho de que solo unos pocos bloques de información de servicio se escriben en el disco, pero de lo contrario el contenido de la sección no cambia.

Y, sin embargo, de manera puramente empírica, podemos suponer que el sistema de archivos no siempre puede ocupar todo el espacio asignado al último sector. Por ejemplo, un sistema de archivos FAT16 con un tamaño de clúster de 64 kilobytes obviamente no podrá ocupar completamente una partición con un tamaño que no sea múltiplo de 64 kilobytes. Al final de dicha sección, una cola debe permanecer en varios sectores, inaccesible para almacenar datos de usuario. Sin embargo, experimentalmente esta suposición no pudo confirmarse.

Entonces, para maximizar el espacio disponible para el esteganograma, debe usar un sistema de archivos más grande con un tamaño de clúster. Todavía puede crear una partición, incluso si es opcional (en una unidad flash, por ejemplo). No es necesario crear secciones vacías o dejar áreas sin asignar, esto atraerá la atención de los ciudadanos interesados.

Utilidad para experimentos


Las fuentes de utilidad se pueden encontrar aquí.

Para compilar, necesitará Qt versión 5.0 y superior y OpenSSL. Si algo no va a suceder, es posible que deba corregir el archivo steganodisk.pro.

Puede cambiar el tamaño del clúster de 4 KB a, digamos, 512 bytes (en secretfile.h). Al mismo tiempo, los gastos de información oficial aumentarán: el encabezado y la suma de verificación ocupan 68 bytes fijos.

Debe ejecutar la utilidad, por supuesto, con derechos de usuario root y con precaución. ¡No habrá preguntas antes de sobrescribir el archivo o dispositivo especificado!

Disfrútalo.

Source: https://habr.com/ru/post/447028/


All Articles