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:
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:
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.
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:
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.
Imagen 5.- Suplantación realizada a través de YOWSUP
Imagen 6.- Recepción de mensajes suplantados
Salu2 a
tod@s!
MVP
Enterprise Security
20 comments :
Hay un teléfono no censurado en la última imagen
¡Buen estudio! Por lo que respecta al número de teléfono de la última imagen, mencionar que un número de teléfono móvil sin más, no es considerado un dato de carácter personal.
Vid Informe Jurídico de la AEPD 0575/2008
"(...) el número de teléfono móvil por si mismo, esto es, sin el concurso de otros datos que contribuyan a identificar a su propietario, no tiene el carácter de dato personal, en consecuencia, la aplicación de las prescripciones contenidas en la LOPD vendrá determinada por la asociación de dicho número con otros datos que permitan establecer la identidad de su titular"
Saludos
Un número de teléfono es un dato público (por eso se llama "numeración pública"). Es como escribir "Calle Mayor 13 de Pamplona" o "José Pérez García". El problema están en la vinculación entre esos datos: "José Pérez García vive en la calle Mayor 13 de Pamplona y su teléfono es el 611736143".
entonces para robarte el whatsapp, solo hay que coger tu numero que esta en la imagen 6 y usar la pass de la imagen 2 ¿no?
#mkk
Exacto mkk. Veo que te has leído enterito el post.
Espero que lo intentes e intentes robarme la cuenta :P
ya pero ahora no es posible espiar en directo, dos dispositivos no pueden conectarse a la vez, o estoy equivocado
Jose, así es.
En mi caso, las pruebas que he realizado me han dado negativo en la parte de mantener dos dispositivos conectados a la vez
Tambien estoy viendo que cada vez que estas autenticado desde el pc te modifica la contraseña cuando te conectas desde el movil no siendo posible volver a entrar desde el pc pasado un periodo de tiempo..
Saludos, soy pardillo en el tema pero sigo tu blog (y algo pillo). No es sobre este tema pero te agradecería que, si puedes, dediques un post sobre como controlar los puertos en windows (tengo el jurasico-vista) y evitar todas las castañas en tema de seguridad que estamos recibiendo los usurios normales. ESTO ES HORRIBLE, infección tras infecció. Solo encuentro consejos y nada de software sencillo para auditoriar mi PC. GRACIAS ANTICIPADAS.
O como decir que "Juan Garrido tiene de numero +34 611 XX XX XX"?
Aparte es bastante mas seguro porque ahora la manera de acceder a la contraseña es bastante mas complicada, ya que tienes que acceder conectando el movil al ordenador, la unica manera no fisica seria un virus que te copiara la contraseña.
Exacto, pero si envías mensajes SÓLO con el PC, no te modifica la password. La password sólo la modifica en el momento en que quieras PERMANECER conectado. Ahí sí que Whatsapp genera una especie de asociación, des-asociando tu teléfono.
toma castaña!
cuantos golpes le hemos dado ya a whatsapp?
esperemos que reaccionen
donde bajo el codigo de la api 2 para probar ya que la api 1 de alejandro nunca me funciono
se te ve el número de móvil en la captura 6 :P
Enhorabuena por la investigación, es muy interesante, Juan :-)
De todas formas IMHO, creo que la criticidad de este tema es muchísimo menor que con las versiones anteriores a la API 2.0. Es decir, considero muy rebuscado que se pueda hacer una suplantación de identidad de cualquier víctima a pie de calle. No voy dejando a desconocidos que me conecten mi móvil a su ordenador y ejecuten programas de forense así cada día.
En comparación con el uso del IMEI o la MAC como contraseña de autenticación es bastante más complicado este vector de ataque. Con lo anterior siempre podías poner tu AP en cualquier sitio público con tu portal cautivo y dar Internet a los paseantes a cambio de su nº de teléfono e IMEI o pedirle a alguien su teléfono e IMEI a cambio de la promesa de liberarle el móvil remótamente (http://www.google.com/#q=libero+movil+por+imei).
De todas formas, siempre es muy bueno conocer estos vectores.
Gran post.
A eso venía yo, a indicar que ese número está al público. A ver si pasa como a la Paula Vazquez :P
buenas!!! no soy capaz de sacar el pw ni desde la tabla cfurl_cache_receiver_data ni en el momento de registro con un web proxy
A ver si alguna alma caritativa me puede guiar.....
por favor alguien puede ayudarme, no se nada de esto, pero la ultima linea telefonica que utilicé y que estaba asociada a whatsapp ya no la tengo, no era mia y su propietario me permitió utilizarla durante un buen tiempo, en este momento le he devuelto la linea telefonica (es decir, le devolví su sim card) sin antes eliminar esa cuenta, el tema es que nuestras relaciones en este momento se encuentran rotas, como puedo entonces eliminar esa linea de whatsapp si no tengo el sim card??? Necesito con premura me indiquen la forma, ya he enviado mensajes desde mi nueva linea a mis contactos pidiendo me borren de su lista de contactos, pero hay personas que por flojera no lo hacen y mi amigo ahora utiliza esa linea y en su foto de perfil coloca fotos mias, lo cual hace que mis contactos se confundan y escriban alli. QUISIERA DESAFILIAR ESA LINEA DEL SERVIDOR WHATS APP O COMO QUIERA QUE SE LE DIGA... AGRADECERIA MUCHISIMO UNA RESPUESTA CLARA, PORQUE COMO VERÁN SOY BASICA EN ESTO DE WHATS APP.
Sé que este post tiene ya bastante tiempo pero tengo unas dudas un tanto estúpidas, Cuando te conectas desde el ordenador con yowsup y al acceder en el móvil realiza el proceso de verificación, ¿la contraseña cambia?.
Y en un comentario dice que si solo envías mensajes desde el PC sin permanecer conectado ¿WhatsApp no "cierra la sesión" del dispositivo móvil?
Publicar un comentario