jueves, 20 de agosto de 2009

How to PASS wargame CP 2009: CRYPTO

Aquí va la tercera entrega de soluciones del wargame realizado en campus party valencia:


// RETO 1 //


Al seguir el enlace llamado Bases, nos descargamos un PDF que tiene las bases del concurso. ¿Que hacemos entonces?

1. Podemos buscar en el código fuente del sitio, mirar posibles scripts, etc, pero no vemos nada.

2. El enunciado dice que "en las nuestras hay un par de sorpresas", eso dice algo como que en las reglas hay un par de cosas que nos interesan, pero si leemos las reglas del archivo pdf y las comparamos con las reglas del archivo de presentación del wargame, vemos que son las mismas.
Y no hay nada raro en ellas.

3. Abandonamos el juego !

4. Tengo una teoría sobre los wargames, cada vez que se monta uno, los creadores intentaran hacer niveles que se relacionen con ellos de alguna forma, con sus blogs, con sus herramientas, con sus investigaciones, de todas formas algo que se busca publicando un reto es que se conozca mas acerca de quien lo esta realizando y sobre las cosas que tiene para mostrar ;)

Así que siguiendo esto nos vamos a buscar las palabras pdf, mezcladas con security by default. Lo hacemos de esta forma:

El primer documento que aparece es una entrada de hace algún tiempo donde nos hablan de un modulo de perl muy interesante, será esto lo que hicieron?, A que si!.
La forma mas fácil de tenerlo es bajando el fuente, lo descomprimimos, le damos

root@plasma:/tmp/Fuse-PDF-0.09# perl Makefile.PL
y luego

root@plasma:/tmp/Fuse-PDF-0.09# make

y listo, ahora lo usamos con nuestro pdf.

Fácil no?, si conoces la herramienta y sabes como hacerlo, todo es tan fácil :p

Si quieres saber mas sobre el filesystem que se usa para montar temporalmente el PDF, entonces lee por aquí.


Conclusiones:

1. Referenciate siempre en lo que quieren los creadores del wargame, ya lo tienes claro?

2. Casi todo wargame se orienta a usar una herramienta o explotar una vulnerabilidad, debes tener presente toda la gama de posibles herramientas y de ataques para saber cual seleccionar en el momento adecuado, desafortunadamente no hay un truco para eso, creo que todos los que hayamos jugado en muchos wargames (desde hackerzone ...), coincidimos en que esto se le conoce como:
EXPERIENCIA

Y la única forma de obtener esa experiencia es jugando!, tal cual como en los videojuegos :p

