21 noviembre 2012

Espía WhatsApp


Una vez más WhatsApp, y no son pocas las referencias que veo en el blog a esta aplicación.

Esta vez unimos el débil proceso de loggin de los usuarios de WhatsApp con el uso de diferentes APIs de programación que permiten interactuar con el popular servicio.

Como se indica en la página de WhatsAPI, WhatsApp utiliza una versión modificada de XMPP denominada FunXMPP. En el proceso de loggin se utiliza como JabberID el número de teléfono móvil junto con el código de país (en España 34) y como password se utiliza un MD5. En Android se utiliza el IMEI y en iOS MAC address del teléfono para calcular dicho MD5.

WhatsApp nos permite validar si el par numero de móvil y password son correctos mediante una URL. En la imagen inferior se muestra un caso correcto.



Las APIs permiten el envío y recepción de mensajes de WhatsApp desde un ordenador. Algunas además permiten también cambiar la foto del perfil de un usuario, su estado o la última hora de conexión, pero todavía no lo he podido probar estas acciones

Para las demostraciones en vídeo que hice en la NcN  utilicé  python-whatsapi que provee de un cliente totalmente funcional y un ejemplo claro y sencillo que permite enviar y recibir mensajes.

La suplantación de usuarios te la dan "gratis", puedes empezar a mandar mensajes suplantando a la víctima siempre que tengas su número de teléfono móvil y su IMEI o MAC address.

El flood y el spam ya se habían comentado en este post. Pero si además le sumamos la suplantación se abren nuevos escenarios que pueden dar lugar a Phishing o envío de URLs que traten de ejecutar exploits contra el navegador de la víctima.
Con un poco de maldad y buscando los puntos adecuados en python-whatsapi se consigue espiar a otros usuarios sin que ellos se den cuenta.

Por lo que he podido deducir utilizando python-whatsapi el proceso de envío y recepción de mensajes se siguen los siguientes pasos:
  1. El usuario A envía un mensaje a B 
  2. El usuario A recibe la confirmación de que el mensaje ha llegado al servidor
  3. El usuario B recibe una alerta indicando que tiene un mensaje nuevo y notifica al servidor que ha recibido la alerta
  4. El usuario B al iniciar el chat con el usuario A descarga los mensajes y envía una orden para borrarlos del servidor.
Modificando el API para que no envíe el ACK de la alerta (punto 3) ni la orden de borrado del mensaje (punto 4) el espía ya esta listo. Además de imprimir los mensajes que recibe la víctima, es posible añadir funcionalidad para guardar las fotos y los vídeos que le envíen al usuario espiado.

Hay que decir que no es del todo perfecto ya que WhatsApp sólo se permite una conexión, es decir, no puedes estar conectado desde el teléfono móvil y el PC al mismo tiempo. Si esto se produce, el último en conectase desconecta al usuario que estaba previamente conectado. Dependiendo de la implementación del API que se este utilizando se puede entrar en una competición por estar loggado. Pero seguro que con más tiempo, se puede llegar a mitigar este problema.

En la NcN no puede hacer una demo en vivo porque WhatsApp actualizó el protocolo de la versión 1.1 a la 1.2 apenas 3 días antes de mi charla. Desde entonces python-whatsapi no se ha actualizado y no funciona, sin embargo el sábado 10 de Noviembre utilicé Yowsup, motor de Wazap, que si esta actualizado y funciona perfectamente.

A continuación os dejo los vídeos que mostré en la NcN. En todos ellos el teléfono HTC, el de la izquierda, es la víctima.

En este primer vídeo se muestra un posible ataque de spam que se envía desde el ordenador hacia el iPhone.


En este segundo se muestra como podría ser un ataque de flooding de un niño que quiere algo de su padre.


En el tercero se muestra como podría llevarse a cabo una suplantación cuyo objetivo fuera que dos personas tuvieran una discusión de pareja. En este vídeo el ordenador envía mensajes al iPhone haciéndose pasar por la víctima (HTC) hasta que después de 5 mensajes se desconecta y entonces le empiezan a llegar los mensajes al teléfono de la víctima.

 

En el cuarto muestro como el espía intercepta la comunicación entre el iPhone y el HTC, obteniendo mensajes, fotos y vídeos.



Un último ataque que pensé, pero no llegue a implementar es un inflitrador / exfiltrador de información utilizando WhatsApp. Este punto se lo comente a Juan Garrido después de su interesante charla en pijama, que junto a Pedro Laguna, dieron en NcN sobre exfiltración de información. Mi idea es enviar un fichero codificado en base64 en varios mensajes desde un ordenador a otro ordenador, que será el encargado de reconstruir el fichero.

Por último quiero agradecer a Yago el ayudarme a reportar estos incidentes y el esfuerzo que han realizado Javier y la gente de INTECO intentando comunicar estos problemas a WhatsApp. Desafortunadamente la gente de WhatsApp no ha estado muy receptiva a sus comunicaciones.

Artículo cortesía de Pablo San Emeterio 

66 comments :

dario90 dijo...

A ver si entendi: ¿para hacer todo eso tendria que sacar un hash MD5 a partir del IMEI de la victima que ya deberia conocer?

fossie dijo...

El IMEI de la victima no es dificil de conocer si es un familiar, el novio, la novia, un empleado... también hay muchos IMEIs colgados en internet de la gente que trata de liberar su movil...

lips dijo...

De donde podemos descargar Yowsup???

nonamed dijo...

el spy no lo veo por ningun lado en yowsup.. podrias ser mas explicito?

F3D3 dijo...

Se sabe algo para BB o WP??

Nano dijo...

Yo tengo el Yowsup funcionando en Backtrack con python, pero la opción espía no está, nos puedes contar que se ha cambiado del código para hacerla funcionar?


Y otra pregunta, cómo se obtiene el JabberID de Windows Phone y Blackberry?


Gracias de antemano!

psaneme dijo...

Si, Darío. Para poder llevar a cabo estos ataques necesitas conocer el
número de teléfono de la victima y su IMEI (en es caso de Android) o su
MAC address si utiliza un iPhone.

Como comenta fossie los datos
necesarios se pueden obtener relativamente fácil si es una persona de tu entorno.



Existen otros escenarios en los que las aplicaciones de Android tienen
acceso a estos dos datos y podrían llegar a enviarlos al atacante.

psaneme dijo...

https://github.com/tgalal/yowsup

psaneme dijo...

El spy no es una opcion en yowsup, al igual que tampoco era una opcion en python-whatsapi. Para poder hacerlo hay que modificar el código de ambas APIs

psaneme dijo...

Por lo que he podido leer en otros blogs, parece ser que BB utiliza el mismo mecanismo que Android, pero no he podido verificarlo ya que no tengo una BB.

WP creo que se utiliza el DeviceUniqueId, pero desconozco si es el IMEI. Tampo dispongo de un WP


En cualquier caso si alguien dispone de ellos puede utilizar la URL del articulo para validar su usuario y password.

psaneme dijo...

Como decía no existe una opción espía.



Creo que el JabberID es el mismo para todas las plataformas. El codigo de pais concatenado con el número de teléfono movil

psaneme dijo...

en esta página https://github.com/tgalal/yowsup

psaneme dijo...

Google es tu amigo....;-) Yowsup site:github.com

RoBe! dijo...

Para Windows Phone -> http://goo.gl/F7W5j

Nano dijo...

Si Pablo, pero no nos puedes dejar el código modificado de Yowsup para poderlo hacer funcionar? Adjuntando el python o algo en el post, sería de ayuda a los que no programamos en tal lenguaje.

David Barrera dijo...

En Blackberry, hemos comprobado, que usa el mismo sistema de login como el Android, y tambien hemos confirmado que no es tan cierto eso de un solo login. Aun cuando la PC recibe el mensaje, el destinatario real (el dispositivo Blackberry) tambien lo recibe.

Mackaber dijo...

solo por molestar, se me ocurrió correr un airodump para recolectar MAC Addresses de todas esas 516 son dispositivos apple, y es muy factible loggearse con fuerza bruta, solo se encesitan numeros de telefono :P

dario90 dijo...

ok, ¿y no existen un metodo con tags para desarrollo de paginas web como "tel:" para invocar codigos USSD en smartphones y devuelva el texto resultante como retorno? ¿HTML5 o nuevas versiones de JavaScript no dan esta posibilidad ahora que los dispositivos moviles se estan masificando? Gracias por la ayuda.

PD: he visto metodos hasta para averiguar la IP interna de una PC con JavaScript por eso no me sorprenderia que se pudiera averiguar el IMEI o la MAC con JavaScript tambien

Antonio Rodríguez dijo...

iOS ya no utiliza la MAC desde la última actualización según tengo entendido.BB no utiliza el IMEI (excepto algunas versiones) y WP si, utiliza el DeviceUniqueId.

Antonio Rodríguez dijo...

Por mucho que intenten parchearlo cambiando el como se genera el password, nunca será seguro hasta que cambien el chip y obliguen al usuario a elegir una contraseña o al menos un PIN. De ese modo tendrán el "something you have + something you know", porque usando únicamente lo primero es un error de libro, por muy cómodo que sea.

lips dijo...

alguien me podría explicar mejor como funciona?? lo he descargado y voy a abrirlo pero se me cierra continuamente, tengo el python 2.6 no sé si necesito algo más o estoy haciendo algo mal, gracias

realeko dijo...

¡Muy bueno! Estaría genial si dejaras también el código en python de las modificaciones... no por tener una navaja vamos a ir matando a todo el mundo ;)))

psaneme dijo...

No acabo de entender tu comentario sobre el loggin. ¿Podrías comentar un poco mas acerca de este punto?

psaneme dijo...

Exacto, esa es una de las conclusiones de mi charla en NcN. Algo tan simple como un password configurable por el usuario sería suficiente para evitar todos estos escenarios

psaneme dijo...

Intentalo con python2.7 con 2.6 había algunos problemas que no me permitían utilizarlo

psaneme dijo...

Desconozco si existe algún método como los que describes

psaneme dijo...

No he probado la última version de WhatsApp en iOS. Pero no me extrañaría nada que ocurriera lo que dices.

David Barrera dijo...

Seguro. Whatsapp en Blackberry, aparentemente, usa el mismo sistema de autenticacion que Android (IMEI invertido + MD5). Caso hipotetico: A envia mensaje a B. B es la victima. B tiene un Blackberry. C, nosotros, entramos via Whatsapi. B y C reciben mensaje. No estoy seguro si simultaneamente, pero hemos comprobado que si lo recibe.

Franscisco dijo...

Algun tutorial de yowsup? Estoy intentando hacerlo funcionar. Agregue el archivo config con mi Phone:IMEI. Ejecuto sudo ./yowsup-cli -c config -s 54376486XXXX 'ada' y me arroja el siguiete error.

AUTH FAIL
Auth Failed!.

Y segun la wiki primero hay que hacer un registro

https://github.com/tgalal/yowsup/wiki/yowsup-cli#wiki-registration

Lo realizo ./yowsup-cli -c config.txt -r sms y arroja el siguiente error

Got response: fail-too-recent:29
o
Got response: fail-too-recent:39
o
Got response: fail-too-recent:37

Algo va mal, quien ejecuto el programa alguna ayuda

Saludos cordiales

Irg No Tengo dijo...

Hola, genial el artículo, pero ¿podrías dejar o enlazar algún tutorial para noobies interesados en estos temas? Muchas gracias.

Magna Vox dijo...

Hola Javier, el iOS ha cambiado el metodo de password, y ya no es el md5 de MACMAC... cierto ? alguien tiene ya el nuevo metodo de la contraseña ? Gracias.

psaneme dijo...

¿has validado el password en el link que indica el articulo? En iPhone verifique hace un mes que era la MAC address pero parece que ha cambiado segun reportan algunos comentarios

psaneme dijo...

no es necesario hacer registro si es un numero con el que utilizas Whatsapp normalmente. ya esta registrado

psaneme dijo...

bajate yowsup y prueba el cliente. En cuanto a tuto creo que no hay nada, pero si me dices que dudas te surgen puedo intentar ayudarte

psaneme dijo...

Recibir los mensajes lo pueden hacer los dos, siempre que el espía no envíe la orden de borrar el mensaje del servidor, o el espía lea los mensajes antes de que las ordenes de borrado de la BB lleguen al servidor. Lo que comentas no es incompatible con que sólo puede haber un cliente loggado. En mis pruebas cuando se conectaba el móvil, desconecta al programa de ordenador

Marc Riera Casals dijo...

Podríais hacer un análisis de Lime? PArece que mucha gente lo llama el sucesor de Whatsapp... https://www.google.com/search?q=lime+whatsapp


Gracias! :)

Dan dijo...

A mi tampoco me funciona ya yowsup, me falla en el auth, he hecho la prueba con la mac del iphone, han debido de cambiar algo, os pasa a vosotros tambien ?

Nucklear dijo...

@Dan a mi me funciona yowsup sin problema para Android pero para iPhone falla, han debido modificar algo.

carlos dijo...

nadie sabe de algun tutorial de como hacer correr el yowsup, si hay que crear el hash, como se hace,etc

carlos dijo...

alguien me podria ayudar a usar el yowsup. ya que cuando ejecuto ./yowsup-cli -c config.txt me suelta:

Traceback (most recent call last):
File "./yowsup-cli", line 27, in
from Examples.CmdClient import WhatsappCmdClient
File "/home/carlos/Escritorio/yowsup-master/src/Examples/CmdClient.py", line 21, in
from Yowsup.connectionmanager import YowsupConnectionManager
File "/home/carlos/Escritorio/yowsup-master/src/Yowsup/connectionmanager.py", line 28, in
from Tools.watime import WATime
File "/home/carlos/Escritorio/yowsup-master/src/Yowsup/Tools/watime.py", line 23, in
from dateutil import tz
ImportError: No module named dateutil

