28 abril 2011

Binarios para desayunar

Como ya sabéis desde hace tiempo llevamos organizando los 'wargames' de Campus Party e incluso lanzamos nuestro primer Wargame internacional hace relativamente poco.

Llevamos tiempo prometiendo que liberaríamos algunas de las pruebas para aquellos que en su momento no pudieron participar y hoy ha llegado ese día.

Las pruebas que vamos a liberar son de tipo 'binarios' y la dificultad va in crescendo, la primera es bastante sencilla, la segunda tiene mas dificultad y la tercera es mas dura .

Problemas de tiempo

Esta prueba formó parte del reto Campus Party 2009 y la lógica es la siguiente: Tenemos un binario compilado que debe liberar un token, el problema es que solo liberará dicho token en una fecha determinada (y posterior a la actual). 

Para asegurarnos que el binario se ejecutaba en el host donde debía ejecutarse (y no fuera tan fácil como descargarlo y ejecutar en una maquina cambiando la hora ...) debes crear el fichero /tmp/matrixhasyou para simular el entorno confiable donde debe ejecutarse.

El código fuente de la prueba se puede descargar aquí

Compilación: gcc -static timetoken.c -o timetoken

Crackme 'old school'

Este es el típico crackme donde se debe 'reversear' el binario en busca del token, lo suyo es compilarlo con -static para meter mayor cantidad de ruido y hacer que el comando strings emita muchos datos.

El fuente de esta prueba aquí.

Compilación: gcc -Wall -O2 --static -pthread passCP.c -o passCP

Crypto al revés

Esta prueba, del Wargame I, generó infinidad de correos electrónicos preguntando 'si estaba bien' porque el planteamiento es un poco diferente a lo normal. En este caso, del binario debes ser capaz de obtener un string cifrado y convertido en base64 y la clave para descifrar dicho string. ¿Donde está el problema? En que no se especifica en ningún lado con qué algoritmo de cifrado se ha realizado el proceso. 

El binario se ofrecía 'roto' ya que faltaba una librería llamada libSbD.so.1 que era la que contenía la información sobre los algoritmos empleados. Se pedía como solución que se entregase una librería que hiciera funcionar el binario

Mucha gente resolvió el problema haciendo fuerza bruta ... de algoritmos para descubrir cual se estaba usando.

Para jugar esta prueba, compila todo el fuente (binario y librerías) y luego 'borra' libSbD.so.1 para tener el binario exactamente a como se entregaba a los participantes

El fuente de la prueba se puede descargar aquí

Compilación: 

(la librería compartida)

gcc -c -fPIC libSbD.c -o libSbD.o

gcc -shared -Wl,-soname,libSbD.so.1 -o libSbD.so  libSbD.o

(El binario en si )

gcc bin02.c -o bin02 -L. -lSbD -lssl -lcrypto -pthread
ln libSbD.so libSbD.so.1

(Para ejecutarlo)

export LD_LIBRARY_PATH=`pwd`

./bin02

Esperamos que este material resulte didáctico, tanto para los valientes que compilen y jueguen como para aquellos que simplemente tengan interés en ver el código

4 comments :

Ale dijo...

Hola yago fijate que yo siempre he tenido el interes en aprender este tipo de cosas, actualmetne soy desarrolladora en php y se un poco de otros lenguajes como java, perl y c. Siempre me he sentido atraida por el lado de la seguridad informatica y quisiera adentrarme un poco mas en eso. Que es lo que me recomendarias estudiar para poder resolver este tipo de retos.

Gracias.
Ale

yago jesus dijo...

Hola Ale, Como bien dices tener conocimiento previo de sistemas operativos / lenguajes de programación es requisito fundamental. Para ir 'soltándote' lo mejor que puedes hacer es conseguir 'Writeups' de wargames, por ejemplo aquí está el de nuestro Wargame I http://www.securitybydefault.com/2011/02/soluciones-del-i-wargame-sbd.html

Yago Jesus dijo...

Hola Ale, Como bien dices tener conocimiento previo de sistemas operativos / lenguajes de programación es requisito fundamental. Para ir 'soltándote' lo mejor que puedes hacer es conseguir 'Writeups' de wargames, por ejemplo aquí está el de nuestro Wargame I http://www.securitybydefault.com/2011/02/soluciones-del-i-wargame-sbd.html

Sebastián Guerrero Selma dijo...

Sería interesante compartir con la comunidad el código de las pruebas para ver cómo están desarrolladas.

Cuando saque algo de tiempo volveré a echarle un vistazo a las pruebas de binarios.

Un saludo.