Solucion al reto 19 "un mensaje de spam para el programador ese chusquero"

Recibí una notificación a través de la lista de correo de CTF-Colombia en la cual anunciaban el reto 19 de Hackplayers. Decidí entrar al sitio, para ver de qué se trataba.

Comencé a leer el reto, en realidad nunca me hubiese imaginado que dentro del texto de un correo spam se podía ocultar información; sin embargo después de ver la siguiente frase, lo creí razonable y muy viable:


"Vamos tío, para que mierda quieres eso. Está claro que es spam!" 


Esto me llevo a realizar la siguiente búsqueda en Google y rápidamente encontré un servicio online que permite ocultar y revelar mensajes dentro de spam. 

 

El uso del servicio es realmente intuitivo, ingresamos al sitio, luego escogemos la opción “decode” copiamos y pegamos todo el contenido del mensaje “spam”.
 

Al decodificar el contenido del “spam” encontramos que el mensaje oculto es la siguiente URL:

http://4.bp.blogspot.com/--aUU994KJmA/U_YdnK0nT2I/AAAAAAAAa18/dEwPCn-14DA/s1600/res.png



En esta URL encontramos la siguiente imagen (res.png), la cual descargamos.


Después de buscar metadatos, analizar la estructura de una imagen .png, validando alguna técnica de inyección, o verificando contenido oculto en alguna porción de la imagen no logré encontrar nada que me indicara la técnica utilizada para ocultar la información.

Al revisar las propiedades y el contenido a través de un editor Hexa no logré detectar ningún patrón o alguna firma de software de esteganografìa conocido.

Tampoco logre encontrar la imagen original, esto ayuda demasiado en los retos ya que permite realizar comparaciones y ubicar donde está el mensaje oculto.

Intenté varias búsquedas en Google, hasta que el siguiente dork me desveló cierta relación entre el nombre de la imagen y el script que posiblemente se utilizó para ocultar el mensaje. 


La técnica en la que está basado el script LSBSteg.py escrito en Python por Robin David es LSB (Least Significant Bit).

En resumen la  técnica LSB permite ocultar un mensaje utilizando los bits menos significativos de cada pixel de la imagen, al ser el bit de menor relevancia el que cambia,  la diferencia visual en la imagen es imperceptible para el ojo humano.

Bueno para poder correr el script LSBSteg.py es necesario tener instalado OpenCV,  la instalación manual en Linux (Ubuntu y Debian) es demasiado complicada por la cantidad de dependencias que tiene. En Windows es más sencillo, sin embargo los errores que se generaron al correr el script no me permitieron continuar.

Ante esta situación adversa, decidí entrar a analizar cómo se estaban extrayendo los datos del script LSBSteg.py, en el readme me di cuenta que primero se extraía el bit menos significativo del azul (B), luego el bit del G(verde) y finalmente el rojo (R), formando una combinación BGR:

(data extraida x 1 pixel) (3 bit) = Blue (1 bit) + Green (1 bit) + Red (1 bit).

Luego vi el código y al analizar los loops, me di cuenta que extraía los datos barriendo columnas.

Con esto estaba dispuesto a crear mi propio script sin depender de OpenCV, antes de empezar leí un solucionario de un CTF de esteganografía en el que mencionaban la herramienta StegSolve, la descargué y que sorpresa me llevé, cuando me dí cuenta que permitía extraer datos de los píxeles de la imagen.

Como ya había analizado el algoritmo fue sencillo llevar a cabo este procedimiento ya que Stegsolve sorprende por su flexibilidad y las múltiples opciones que tiene para extraer información de los bits de los pixeles de una imagen.



Podemos ver que el mensaje oculto  de la imagen es una  URL de la deep web (dominio onion), para acceder al sitio que debemos hacer uso de TOR:

http://newpdsuslmzqazvr.onion



Como se puede ver es un sitio de venta de drogas.

Con esto podemos concluir que el programador “Chusquero” quería recibir el correo spam, ya que en el texto del mensaje se encontraba oculta una URL de
la Deep Web a través de la cual podrá comprar drogas.

Para cerrar me parece importante manifestar que ni los filtros Antispam, ni los dispositivos DLP, ni el filtrado de contenido de navegación, ni IPS/IDS, tienen avances significativos para detectar el uso de esteganografía en una compañía.
Lo cual no es un reto fácil.
 

Saludos desde Colombia,
Juan Esteban Valencia Pantoja

6 comentarios :

  1. los errores del script se corregian cambiando las comillas " " por parentesis ( ) en las lineas que marcaba error

    ResponderEliminar
  2. ¿Cómo analizaste la forma en que se estaban barriendo los datos (loops) del script LSBSteg.py?

    ResponderEliminar