Mostrando las entradas para la consulta whatsapp ordenadas por relevancia. Ordenar por fecha Mostrar todas las entradas
Mostrando las entradas para la consulta whatsapp ordenadas por relevancia. Ordenar por fecha Mostrar todas las entradas

30 enero 2013

Cualquiera puede ver tu foto de perfil en Whatsapp

Dado que este es mi primer post en SbD, me presentaré.
Mi nombre es Alejandro Amo y trabajo como consultor IT empresarial. Abarco desde el marketing y la comunicación hasta el área de planificación y operaciones en sistemas de la información, pasando por la escritura y redacción comercial o la gestión de crisis de reputación online. En otras palabras: no soy precisamente un perfil 100% técnico.
Sin embargo, aunque no especializado en ella, siempre he estado en contacto con el mundo de la seguridad; puede que algunos me conozcan como alist3r, seudónimo bajo el cual he aportado como desarrollador en proyectos como Wifiway.

Ya presentado, entro en materia. Me temo que voy a realizar mi incursión en SbD con un post sobre Whatsapp, un tema muy tocado en SbD, pero no es para menos ya que la aplicación siempre ha dado que hablar desde su nacimiento. Hoy os traigo un juguete nuevo que nos ayudará a sacarle partido a todo lo que ya sabemos acerca de Whatsapp, y esperemos que también sirva como herramienta de concienciación del usuario promedio.

Estas pasadas navidades decidí, junto a berni69 (creador del famoso airwin), unir fuerzas y conocimientos para condensar en una web todo lo comentado en estas líneas, de manera que fuera fácil de comprender, de compartir y de usar, que tuviera impacto visual para la gente y que fuera sobre todo concienciadora y didáctica. De esta idea nace WhatsappVoyeur.

Whatsappvoyeur es un servicio web que permite a cualquier persona, incluso sin el uso de teléfono movil, obtener todos los datos de perfil de un determinado usuario de Whatsapp. En el momento de escribir estas líneas somos capaces de proporcionar los siguientes:
  • Foto de perfil a tamaño real y fácil de descargar a disco como cualquier imagen de una web
  • Frase de estado o "status quote"
  • Último momento en que el usuario cambió la "status quote"
  • Último momento en que el usuario apareció conectado en la red
Con ello pretendemos realizar la prueba de los siguientes conceptos y aplicaciones prácticas:
  • Determinar si un usuario te ha bloqueado en Whatsapp (cotejando datos con tu movil) 
  • Capturar la foto de perfil a tamaño real (con mas detalle de lo que la gente cree cuando las elige)
  • Controlar la actividad de un determinado usuario (controlar si está o no conectado)
  • Demostrar que los datos de todos son quasi-públicamente accesibles debido a las políticas de Whatsapp (solo hace falta estar autenticado dentro de Whatsapp - la web conecta a Whatsapp usando conjuntos de credenciales válidas que hemos creado para la ocasión)
A los ojos de un seguidor de SbD, WaV no es más que una herramienta cómoda para hacer pruebas de concepto, curiosear y jugar un poco, pero como he dicho antes todo está pensado especialmente para concienciar y facilitar la experiencia del usuario menos avezado, con textos muy explicativos del concepto, así como una interfaz vistosa pero simple y fácil de usar, con "responsive design" para adaptarse tanto a móviles como PCs.
Mi experiencia con un grupo de pruebas de estos usuarios es positiva y les ha ayudado a entender la poca protección de sus datos en Whatsapp, y esa es precisamente la intención.

Tanto Berni69 como un servidor esperamos que os guste y que la utilicéis para jugar y curiosear ;) concienciar a los usuarios de estos temas tan importantes, ya que si la gente supiera que su foto de perfil en Whatsapp es prácticamente pública, se lo pensarían mas antes de ponerse fotos como esta...


WTF!

O igual no, ¿quién sabe? hay gente para todo... ;)

¿Cómo y por qué funciona WhatsappVoyeur?



Antes de nada debo rememorar uno de los problemas de Whatsapp que ya fué comentado aquí: los datos del perfil de los usuarios de Whatsapp eran completamente accesibles al público, mediante una simple consulta a una url. Ni siquiera era necesario entrar en la red interna de Whatsapp propiamente dicha.

Gracias al script de Alejandro Ramos pudimos practicar el harvesting de todas las cuentas de Whatsapp de España, saber que por aquel entonces sumábamos casi 10 millones de usuarios, y tener sus "status quotes" en una base de datos. Todo ello, sin esfuerzo, sin más límite que el de nuestra paciencia, sin siquiera necesitar credenciales válidas de Whatsapp.

Desde el punto de vista de arquitectura, modelo de datos y privacidad, es de lo mas "braindead" que se puede perpetrar.

