Esteganografía en el sistema de archivos

Hola, Habr.

Quiero presentarles un pequeño proyecto sobre esteganografía, realizado en mi tiempo libre.

Hice un proyecto sobre almacenamiento oculto de información en el sistema de archivos (en adelante FS).
). Esto puede aplicarse para robar información confidencial con fines educativos.

Esteganografía en el sistema de archivos

Como muestra experimental, se eligió un sistema de archivos de Linux bastante antiguo ext2.

Implementación

Consideraciones sobre la implementación

Si se analiza a fondo el estándar ext2, se puede sustituir lo que en el sistema de archivos existe, llamado Superbloques, en el que se da la información básica sobre el sistema. Después encontré Bitmap de Bloques y Tabla de Inodos. Casi de inmediato surgió la idea de grabar información en bloques vacíos en ese momento del sistema de archivos. Ahora había que pensar en la protección contra un programador armado con un editor hexadecimal.

Si se almacena la información oculta sin cifrado, incluso a pesar de su difuminación en el sistema de archivos, seguirá siendo demasiado evidente, especialmente si el programador sabe lo que debe buscar. Por lo tanto, se tomó la decisión de cifrar todos los bloques del archivo original. Elegí el cifrado por bloques AES, pero como pueden entender, esto no es fundamental.

Para separar los bloques necesarios de todos los demás al leer, se decidió agregar un marcador especial al inicio de cada bloque. Este marcador se cifraba en función del número de bloque en el archivo original. Este truco permitió no solo encontrar bloques necesarios, sino también conocer su orden correcto.

El principio general de funcionamiento del sistema.

Esteganografía en el sistema de archivos

Algoritmo de escritura

Por pasos:

  • Primero, escribir alguna información en el sistema de archivos original;
  • Eliminar esta información (no necesariamente toda);
  • Dividir el archivo a ocultar en bloques de igual longitud, añadiendo un marcador;
  • Cifrar estos bloques;
  • Colocar los bloques cifrados en bloques vacíos del sistema de archivos.

Para los amantes de los diagramas de bloques

A continuación se presenta un diagrama de bloques del algoritmo de escritura. El algoritmo recibe cuatro archivos:
-Imagen del sistema de archivos modificable;
-Archivo a ser esteganografiado;
-Archivo con la clave de cifrado para AES;
-Archivo con el marcador.
Esteganografía en el sistema de archivos

Es importante señalar que este algoritmo tiene una desventaja: después de escribir un archivo en el sistema de archivos, no se puede registrar algo nuevo en el sistema de archivos, ya que cualquier nueva información puede caer en aquellos bloques que hemos reservado para nuestro archivo esteganografiado; sin embargo, esto también abre la posibilidad de "barrido rápido de pruebas".

Pero es bastante obvio cómo se puede corregir esto: es necesario reescribir el algoritmo de grabación de bloques en el sistema de archivos. Es una tarea comprensible, pero increíblemente laboriosa.
Para la prueba de concepto, no lo implementé.

Como resultado, se producirán los siguientes cambios en el sistema de archivos, así es como se ve el sistema de archivos antes de la esteganografía (se ha grabado previamente un archivo de audio).
Esteganografía en el sistema de archivos
Así es como se ve el sistema de archivos con la información ya esteganografiada.
Esteganografía en el sistema de archivos

Algoritmo de lectura

Por pasos:

  • Conociendo la clave y el método de construcción de marcadores, se deben generar los primeros N marcadores, garantizando que N, multiplicado por la longitud del bloque del sistema de archivos, sea mayor que la longitud del archivo esteganografiado;
  • Realizar la búsqueda de bloques en el sistema de archivos que comiencen con los marcadores;
  • Descifrar los bloques obtenidos y separar los marcadores;
  • Reunir los bloques obtenidos en el orden correcto y obtener el archivo original.

Para los amantes de los diagramas de bloques

A continuación, se presenta un diagrama de flujo del algoritmo de grabación. El algoritmo recibe tres archivos como entrada:
- Imagen del sistema de archivos;
-Archivo con la clave de cifrado para AES;
-Archivo con el marcador.
Esteganografía en el sistema de archivos

Después de que el programa se ejecute, aparece un archivo Read, que será el archivo extraído del sistema de archivos esteganografiado; si la clave o el marcador se indicaron incorrectamente, el archivo Read estará vacío.
(para los amantes de la estética, se puede incluir no solo el archivo, sino también un “encabezado” que contenga metainformación: nombre del archivo, permisos, fecha de la última modificación, etc.)

Automatización de la ejecución

Para mayor comodidad, se escribieron scripts de bash que automatizan la ejecución en Linux (se probó en Ubuntu 16.04.3 LTS).
Desglosaremos la ejecución paso a paso.
Grabación:

  1. sudo Copy_Flash.sh “DISPOSITIVO” — obtenemos la imagen del sistema de archivos desde DISPOSITIVO (flash);
  2. .\/Write.sh “ARCHIVO” “CLAVE” “MARCADOR” – creamos un entorno virtual, descargamos las bibliotecas necesarias y ejecutamos el script de grabación;
  3. sudo .\/Write_Flash.sh “DISPOSITIVO” – grabamos el sistema de archivos modificado nuevamente en DISPOSITIVO.

Lectura:

  1. sudo Copy_Flash.sh “DISPOSITIVO” — obtenemos la imagen del sistema de archivos desde DISPOSITIVO (flash);
  2. .\/Read.sh “CLAVE” ‘MARCADOR” — creamos un entorno virtual, descargamos las bibliotecas necesarias y ejecutamos el script de lectura;
  3. En el directorio actual, abrimos el archivo Read — esta es la información esteganografiada.

Conclusión

Este método de esteganografía probablemente necesita mejoras, pruebas adicionales y expansión a sistemas de archivos más populares, como Fat32, NTFS y ext4.
El objetivo de este trabajo fue mostrar el principio mediante el cual se puede realizar el almacenamiento oculto de información en un sistema de archivos.
Con algoritmos como estos, se puede almacenar información sin temor, y aunque conociendo la clave es posible quebrantar este sistema no mediante un ataque de fuerza bruta (sino con un algoritmo bastante largo), sin saber la clave, este sistema me parece absolutamente resistente; sin embargo, esto podría ser motivo para un artículo aparte.

Todo el código está implementado en Python versión 3.5.2. Ejemplo de funcionamiento se presenta en mi canal de YouTube. El código completo del proyecto está disponible en github.
(Sí, sí, sé que para la versión de producción se debe escribir en algo "rápido", como en C 😉)
En esta implementación, el tamaño del archivo de entrada para la esteganografía no debe exceder los 1000 kB.

Quiero expresar mi agradecimiento al usuario PavelMSTU por los valiosos consejos al planificar esta investigación y las recomendaciones sobre la redacción del artículo.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster