General

Hacking WhatsApp for fun and profit

A estas alturas ya debes haber escuchado que WhatsApp es inseguro. El popular sistema de mensajería entre plataformas transmite números de teléfonos y mensajes en texto plano a través de, aparentemente, una versión codificada de XMPP sobre el puerto TCP 443.

Lo que seguramente no te han contado es de que te sirve eso, y por qué debería importarte. En primer lugar, sirve para que hackers de todo el mundo le hagan ingeniería reversa al protocolo de WhatsApp, existiendo proyectos que dicen tener la API completa y estar trabajando en una aplicación de escritorio, una Web, un plugin para Chrome… situación que, asumo, será un poco conflictiva.

En la práctica, significa que cuando utilizas WhatsApp conectado a una red que no está bajo tu control, por ejemplo una red Wi-Fi en un café o en un restaurant, o en tu centro educativo, estás exponiendo todas tus conversaciones, contactos y multimedia que compartes por WhatsApp a cualquier persona que tenga los motivos para querer esa información.

Solo se necesita lanzar un ataque de ARP spoofing (con arpspoof de dsniff, ettercap et al.) para que el atacante pueda hacer que todo el tráfico de tu smartphone pase por su equipo, donde puede estar capturando paquetes con wireshark, tcpdump y otros. Ya existe un sniffer para WhatsApp, pero a alguien se le ocurrió la genial idea de subirlo a Megaupload, que ahora está cerrado. En todo caso no se necesita sniffer, como explico ahora.

Tu WhatsApp se contacta con la matriz a través de la dirección bin-short.whatsapp.net que básicamente se sirve por DNS round robin a 12 direcciones IPv4, 10 en Texas y 2 en Califoia. Tu equipo enviará un mensaje saludando, informando la versión del cliente, el sistema operativo del teléfono, las capacidades de cifrado con las que cuenta, tu número de teléfono, tu nombre, y algunas cosas más.

Pro Tip: puedes trollear bloqueando la resolución de DNS de esa dirección en tu red

Las imágenes se pasan en Base64 (el thumbnail) junto con una URI que, esta sí, cifra sobre HTTPS. Hay una granja de servidores (mmsXXX, 18 servidores según mis cálculos) que utilizan una estructura de directorios (p.ej., /d3/22/15/8/7) para almacenar multimedia y luego un hash MD5 como nombre de archivo.

Descubrir como arman esta URI es interesante, pero innecesario, porque igual pasan la URL por texto plano y no implementan control de acceso para servir el contenido. Un ejemplo aquí (note la URL)

Como nota curiosa, parecen usar lighttpd sobre FreeBSD para esta granja, específicamente una versión que podría ser susceptible a un ataque de DoS aunque personalmente no creo que lo sea, además de poder mitigar el riesgo con otros 17 servidores. Pero siempre es divertido averiguarlo.

Las otras posibles derivaciones de esto, como por ejemplo, que se hagan pasar por ti para enviar mensajes en la red, están un poco inmaduras aun. Al usar un challenge SASL MD5, debe haber una clave (tú no le pusiste una clave a tu cuenta de WA), que aunque según algunos es simplemente “password”, al parecer se calcula usando valores UUID que están en el teléfono, y un algoritmo propio del cliente, para identificarse por XMPP. En s.whatsapp.net tienes un CNAME a im101 (intenté buscar más, sin éxito) que aunque no responde por XMPP es el nombre del realm. Enjoy. Y no uses WhatsApp en redes Wi-Fi públicas, por ahora.

Standard

3 thoughts on “Hacking WhatsApp for fun and profit

  1. Pingback: Privacidad e idiosincrasia | null pointer dereference

  2. Martin says:

    Interesante. Que te parece ahora que ya estan encriptado sus mensajes?, crees que la infraestructura siga estando dentro de tus calculos?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s