-x* Odio a los que me matan jugando UT :( -x*

3. No conocía este paquete de perl, me parece muy interesante, leeré mas sobre este.

// FIN RETO 1 //

vamola, vamola ...

// RETO 2 //

Así comienza el ejercicio, sin muchas palabras, solo un MD5 muy evidente.

Del código fuente de la página vemos que el fondo es una simple imagen que se repite, además encontramos el MD5 en texto plano.

Intentamos romper el MD5?
Ignoreme!

Ok sigamos, concentremonos en la imagen.

Este recuadro y los cuadritos en las esquinas me hacen pensar que esta imagen es un código QR, si quieres crear códigos QR puedes entrar en este sitio. ¿Que hacemos entonces?, podemos buscar una lista de posibles lectores QR, pero la mas efectiva es bajarse este código opensource que se compila muy fácil.

Vemos que el decodificador QR nos entrega un texto que parece ser base64 , si lo descodificamos obtenemos otro texto que parece tener párrafos y que además usa puntuación, lo que me hace pensar que el texto sigue cifrado con algún tipo de corrimiento o sustitución.

Para analizar el texto podemos hacerlo a fuerza bruta o usar una excelente herramienta de criptografía que nos permite estudiar un poco sobre el tema, analizar textos y usar los algoritmos mas comunes de cifrado simétrico y asimétrico.

Con esta herramienta podemos intentar hacer un análisis de sustitución y nos dirá que el texto esta en ingles e intentará crear un mapa de sustitución que es bastante acertado, luego a mano podremos cambiar los caracteres restantes hasta obtener el texto completo.

Luego este texto lo podemos buscar en Internet y adivinen que encontraremos?, la referencia a un post de SBD donde hablan de un método de captcha muy popular en esos días.

La solución entonces era el titulo de dicho post, que buen reto !

Conclusiones:

1. La verdad es que descifrar texto no es una tarea muy simple, pero si contamos con las herramientas indicadas nos ahorraremos mucho tiempo.

2. Debes tener una novia al lado (o conectada) para que te inspire a la hora de resolver estos ejercicios, thx triz :P

3. Hay que leer mas sobre QR, al parecer por estos lados aún no es un tema común, revisen el listado que les dejé para que estudien también!

// FIN RETO 2 //

aquí vamos otra vez ...

// RETO 3 //

Al seguir el link ...


Este nivel aún no se como se pasa, tengo la teoría, lo que esta en el twitter son textos en base64, si los descodificamos tenemos mensajes cifrados en RC4, que se supone que hay que hacer entonces?, un ataque de fuerza bruta (otra vez :( ) contra el mensaje hasta que rompamos la clave con la que fue cifrado. En las pistas que nos dan los creadores del reto, dice que se rompe con una palabra que esta en su sitio web ...

Ni idea de como pasar este nivel, alguien se anima?

El link donde están los textos cifrados es este: http://twitter.com/Ninja_Assasin.

Conclusiones:

1. Odio la fuerza bruta !!!

2. Odio la fuerza bruta !!!

3. La criptografía fuerte es fuerza bruta, la odio !!!

Update (24 de agosto): vierito5, me cuenta que la palabra que le hace falta a mi diccionario es "wargames", no puedo creer que no se me ocurriera. En el dicionario sacado del sitio, tenia la palabra "wargame", todo por una s, lol.

Lo que habia hecho era programar un bruteforce para RC4, lo probe con la palabra y funcionó:


Con eso queda resuelto el reto, gracias vierito5 ;)

// FIN RETO 3 //

un suspiro y seguimos ...
// RETO 4 //


En este reto nos preguntan si tenemos el certificado del campurriano, y recordamos que en el primer reto encontramos un archivo llamado ficticio.p12, esa extensión al igual que esta, nos habla de un estándar PKCS el cual nos permite definir un container con información privada y protegido con una clave simétrica. La clave simétrica se usa para proteger el acceso a los certificados digitales del usuario.

Estos archivos los podemos pasar a diferentes aplicaciones como navegadores y dispositivos que requieran acceso a sistemas protegidos comúnmente por SSL.

En el escenario de este reto, tenemos un servidor web apache, configurado con certificados digitales autofirmados y el reto entonces consiste en encontrar la clave que me permite abrir el container .p12 para sacar los certificados digitales del usuario y poderlos agregar a un navegador para que el servidor web me permita acceder al contenido que protege.

En resumen, crackear el certificado .p12.

Para hacer esto debemos tener el archivo .p12 (ya lo tenemos), debemos tener un software de crackeo y además un diccionario que funcione (fuerza bruta otra vez).

En el web site de sbd recomiendan usar una herramienta llamada brute12, pero la verdad la probé en linux emulada con wine y en windows de todas las formas posibles y no funciona. Si quieres crearte tus propios archivos .p12 para hacer pruebas, puedes seguir la documentación que aparece en este link.

La forma de pasar este nivel ya explicada se basa en un diccionario mágico generado de la página de campus con el que se puede hacer lo siguiente:

1. Crear un mini script que invoque directamente a openssl y le pase como parámetro una posible clave de una lista y trate de abrir el archivo .p12, si la clave es correcta entonces el script parará y me pedira la clave con la que quiero exportar el certificado .pem.

root@plasma:~/ssl# cat script
for i in `cat dict.txt`
do
echo $i
openssl pkcs12 -in $1 -passin pass:$i -out nando.pem
done
root@plasma:~/ssl#
2. Ejecutarlo y esperar la respuesta:
root@plasma:~/ssl# sh script ficticio.p12
Esta
Mac verify error: invalid password?
es
Mac verify error: invalid password?
la
Mac verify error: invalid password?
versión
Mac verify error: invalid password?
html
Mac verify error: invalid password?
del
...
hubiesen
Mac verify error: invalid password?
finalizado
MAC verified OK
Enter PEM pass phrase:
En el punto donde se detiene el script leemos la clave correcta con la que se abre el container.
Esta forma funciona si no conseguimos un cracker de archivos .p12, pero Lorenzo Martinez muy amablemente creó una herramienta de crackeo llamada brute12unx, basada en brute12, que funciona muy bien. Esta herramienta es un sencillo script en perl que lee palabras de un diccionario y ataca la apertura del archivo en cuestión.

Un ejemplo? :
root@plasma:~/ssl# perl brute12unx.pl -p ficticio.p12 -d dict.txt
Certificate Cracker PKCS12 for UNIX 03/08/2009 (http://www.lorenzomartinez.es/projs/brute12unx)
By Lorenzo Martinez (lorenzo@lorenzomartinez.es)
Based on idea: brute12 (http://www.security-projects.com/?Brute12)
Password is: finalizado
Start time: 2009-08-21 16:25:09
End time: 2009-08-21 16:25:13
Abriendo este container ya podiamos cargar los certificados digitales en el navegador y el servidor web objetivo nos dejaria entrar, que encontrariamos?, segun dicen los amigos de sbd una imagen a la cual habia que pasarle un software de esteganografía para sacar otra imagen que tenia la clave, no tengo la imagen, pero si usan por ejemplo la herramienta openstego podran evidenciar lo fácil que es esconder imagenes, musica, etc, dentro de otras imagenes, musica, etc . Si hace una busqueda en los repositorios de los sistemas linux, podran encontrar otras tantas herramientas.
root@plasma:~# apt-cache search stegano
outguess - Universal Steganographic tool
python-stepic - Python Steganography in Images
samhain - Data integrity and host intrusion alert system
snowdrop - plain text watermarking and watermark recovery
steghide - A steganography hiding tool
root@plasma:~#
Conclusiones:

1. Este era un ejercicio interesante, sin embargo ya teniamos todo lo que necesitabamos excepto por supuesto el diccionario correcto. Todos estos ejercicios se volvieron de fuerza bruta, si tienes el archivo y tienes la herramienta, solo basta conseguir el diccionario adecuado y tener mucha paciencia. En fin, tendré que mejorar mi capacidad de deducción referente a que diccionarios usar :P

2. Cuando NO hay herramientas de crackeo automatizadas, siempre podras usar las herramientas que se usan en un sistema de forma convencional, sin embargo los tiempos de crackeo van a ser muy diferentes y en la mayoria de los casos sera un proceso mas lento. Lo ideal es programar las herramientas de crackeo en lenguajes muy rápidos (como C o ensamblador) y obviamente para eso vas a necesitar un set de librerias con los estandares y protocolos que quieras atacar, pero creo que todo esta casi hecho y si no, a programar!!!

Un ejemplo de los tiempos de mi script vs el brute12unx:

El script:
Mac verify error: invalid password?
finalizado
MAC verified OK
Enter PEM pass phrase:
real 0m10.651s
user 0m8.169s
sys 0m1.880s
brute12unx:
Password is: finalizado
Start time: 2009-08-21 16:38:13
End time: 2009-08-21 16:38:17

real 0m3.575s
user 0m3.544s
sys 0m0.028s
Esto lo calculé con el comando time de un sistema linux.

3. Puedes jugar con openssl y hacer muchas cosas mas que intentar crackear archivos .p12 :P


// FIN RETO 4 //


3 comentarios:

vierito5 dijo...

Hola nonroot, te dejé un comment en el post de securitybydefault sobre cómo pasamos la del twitter, saludos

vierito5 dijo...

Y ahora que leo lo de que no te funcionaba el brute12. Resulta después de instalar CAPICOM, que es necesario para que funcione, hay que registrar una librería a mano porque la instalación no lo hace. Aquí tienes el link:

http://www.cert.fnmt.es/show.php?o=faq&id=194&mode=show

Prueba ahora con el brute12 a ver.

nonroot (c) 2008/2009 dijo...

Si, lo intenté pero no me funciona, no se si es porque sea un XP parchado.
De todos modos prefiero la utilidad bajo linux ;)

Pasaste el nivel 4 de binarios?

Entradas populares