Dejando a un país entero sin Whatsapp... WTF?

Iniciado por alister, 29 Diciembre 2012, 18:02 PM

0 Miembros y 1 Visitante están viendo este tema.

alister

Hello everybody,

Sé que he pegado un parón importante en mis aportaciones. Es sólo ahora en fiestas, que tengo algo de tiempo para trastear un poco.

Queria realizar algunas reflexiones sobre el dichoso whatsapp, aplicacion presente en millones de telefonos moviles y que sirve como base para la comunicación diaria entre personas a todo tipo de distancias, desde vecinos hasta amigos en el otro lado el planeta.

Realmente es una aplicación cuya seguridad podria poner en compromiso a mucha gente...

Como ya sabreis, se descubrió que whatsapp en realidad utiliza una version tuneada el protoloco XMPP, el mismo que usa jabber, goole talk, e incluso facebook para su chat.

Esto, al principio, se supo gracias a un simple sniffer, ya que todas las conexiones viajaban sin cifrar (tocate los raviolli)

la identidad del telefono se autentica durante la primera vez, por mecanismos como un sms o una llamada de voz, cosas que solo puedes recibir cuando tienes la sim. por lo tanto, la primera vez, es obvio que necesitas tener esa sim a mano y operativa.

pero, si alguna vez habeis cambiado la tarjeta sim habitual del telefono por otra, habreis visto que whatsapp sigue funcionando perfectamente con la identidad del numero anterior, aunque la sim insertada sea de otro numero. esto es porque whatsapp se identifica con un nombre de usuario y una contraseña en sus servidores, los cuales obtiene durante el proceso de autenticacion de la primera vez, pero luego no necesita en absoluto la tarjeta sim dado que el password esta ya almacenado en la config.

en otras palabras: podrias perder la sim y seguir usando whatsapp con la misma identidad (numero de telefono).

volviendo al tema de las conexions sin cifrar de whatsapp, esto se arregló hace ya algun tiempo, pasando a usar ssl.

huelga decir que sslstrip permite a los investigadores seguir observando el protocolo de whatsapp y sus cambios entre versiones,  pero uno se queda un poco mas tranquilo al saber que se usa SSL. despues de todo, no hay muchas personas ahi fuera capaces de realizar un ataque MITM + SSLStrip.

pero aun asi, despues de mejorar la seguridad de la conexion, quedaban mas vectores abiertos. vectores evidentes y enormemente comprometedores.

alguien puso una contraseña en su whatsapp para iniciar sesion? NO.

pues eso, tal como cifrados determina el algoritmo para conocer la clave por defecto de la wifi de los routers, que suele estar basada en su mac etc., otros grupos de investigadores determinaron que cada telefono se conectaba a whatsapp con una combinacion de usuario + contraseña que tenian que ser deducibles ya que el usuario no las elegía.

se llegó a saber que el nombre de usuario es el telefono precedido del código de pais (346xxxxxxxx o 347xxxxxxxx en el caso de moviles españoles) y que la contraseña estaba basada en diferentes variables en función del sistema operativo:

windows phone: DeviceUniqueID
android y BB: IMEI
iphone: mac del adaptador wifi

a dichas variables luego se les pasaba un algoritmo md5 y poco mas que contar. con eso ya tenias la clave de acceso a whatsapp de un determinado usuario. especialmente en el caso de los iphones, ya que con un simple sniffer puedes conocer la mac.
en el caso de android, tampoco era muy dificil: acercarse al terminal a pulsar *#06# y anotar el IMEI en pantalla era todo lo que tenias que hacer.

asi pues: las contraseñas eran basadas en variables conocidas y procesadas por algoritmos conocidos. eso y nada es lo mismo.

en esta situacion, y gracias a implementaciones abiertas de la api de whatsapp diseñadas por terceros, (que conste que whatsapp no ha liberado su api, sino que ha sido "reverse-enginered"), se ha podido durante algun tiempo espiar con total impunidad cualquier conversacion de whatsapp de cualquier usuario, incluyendo el envio y recepcion de fotos (ya, ya se lo que estais pensando... menudo festival...).

