WhatsApp: Spam, inundación y robo de cuentas. Vector de ataque local

WhatsApp-MessengerLarge

En Septiembre de 2012, Alejandro Ramos publicaba un interesante post en el que exponía qué tipos de ataque se podían realizar contra una cuenta o número de cuentas de WhatsApp, en el caso de conocer la contraseña de acceso a las mismas.
Para ello, Alejandro mostraba la implementación que había realizado la aplicación WhatsApp en Android y Iphone para la generación de las contraseñas en dichos dispositivos.
Meses más tarde, el siempre genial Pablo San Emeterio publicó otro post aquí en SBD, mostrando su propia implementación de dichos ataques, incluyendo otro nuevo. Espía Whatsapp.
Estos y otros artículos, unidos al eco que se generó en las numerosas Webs más generalistas, obligó a Whatsapp a sacar una actualización de su software, seguido de una actualización en la API de autenticación y registro.

A partir de la versión 2.8.6, la contraseña se genera desde el lado del Servidor y no desde el cliente, tal y como se puede ver en la siguiente imagen:

 

1

Imagen 1.- Proceso de autenticación y registro en WhatsApp. API V2
El proceso de registro aparenta ser similar que en la versión 1 de la API, salvo que ya no se envía la dirección MAC (Iphone) en el campo ID de la petición. En ésta, el dato que se envía como parámetro, se utiliza para la negociación de una clave que vendrá como respuesta a la petición, tal y como se puede comprobar en la siguiente imagen:
2
Imagen 2.- Password generada desde el lado del servidor y enviada al dispositivo
El proceso de registro y autenticación, lo repetí varias veces, para comprobar que en el campo ID se enviaba siempre el mismo identificador, y se devolvía una contraseña diferente.
Una vez enviada la petición de registro, el proceso de respuesta corresponde con un fichero en formato JSON, el cual lleva una serie de campos en el que se incluye el número de teléfono y la contraseña asociada a ese número. Esta contraseña es la que se utilizará a partir de ese momento para poder autenticarse en el sistema.
De momento, Whatsapp mantenía cierta compatibilidad hacia atrás con aplicaciones antiguas, pero después de hablar con Pablo San Emeterio y realizar algunas pruebas con aplicaciones antiguas, todo parece indicar que Whatsapp está obligando a todos sus usuarios a actualizar a la versión 2 de la API.
¿Quiere decir esto que ya no se podrán realizar los ataques anteriores?
La respuesta es NO queridos lectores de SBD. Siempre nos quedará el análisis forense!
En sistemas IOS, la contraseña generada por el servidor se almacena en un fichero cifrado llamado PW.DAT, el cual se encuentra ubicado en la ruta /Library/pw.dat. 
 
Dejando a un lado la cuestión de por qué Whatsapp no cifra la base de datos ChatStorage.sqlite o la base de datos Contacts.sqlite en Iphone, y después de meditar largo y tendido la inquietante cuestión de que la empresa Whatsapp Inc, con más de 8 millones de dólares de inyección de capital no cuente entre sus filas con personal dedicado exclusivamente a la seguridad,  me topé con un fichero un tanto curioso y que en más de un análisis forense me ha dado unos resultados excepcionales. Una inocente base de datos llamada cache.db.
Así que analizando la base de datos cache.db, la cual se encuentra ubicada en el directorio /Library/Caches/net.whatsapp.WhatsApp/Cache.db me encuentro con que ésta, almacena datos sensibles.

Datos tan curiosos como la descarga de ficheros de audio, vídeo y fotografías que un usuario ha descargado, así como su TimeStamp.

 

3
Imagen 3.- Ficheros descargados a través de la aplicación WhatsApp
Pero los datos que más me han llamado la atención se encuentran en una tabla llamada cfurl_cache_receiver_data. Uno de estos datos es la contraseña que se genera cuando se registra la cuenta de usuario en el servicio de WhatsApp, y sí. Se almacena en claro. Estos datos se pueden visualizar en la siguiente imagen:
4
Imagen 4.- Fichero de respuesta JSON almacenado en claro en base de datos cache.db
Gracias a este dato, unido a que hace relativamente poco tiempo que se ha actualizado la API no oficial de Whatsapp llamada YOWSUP, se hace posible de nuevo todos los ataques anteriores, pero con la versión 2 de la API oficial.
Estos ataques son todavía posibles, debido a que aunque dos identificadores no pueden estar conectados al unísono, sí que se pueden realizar envíos de mensajes desde ubicaciones distintas mientras un usuario se encuentre autenticado en el sistema.
5
Imagen 5.- Suplantación realizada a través de YOWSUP
6
Imagen 6.- Recepción de mensajes suplantados

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: