lunes, 3 de diciembre de 2012

Monta un espía de 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 

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...