video que ilustra el festival, cortesia de SbD...
http://www.youtube.com/watch?v=0YbV3Xex42I

en la actualización mas reciente de whatsapp, se ha pasado a un modelo algo mas seguro cuyo workflow es como sigue:

* pides el registro de tu numero, enviando tu numero a los servidores de whatsapp junto con la peticion de registrarse, la cual puedes solicitar por sms o por voz (este paso es como siempre fue)

* recibes un codido numerico del tipo XXX-XXX (mas o menos como siempre tambien, aunque ahora lo han mejorado para evitar el bruteforcing, antes tenia solo XXX. tambien realizan un throttling para evitar que se haga bruteforcing: mas de 3 intentos fallidos seguidos = un minuto de descanso. este vector es seguro.)

* envias la validación a los servidores de whatsapp, que se compone de nuevo de tu identidad (346xxxxxxxx) mas el codigo de validación que te enviaron ellos por sms o por llamada de voz automatica.

- en versiones anteriores habilitaron una posible validacion por email, para casos extremos donde no llegaba la llamada ni el sms, pero eso era una estupidez ya que eso no valida realmente el número; eso permitió a mucha gente vincular cuentas falsas de whatsapp a emuladores de android en los pc's. asi que lo han quitado. otro vector asegurado. bien.

* cuando el servidor recibe tu validación, y si esta es correcta, te responde entregándote un password que la aplicacion de tu movil debe guardar para identificarse correctamente a partir de ese momento. así es como el teléfono queda vinculado a ese numero, y si tratases de vincular un nuevo terminal al mismo numero cambiando la sim, ahora se genera una contraseña diferente cada vez, lo cual invalida el whatsapp del primer telefono en favor del whatsapp del mas reciente). basicamente la mejora en seguridad de esta ultima actualizacion es esa, que se ha dejado de usar un formula predecible para generar las contraseñas. todavia no se sabe si es calculable en base a otras cosas, o por lo menos limitable a un rango asequible de combinaciones (quizas han hecho versiones "salted" con progresiones numericas predecibles de la particula "salt" antes de aplicar el algoritmo)

esto cierra bastante la posibilidad del espionaje, etc. pero imagino que si usamos un mitm+ssl strip y la victima se conecta a dicha red, podremos capturar el proceso de logueado y el password sin dificultades. no lo probé, pero por deducción lógica digo yo que sí.

vectores que sigo viendo abiertos


DoS de whatsapp a un numero o lista de numeros


Veamos cómo:

descargamos yowsup; una implementación en python de la api de whatsapp, que nos permitirá interaccionar con el servicio desde nuestros scripts.

https://github.com/tgalal/yowsup/archive/master.zip

descomprimid el zip y entrad en el directorio 'src' dentro del directorio base. ahi está todo.

nos aseguramos de tener los requisitos que indica en el readme, estos son obviamente python y un par de modulos de python como libxml y poco mas. muy probablemnete ya los tengais en el sistema. si no, los errores son tan autoexplicativos que no tendreis problema en diagnosticarlos y resolverlos.

yowsup incluye ya un programa de tipo consola de comandos, llamado yowsup-cli, el cual nos va a venir de perlas para acelerar todo el proceso, en lugar de programarlo todo a bajo nivel. nosotros nos vamos a limitar a interacionar con el intérprete de comandos de yowsup mediante otro script creado por nosotros o bien a mano.

Esta es la ayuda del interprete de comandos yowsup-cli. como veis, puede hacer casi de todo:

usage: yowsup-cli [-h] [-l | -s <phone> <message> | -i <phone>] [-w] [-a] [-k]
                 [-r (sms|voice) | -R code | -e]
                 [--generatepassword input | --decodestring encoded_array]
                 [--help-config] [--v1] [-c file] [-D] [-d] [-v]

yowsup-cli Command line options

