Esteganografía en el sistema de archivos del disco óptico.

Mientras buscaba información interesante sobre esteganografía, me encontré con un entretenido artículo sobre esteganografía en el sistema de archivos , y después de un tiempo, me llevó a la idea de crear esteganografía en el sistema de archivos de discos ópticos.

Probablemente en estos días, casi no quedan personas que usen discos en la vida cotidiana, porque una opción más valiosa frente a las unidades flash vino a reemplazarlas.

Con un poco de reflexión, decidí que los discos aún pueden tener algún uso, por ejemplo, dentro de su sistema de archivos, puede ocultar cierta información secreta y luego transferirla a otra para que nadie sospeche nada.

Esto es lo que haremos, a saber: utilizaremos la biblioteca de Python, que nos ayudará a codificar la información de un archivo de texto y luego ocultarla en las entrañas de nuestro disco.

imagen

Pero antes de comenzar, echemos un vistazo a algunas de las pequeñas cosas, y también definamos el concepto de un disco óptico.

¿Qué es un disco óptico?


Disco óptico (Eng. Disco óptico): el nombre colectivo de los medios de almacenamiento hechos en forma de discos, cuya lectura se lleva a cabo mediante radiación óptica (láser).

imagen

Cada disco en una computadora se presenta en un formato específico en forma de una imagen que contiene toda la información y estructura del disco, y se utiliza para trabajar con información sin un medio óptico, así como para archivar datos en medios sólidos
El formato estándar para discos ópticos es iso9660 , pero todavía hay
Tenga en cuenta que la imagen contiene menos información que el CD original. El disco contiene información de servicio que, en particular, se puede utilizar para proteger contra la copia. Trabajaremos con ISO9660.

Mirada interior


Y ahora veamos la estructura de iso9660 desde adentro, puede encontrar información detallada aquí , aquí y aquí , y para aquellos que saben inglés también aquí . Por mi parte, solo diré que consta principalmente de 2 descriptores: Boot Record y Primary Volume Descriptor (PVD) , puedes abrir cualquier iso en 010editor y verlo por ti mismo.

imagen

Boot Record puede ser utilizado por sistemas que necesitan inicializar muchos tipos de datos antes de hacer que un disco esté disponible, aunque ISO 9660 no indica qué información en Boot Record ni cómo usarla.

PVD es el punto de partida en la identificación de iso9660, se ve así:

imagen

imagen

Para los amantes de los esquemas:

imagen

Encontrarás más información aquí.

Y estamos avanzando.

Inicialización en la estructura ISO.


Trabajaremos con el directorio raíz, en él crearemos nuestros propios directorios y agregaremos los archivos necesarios.

Para esto utilizaremos la biblioteca pycdlib , puede familiarizarse con ella en el siguiente enlace.

Pasemos a escribir el programa, pero quién no quiere ir paso a paso, encontrará el código fuente en el enlace a mi repositorio en github:

#     import base64 import pycdlib 

Prepara archivos con texto


Ahora necesitamos preparar nuestros archivos, que colocaremos en la estructura de nuestra iso.

El curso de acción es el siguiente:

  1. Tomamos el texto de origen en ciertos archivos y lo leemos en variables; nada nos impide tomar mucho texto, pero para la demostración solo tomé un par de oraciones en cada archivo; continuaremos manipulando estas variables
  2. Después de considerar las oraciones, necesitamos codificar los contenidos. Codificaremos usando base64
  3. Escribimos el contenido codificado en nuevos archivos llamados ARRIBA y ABAJO . Los archivos se llaman así porque decidí reorganizar de tal manera que 1 parte del primer archivo y 1 parte del segundo archivo (es decir, las partes superiores) están escritas en ARRIBA , y en ABAJO 2 parte del primer archivo y 2 partes del segundo archivo ( es decir, partes inferiores)

 with open('/home/ul/stegist1.txt','rb') as stegist1:#   for line1 in stegist1.readlines(2): print(line1)#   1  for line2 in stegist1.readlines(2): print(line2)#   1  stegist1.close() enc_line1=base64.b64encode(line1)#     base64 enc_line2=base64.b64encode(line2) with open('/home/ul/stegist2.txt','rb') as stegist2: for line3 in stegist2.readlines(2):#   2  print(line3) for line4 in stegist2.readlines(2):#   2  print(line4) stegist2.close() enc_line3=base64.b64encode(line3)#   print(enc_line3) enc_line4=base64.b64encode(line4) print(enc_line4) with open('/home/ul/UP.txt','ab') as up:#  UP    up.write(enc_line1) up.write(enc_line3) with open('/home/ul/DOWN.txt','ab') as down:#  DOWN    down.write(enc_line2) down.write(enc_line4) 

