Overblog Seguir este blog
Edit post Administration Create my blog

WhatsApp ha estado plagada de numerosos problemas en su seguridad: contraseñas fácilmente robados, mensajes sin cifrar e incluso un sitio web que puede cambiar el estado de cualquier persona. Pero esa racha no ha terminado todavía.

http://4.bp.blogspot.com/-ssMRRS0msck/UwWN5sVNZKI/AAAAAAAAmZE/mG1kARfYJZk/s1600/whatsapp-como-fuciona-fazer-fotos-senha-numero.png

Para que quede claro: este post es no sobre el uso de números de IMEI como contraseña. Ese problema se ha solucionado. Inicio de una sesión en un nuevo dispositivo en la actualidad funciona como sigue:

  • El teléfono publica su número de teléfono a una dirección URL HTTPS para solicitar un código de autenticación,
  • el teléfono recibe un código de autenticación en el mensaje de texto,
  • se utiliza el código de autenticación, de nuevo a través de HTTPS, para obtener una contraseña.

Estas contraseñas son bastante largos y nunca visible para el usuario, lo que hace que sean difíciles de robar a un teléfono.

Descripción general de Autenticación

Con la contraseña, el cliente puede iniciar sesión en el servidor no-muy-XMPP que utiliza WhatsApp. Para ello se utiliza el mecanismo SASL personalizada WAUTH-1 . Para iniciar la sesión con el número de teléfono XXXXXXXXXXXX , ocurre lo siguiente (que estoy mostrando la representación XML del protocolo, esto no es lo que se envía en realidad):

  • El cliente envía:
 1 
 <Autori  xmlns = "urn: ietf: params: xml: ns: XMPP-sasl"  user = "XXXXXXXXXXXX"  mecanismo = "WAUTH-1"  />  
  • El servidor responde con un poco de reto (aquí YYYYYYYYYYYYYYYYYYYY ):
 1 
 <Desafío  xmlns = "urn: ietf: params: xml: ns: XMPP-sasl" > YYYYYYYYYYYYYYYYYYYY </ challenge>  
  • Para responder al desafío, el cliente genera una clave usando PBKDF2 con la contraseña del usuario, los datos de provocación como la sal y SHA1 como la función hash. Sólo utiliza 16 iteraciones de PBKDF2, que es un poco bajo en estos días, pero sabemos que la contraseña es muy larga y aleatoria por lo que este no me preocupa mucho. 20 bytes desde el resultado PBKDF2 se utilizan como una clave para RC4, que se utiliza para cifrar y MAC XXXXXXXXXXXX | | YYYYYYYYYYYYYYYYYYYY | | marca de tiempo UNIX :
 1 
 <Respuesta  xmlns = "urn: ietf: params: xml: ns: XMPP-sasl" > zzzzzzzzzzzzz </ response>  
  • A partir de ahora, todos los mensajes son encriptados y Maced (usando HMAC-SHA1), utilizando esta clave.

Error # 1: La misma clave de cifrado en ambas direcciones

Permite recordar cómo se supone que RC4 para trabajar: RC4 es un PRNG que genera un flujo de bytes, que son xor ed con el texto en claro que se debe cifrar. Por xor ción el texto cifrado con la misma corriente, se recupera el texto plano.

Sin embargo, recuerde que:

 1 
 (A ^ X) ^ (B ^ X) = A ^ B 

En otras palabras: si tenemos dos mensajes cifrados con la misma clave RC4, podemos cancelar el flujo de claves fuera!

Como WhatsApp utiliza la misma clave para el entrante y el saliente de flujo RC4, sabemos que el texto cifrado byte i en la secuencia entrante xored con el byte cifrado i en el flujo de salida será igual a xor ing byte plaintext i en la corriente entrante con texto plano byte i de la corriente de salida. Por xor ing esto con cualquiera de los bytes de texto plano, podemos descubrir otro byte.

Esto no revela directamente todos los bytes, pero en muchos casos va a trabajar: el primer par de mensajes intercambiados son fáciles de predecir a partir de la información que se envía en formato. Todos los mensajes todavía tienen una estructura común, a pesar de la codificación binaria: por ejemplo, cada estrofa comienza con 0xF8 . Incluso si un byte no se conoce totalmente, a veces puede ser conocido que debe ser alfanumérico o un número entero en un intervalo específico, lo que puede dar alguna información acerca de la otra de bytes.

Error # 2: La misma clave HMAC en ambas direcciones

El propósito de un MAC es para autenticar mensajes. Sin embargo, un MAC por sí sola no es suficiente para detectar todas las formas de manipulación: un atacante podría colocar mensajes específicos, intercambiarlos o incluso transmitirlas de vuelta al remitente. TLS contrarresta esto incluyendo un número de secuencia en el texto completo de cada mensaje y mediante el uso de una clave diferente para el HMAC para los mensajes del servidor al cliente y para los mensajes desde el cliente al servidor. WhatsApp no ​​utiliza tal un contador de secuencia y se vuelve a utilizar la clave utilizada para RC4 para el HMAC.

Cuando un atacante retransmite, permutas o gotas de mensajes el receptor no puede notar que, excepto por el hecho de que el descifrado del mensaje es poco probable que ser un mensaje binario en XMPP válida. Sin embargo, mediante la transmisión de un mensaje de vuelta al remitente exactamente en el mismo lugar en el flujo RC4, ya que se transmitió originalmente hará descifrar correctamente. Si esto se puede explotar de cualquier manera, no lo sé.

Conclusión

Usted debe asumir que cualquier persona que es capaz de espiar a su conexión de WhatsApp es capaz de descifrar sus mensajes, dado suficiente esfuerzo. Debe tener en cuenta todas las conversaciones de WhatsApp anteriores comprometidas. No hay nada que un usuario WhatsApp puede hacer sobre esto pero, salvo que deje de usarlo hasta que los desarrolladores pueden actualizarlo.

Hay muchas trampas en el desarrollo de un protocolo de encriptación de streaming. Teniendo en cuenta que no saben cómo usar un xorcorrectamente, tal vez los desarrolladores de WhatsApp deben dejar de tratar de hacerlo por sí mismos y aceptar la solución que se ha revisado, actualizado y fijo durante más de 15 años, como TLS.

Edit: He añadido un nuevo post que demostrates que al menos los clientes oficiales de Android y Nokia S60 son vulnerables: https://blog.thijsalkema.de/blog/2013/10/08/piercing-through-whatsapps-encryption-2 / .

Apéndice: Prueba de Concepto

La siguiente es una secuencia de comandos de Python que puede interceptar mensajes a WhatsApp y que trata de descifrar los mensajes entrantes al adivinar todos los mensajes salientes. Utiliza la biblioteca WhatsApp WhatsPoke para el analizador FunXMPP.

Esto no funciona para el cliente oficial de WhatsApp. Asume los registros del cliente y sólo envía pings al servidor. Esto fue probada usando yowsup-cli-l-d-c config-k de https://github.com/tgalal/yowsup . Para utilizarlo con el cliente oficial, que tendría que averiguar qué mensajes salientes del cliente real envía y lidiar con el hecho de que podrían contener datos que no es tan fácil de predecir, o incluso algo más inteligente que puede descifrar bytes en tanto secuencias utilizando el otro.

vea e mapa aqui

Desde oler un inicio de sesión , todos los mensajes son mensajes entrantes desencriptados usando información sobre los mensajes salientes.

 

 WhatsApp , 

Tag(s) : #internet