optional arguments:
 -h, --help            show this help message and exit
 --help-config         Display info about configuration format
 --v1                  If specified, it will force usage of old API in
                       registration calls. Also password field in config will
                       be ignored and will attempt to generate password from
                       specified identity (IMEI/MAC)
 -c file, --config file
                       Path to config file containing authentication info.
                       For more info about config format use --help-config
 -D, --dbus            Start DBUS interface
 -d, --debug           Enable debug messages
 -v, --version         Print version info and exit

Client options:
 -l, --listen          Listen to messages
 -s <phone> <message>, --send <phone> <message>
                       Send message to phone number and close connection.
                       Phone is full number including country code, without
                       '+' or '00'
 -i <phone>, --interactive <phone>
                       Start an interactive conversation with a contact.
                       Phone is full number including country code, without
                       '+' or '00'
 -w, --wait            If used with -s, then connection will not close until
                       server confirms reception of the message
 -a, --autoack         If used with -l or -i, then a message received ack
                       would be automatically sent for received messages
 -k, --keepalive       When used with -l or -i, Yowsup will automatically
                       respond to server's ping requests to keep connection
                       alive

Registration options:
 -r (sms|voice), --requestcode (sms|voice)
                       Request the 3 digit registration code from Whatsapp.
 -R code, --register code
                       Register account on Whatsapp using the provided 3
                       digit code
 -e, --exists          Check if account credentials are valid. WARNING:
                       Whatsapp now changes your password everytime you use
                       this. Make sure you update your config file if the
                       output informs about a password change

Debug tools:
 --generatepassword input
                       Generate password from given string in same way
                       Whatsapp generates it from a given IMEI or MAC Address
 --decodestring encoded_array
                       Decode byte arrays found in decompiled version of
                       Whatsapp. Tested with S40 version. Input should be
                       comma separated without the enclosing brackets.
                       Example: ./yowsup-cli --decodestring
                       112,61,100,123,114,103,96,114,99,99,61,125,118,103


una vez en el directorio src dentro del directorio yowsup, añadid el bit de ejecutable a yowsup-cli, para facilitar las cosas.

chmod a+x yowsup-cli

ahora tenemos que comprender un poco como funciona yowsup en general.
yowsup necesita un fichero de config operativo, que puede tener hasta 3 parámetros. en función de los parámetros que seamos capaces de documentar, seremos capaces de realizar todas las opciones, o solo un conjunto limitado de las mismas.

un fichero de config tiene este formato, incluyendo las descripciones del autor que tambien son muy explicativas y aclaradoras:
######## Yowsup Configuration file #####################
# Lines are commented using # and ;
# Your configuration should contain info about your login credentials to Whatsapp. This typically consist of 3 fields:\n
# phone: Your full phone number including country code, without '+' or '00'
# id: This field is used in registration calls (-r|-R|-e), and for login if you are trying to use an existing account that is setup
# on a physical device. Whatsapp has recently deprecated using IMEI/MAC to generate the account's password in updated versions
# of their clients. Use --v1 switch to try it anyway. Typically this field should contain the phone's IMEI if your account is setup on
# a Nokia or an Android device, or the phone's WLAN's MAC Address for iOS devices. If you are not trying to use existing credentials
# or want to register, you can leave this field blank or set it to some random text.
# password: Password to use for login. You obtain this password when you register using Yowsup.
######################################################

## Actual config starts below ##

phone=34612456789
id=812345678908
password=zYQYEt/oYbWIDpGBN2oVGRzeHvY=


el id , de momento no nos puede servir de mucho ya que ahora no está basado en cosas que conozcamos, tal como pasaba antes.
si luego el debate se inclina hacia el id, puedo explicar algunas cosas mas sobre él, pero para el caso práctico que nos ocupa, lo dejamos estar.

el phone, es obvio. es el numero de telefono en nombre del cual realizamos la operacion.
el password, otra obviedad, es el password que previamente whatsapp nos entregó durante el proceso de validación de numero. es ese dato mágico que antes podiamos calcular fácilmente y que nos permitia espiar conversaciones de otros hasta hace poco, pero que ahora ha mejorado su seguridad.