Pues bien, el 9 de enero, Whatsapp realizó un nuevo cambio en el protocolo de comunicaciones, con la intención de resolver este asunto: han desaparecido de sus servidores los archivos PHP contra los que podíamos hacer un query usando simplemente wget, curl o un navegador regular. 

Adiós a "https://sro.whatsapp.net/client/iphone/iq.php"

En su lugar, implementaron un protocolo de intercambio de datos de los contactos. A este protocolo le llamaremos "Contact Sync V2", tal como ha dado en llamarle el egipcio Tarek Galal, creador de la API yowsup. Dicho protocolo está colocado donde siempre debió estar: debajo de la capa de sesión. Los datos devueltos por este nuevo conjunto de comandos son muy parecidos a los que devolvía el famoso archivo iq.php, con la salvedad de que ahora es necesario estar autenticado contra el servidor de Whatsapp para poder enviar esos comandos.
Seguramente el lector pensará:
¡Bien! ¡Ya tenemos una mejora! Nuestros datos personales de Whatsapp ya no son públicamente accesibles...
...bueno, pues no. Pensemos por un momento en el modelo de datos de Whatsapp, en las reglas bajo las que han definido dicho modelo: una de las características más inseguras del protocolo Whatsapp y de las relaciones entre sus usuarios es que "quien no está explícitamente bloqueado está implícitamente permitido". Cualquier persona que añada nuestro número de teléfono a su agenda puede ver nuestra foto de perfil, nuestra "frase de estado" y controlar en todo momento si estamos conectados, o cuánto tiempo hace que lo estuvimos por última vez. Y todo esto nos está sucediendo sin que nosotros podamos hacer absolutamente nada por evitarlo, en tanto en cuanto el individuo que nos "controla" no nos envíe un mensaje que delate su presencia (ese es otro tema: esta política permite que un usuario nos envíe un mensaje sin que lo "aceptemos" previamente como contacto. Podremos bloquearlo, pero ya nos ha molestado. Para aplicaciones de spam puede ser rentable cambiar de número cada vez y seguir molestando...)

Pero hay más. No es solo un asunto de mi privacidad como individuo (que un headhunter, un responsable de RRHH, mi ex pareja o mi jefe puedan controlarme a mí, como persona elegida arbitrariamente, desde números que desconozco y de los cuales yo no puedo defenderme). También es un asunto de privacidad como elemento de una masa. Es decir, que aún es posible realizar un "harvesting" masivo de los datos de los usuarios, tal como hizo en su día Alejandro Ramos, con tan solo añadir dos elementos nuevos: unas credenciales de usuario de Whatsapp válidas (muy fáciles de obtener) y la adaptación al nuevo protocolo "Contact Sync V2" (cosa que Tarek Galal nos proporciona con su API yowsup, que no tardó en actualizar para reflejar los cambios). Nosotros en WhatsappVoyeur simplemente ofrecemos una interfaz ágil para usar la API y unas credenciales secretas para consultar cualquier número sin que nos puedan bloquear.

Uno puede pensar que, ahora que se nos piden credenciales para obtener los datos de los contactos, Whatsapp podría realizar un control del número de querys por usuario/tiempo...
...bueno, pues tampoco. He realizado stress testing y he validado hasta 700 contactos a un ritmo de 30-40 contactos por minuto. Demasiados. También he obtenido las fotos de perfil de los usuarios comprendidos en un rango de 30.000 números de teléfono. Y ya habeis visto más arriba una prueba del espectáculo, entre dantesco y divertido, que eso puede llegar a suponer...

Conclusión


El protocolo "Contact Sync V2" apenas implica una mejora real en la protección de nuestros datos de perfil en Whatsapp. Solo coloca una barrera de autenticación frente al exterior, pero no nos protege de otros usuarios autenticados en el interior; no nos protege como individuos porque las políticas en sí mismas no lo hacen (deficiencia de diseño), y tampoco nos protegen del "harvesting" masivo porque, si bien el protocolo "Contact Sync V2" proporciona una base técnica para impedirlo, no se le ha sacado partido aún.

Las políticas del tipo "lo que no está explícitamente prohibido, está implícitamente permitido" siempre deben ser implementadas con mucho cuidado, pero cuando los nombres de usuario son números de teléfono móvil que cualquiera puede obtener y sondear, y cuando están en juego nuestras fotos y otros datos que pueden ser bastante sensibles... es una muy mala idea de base.

