Esteganografía: El arte de la ocultación


Hoy voy a hablar de esteganografía, que es básicamente el arte de ocultar información dentro de archivos sin que nadie sospeche que está ahí, hay varias técnicas para hacerlo: LSB, DCT, Phase Coding, Spread Spectrum, Palette-based, EOF Injection, Metadata Steganography y Network Steganography. Cada una funciona de forma distinta y en distintos tipos de archivos pero la que voy a explicar hoy es la LSB (Least Significant Bit) que es la más usada y la mejor para entender cómo funciona todo esto desde cero


¿Cual es la diferencia entre la esteganografía y el cifrado?
Imagina que tienes un mensaje secreto si lo cifras conviertes "hola" en algo como "x7#kQ2". Cualquiera que lo intercepte sabe que hay un secreto ahí solo que no puede leerlo
Si usas esteganografía metes ese mensaje dentro de una foto, el que lo intercepte ve una foto pero no sabe que hay nada más, ni siquiera sospecha y esa es la gracia, no se trata de proteger el mensaje, sino de que nadie sepa que existe


¿Cómo cabe un archivo dentro de una foto?
Aquí está la parte que mola entender, una imagen digital está formada por píxeles, cada píxel tiene tres valores de color: rojo, verde y azul. Cada uno de esos valores va de 0 a 255 y se guarda en 8 unos y ceros (bits)
Por ejemplo, un píxel puede tener este rojo:
11001010
El último bit (el de más a la derecha) tiene un valor mínimo. Cambiarlo de 0 a 1 modifica el color en menos de un 0,4%. El ojo humano no nota esa diferencia ya que es imposible
Pues bien, ahí metemos el mensaje, bit a bit, repartido entre miles de píxeles
Una foto normal de móvil tiene millones de píxeles. Puedes ocultar cientos de kilobytes de información y la foto sigue siendo visualmente idéntica a la original y nadie que la mire va a notar nada
Con el audio funciona igual, cada fracción de sonido tiene bits, y los últimos son inaudibles Puedes meter datos en un MP3 y al escucharlo suena exactamente igual


Para ocultar un archivo dentro de una imagen:
Descarga Steghide (es gratuito, funciona en Windows y Linux).

steghide embed -cf foto.jpg -sf documento.txt -p "micontraseña"


- -cf foto.jpg → la foto donde vas a esconder algo
- -sf documento.txt → lo que quieres ocultar
- -p → la contraseña para protegerlo

El resultado es una foto que parece exactamente igual que antes. La mandas por donde quieras. El que la recibe hace esto:
steghide extract -sf foto.jpg -p "micontraseña"
Y le aparece el archivo original, el que no tiene la contraseña ve solo una foto


¿Para qué se usa esto en el mundo real?
Cosas legítimas:

- Marcas de agua invisibles en fotos: Si alguien te roba una imagen, puedes demostrar que es tuya porque tiene tu firma escondida dentro
- Periodistas en países con censura que necesitan comunicarse sin que se vea que están mandando información sensible

Cosas no tan legítimas:

Aquí viene lo que hace que esto sea relevante en ciberseguridad: hay malware real que usa esto
El grupo de hackers APT Turla ocultó instrucciones para sus programas maliciosos dentro de comentarios en fotos públicas de Instagram, el malware infectaba un ordenador, miraba ciertas fotos en internet, extraía las instrucciones escondidas dentro y las ejecutaba. Para cualquier sistema de seguridad solo era tráfico normal: alguien mirando fotos de Instagram

Eso es lo que hace peligrosa esta técnica, los antivirus y los sistemas de detección analizan comportamientos, firmas de virus, conexiones sospechosas... pero nadie está mirando si la foto del gato que acaba de descargar el frutero de tu barrio tiene datos ocultos dentro

Cómo detectarlo
Si recibes una imagen y quieres saber si tiene algo escondido hay herramientas para analizarla

Analiza una imagen en busca de datos ocultos (zsteg)
zsteg -a imagen.png
Busca archivos escondidos dentro de otro archivo (binwalk)
binwalk imagen.jpg
Revisa los metadatos del archivo (exiftool)
exiftool imagen.jpg

El problema es que si quien ocultó los datos lo hizo con técnicas más avanzadas que el método básico estas herramientas no lo detectan, es como el juego del gato y el ratón

El truco del espectrograma
Se pueden ocultar imágenes o texto dentro de un audio de forma que si escuchas el audio no oyes nada raro pero si lo abres en un programa y ves la representación visual de las frecuencias de sonido (el espectrograma) aparece la información a la vista
Ábrelo en Audacity, cambia la vista a espectrograma y a veces aparece texto escrito literalmente en las frecuencias altas que el oído no percibe, es una de las cosas más usadas en retos ctf para principiantes