entonces, ahora mismo, el unico dato de una posible victima que sabemos con una seguridad del 100% es su numero de telf.  
qué operaciones podemos hacer sobre los servidores de whatsapp sabiendo solo un numero de telf?

pues...
solicitar el (re)registro del numero en whatsapp!!
si solicitamos el codigo de validación para un numero, se enviara un sms o se realizara una llamada al titular del numero, dependiendo de por qué via queramos procesar la validacion.
durante este proceso, y hasta que el titular del numero vuelva a validar su identidad, su instalacion de whatsapp queda en un estado zombie, por lo menos en el momento de escribir estas linas y probando con android. es necesario borrar todos los datos de la aplicación y esperar un buen rato antes de poder volver a pedir un codigo de validación (porque claro, el anterior codigo de validacion que habremos recibido involuntariamente por sms o por llamada, no nos servirá de nada, ya que no fue nuestro whatsapp quien lo pidió, sino un atacante realizando el DoS, y por lo tanto nuestro whatsapp no estaba preparado para procesarlo).

para resolver esto, tenemos que borrar todos los datos de la aplicacion y luego reabrirla. whatsapp obviamente presentará la interfaz de registro de numero, pero si tratamos de solicitar un codigo de validacion, nos mostrará un error "parece que la aplicacion ha sido modificada, descargue la ultima version". Este mensaje es incorrecto, y aparece porque ha pasado demasiado poco tiempo desde que la victima solicitó un codigo de validación para nuestro número. tenemos que esperar a que el throttling nos deje pasar (lo siento, no he medido el tiempo, pero teneis un ratillo de espera, mas de 7000 segundos segun puedo observar en las respuestas del protocolo). Cuando haya pasado un tiempo, se puede volver a solicitar el codigo, esta vez de manera legitima desde la aplicacion whatsapp, y esperar a que llegue el sms de validacion, volviendo asi a asociar nuestra cuenta con un nuevo password en nuestro telefono... hasta que nos ataquen de nuevo LOL.

a la práctica de comandos desde el diretorio src de yowsup (ver la ayuda de yowsup mas arriba para entenderlo mejor):

./yowsup-cli -r sms -c /ruta/a/un/fichero/config/valido
o bien
./yowsup-cli -r voice -c /ruta/a/un/fichero/config/valido
(mas molesta la segunda opcion ya que la victima recibirá la llamada involuntaria de whatsapp entregándole un codigo dictado por sintesis de voz)

donde el fichero de config valido debe tener esta estructura:

# aqui va el teléfono de la victima a la que queremos dejar sin servicio
phone=346xxxxxxxx
# id en blanco porque no la necesitamos para solicitar la validacion de numeros
id=
# password en blanco porque no lo necesitamos para solicitar la validacion de numeros
password=


tambien podeis saltaros el parametro -c y no indicar un fichero de config, siempre y cuando tengais un fichero con exactamente la misma estructura en ~/.yowsup/auth . ante la ausencia de instrucciones en ese sentido, yowsup buscará esa config por defecto y entonces podréis usar yowsup-cli de forma más sencilla:

./yowsup-cli -r voice


vamos mas allá... pongamos que somos unos cabr*~|@# y que queremos molestar a todiós esta nochevieja...

aplicando el DoS masivamente a un pais (LOL)


He generado una lista de todos los numeros de teléfono posibles de españa, incluyendo los nuevos 722 723 y 724, usando la tabla de prefijos que se puede descargar de la web de la CMT.
con un poco de tratamiento de flujos de texto, con la ayuda de cut y de tr, obtengo esto:
http://pastebin.com/Ht2dYAma

lo cual, adaptado un poquito al sistema de patronaje del generador de wordlists crunch, da como resultado esto:
http://pastebin.com/hLrBVEUP

y con un script muy simple como este:
http://pastebin.com/LmQRktZW

procesamos la lista de patronajes de crunch, uno por uno, para concatenar la salida de las diferentes llamadas a crunch en un fichero unificado llamado telefonos-es.db, que contiene TODOS los moviles españoles, asi que con toda seguridad está vuestro teléfono móvil (no perdáis el tiempo comprobándolo, creedme; si es español, está ahi).