Y digo "de base" porque es un error de diseño en sí mismo. No es una deficiencia del protocolo de comunicaciones sino una deficiencia del modelo de datos y de su lógica inherente. Whatsapp debería cambiar muy profundamente la definición del modelo de datos y los procesos de integración con nuestra agenda en el teléfono, cosa que dudo mucho que tenga en mente hacer. Ante todo soy consultor tecnológico empresarial y sé que, lamentablemente, hay cosas que no son rentables en un contexto de negocio; sé lo duro e incontrolable que es tirar adelante una startup mientras luchas con el capital riesgo. Probablemente Whatsapp seguirá invirtiendo lo mínimo indispensable en materia de seguridad, y el 99% de su esfuerzo seguirá siendo el crecimiento de la base de usuarios y la búsqueda de monetización de los mismos. Pero desde el punto de vista del usuario, de su seguridad y su privacidad, opino que Whatsapp ha cometido un error desde el principio y ha excedido los límites razonables de controversia e inseguridad, cosa por la cual (entre otras como peor diseño y peor campaña de comunicación) caerá derrotado por alternativas como Spotbros o Line...

Artículo cortesía de Alejandro Amo
Leer más...

09 junio 2011

What WhatsApp doesn't tell you...


It is the 'top' app in the mobile world, almost immediately followed the ' give me your mobile number' request comes the following question 'Do you have WhatsApp?'. Clearly this application is changing the concept of free SMS messaging.

Alberto warned about insecurity issues in how WhatsApp transmits data in plain text and what this means in shared environments.

Today we have to talk about the inside, the way in which WhatsApp stores and manages its data. Looking from within the file structure of the application we have two files called msgstore.db and wa.db (locations vary, of course, between Android and iPhone). These files are in SQLite format.

Once we import these files with a tool to browse inside their content (eg SQLite Manager), here comes the first surprise: none of the information contained is encrypted. Contacts are stored in wa.db and EVERY sent messages are in msgstore.db.



Wait a sec, did I say EVERY? Absolutely, every sent and received messages are there. And why "EVERY" is in uppercase?, simply because although theoretically WhatsApp give us the opportunity through its graphical interface to delete conversations, the reality is that they still remain in the database ad infinitum.

And the issue is even more fun if we sent or received messages at a time which GPS was enabled, because WhatsApp also stores coordinates in msgstore.db


In the case of Android there are even more important things stored that might be of interest to a forensic investigator - or maybe a jealous boyfriend/girlfriend. Apparently WhatsApp is configured by default with a very 'verbose' level of logging and store, within the directory / files / Logs, files with this appearance:

# pwd
/data/data/com.whatsapp/files/Logs
# ls
whatsapp-2011-06-06.1.log.gz  whatsapp-2011-06-09.1.log.gz
whatsapp-2011-06-07.1.log.gz  whatsapp.log
whatsapp-2011-06-08.1.log.gz
#

In these files are recorded every XMPP transactions made by the application with a very high verbose (debug) level, with the timestamp of when it receives or sends a message (among other things).

011-06-09 00:47:21.799 xmpp/reader/read/message 346XXXXXXX@s.whatsapp.net 1307XXXXXX-30 0 false false

These files are easily "parseable" to extract the ratio of mobile numbers which has maintained some kind of conversation with us. I created a small script that parses the file and pulls out this list of numbers:

import re
import sys


logfile = sys.argv[1]
logdata = open(logfile,"r")
dump = logdata.readlines()

numerosin = []
numerosout = []

for line in dump:

        m = re.search('(?<=xmpp/reader/read/message )\d+', line)

       if m:

                if not numerosin.count(m.group(0)):

                        numerosin.append(m.group(0))


        m = re.search('(?<=xmpp/writer/write/message/receipt )\d+', line)

        if m:

                if not numerosout.count(m.group(0)):

                        numerosout.append(m.group(0))

print "Messages received from\n"
print "\n".join(numerosin)
print "\nMessages sent to\n"
print "\n".join(numerosout) 

Executing the script, it will ouput the information as follows:

$ python whatsnumbers.py whatsapp-2011-06-08.1.log
Messages received form

34611111111
34622222222

Messages sent to

34611111111
34622222222
Leer más...

Lo que no te cuenta WhatsApp

Es la aplicación 'de moda' en el mundo móvil, casi acto seguido al 'dame tu teléfono' viene como pregunta ' ¿ Y tienes WhatsApp ?'. Claramente esta aplicación está cambiando el concepto de los SMS ofreciendo mensajería gratuita.

Alberto, ya alertó sobre la inseguridad de WhatsApp por la forma en la que transmite en claro los datos y lo que eso supone en entornos donde el medio es compartido.

Hoy toca hablar de la parte interna, de la forma en la que WhatsApp almacena y gestiona los datos. Si observamos desde dentro la estructura de ficheros de la aplicación llegamos a dos ficheros llamados msgstore.db y wa.db (las ubicaciones varían, como es lógico, de Android a Iphone). Estos ficheros están en formato SQLite.

Una vez importamos estos ficheros con alguna herramienta que permita ojear su interior (por ejemplo SQLite Manager) nos encontramos la primera sorpresa: ninguno de los datos ahí contenidos están cifrados. En wa.db se almacenan los contactos y en msgstore.db todos los mensajes enviados


