En Marzo del 2011, en este mismo blog, Alberto Ortega
explicaba como funcionaba la autenticación de los clientes de WhatsApp con sus servidores y se preguntaba cuál sería la contraseña para el acceso. Hoy y desde hace meses, ya se conoce como se genera.
En esta entrada vamos a explicar qué riesgo implica este dato y como en otras ocasiones, esperamos ayudar a convencer a WhatsApp de sacar una nueva actualización.
 |
| Generación de la contraseña MD5 en cliente de Symbian |
Al final no era mucho más complicado que hacer un
MD5 del IMEI del teléfono móvil invertido, al menos en este caso y en el de los teléfonos
Android.
Este descubrimiento se ha hecho popular hace unas semanas (el día 5 de septiembre) a raíz de una entrada de
Sam Granger, pero realmente era algo bien conocido desde febrero.
A partir de aquí decenas de usuarios empiezan a crear los primeros clientes no oficiales y es que la comunidad no tiene límites. Uno hecho
en java para los móviles n900 (que además y sin que se hiciera demasiado eco funciona en PC),
Yaparri y
Wazzap! para N9. Todo un lujo para los usuarios de estos móviles.
En mayo se
creó una API (no oficial), tanto en php como en python, que usa este mismo sistema y permite a desarrolladores hacer sus propias aplicaciones.
Una noticia más de esta semana y que ha hecho saltar la alarma a los blogs más generalistas ha sido el
reciente descubrimiento de como genera la contraseña el cliente móvil de la plataforma
IOS, que es tan sencillo como aplicar un
MD5 a la MAC de la tarjeta wireless duplicada:
md5(MACMAC).
El problema de este método de generación es obvio.
Tan solo hace falta conocer la MAC del móvil para suplantar su identidad y con ello
mandar mensajes a su nombre y además recibirlos (aunque el móvil suplantado no los recibiría). La MAC, a diferencia del IMEI, es un dato que se puede obtener sencillamente sin acceso físico a el.
Este hallazgo explica el motivo por el que en ocasiones tanto la API como otros clientes fallaban al acceder a los servicios de WhatsAPP, ya que si te registras por primera vez con un iPhone, tu contraseña no estará creada en base al IMEI y por lo tanto fallará. Ocurre lo mismo si el proceso es inverso.
Los riesgos que implican este comportamiento son varios, entre ellos el spam, la inundación y el robo de la cuenta.
SPAM
Seguro que todos habéis usado alguna vez alguno de estos servicios: Messenger, Gtalk, Facebook o Tuenti. Y seguro que no os sorprende que para que alguien pueda interactuar con vosotros se sigue un proceso muy sencillo: primero se manda una solicitud para conectar y a continuación la otra persona ha de aceptar. Una vez hecho, se establece un vínculo y queda vía libre para la comunicación.
Este proceso no es igual en WhatsApp. Aquí
un usuario puede mandar mensajes a quien quiera (al igual que ocurre con los SMS), tan solo conociendo su teléfono. Teniendo en cuenta que
el envío no tiene coste y se puede
automatizar sencillamente es previsible que empecemos a sufrirlo a corto plazo. Este mismo problema ocurre en Twitter donde tampoco se aceptan los followers salvo se configure en modo privado. ¿Alguno tiene la cuenta de twitter pública y ha recibido mensajes de mujeres increíblemente guapas que ponen direcciones de páginas web? Si, es SPAM, y entonces ya sabéis a lo que me refiero.
Tal vez alguien malo se haya leído
mi anterior post donde contaba el número de móviles con whatsapp instalado y usando el mismo proceso sea capaz de generar una lista con los teléfonos dados de alta y por lo tanto "objetivo".
Solo espero que si alguien se aprovecha, acabe teniendo que dar explicaciones legales. Bueno, eso y que WhatsApp me permita configurar mi "usuario" como privado.
 |
| Ejemplo de envío masivo de publicidad de SbD vía WhatsApp |
Inundación
Por lo explicado anteriormente, el mismo ataque se puede replicar
mandando miles de mensajes automáticamente al mismo teléfono, dejándolo KO hasta que elimine la aplicación, desactive los datos o alguna otra medida similar.
 |
| Denegación de servicio con mensajes masivos de WhatsApp |
Robo de cuenta
Lo que al final todo el mundo quiere hacer. Leer los mensajes de whatsapp de la novia de la que tanto se fían. Lo que cuento aquí no tiene ningún misterio y ya es público, pero sed responsables, ya que un gran poder conlleva una gran responsabilidad. Y acabar explicándoselo a un Juez, no debería ser una opción.
Dependiendo del móvil que se usó para registrarse la última vez, la contraseña estará basada en IMEI (Android/Symbian) o en la MAC de la Wifi (iPhone).
- Si es IMEI la única opción es acceder físicamente al móvil y verlo al quitar la batería o en la configuración del terminal. La configuración es distinta por cada móvil, pero en muchos de ellos se muestra directamente al pulsar el código:
*#06#
- Si es la MAC, se puede sacar de distintas formas:
- En Ajustes->General->Información->"Dirección WIFI"
- Si está en la misma red que tú, como por ejemplo en casa compartiendo ADSL. Dentro de la configuración del router aparecerá un apartado con los clientes conectados o un listado con la asignación DHCP, relacionando direcciones IP con MACs
- Usando un sniffer como kismet que es capaz de localizar los dispositivos wireless (como el iphone en cuestión) cada vez que tratan de conectar a alguno de los puntos de acceso que tienen configurados, independientemente de que estén disponibles o no.
- Por otro fallo de IOS, cuando configuras un punto de acceso este queda almacenado para siempre y si detecta otro con el mismo nombre, se conectará directamente sin preguntar. Por lo que otra opción es crear un punto de acceso falso (fakeap), con nombres de redes conocidas y que seguramente ya estén almacenadas en el móvil. Como por ejemplo: "McDonalds", "Starbucks", "Hotel NH", etc.
Una vez dispones de los datos necesarios, descarga
PHP y
WhatsAPI, Edita el código de ejemplo "whatsapp.php" añadiendo el nombre, teléfono (sin el 00 ni el +, pero si con el código de país) y luego el IMEI o MAC.
A continuación hay que modificar el
php.ini para que cargue la librería de sockets y openssl, además de modificar la clase
whatsprot.class.php para eliminar el timeout del socket y por último, cambiar las rutas de Unix a Windows en los require (las barras, vaya)
Para evitaros hacer esos esos cambios, he dejado en el
repositorio todas las modificaciones hechas, junto a todo lo necesario, para que solo tengáis que descargar el archivo en C:\php y editar el whatsapp.php con el nickname, sender e IMEI.
Desde un cmd, se ejecuta con una sintaxis sencilla.
- El primer comando, sin argumentos, muestra la ayuda: php whatsapp.php
- El segundo manda un mensaje de prueba: con -s y el teléfono (country code, sin 00 ni +)
- Con la opción -l permanece a la escucha para la recepción. Ojo que si es de otro usuario, el legítimo no los recibirá.
Actualización: 18/09/2012
Otra opción más sencilla tanto para Windows como Linux es descargar
ThatsaPC, en el que desde entorno gráfico, ofrece la misma funcionalidad. Tan solo hay que añadir el código de país (34 para España), el IMEI o MAC (en mayusculas) y el número de teléfono.
Una vez se conecta, se añaden los contactos manualmente desde el menú de contactos.