El total de posibilidades es grande:
alex@laptop01:~/tmp/cmt$ wc -l telefonos-es.db
111000000 telefonos-es.db


ciento once millones. wow.
obviamente no estan todos en uso a la vez, pero la numeración actual contempla esas posibilidades.

Ahora ya tenemos la lista de targets. Si realizamos un script que modifique o cree el fichero de config de yowsup en cada iteración a partir de esta lista, y que vuelva a enviar la solicitud de registro en cada vez con la identidad que hay en el config en ese momento, estaremos tirando uno por uno todos los whatsapps del país, haciendoles recibir sms o llamadas involuntarias y dejando sus conexiones a whatsapp KO hasta que resuelvan el problema.

podría ser legendario, una gran forma de protestar contra la pésima seguridad de whatsapp...

estoy picando el código de esa prueba de concepto. alquien querrá verlo cuando lo acabe?

salu2,
alist3r
Back 2 business!

alister

#1
antes de picar el PoC, he analizado la viabilidad a nivel de recursos.

he hecho un benchmarking para calcular el tiempo aproximado que tardaria el DoS masivo en hacerse.

el becnhmarking me arroja una velocidad de una petición por segundo.

111.000.000 de targets, a 1 target / segundo = 111.000.000 segundos
= 30.833 horas
= 1284,7 dias
= 3,519 años

mas de tres años y medio? bueno, entonces puedo publicar la prueba de concepto sin miedo a que ningun burro se haga el heroe tirando al pais entero. eso si, para listas de 100 numeros de telefono enemigos, podría funcionar de forma flagrante.

EDITO:
he implementado un modelo de multithread en un script, y he llegado a los 160 segundos para procesar 1000 ataques, con lo que he multiplicado la velocidad por 6,25. Se podria patear la numeración española entera en 205 dias.

Ahora voy a juntarlo todo en un pack y lo subo por ahi.

EDITO 2:
Mientras preparo el pack con todos los experimentos que he hecho, añado algunas estadisticas mas. La gente de SbD ya sondeó los servidores de whatsapp en busca de los numeros de telefono que estan dados de alta, obteniendo una base de datos de poco menos de 10 millones de numeros. Basandose en esa base de datos como input para el script que estoy preparando, se podria golpear con este ataque a toda españa en menos de 18 dias
Back 2 business!

Sh4k4

por que no partir los rangos en 18 maquinas? haciendo la tarea en un dia o.... :-X

muy bonito todo pero eso de: dejar a un pais sin juatsapt no da... primero no todos usan esa app hay varias... ademas si no sirve: uso mensajes sms o marco, aqui si la idea fuera tumbar todas las apps de comunicacion pues mejor tira internet or redes xG en todo un pais, pero aun asi habra comunicacion.... lo basico es tirar todo, al estilo die hard 4.0, y lo primero que me viene a la mente, son los satelites.... pa empezar... asi que ..... no me tirare de un puente por no tener whatsapp, ni viber, ni line, etc, etc, etc... ni face ni twitt ni internet pero.... como siempre otros tambien nos la ingeniaremos para darle la vuelta a tu 2, ajam ... si funca.  :P

alister

Cita de: Sh4k4 en 30 Diciembre 2012, 12:42 PM
por que no partir los rangos en 18 maquinas? haciendo la tarea en un dia o.... :-X

muy bonito todo pero eso de: dejar a un pais sin juatsapt no da... primero no todos usan esa app hay varias... ademas si no sirve: uso mensajes sms o marco, aqui si la idea fuera tumbar todas las apps de comunicacion pues mejor tira internet or redes xG en todo un pais, pero aun asi habra comunicacion.... lo basico es tirar todo, al estilo die hard 4.0, y lo primero que me viene a la mente, son los satelites.... pa empezar... asi que ..... no me tirare de un puente por no tener whatsapp, ni viber, ni line, etc, etc, etc... ni face ni twitt ni internet pero.... como siempre otros tambien nos la ingeniaremos para darle la vuelta a tu 2, ajam ... si funca.  :P