Un momento ¿He dicho todos? Si, así es, toda la relación de mensajes enviados y recibidos están ahí. Y porqué hago hincapié en *todos*, sencillamente porque aunque WhatsApp teóricamente da la oportunidad mediante su interface gráfica de eliminar conversaciones, la realidad es que permanecen en la base de datos ad infinitum.

Y el tema es aun mas divertido si el envío o recepción de mensajes se produce en un momento donde esté activado el GPS, ya que WhatsApp almacena también en el fichero msgstore.db las coordenadas


En el caso de Android aun hay mas 'chicha' almacenada que podría ser interesante para un investigador forense -o novio celoso-. Por lo visto WhatsApp viene configurado by default con un nivel de logging extremadamente 'verbose' y almacena, dentro del directorio /files/Logs, unos ficheros con esta fisonomía:

# pwd
/data/data/com.whatsapp/files/Logs
# ls
whatsapp-2011-06-06.1.log.gz  whatsapp-2011-06-09.1.log.gz
whatsapp-2011-06-07.1.log.gz  whatsapp.log
whatsapp-2011-06-08.1.log.gz
#

En esos ficheros se registra con un nivel altísimo de debug todas las transacciones XMPP que realiza la aplicación, anotando con su correspondiente hora/fecha cuando se recibe o envía un mensaje (entre otras cosas).

011-06-09 00:47:21.799 xmpp/reader/read/message 346XXXXXXX@s.whatsapp.net 1307XXXXXX-30 0 false false

Esos ficheros son fácilmente 'parseables' para extraer la relación de números con los que se ha mantenido algún tipo de conversación. He creado un pequeño script que analiza el fichero y saca dicha relación de números:


import re
import sys


logfile = sys.argv[1]
logdata = open(logfile,"r")
dump = logdata.readlines()

numerosin = []
numerosout = []

for line in dump:

        m = re.search('(?<=xmpp/reader/read/message )\d+', line)

       if m:

                if not numerosin.count(m.group(0)):

                        numerosin.append(m.group(0))


        m = re.search('(?<=xmpp/writer/write/message/receipt )\d+', line)

        if m:

                if not numerosout.count(m.group(0)):

                        numerosout.append(m.group(0))

print "Numeros desde los que se han recibido mensajes\n"
print "\n".join(numerosin)
print "\nNumeros a los que se han enviado mensajes\n"
print "\n".join(numerosout) 


Que muestra una salida tal que así:

$ python whatsnumbers.py whatsapp-2011-06-08.1.log
Numeros desde los que se han recibido mensajes

34611111111
34622222222

Numeros a los que se han enviado mensajes

34611111111
34622222222

Actualización Mayo 2012:
Como descifrar la base de datos de los móviles Android guardada en la SD: http://www.securitybydefault.com/2012/05/descifrando-el-fichero-msgstoredbcrypt.html

Leer más...

20 junio 2011

Cómo registrar cualquier número de teléfono en WhatsApp

Seguimos con nuestra campaña de marketing viral sobre WhatsApp, hoy le toca al sistema de registro de usuarios.

En anteriores capítulos de SbD VS WhatsApp hablamos sobre:

En este post vamos a contar lo fácilmente que se puede registrar en la red WhatsApp cualquier número de teléfono, y cuando digo cualquier número me refiero a un número de teléfono ficticio, tu propio número o el de otra persona (pudiendo enviar mensajes en su nombre y recibir los destinados a el).

El objetivo del post es poder registrar un número de teléfono ficticio dentro del emulador de Android para tener WhatsApp en el PC. Evidentemente lo explicado aquí también sirve para suplantar el número de otra persona, así que tan solo me gustaría reseñar que probablemente hacer eso sea un delito. A partir de aquí ancha es Castilla.

Como todo usuario de WhatsApp sabe, para validar la instalación WhatsApp genera un auto-envío de un sms desde tu número de teléfono que sirve como elemento probatorio de que el número te pertenece, y por tanto, completar el registro en WhatsApp.

Por si este método no fuese confiable o fallase, WhatsApp permite alternativas, en concreto si echamos un vistazo a la FAQ nos encontramos con esto:

Ehmm Significa esto que si yo envío un SMS con un origen arbitrario y en el cuerpo del mensaje pongo un correo, ¿me enviarán a ese correo un pin para registrar ese número? Really ?

Pocas cosas en esta vida son menos fiables que un SMS, falsificar el origen de un mensaje es algo trivial, hay múltiples plataformas online disponibles que permiten hacer eso. A nosotros nos gusta la de lleida.net

Esquemáticamente el proceso para registrar un número arbitrario en WhatsApp (probado en un terminal Android y en el emulador) se resume en esto:

-Instalamos la aplicación 

-Ponemos como número de teléfono el que deseamos registrar

-Esperamos pacientemente (9 minutos) a que el proceso de validación por auto-sms falle

-Solicitamos el acceso a Pin por llamada

-WhatsApp lanzará el proceso de llamada a un número con prefijo 93, colgamos inmediatamente la llamada ya que no nos sirve de nada (si usamos el emulador esa llamada nunca ser hará, si es un terminal normal, hay que estar atento)

-Hacemos el envío del sms-spoof con origen [Número deseado] destino +44 7900 347295, cuerpo del mensaje un correo electrónico

-Introducimos en WhatsApp el Pin que nos ha llegado por correo

En este vídeo hay una demostración práctica de todo el proceso para registrar un número ficticio dentro de WhatsApp, he escogido un número con un prefijo 682 debido a que, a día de hoy, no se encuentra asignado / en uso por parte de ninguna operadora



Aunque la tentación es dura, (todos tenemos ex-novias/os, enemigos irreconciliables, etc) no hagáis el mal registrando números que pertenezcan a otras personas !

UPDATE: Este método ya no funciona porque WhatsApp parcheó el bug
Leer más...

05 febrero 2013


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
Leer más...

05 enero 2012

WhatsApp al descubierto


Hoy vamos a hablar de una herramienta para sniffear todo lo que whatsapp manda/recibe en la red creada a partir del estudio realizado Alberto Ortega en su post 'WhatsApp y su seguridad, ¿pwn3d?'


¿Qué es Whatsapp?

Whatsapp es un servicio de mensajería instantánea disponible para cualquier smartphone actual y que usa el protocolo xmpp para la transmisión de datos.

¿Como funciona whatsapp?

Como los chicos de securitybydefault nos comentaban en el otro post, whatsapp tiene como destino el puerto 443(HTTPS) aunque todo viaja bajo texto plano.

Whatsapp usa el protocolo XMPP(una tecnología de comunicación en tiempo real muy potente y utilizada actualmente). Un claro ejemplo del uso de XMPP lo podemos encontrar en el tuenti chat sin ir muy lejos.
Los datos de XMPP son enviados a bin-short.whatsapp.net bajo el puerto 5222.


¿Un momento, seguro que van en texto plano?... Así cualquier desalmado puede leer mis mensajes cuando estoy en una red wifi..

Exacto, todos los datos son enviados bajo texto plano, una vulnerabilidad que fue descubierta hace meses y reportada pero a la que whatsapp no hizo caso.



Pero es bastante incómodo tener que estár atendiendo a 80 paquetes para leer dos mensajes y dos números de teléfono... ¿no hay otra forma más comoda?
Porsupuesto, actualmente estoy desarrollando WhatsAppSniffer(que nombre más original) que muestra en consola todas las conversaciones, identificadores y demás que pasan por la red cuando se está usando whatsapp.

He decidido programarlo usando winpcap(aunque no sería posible de no ser gracias a Thor) y he usado como lenguaje ANSI C.

¿Y donde podría usar esta herramienta? Situémonos... estamos en una biblioteca, wifi público y está llena de personas que por no gastar el ancho de banda de 3G están atendiendo a usar whatsapp en el wifi.. Simplemente arrancaríamos la herramienta y dejaríamos que broten las conversaciones :).. en un aeropuerto, en un bar (así consigues el numero de esa rubia que tanto miras en lugar de atender a la coca-cola)...

¿Pero como usamos WhatsAppSniffer? 

Arranca el programa, selecciona un adaptador que se pueda poner en modo promiscuo introduciendo su número y pulsa enter.
WhatsAppSniffer esperará a que los paquetes comiencen a pasar y los irá mostrando en pantalla con sus respectivos datos.

Nota: En caso de que no logre detectar ningún paquete debes de cerrar la herramienta y previamente forzar el modo monitor de tu tarjeta, yo lo he estado haciendo con cain para ir probando.



















De momento he decidido dejar una versión BETA de WhatsAppSniffer. Todavía hay que ajustar un poco el filtrado de los paquetes, solucionar algún error y hacer que permita enviar mensajes desde el propio sniffer a partir de un userid.


Continuaré desarrollando la herramienta para mejorar el filtrado... realmente no hay un "patrón" de datos en los paquetes que me permita sacar los datos de forma limpia siempre... de modo que necesitaré un poco más de tiempo hasta sacar algo a lo que se pueda llamar Sniffer... :)

Artículo cortesía de Alberto, editor de  seginformatica.net
Leer más...

25 octubre 2012

Hackeos Memorables: SpotBros a WhatsApp

Hace tiempo hablamos sobre SpotBros, una aplicación de mensajería instantánea que compite en el mismo segmento que WhatsApp.

