26 septiembre 2011

TuentiDump, descargando cuentas de Tuenti

Desde la publicación de los artículos Tuenti y las redes locales inseguras (1 y 2) muchos me comentaron que la solución que habían tomado era cerrar siempre la sesión para invalidar el SessionID que le hubieran podido capturar y, por tanto, que su cuenta quedara expuesta el menor tiempo posible. Como es lógico, sigue siendo un peligro si se está utilizando una red insegura (y/0 que no es de nuestra confianza).

En los anteriores post se vieron opciones como, por ejemplo, robar un SessionID (que por lo tanto no podría ser invalidado) y en la serie Tuenti Security Issues que está realizando Chema Alonso en El lado del mal seguro que se verán más. Sabemos que estas técnicas son más elaboradas y complejas, reduciendo el número de atacantes que las utilizarían, por lo tanto me voy a centrar en un ataque que solo incorpore un ataque MITM y monitorice en busca de SessionIDs (por ejemplo la utilización de aplicaciones como Firesheep, Faceniff, TuentiSniffer, ...).

Hace unos meses (¡mas de los que me hubiera gustado!) dimos en mi universidad una serie de charlas sobre seguridad en redes y servicios web y en una de ellas quise demostrar como el más mínimo descuido puede poner en jaque nuestra cuenta. Para ello, desarrolle la aplicación TuentiDump que monitoriza el tráfico y descarga todo el contenido de la cuenta de Tuenti comprometida, almacenando en una base de datos (SQLite) toda la información (permitiendonos un análisis posterior más cómodo).

La aplicación descarga la información personal del usuario (nombre, apellidos, dirección, teléfonos, email , twitter, páginas web, ...), los mensajes del tablón/wall, las imágenes y su información y los mensajes privados. Hay alguna información cuya obtención no ha sido implementada (tablones y comentarios en imágenes) que es sencillo de añadir pero que en este caso no me ha preocupado.

La descarga y almacenamiento de la información se realiza en tres etapas.
  1. Se realizan todas las peticiones web necesarias guardando en bruto (sin procesar) las respuestas. De esta forma conseguimos reducir al máximo el tiempo en el que el SessionID ha de ser válido.
  2. Se procesa toda la información obtenida en la etapa anterior dejando los datos listos para almacenarlos en la base de datos. Además, en esta etapa se pueden descargar todas las imágenes de la cuenta (para acceder a éstas no es necesario estar autenticado)
  3. Se genera la base de datos y se almacena en ella toda la información.
Ahora bien, lo más importante ... ¿cuanto tiempo tarda?.
En las pruebas que he realizado con mi portatil (algo limitado) la etapa de descarga (que es la crítica) tarda alrededor de 120 segundos (la limitación se encuentra tanto en el equipo como en la conexión). En la universidad y con un equipo más decente conseguí bajar la cifra a 50 segundos (lo más lento es la descarga de los datos de las imágenes, desactivandolo los tiempos se reducen a la mitad).

La aplicación permite elegir el número de hilos, las páginas del tablon (10 elementos por página) y las de imágenes (25 elementos por página) que se procesaran por cada hilo. Es recomendable jugar con estos parámetros para conseguir el máximo rendimiento.

Con respecto a los datos obtenidos, la información más interesante/crítica se suele encontrar en los mensajes privados. Por lo tanto, lo que un atacante seguramente no hubiera visto simplemente suplantando la cookie, ahora sí que queda expuesto.

A continuación podéis ver una captura de TuentiDump descargando mi cuenta de Tuenti, los tiempos completos y la estructura de la base de datos que genera:






Con respecto a la aplicación, no es ninguna maravilla (y claramente Java no era la mejor opción) pero para las pruebas era suficiente. Le he corregido algunos bugs y he publicado su código fuente en:
http://www.ldelgado.es/?tuentidump

Como conclusión decir que con esta aplicación simplemente quería dar cifras a algo ya conocido y mostrar como hasta la más mínima exposición puede comprometer al completo nuestra cuenta y permitir a un atacante analizar, con todo el tiempo que necesite, toda la información contenida en la misma.

-------------------

Contribución por Luis Delgado

17 comments :

Raimungar dijo...

Pide usuario y contraseña. No se puede descargar? 

Saludos.-

Luis Delgado dijo...

Ya está corregido!
Había bloqueado la descarga hasta que se publicara el post y ayer se me olvidó quitarlo :)

Anonimo dijo...

Alguien me explica por favor como usar este programa? Sinceramente no sé ejecutar aplicaciones en java si no son ejecutables, no sé que hacer con el codigo fuente, hace tiempo que buscaba un programa asi para hacer un backup de mis propios datos, alguien seria tan amable de explicarmelo un segundo?

Elcracken619 dijo...

no logro hacerlo funcionar

Luis Delgado dijo...

Si no das mas pistas no puedo saber en qué te falla...

Lo acabo de probar y funciona sin problemas. Aun así, no hace uso de la API asi que si hacen modificaciones en el código dejará de funcionar y tendréis que actualizarlo :)

Luis Delgado dijo...

Tienes toda la información en la Wikipedia (http://bit.ly/g8QV6c) aunque por comodidad yo te recomiendo que utilices un IDE (Netbeans, Eclipse, etc)

Rafael Carlos Soriano dijo...

si ya probé con eclipse y ma so menos averigüe que pasaba
resulta que con x64 no me reconoce una de tus librerias, asi que tengo que bajarme el Eclipse y el java x84(32 bits)
y ahí ya probaré...

gracias

Luis Delgado dijo...

Si, es cierto... En su día me tocó desinstalar todo para poner la versión de 32bits porque la librería JPCap (utilizada para la monitorización del adaptador de red) no es compatible!

star4 dijo...

Muy interesante el blog, pero no consigo abrirlo. me puedes echar una mano por favor?muchas gracias

Victor Martin dijo...

Gran aportacion!!!
estoy on eclipse y me lanza este error!!

java.lang.NoClassDefFoundError: app/MainCaused by: java.lang.ClassNotFoundException: app.Main at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source)Exception in thread "main" 


No me deja ejecutarlo!!!
Muchisimas gracias!!
(:

Luis Delgado dijo...

Comprueba que estás importando correctamente las clases (no encuentra la clase 'Main' del paquete 'app').

Biarba dijo...

hola, alguien podria decirme que hace falta para usar el tuentidump, que es lo necesario o como se usa para descargar un tuenti por favor?

yakensz dijo...

no se como se pone eso en marcha 
me lo e descargado 

les esplico 
cuando lo descargo pense que abria una aplicasion como el wifi auditor
pero no 
al abrir las carpetas donde me lo baje ay 2 abro la primera(lib) y me encuentro con jpcap (2)  y json y sqlite_jdbc

en la segunda (src) ay app , gatherer processor util
entro en app y me encuentro archivos java
 gatherer y mas archivos java((5)...asi en todas las carpetas

como pongo en marcha el programa

Luis Delgado dijo...

Primero tienes que compilarla (código fuente en la carpeta 'src'). Los ficheros de la carpeta 'lib' corresponden a las librerías que utiliza la aplicación.

yakensz dijo...

hola ya me lo descargue y todo eso pero no se como se
usa no encuentro ninguna aplicasion  me explicas porfa

yakensz dijo...

no entendi como que compilarala eso como se ase

Luis Delgado dijo...

http://chuwiki.chuidiang.org/index.php?title=Compilar_java_desde_l%C3%ADnea_de_comandos