viernes, enero 03, 2014

¿Se puede Dosear el WhatsApp de alguien?

Hace no demasiado tiempo se generó una buena polémica con el servicio de Apple iMessage al descubrirse que existían formas de fastidiar a los usuarios con diferentes ataques para hacer Spam y Denegación de Servicio. La ventaja para el atacante de Apple iMessage era que podrían utilizarse cuentas no necesariamente asociadas a números de teléfonos, y automatizar el ataque desde equipos Mac OS X con sencillos scripts. Los ataques para hacer un D.O.S. eran tan sencillos como hacer mensajes muy largos, o costosos de renderizar, haciendo uso de codificaciones complejas como Zalgo.

Figura 1: Mensajes D.O.S. para Apple iMessage enviado en Zalgo

Como Apple no tenía la opción de bloquear contactos en iOS 6 - fue introducida en iOS 7 -, decidió poner un sistema antispam bastante curioso: Enviar un correo electrónico a Apple para decir quién te estaba spameando o haciendo D.O.S. por Apple iMessage para que ellos lo comprobaran y tomaran medidas.

Como Apple iMessage y WhatsApp son similares, decidí comprobar si esto era posible hacerlo también de alguna forma en la popular app de mensajería. Sí, sé que todo el mundo quiere saber cómo espiar WhatsApp, pero supongo que el poder hacer un D.O.S. como broma a algún amigo pesado de esos que se pasa todo el día enviándote chorradas podría ser un buen escarmiento, así que perdí un poco de tiempo revisando estas cosas.

Figura 2: ¿Mensajes de tamaño ilimitado en WhatsApp? 

Lo primero fue mirar en Internet a ver si se conocían los límites de los mensajes de WhatsApp, y no resulta fácil encontrarlos, ya que todo el mundo parece pensar que son ilimitados. Evidentemente, el término ilimitado cuando hablamos con tecnología no parece demasiado científico, ya que al final siempre acaba apareciendo un límite.

Si miramos la estructura de una base de datos de WhatsApp con SQLite Data Browser, por ejemplo, se puede ver que los campos que almacenan el contenido de los mensajes son de tipo BLOB y TEXT, así que sólo hay que mirar el tamaño de estos tipos de datos en SQLite, que pueden consultarse en SQLite Limits.

Figura 3: Estructura de la tabla messages de WhatsApp

Como se puede ver, el tamaño de mensaje, salvo que la app haya establecido algún límite por el GUI puede ser mucho más grande que lo que un terminal pueda soportar con soltura, así que decidí probar a crear unos mensajes de gran tamaño a ver cómo se comportaban un iPhone, una Blackberry de las antiguas, y unos terminales con Android con los que contaba a mano.

Figura 4: Máximo tamaño para un BLOB. Para un TEXT el límite lo pone SQLITE_ MAX_SQL_LENGHT

Para hacer el ataque se podría haber creado algún script un poco más elaborado haciendo uso de Yowsup, pero como la idea se me ocurrió mientras andaba tirado en el sofá, lo único que tuve que hacer es crear un mensaje copiando en el portapapeles una frase muy larga y pengándola sucesivas veces durante 10 minutos hasta que construí un mensaje lo suficientemente largo - por supuesto muy lejos de los límites de SQLite -.

BlackBerry con Whatsapp 2.11.528
Tras enviárselo a mi pobre Blackberry e intentar abrir la app de WhatsApp, el terminal se quedó bloqueado totalmente y tuve que reiniciarlo y borrar todos los datos antes de poder volver a abrir WhatsApp. La versión exacta de WhatsApp para BlackBerry que tengo instalada en este terminal, por si alguien quiere probar más, es la 2.11.528.
Android con WhatsApp 2.11.152
En los terminales Android, mi Nexus 4, mi HTC Desire y mi HTC One soportaron que la app de WhatsApp, versión 2.11.152, se quedara en un estado de thrashing que hace imposible su manejo. Es necesario esperar durante varios minutos a hacer cada nueva acción y conseguir eliminar el mensaje envenenado, o por supuesto, desinstalar la app y volver a instalarla.