Ocultamiento


Es hora de pasar a la biblioteca pycdlib de la que hablé al principio. No es difícil trabajar con él: creamos un objeto a través del cual agregamos más archivos y directorios dentro.

 iso=pycdlib.PyCdlib() #   PyCdlib iso.new(rock_ridge='1.09')#  rockridge(    iso   ) iso.add_directory(iso_path='/A1',rr_name='a1')#  (  ) iso.add_directory(iso_path='/B1',rr_name='b1') iso.add_directory(iso_path='/B1/B2',rr_name='b1b2') iso.add_directory(iso_path='/A1/A2',rr_name='a1a2') iso.add_file('/home/ul/stegistup.txt', iso_path='/A',rr_name='a')#   up iso.add_file('/home/ul/stegistdown.txt', iso_path='/B',rr_name='b')#   down iso.write('papastegisto.iso')#  iso () 

Como podemos ver, nuestro texto fue escrito con éxito

imagen

Quiero notar que podemos crear en una ruta determinada, por ejemplo / A , ya sea un archivo o una carpeta.

Si primero especificamos la creación de un directorio en / A , y luego especificamos la creación de un archivo en / A, se muestra un mensaje de error, no es lo mismo que colocar el archivo en una carpeta.

Extensiones para el sistema de archivos ISO9660


Hay 2 extensiones principales para el sistema de archivos iso: RockRidge y Joilet .

Rockidge


Esta es una extensión del sistema de archivos ISO 9660 diseñada para almacenar atributos de archivos utilizados en los sistemas operativos POSIX (es decir, compatibles con Unix).

Las extensiones de Rock Ridge se escriben sobre el sistema de archivos ISO 9660 para que el disco óptico de Rock Ridge pueda leerse mediante un software diseñado para funcionar con ISO 9660.

Más detalles
Rock Ridge puede almacenar la siguiente información adicional sobre el contenido del disco:

  • nombres largos de archivo (hasta 255 caracteres);
  • menos restricciones en el uso de caracteres en los nombres de archivo;
  • estructura de directorios de anidamiento arbitrario.
  • para cada archivo se escriben los atributos:
  • permisos de archivo, incluidos los campos uid y gid;
  • cantidad de enlaces duros al archivo;
  • tiempos de creación, modificación, acceso, cambio de atributos, etc.
  • archivos especiales compatibles:
  • archivos dispersos;
  • enlaces simbólicos;
  • archivos de dispositivo
  • archivos de socket
  • Archivos FIFO.

Estos datos se registran en directorios especiales, cuyos nombres generalmente están ocultos.

Joilet


Esta es una extensión del sistema de archivos ISO 9660 diseñada para aliviar las restricciones de nombre de archivo impuestas por ISO 9660. La especificación fue desarrollada por Microsoft y ha sido compatible con todas las versiones de Microsoft Windows desde Windows 95 y Windows NT 4.0.
Por defecto, se utiliza en todos los medios de CD-ROM con datos publicados después de 1995.

Más detalles
Joliet presenta un conjunto adicional de nombres de archivo. Los nombres tienen hasta 64 caracteres Unicode y se almacenan en codificación UCS-2. Para su almacenamiento, se utiliza un encabezado adicional especial (Descriptor de volumen suplementario, SVD), que los programas compatibles con ISO 9660 ignoran incondicionalmente, lo que garantiza la compatibilidad con versiones anteriores.