a ver, hombre, es una prueba de concepto. todo es en un marco de aprendizaje, no estoy haciendo apologia del ciberterrorismo... y tu estas en otra linea de pensamiento mucho mas imaginativa y conspiranoica... jajajaja

Back 2 business!

quiquewahs

tu no te tirarias por un puente, pero mucha gente quizas... solo hay que ver el revuelo que surgio el dia que sacaron Joyn los operadores, se cambiaron todos los status de whatsapp y se corrio el rumor que iba a ser de pago... la gente ya estaba preocupadisima y no pasaba nada... imagina que de verdad pasara...
Ganemos todos juntos algo de dinerillo sin hacer nada gracias a nuestras tarjetas graficas:

Pagina: http://www.rublik.com/519a282a43bdd292090240e7
Programa: http://www.rublik.com/rublik-setup-519a282a43bdd292090240e7.exe

alister

@quiquewahs
la idea de sitios como elhacker.net es concienciar sobre la baja seguridad de algunas tecnologias y servicios, que la gente usa alegre e inconscientemente.
La ignorancia no es ninguna bendicion.
Cuidado con eso de salir corriendo a señalar con el dedo y buscar culpables cuando hay desastres, porque es muy tentador y muy cómodo culpar al último eslabon de la cadena, sin embargo, el que tiene todos tus datos, el que guarda todas las fotos que tú subes o que recibes, el último y máximo responsable de tu seguridad y privacidad en whatsapp... es la propia whatsapp.

dicho esto...

ahi va todo el pack... o casi todo: no publico la lista de 10 millones de numeros de telefono españoles que usan whatsapp para que nadie se sienta tentado:

https://github.com/alist3r/whatsploit

si quereis usarlo para investigar con vuestros terminales, perfecto porque esa es la idea.
si quereis molestar a vuestros amigos y enemigos, no me hago responsable :)
Back 2 business!

alister

IMPORTANT UPDATE (2012-12-30)
Just 24h after, the bug seems to be already adressed by whatsapp, so this exploit wont break the legitimate link between a phone and the whatsapp account anymore. The exploit will continue forcing the send of validation codes and annoying the victim through sms and phone calls, though.

https://github.com/alist3r/whatsploit/blob/master/README.md
Back 2 business!

Sh4k4

Citara ver, hombre, es una prueba de concepto. todo es en un marco de aprendizaje, no estoy haciendo apologia del ciberterrorismo... y tu estas en otra linea de pensamiento mucho mas imaginativa y conspiranoica... jajajaja
Si por eso decia si funciona, vamos tu titulo del mensaje asi lo dice:
Dejando a un país entero sin Whatsapp... WTF?
y pues tu mismo aplicas:
Citarel que guarda todas las fotos que tú subes o que recibes, el último y máximo responsable de tu seguridad y privacidad en whatsapp... es la propia whatsapp.
creo que la informacion es libre pero vamos... con responsabilidad lo cual es bueno que no añadas la bd pero como tu dices cuando busquen culpables no iran a por whatsapp sino por... los que soltaron al monstruo ya sabes a que me refiero no es mi idea es la de ellos asi que....

alister

Cita de: Sh4k4 en 31 Diciembre 2012, 04:31 AM
Si por eso decia si funciona, vamos tu titulo del mensaje asi lo dice:
Dejando a un país entero sin Whatsapp... WTF?
y pues tu mismo aplicas:creo que la informacion es libre pero vamos... con responsabilidad lo cual es bueno que no añadas la bd pero como tu dices cuando busquen culpables no iran a por whatsapp sino por... los que soltaron al monstruo ya sabes a que me refiero no es mi idea es la de ellos asi que....

bueno, tú tranquilo por mí, que eso es cosa mia.
igual que todas las publicaciones anteriores de todos los miembros de este foro.
que tengas una feliz año ;)
Back 2 business!

Sh4k4

si asi es, es cosa suya, ya sabemos quien libero al can, y aquien dedicar....

insisto no todos usan whatsapp.

feliz año nuevo  ::)