SpotBros es notáblemente mas segura en su diseño. De entrada, cuando te registras en la red, el password lo eliges tu, no es tu IMEI, no es la MAC de tu tarjeta Wifi. Personalmente opino que el mero hecho de tener que alabar algo tan básico como este punto, deja en un pésimo lugar a WhatsApp.

No solo en materia de seguridad se distancia de whatsapp, también en funcionalidad. En SpotBross existen dos cosas que a mi me parecen sumamente interesantes. los 'Shouts' y los 'Spots'.

Los Shouts son una forma de comunicarse con gente cercana a ti. Lanzas un mensaje y ese mensaje es leído por la gente que se encuentre a un radio -aproximadamente- de 1,5km a la redonda. Viene muy bien para estar al tanto de lo que se mueve por tu zona, cortes de calles, dudas sobre 'donde comprar X' etc etc.

Los Spots son grupos con un interés común, vagamente podrían ser análogas a las salas de chat, para localizarlas tienes que estar cerca de donde se creó dicho grupo.

He visto, por ejemplo, que en mi urbanización han creado un 'grupo de padel' ahí la gente se ofrece para organizar partidos entre vecinos. Cualquier vecino con SpotBros que viva por la zona verá ese grupo y se puede unir si así lo desea.

Hace poco hubo un lanzamiento masivo de SpotBros, coincidiendo con la puesta a disposición de la versión para IOS.

Y aquí viene la polémica. Junto con la instalación, se ofrecía la posibilidad de enviar a tus contactos de WhatsApp un mensaje hablando de SpotBros.

A raíz de eso hubo cierta polémica bastante artificial sobre si eso era o no SPAM. Cualquier red tipo Facebook o similares, en el proceso de darte de alta, ofrece la posibilidad de 'invitar' a tus contactos del MSN, Gtalk, etc. Por tanto, rasgarse las vestiduras y acusar a SpotBros de SPAM me resulta bastante chocante (y aun más hacerlo desde una red que hace exactamente lo mismo ...). Máxime cuando estaba la opción de no enviar dicho mensaje.

Al calor de dicha polémica, nadie se ha parado a reflexionar en el detalle técnico. Y eso, creo, es lo más 'bonito' de este asunto.

De entrada, WhatsApp no ofrece ninguna forma de enviar mensajes sin intervención del usuario. No existe API, tampoco forma oficial de hacer eso. Por tanto, ¿Cómo lo hicieron?

Los tiros -sospecho- tienen que ir hacia WhatsAPI, la implementación no oficial y tristemente coaccionada de WhatsApp.

Yo apuesto porque durante el proceso de instalación de SpotBros, éste se hacía con la información necesaria para hacer login en la red WhatsApp (IMEI en Android, MAC de la Wifi en IOS) y luego enviaba dicha información a los servidores de SpotBros, donde había un proceso que, usando WhatsAPI, enviase dichos mensajes.

Sin duda, un 'OWNED' en toda regla. Aprovechándose de las debilidades de WhatsApp y su deficiente sistema de registro, consiguen emplear la plataforma de su competidor en beneficio propio.

UPDATE: Tal y como explica Alejandro Lopez en uno de los comentarios, en realidad lo que ha hecho SpotBros es crear un minicliente WhatsApp en Java e integrarlo dentro de la aplicación. Con lo que no intervienen los servidores de SpotBros


Leer más...

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 
Leer más...

17 septiembre 2012

WhatsApp: Spam, inundación y robo de cuentas

En Marzo del 2011, en este mismo blog, Alberto Ortega explicaba como funcionaba la autenticación de los clientes de WhatsApp con sus servidores y se preguntaba cuál sería la contraseña para el acceso. Hoy y desde hace meses, ya se conoce como se genera. 

En esta entrada vamos a explicar qué riesgo implica este dato y como en otras ocasiones, esperamos ayudar a convencer a WhatsApp de sacar una nueva actualización.

En febrero se publicó el método de generación de la contraseña, cuando alguien escribió en el foro hak5 un comentario con su investigación sobre la aplicación del sistema Symbian, acompañándolo con las funciones en java que hacían esta tarea.

Generación de la contraseña MD5 en cliente de Symbian
Al final no era mucho más complicado que hacer un MD5 del IMEI del teléfono móvil invertido, al menos en este caso y en el de los teléfonos Android.

Este descubrimiento se ha hecho popular hace unas semanas (el día 5 de septiembre) a raíz de una entrada de Sam Granger, pero realmente era algo bien conocido desde febrero.

A partir de aquí decenas de usuarios empiezan a crear los primeros clientes no oficiales y es que la comunidad no tiene límites. Uno hecho en java para los móviles n900 (que además y sin que se hiciera demasiado eco funciona en PC), Yaparri  y Wazzap! para N9. Todo un lujo para los usuarios de estos móviles.

