Blog de Hacking ®

It's te Hack Generation!

  • Mensaje de Bienvenida

    Estimado Visitante. Le damos la más cordial bienvenida a nuestra Blog de Hacking. Esperamos que encuentre con nosotros la información que usted busca, y que como resultado de ello, nos veamos favorecidos con su elección y preferencia hacia nosotros. En este blog usted podra encontrar muchas cosas de su utilidad, desde herramientas, manuales, tutoriales hazta consejos los cuales ayudaran a seguir ampliando su conocimiento & siga aumentando su pasiòn por la informàtica. Le deceamos mucha suerte & que se divierta en nuestro Blog, esperemos este lugar sea de su agrado, un cordial saludo & bienvenido. Atte: SiriusBl@ck

La última moda en aplicaciones móviles se llama WhatsApp, una App que cada vez se hace más popular y está redefiniendo el sistema de mensajería SMS. ¿Que qué nos ofrece? Un servicio mucho más completo, mejor y de momento gratuito.

La "pega" es que necesitamos Internet para poder comunicarnos, y que tanto emisores como receptores deben tener la aplicación, la cual funciona por ahora en iPhone, Android, BlackBerry y Nokia Symbian. Por cierto, para los usuarios de iPod Touch hay opción de utilizarla, pero tendrán que descargarla desde sitios alternativos y tener el sistema con Jailbreak, ya que en la AppStore ha desaparecido para ellos.

Pero aquí vamos a hablar de lo que nos gusta de verdad, de seguridad y, en este caso, algo de privacidad. Todas las pruebas que vamos a hacer serán de la versión 2.6.2 (la última a día de hoy) sobre un iPod Touch, en un principio el resultado no debería diferir mucho (nada) aunque cambiemos de plataforma.

Si miramos el tráfico de la red generado por la aplicación lo primero que llama la atención es que el destino del servidor es el puerto 443 (HTTPS), pero todo viaja en claro.

WhatsApp utiliza el protocolo XMPP, una potente tecnología abierta para comunicación en tiempo real.

Como mecanismo de autenticación han optado por SASL DIGEST-MD5, el cual utiliza los siguientes valores para generar el challenge (MD5):

username, password, realm, nonce, cnonce, nc, digest-uri y qop.

Todos menos el nombre de usuario y password son generados por servidor o cliente y se envían en el challenge. El nombre de usuario lo proporciona el cliente y también es enviado, y por último el password también se utiliza para generar el MD5 pero no se envía, ya que es el valor que permite que la autenticación con el servidor sea segura.

Aquí tenemos un ejemplo de challenge ya formado que es enviado por el cliente para finalizar la autenticación:

username="34666666666",
realm="s.whatsapp.net",
nonce="1438536309",
cnonce="E0487DC6-6D1A-4A67-AV70-3299TD89O29A",
nc=00000001,
qop=auth,
digest-uri="xmpp/s.whatsapp.net",
response=b98d50c159a938723d8eb8f3039afab2,
charset=utf-8

Hasta aquí todo bien, pero hay un problema: No recuerdo haber introducido ninguna password para mi cuenta durante la instalación, simplemente vinculé mi teléfono móvil. Entonces, ¿qué se está usando como password en el challenge?

Existen varias posibilidades:

- Está "hardcodeada" en el código fuente, es decir, es la misma para todo el mundo.
- Se genera en base a algún valor único del dispositivo (¿número de serie?).
- Se genera en base al username, que por cierto, es nuestro número de teléfono.
- ...

Buscando en los ficheros de configuración no encontré nada referido a la password, por lo que finalmente decidí hacer mi propia implementación de SASL DIGEST-MD5 (mención especial a estemagnífico artículo) y hacer fuerza bruta a la password de un challenge generado por la aplicación.

Probé con varios diccionarios relativamente grandes y con las strings del binario de WhatsApp de iOS. No hubo resultados.

Después de probar todo lo que se me ocurrió sin obtener resultados satisfactorios decidí enviar un email a los desarrolladores con un tono de curiosidad, preguntando por la password que se usaba en la autenticación XMPP. La respuesta fue tan precisa como breve, literalmente:

password is just "password"

Pero, ¿cómo es posible? Si ésa es la password, ¿por qué no ha salido durante la fuerza bruta?

Podemos llegar a dos conclusiones:

- Ésa no es la password, y se están cubriendo las espaldas.
- Su implementación no sigue el estándar y lo han modificado ligeramente por algún motivo.

Si finalmente la password es la misma para todos los usuarios, están siguiendo una filosofía de seguridad por oscuridad que puede ser rota cualquier día. Si alguien obtiene la password que se usa, o consigue implementar el algoritmo para generar el challenge teóricamente podría iniciar sesión en el servicio con la cuenta de cualquiera, sabiendo únicamente su número de teléfono. Sería algo parecido a tener todas las cuentas de usuario sin contraseña.

La solución a ésto pasaría por hacer que el usuario introduzca una contraseña durante la instalación, o utilizar algún valor único del teléfono móvil no predecible como contraseña.

Sólo nos queda esperar a que alguien dé con la llave mágica que lo abrirá todo (si no lo han hecho aún), o que la próxima actualización de WhatsApp introduzca en el modo de autenticación una password de verdad.

Por cierto, para terminar el artículo, ¿he dicho ya que todo el tráfico de la aplicación va en claro? Mensajes, nickname, números de teléfono ...

Categories:

6 Response for the "WhatsApp y su seguridad, ¿pwn3d?"

  1. Angel says:

    podrias iluminarme sobre como poder realizar el ataque por fuerza bruta ???

  2. Interesante el tema.
    Imagino que no es facil si no ya habrian sacado un sistema para pc que fuera compatible, independientemente de la "Ligadura" con un numero de telefono movil (cosa que creo que seria facil de saltar).
    ¿Se sabe algo sobre el protocolo que usa?¿Donde esta el servidor (que debe tener)?

    Es un tema que creo que es mas interesante que el hecho de poder o no romper la clave.

  3. Tatarat says:

    A alguien se le ha ocurrido que la contraseña seria el código de verificación como sms? Digo, es el unico loggin que existe

  4. Exlente articulo, sabes algo del codigo de verificacion que mandan? xq en ningun momento lo piden o la aplicacion es capas de acceder a los sms.
    Escribi un articulo sobre la base de datos de whatsapp, les dejo el link por si les interesa ;)
    http://gonzac-studios.blogspot.com/2012/03/hack-obtener-mensajes-de-whatsapp.html

    saludos!!

  5. cifras de tres digitos 000-999 para recibir la auntenticacion a un numero de +XX XXXXXXXXX ....y cargar la lista de contactos que tienen ellos en el servidor-.... me suena a antiguos recursos...para que el servidor acepte nuestras contraseñas primero verifica algo que debemos de tener el el movil en alguna carpeta....es necesario que despues de introducir el codigo pregunte al telefono que archivo contiene dicho numero ..quizas hay un registro que guarda las istalaciones del whatsapp y despues elija otro mumero.`..para que no sea el mismo pero....un backup a la carpeta de whatsapp donde estan los registros....Ç?? ahí podría haber algo

  6. username="34666666666",

    realm="s.whatsapp.net",

    nonce="1438536309",

    cnonce="E0487DC6-6D1A-4A67-AV70-3299TD89O29A",

    nc=00000001,

    qop=auth,
    digest-uri="xmpp/s.whatsapp.net",

    response=b98d50c159a938723d8eb8f3039afab2,<-----yo creo que aqui esta la solucion

    charset=utf-8

Publicar un comentario en la entrada