hashish dijo...

el hash es facil crearlo con python.

import hashlib
imeialreves="64684641548613"
print str(hashlib.md5(imeialreves).hexdigest())

Alejandro dijo...

Excelente artículo, ya pude con un celular común poder registrarme y utilizar whatsapp. El problema está en utilizar los datos de un teléfono ya en uso. Intenté utilizar el mio pero no he podido. No logro la autenticación.
En el link de whatsapp no he podido conseguir un retorno positivo.
Estoy utilizando los datos de mi celular con android, haciendo un MD5 con str(hashlib.md5([::1]).hexdigest())


No se si podrías tener alguna idea o aclaración.

Saludos!

Alejandro dijo...

Pues que idiota, era [::-1]; no he dicho nada!

Jose dijo...

Hola consigo interceptar los mensajes pero no consigo mandar,

dd dijo...

me pasa igual pero no doy con el problema porque parece que le manda

dd dijo...

Como se ejecuta el cliente de yowsup tengo este problema:

......python yowsup-cli
Traceback (most recent call last):
File "yowsup-cli", line 27, in
from Examples.CmdClient import WhatsappCmdClient
File "/home/jorgeportatil/Descargas/yowsup/src/Examples/CmdClient.py", line 21, in
from Yowsup.connectionmanager import YowsupConnectionManager
File "/home/jorgeportatil/Descargas/yowsup/src/Yowsup/connectionmanager.py", line 28, in
from Tools.watime import WATime
File "/home/jorgeportatil/Descargas/yowsup/src/Yowsup/Tools/watime.py", line 23, in
from dateutil import tz
ImportError: No module named dateutil

Daniel dijo...

Hay alguna forma de obtener el nombre que registra el usuario en Whatsapp con tan solo tener el número?

Pablo dijo...

Me descargue python y no se como hacer funcionar yowsup, ¿podria alguien echarme una mano?

bolivillas444 dijo...

hola comunidad.
lo primero darte la enhorabuena por tu trabajo.
lo segundo es que necesito informacion acerca de obtener el imei de un telefono que no tengo, del cual dispongo únicamente su número. ¿se puede?
gracias.

lupulo dijo...

Muy buenas!! Ante todo muchísimas gracias por el artículo.
La pregunta es...¿Existe algún modo de recuperar la password de la cuenta actual? (leyendo algún archivo del directorio de instalación del whatsapp o algo así...) Mil gracias!!

miguel2013 dijo...

hola buenas jooo y yo pensaba que modificar una app era dificil!!!esto se supera...me he instalado python 3.3 tengo whatsapi y yowsup otra carpeta que se llama argparse y otra que se llama python dateutil, ahora que hago??estoy mas verde que una manzana....y no hay tuto ni na....como el señor Pablo San Emeterio ha conseguido todo eso....guau...ayuda por favor, soy android y tengo imei y whatsapp y otro numero y su imei pero no se como se hace para conseguir todo eso...gracias de antemano

anonimo dijo...

como se descarga?

lalo dijo...

y si utiliza un nokia n8??

Alan dijo...

donde descargo el programa?

Software Corporativo México dijo...

amigo necesito espiar unas conversaciones de whatsapp es de vida o muerte me puedes decir como hacerlo paso a paso? o cuanto me cobrarias por decirme como hacerlo paso a paso

Guerrero dijo...

me podrias ayudar que es lo que tengo que hacer realmente para espiar un whatsapp esque no entiendo muy bien o cual es el programa que tengo que bajar???

Antonio Jesus dijo...

Que es un IMEI .
Estonces debo tener el numero de la persona y el IMEI .

Ivan En Un Carrillo dijo...

amigo estaba viendo lo de whatsapp para hackearlo pero no me sirve, podrias explicarme como ?

michele rojas dijo...

alguien me dice donde puedo descargar por favor!! este es mi correo michele0110@hotmailcom

rafaca dijo...

alguien me podria instalar el whatsapp spy en mi mvl o pc? pago lo que haga falta. me urge

linda dijo...

Osea q este programa no lo puedo aplicar en un blacberry bold9900?? saludos y gracias

DEIBY dijo...

DONDE ESTA EL ENLACE PARA DESCARGAR EL ARCHIVO

psaneme dijo...

Haces bien en no fiarte, ya que la gran mayoria son estafas. La vulnerabilidad que permitia espiar fue corregida a finales de Diciembre de 2012

carlosrodri10 dijo...

Ok. tengo ya el numero y el imei, que sigue?

hola dijo...

donde esta el link??????

Lucas dijo...

Que tal, a día de hoy ya no existe esa vulnerabilidad si mal no entendí... hay otra forma de lograr esto?