En mayo se creó una API (no oficial), tanto en php como en python, que usa este mismo sistema y permite a desarrolladores hacer sus propias aplicaciones.

Una noticia más de esta semana y que ha hecho saltar la alarma a los blogs más generalistas ha sido el reciente descubrimiento de como genera la  contraseña el cliente móvil de la plataforma IOS, que es tan sencillo como aplicar un MD5 a la MAC de la tarjeta wireless duplicada: md5(MACMAC).

Generación del hash MD5 en IOS (Fuente:  http://www.ezioamodio.it/?p=29 )
El problema de este método de generación es obvio. Tan solo hace falta conocer la MAC del móvil para suplantar su identidad y con ello mandar mensajes a su nombre y además recibirlos (aunque el móvil suplantado no los recibiría). La MAC, a diferencia del IMEI, es un dato que se puede obtener sencillamente sin acceso físico a el.

Este hallazgo explica el motivo por el que en ocasiones tanto la API como otros clientes fallaban al acceder a los servicios de WhatsAPP, ya que si te registras por primera vez con un iPhone, tu contraseña no estará creada en base al IMEI y por lo tanto fallará. Ocurre lo mismo si el proceso es inverso.

Los riesgos que implican este comportamiento son varios, entre ellos el spam, la inundación y el robo de la cuenta.

SPAM

Seguro que todos habéis usado alguna vez alguno de estos servicios: Messenger, Gtalk, Facebook o Tuenti. Y seguro que no os sorprende que para que alguien pueda interactuar con vosotros se sigue un proceso muy sencillo: primero se manda una solicitud para conectar y a continuación la otra persona  ha de aceptar. Una vez hecho, se establece un vínculo y queda vía libre para la comunicación.

Este proceso no es igual en WhatsApp. Aquí un usuario puede mandar mensajes a quien quiera (al igual que ocurre con los SMS), tan solo conociendo su teléfono. Teniendo en cuenta que el envío no tiene coste y se puede automatizar sencillamente es previsible que empecemos a sufrirlo a corto plazo.  Este mismo problema ocurre en Twitter donde tampoco se aceptan los followers salvo se configure en modo privado. ¿Alguno tiene la cuenta de twitter pública y ha recibido mensajes de mujeres increíblemente guapas que ponen direcciones de páginas web? Si, es SPAM, y entonces ya sabéis a lo que me refiero.

Tal vez alguien malo se haya leído mi anterior post donde contaba el número de móviles con whatsapp instalado y usando el mismo proceso sea capaz de generar una lista con los teléfonos dados de alta y por lo tanto "objetivo".

Solo espero que si alguien se aprovecha, acabe teniendo que dar explicaciones legales. Bueno, eso y que WhatsApp me permita configurar mi "usuario" como privado.

Ejemplo de envío masivo de publicidad de SbD vía WhatsApp

Inundación

Por lo explicado anteriormente, el mismo ataque se puede replicar mandando miles de mensajes automáticamente al mismo teléfono, dejándolo KO hasta que elimine la aplicación, desactive los datos o alguna otra medida similar.

Denegación de servicio con mensajes masivos de WhatsApp

Robo de cuenta

Lo que al final todo el mundo quiere hacer. Leer los mensajes de whatsapp de la novia de la que tanto se fían. Lo que cuento aquí no tiene ningún misterio y ya es público, pero sed responsables, ya que un gran poder conlleva una gran responsabilidad. Y acabar explicándoselo a un Juez, no debería ser una opción.

Dependiendo del móvil que se usó para registrarse la última vez, la contraseña estará basada en IMEI (Android/Symbian) o en la MAC de la Wifi (iPhone).
  • Si es IMEI la única opción es acceder físicamente al móvil y verlo al quitar la batería o en la configuración del terminal. La configuración es distinta por cada móvil, pero en muchos de ellos se muestra directamente al pulsar el código:  *#06#
  • Si es la MAC, se puede sacar de distintas formas:
    • En Ajustes->General->Información->"Dirección WIFI"
    • Si está en la misma red que tú, como por ejemplo en casa compartiendo ADSL. Dentro de la configuración del router aparecerá un apartado con los clientes conectados o un listado con la asignación DHCP, relacionando direcciones IP con MACs
    • Usando un sniffer como kismet que es capaz de localizar los dispositivos wireless (como el iphone en cuestión) cada vez que tratan de conectar a alguno de los puntos de acceso que tienen configurados, independientemente de que estén disponibles o no.
    • Por otro fallo de IOS, cuando configuras un punto de acceso este queda almacenado para siempre y si detecta otro con el mismo nombre, se conectará directamente sin preguntar.  Por lo que otra opción es crear un punto de acceso falso (fakeap), con nombres de redes conocidas y que seguramente ya estén almacenadas en el móvil. Como por ejemplo: "McDonalds", "Starbucks", "Hotel NH", etc.

Kismet mostrando clientes conectados y sus MAC (Fuente:  http://www.kismetwireless.net/screenshot.shtml)

Configuración de router Belkin mostrando clientes Wireless (Fuente:  http://www.techspot.com/guides/442-check-if-someone-uses-your-wi-fi/)

Una vez dispones de los datos necesarios, descarga PHP y WhatsAPI, Edita el código de ejemplo "whatsapp.php" añadiendo el nombre, teléfono (sin el 00 ni el +, pero si con el código de país) y luego el IMEI o MAC.


A continuación hay que modificar el php.ini para que cargue la librería de sockets y openssl, además de modificar la clase whatsprot.class.php para eliminar el timeout del socket y por último, cambiar las rutas de Unix a Windows en los require (las barras, vaya)

Para evitaros hacer esos esos cambios, he dejado en el repositorio todas las modificaciones hechas, junto a todo lo necesario, para que solo tengáis que descargar el archivo en C:\php y editar el whatsapp.php con el nickname, sender e IMEI.

Desde un cmd, se ejecuta con una sintaxis sencilla.

  • El primer comando, sin argumentos, muestra la ayuda: php whatsapp.php
  • El segundo manda un mensaje de prueba: con -s y el teléfono (country code, sin 00 ni +)
  • Con la opción -l permanece a la escucha para la recepción. Ojo que si es de otro usuario, el legítimo no los recibirá.



Actualización: 18/09/2012

Otra opción más sencilla tanto para Windows como Linux es descargar ThatsaPC, en el que desde entorno gráfico, ofrece la misma funcionalidad. Tan solo hay que añadir el código de país (34 para España), el IMEI o MAC (en mayusculas) y el número de teléfono.

Una vez se conecta, se añaden los contactos manualmente desde el menú de contactos.




Leer más...

13 junio 2012

FACUA: Papanatas en acción

Para el que no lo sepa, FACUA es una asociación de consumidores cuyo 'leitmotiv' es la defensa del ciudadano ante abusos y mala praxis de empresas e instituciones.

Muy loable, sin duda. El problema es cuando vas a poner la típica reclamación 'ruidosa' (orientada a salir en TV, prensa, Menéame y cia) y lo haces mal.

Lo haces mal porque pecas de algo que, por desgracia, sucede con demasiada frecuencia: Actúas como un papanatas

En el caso de FACUA, por lo visto, lanzaron una denuncia a la AGPD, contra WhatsApp (sí, nuestro querido WhatsApp) motivada en el hecho de que WhatsApp no implementa cifrado de datos en las comunicaciones. Y claro, eso supone un riesgo para el consumidor.

Hasta aquí todo bien, el problema es que FACUA ha empleado como 'prueba de cargo' la investigación que encontraron en un blog Holandés.

Si vemos el extracto de la resolución de la AGPD:


Vemos que FACUA motiva su reclamación en 'un blog Holandés que publicó un post llamado Whatsapp sends contact info and messages in plain text'. Si tiramos de google, encontramos el post aquí fechado el 17 de Mayo del 2011.

¿Problema? que esa investigación ya se había realizado y publicado en SbD en MARZO.

Y aunque en el momento que se lanzó esa reclamación, aun no se habían publicado la mayoría de los posts más 'calientes' sobre Whatsapp, los problemas de WhatsApp no se limitan solo al tema del cifrado de los datos en tránsito, es que tiene problemas de todo tipo.

Desde graves problemas de privacidad, hasta fallos en la seguridad del mecanismo de registro, más fallos de privacidad e incluso hemos publicado herramientas [1] y [2] para mostrar esos fallos.

Como colofón, decir que a AGPD no ha admitido la reclamación, podéis ver el dictamen aquí

Es muy triste encontrarse con estos casos de 'papanatismo' patrio, yo entiendo que FACUA, antes de hacer esta reclamación, habrá investigado sobre WhatsApp y me niego a creer que, si han sido mínimamente rigurosos, no hayan llegado hasta aquí, pero supongo que entre un enlace 'de fuera' y otro patrio, un buen papanatas estima que tiene mas empaque 'lo otro'

Evidentemente, si alguien de FACUA se hubiese puesto en contacto con nosotros, hubiéramos estado encantados de colaborar desinteresadamente. De hecho, si alguna reclamación contra WhatsApp tuvo realmente sentido, fue a raíz de todo lo que vino posteriormente

Ya puestos, recomiendo a FACUA encarecidamente que investigue -por ejemplo- sobre el market de Android, por lo visto dicen que no es muy seguro y eso si, no usen esta información o esta otra (aunque sea anterior), puede que pierda tirón :)

Prometo que continuaremos con el PEP (Programa Erradicación Papanatas)


Leer más...