La "gracia" de este mensaje es enviarlo a una lista de amigos que tengan Android, ya que cuando se visualiza la lista de conversaciones intenta hacer una previsualización de 20 caracteres y parece que para ello carga todo el mensaje en memoria del tirón sin hacer alguna lectura con RTRIM o similares. Aún así, la app entra en thrashing pero no cae, aunque los destinatarios con los que he probado han acabado todos desinstalando y volviendo a instalar la app.
iPhone 5 con iOS 7
El que mejor resultado obtuvo fue el terminal iPhone 5, que aunque iba a tirones, podía manejarse con relativa facilidad y conseguir borrar el mensaje, lo que hace suponer que la app de iOS esté mejor diseñada y cuente con algún control a la hora de manejar límites en mensajes de gran tamaño. 
La app de iOS es la que mejor parada sale, bloqueándose durante unos instantes al recibir, pero luego al hacer scroll la app - aunque da algún tirón - consigue moverse sin bloquearse demasiado. Creo que WhatsApp para iOS tiene algún limite de mensaje a la hora de manejarlos por el GUI que Android y Blackberry no tienen.
Con estas sencillas pruebas se puede ver que sí que parece posible hacer un DOS a WhatsApp y molestar a los usuarios normales de este sistema, y que tanto los detalles sutiles de la implementación de las apps en las diferentes arquitecturas, como los sistemas operativos y la calidad del hardware en el que corran, tienen importancia a la hora de diseñar un sistema robusto. De todas formas, si te toda un amigo "guasón" que te hace estas cosas, lo más fácil es que le bloquees en WhatsApp, que se puede hacer fácilmente.

Saludos y.... ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ¡Buen año! ...

Autor: Pau González

12 comentarios:

  1. Había un ataque igual recuerdo en el messenger xD con la extension plus podiamos enviar una lista de emoticonos y había que reiniciar el ordenador en la mayoria de las veces , aunque con el tiempo se solucionó.

    ResponderEliminar
  2. ¿Desde donde mandaste el mensaje? ¿desde tu móvil? No se te bloqueo tu propio terminal

    ResponderEliminar
  3. Si claro tienes que ser rápido y borrar el mensaje antes, sino corres la misma suerte

    ResponderEliminar
  4. En este caso yo poseo un iPhone4 con un iOS 6.1 Jailbrakeada, y puedo decirte que en algunos casos si se queda "tonta" la app. pero pasados un rato (algun minutejo o dos) la APP se puede cerrar, aparece un mensaje de "optimizando whatsapp" y puedes volver a usarlo... Tb sucedió durante una temporada al intentar borrar de un tirón un grupo de esos con 20 o 30 amigos k no dejan de mandar tropomil mensajes al dia ademas de los clasicos videos, bromas, y fotos... tb era imposible SALIRSE del grupo, quedaba en el mismo estado... al cerrar y volver a abrir el grupo seguia ahi, aunque para el resto del mundo habias salido del grupo, pero no se podia eliminar el grupo pq Whatsapp quedaba "tontito". Con las ultimas versiones de Whatsapp (actualment tengo instalada la 2.11.7) esos grupos se han podido eliminar correctamente.
    Algun conocido lo k tubo k hacer fue eliminar manualmente TODOS los adjuntos, posteriormente eliminar las conversaciones, manualmente, con la consecuente absurdidad de perdida de tiempo y uñas eliminando frase a frase...

    Puede que con la misma intencion de arreglar lo de los grupos, hayan perfilado una solucion para mensajes MUY grandes...

    Q.

    ResponderEliminar
  5. en las condiciones de whatsapp aparece q casos así pueden ser baneados, así q cuidado xD

    ResponderEliminar
  6. Muy interesante todos los aspectos técnicos, desconocía algunos detalles. Se me ocurrió un experimento parecido no hace mucho y probé con varios terminales, los únicos que pudieron borrar el mensaje sin reiniciar el terminal tuvieron el mismo resultado, fueron iPhone con esa misma app.

    ResponderEliminar
  7. Te ha faltado probarlo con WhatsApp para WindowsPhone. Y para Symbian también, jajaja.

    ResponderEliminar
  8. Creo que la app para ya iOS ya la arreglaron hace algún tiempo, cuando la gente empezó a enviar el "Gusano tocapelotas", que era útil si te arrepentías de algún mensaje, ya que te obligaba a borrar la conversación. En esta página lo podéis ver: http://www.forocoches.com/foro/showthread.php?t=2985227&page=4

    ResponderEliminar
  9. lo que me he podido reir, se lo he mandado a un amigo que posee un orange montecarlo y ha tenido que reiniciar el movil desinstalar whatsap y volverlo a instalar a intentado vengarse haciendo un mensaje muy largo y al parecer al pobre se le ha vuelto a quedar pillado el terminal la cantidad de risa que he hechado no tiene precio

    ResponderEliminar
  10. En mis tiempos se decía FLOOD ó Flodear.

    ResponderEliminar
  11. Alguien probo superar el tamaño máximo?

    ResponderEliminar
  12. A día de hoy el error sigue existiendo. Ayer hice una prueba de concepto con tres móviles distintos y, en efecto, el que mejor resistía el embite era el iPhone, que se ralentizaba y el scroll funcionaba a ratos. Un BQ Aquaris 5 no se quedó bloqueado, pero hubo que borrar los datos de las aplicaciones para que dejase de funcionar. Otro móvil con sistema Android directamente se quedó bloqueado y hubo que desinstalar la aplicación y borrar los datos para que pudiera volver a funcionar. El mensaje enviado eran 100.000 emoticonos de caritas sonrientes.

    ResponderEliminar