martes, octubre 08, 2013

Descifrar conversaciones de WhatsApp enviadas por la red

Podríamos decir que la criptografía es un arte derivado de la ciencia de las matemáticas, por eso los criptoanalistas consiguen hacer magia aplicando la disciplina más exacta para resolver problemas que los criptógrafos plantean. En el caso de hoy, como si un ejercicio práctico del libro de Criptografía: Cifrado de las comunicaciones digitales, se puede ver cómo aplicar todo este conocimiento para descifrar los mensajes que se envían usando WhatsApp en una red que puede ser captura, como por ejemplo una red WiFi.

Figura 1: WhatsApp Sniffer

Antaño se podían utilizar herramientas como WhatsApp Sniffer, pero hace largo que dejaron de funcionar cuando los desarrolladores de WhatsApp cambiaron el sistema de cifrado. A día de hoy, en lugar de utilizar criptografía para el envío de mensajes basada den SSL/TLS, siguen utilizando un algoritmo propio del que Thijs Alkemade ha publicado dos "pequeñas debilidades" que pueden permitir descifrar las conversaciones.

Negociación de la clave de cifrado de los mensajes

Para el proceso de autenticación de una cuenta dentro de los servidores de WhatsApp se usa un sistema basado en SASL/WAuth-1. En este algoritmo el cliente envía su número de teléfono, el servidor responde con un desafío que el cliente contesta con un mensaje derivado de su contraseña en el sistema tras 20 iteraciones de PKBDF2 usando el desafío recibido como Salting y una función SHA1 de hashing.

De esa cadena que se genera los últimos 20 bytes serán utilizados como clave de cifrado de los mensajes que se envían con el algoritmo RC4 y como MAC (Message Authentication Code) utilizando para ello el algoritmo HMAC-SHA1

Debilidad 1: Misma clave de cifrado para enviar y recibir mensajes

La debilidad radica en que si capturamos el Mensaje de entrada cifrado A y el Mensaje de salida cifrado A y se hace un XOR de ambos, entonces es equivalente a haber realizado un XOR del Mensaje de entrada en plano A con el Mensaje de salida en plano A, es decir. Es decir, se anulan las claves de cifrado utilizadas.

Figura 2: Formula matemática que describe la debilidad 1

Con la idea de hacerlo más práctico, si se tienen los mensajes A cifrado y B cifrado, y se conoce el valor de A sin cifrar, entonces aplicando la fórmula anterior, será posible liberar B sin cifrar por medio de operaciones XOR. O lo que es lo mismo, si se conocen las respuestas sin cifrar de algunos mensajes de salida será posible obtener algunos mensajes sin cifrar de la entrada, o al menos parte de ellos en función de los tamaños, lo que ayudaría a poder predecir más partes de la conversación.

Debilidad 2: Protocolo HMAC sin número de secuencia

Esta segunda carencia se basa en que al no utilizar en el algoritmo MAC un número de secuencia y al utilizar la misma clave RC4 hace posible que un atacante en un esquema de ataque de red basado en man in the middle pueda decidir que unos paquetes no se envían, hacer un replay de los mismos o enviarlos directamente al emisor. 

Prueba de concepto

Basándose en la primera de las debilidades Thijs Alkemade ha publicado una Prueba de Concepto NO válida para el cliente WhatsApp oficial que se autentica y envía un ping continuo al server usando la librería no oficial Yowsup con el objetivo de descifrar todos los mensajes que recibe ese cliente. 

Figura 3: Mensajes de entrada y salida de WhatsApp descifrados en la POC

Por supuesto, utilizar esta información para conseguir una herramienta funcional que descifre total o parcialmente las conversaciones por la red y se convierta en la principal manera de cómo espiar WhatsApp será cuestión de poco tiempo, por lo que es probable que los desarrolladores deban pensar otra vez en utilizar un algoritmo de cifrado más robusto.

Mientras tanto, tal vez sea una buena idea ir guardando los ficheros .pcap de las comunicaciones emitidas por la red que en breve ser podrán descifrar. Visto esto, si vas a enviar algo privado, tal vez no sea buena idea hacerlo por WhatsApp.

Saludos Malignos!

8 comentarios:

Luis García dijo...

Hay un plugin para eso para Wireshark ^_^

https://github.com/davidgfnet/wireshark-whatsapp

Maligno dijo...

@Luis García, ese plugin no vale para las nuevas conversaciones de Whatsapp, solo para lo que hacía antes.

Saludos!

Anónimo dijo...

Sigo Pensando, que la aplicación Line está en mucha más desventaja. Eso de tener una ID pública, me hace pensar que de algún lado se podría sacar el correo electrónico, con el que se loguean los usuarios, es decir, si tienes el correo se podría sacar su numero de teléfono ya que se vinculan.
Me gustaría investigarlo, seguramente algo debe haber..

Anónimo dijo...

Y con éste, otro título de cabecera que incrementará el número total de e-mails diarios que recibirás con preguntas del tipo "como hackear el whasap".

Lo pones a huevo xDDDDD

Anónimo dijo...

:s Alguien me explica la formula de la figura 2 si yo he hecho esta tabla?

http://i.imgur.com/CpbkI0N.png

Anónimo dijo...

@Anónimo: Aqui p^q es verdadero sí y sólo sí el valor de verdad de p y el valor de verdad de q son distintos, es un XOR, no un AND.

Anónimo dijo...

Se pueden espiar conversaciones de whatsapp si utilizo 3g en lugar de una red wifi?

Anónimo dijo...

Si te conectas a una red se quedan guardadas tus conversaciones? Y pueden ser decifradas?

Entradas populares