La mayoría de las plataformas de software existentes, incluidas Microsoft Windows, Linux, Mac OS X y FreeBSD, son capaces de leer medios de almacenamiento con la extensión del sistema de archivos Joliet, que permite el intercambio de archivos entre estos sistemas operativos incluso cuando se usan alfabetos no latinos (como árabe, japonés, cirílico) lo que no era posible con la norma ISO 9660 habitual.

De hecho, también hay una extensión 3 para el sistema de archivos iso, se llama Romeo .

Esta es una extensión de ISO 9660 para MS Windows 95, no hay suficiente información en Internet, y lo más probable es que esta extensión no se use en ningún otro lugar.

Puede encontrar aún más información sobre extensiones y sistemas de archivos para CD / DVD aquí , y ahora volvamos a nuestro programa.

El código resultante para codificar información de un archivo y colocar archivos con información codificada en iso se ve así:

 #     import base64 import pycdlib #   with open('/home/ul/stegist1.txt','rb') as stegist1: #  for line1 in stegist1.readlines(2): print(line1) #  for line2 in stegist1.readlines(2): print(line2) #  enc_line1=base64.b64encode(line1) print(enc_line1) enc_line2=base64.b64encode(line2) print(enc_line2) with open('/home/ul/stegist2.txt','rb') as stegist2: #  for line3 in stegist2.readlines(2): #  print(line3) for line4 in stegist2.readlines(2): #  print(line4) enc_line3=base64.b64encode(line3) #  print(enc_line3) enc_line4=base64.b64encode(line4) print(enc_line4) with open('/home/ul/UP.txt','ab') as up: #  UP    up.write(enc_line1) up.write(enc_line3) with open('/home/ul/DOWN.txt','ab') as down: #  DOWN    down.write(enc_line2) down.write(enc_line4) #   iso iso=pycdlib.PyCdlib() iso.new(rock_ridge='1.09') iso.add_directory(iso_path='/A1',rr_name='a1') iso.add_directory(iso_path='/B1',rr_name='b1') iso.add_directory(iso_path='/B1/B2',rr_name='b1b2') iso.add_directory(iso_path='/A1/A2',rr_name='a1a2') iso.add_file('/home/ul/stegistup.txt', iso_path='/A',rr_name='a') iso.add_file('/home/ul/stegistdown.txt', iso_path='/B',rr_name='b') iso.write('papastegisto.iso') 

Y les recuerdo que el código completo también está disponible en el enlace al github
Ahora pasemos a la parte final: escriba nuestra iso resultante en el disco
Puedes grabar lo que quieras, usaré Nero 7
Usaremos CD-R
CD-ROM, CD-R y CD-RW
Se diferencian en que el CD-ROM es un disco de solo lectura, no se puede escribir nada allí. CD-R y CD-RW son discos grabables. CD-R le permite escribir una vez en un disco, CD-RW, repetidamente.

¿Pero qué hay del DVD?

La principal diferencia con el CD-R / RW es la cantidad de datos que se pueden escribir en un DVD-ROM de 4.7 GB en comparación con 650,700 MB. Algunos formatos de DVD admiten hasta 13 e incluso 17 GB
Más información del disco

Como podemos ver, el programa se escribió correctamente en el disco.

imagen

Ahora podemos transferirlo en disco a las personas que queramos.

Decodificación


¿Por qué haríamos todo esto si la información no se puede decodificar, verdad?

Si está interesado en el método, puede escribir un programa que extraiga y decodifique los archivos adjuntos, será exactamente lo que usará su gente.

Y eso es todo. Mi tarea consistía en demostrar una de las formas posibles de ocultar información, utilizando discos que, al parecer, se habían hundido en el olvido.

imagen

Estaré encantado de ver sus sugerencias, adiciones, correcciones y otros comentarios.

PD: Quiero expresar un agradecimiento especial a @PavelMSTU por las consultas y patadas motivacionales.

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


All Articles