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.