whatsapp-phishing o cómo robar la sesión de un usuario de WhatsApp Web

Desde 2015 podemos usar WhatsApp Web mediante un navegador previamente “pareado” con nuestro móvil. Esto aumenta la usabilidad del popular chat pero también abre una vía más para que un tercero malintencionado intercepte nuestra comunicación (MiTM) y secuestre nuestra sesión.

Resumiendo el proceso de login con WhatsApp Web, el Servidor envía un código QR al navegador del usuario, el cual debe ser escaneado por la aplicación del teléfono para que verifique el login contra el servidor. Si es válido el servidor enviará el token correspondiente directamente al navegador:

Si os fijáis en el esquema anterior, el vector de ataque podría ser perfectamente un escenario típico de phising. El atacante sólo tiene que interceptar el código QR y presentárselo a la víctima mediante una página falsa, de tal manera que cuando lo escanee con el móvil y se valide, también recibirá el token que le permitirá autenticarse en WhatsApp Web:


Por seguridad, WhatsApp no muestra un código QR estático si no que el mismo va cambiando cada pocos segundos, algo que solventa perfectamente la herramienta que veremos a continuación capturándolo continuamente mediante scripting y enviándolo a la víctima mediante websockets.

Se trata de ‘whatsapp-phishing’ del alemán Martin Wagner (Mawalu) a la que empezaremos a echarle un vistazo, ya sabéis, siempre con propósitos educativos:

Funcionamiento

La herramienta utiliza selenium para obtener los códigos QR y express.js + socket.io para mostrarlos en una página aparte. Su funcionamiento es el siguiente:

- El programa inicia un servidor http y socket.io.
- Si un nuevo cliente se conecta a socket.io, la aplicación realiza una solicitud a una instancia de selenium para iniciar un nuevo navegador y conectarse a web.whatsapp.com.
- Posteriormente se obtienen los datos del código QR y los envia al cliente a través de la conexión websocket.
- El javascript del cliente entonces muestra el código QR al usuario.
- Si la víctima explora el código con su teléfono, el document.cookie y localStorage del navegador de selenium se descargan en un archivo en la máquina del atacante.
- Los datos adquiridos se pueden utilizar para iniciar sesión en la cuenta de la víctima utilizando cualquier navegador.

Limitaciones

- El usuario verá el navegador adicional cuando enumere sus dispositivos autenticados en Web Whatsapp.
- La víctima recibirá una advertencia si un navegador adicional se registra en el cliente web mientras está utilizando Whatsapp Web.
- Sigue siendo un ataque de ingeniería social: la víctima tiene que ser engañada para permitir el acceso.

Instalación

- Descarga el jar del servidor standalone de selenium e instala Firefox si todavía no lo tienes
- Ejecuta lo siguiente en el terminal:
java -jar selenium-server.jar
# new terminal
git clone https://github.com/Mawalu/whatsapp-phishing.git
cd whatsapp-phishing
npm install
node index.js

Uso

- Abre el navegador y visita a http://localhost:8080
- Inicia Whatsapp en el teléfono, ve a Menú> Whatsapp Web y escanea el código QR desde el navegador.
- Copia el contenido del archivo de secrets recién creado
- Abre web.whatsapp.com. (Mira que ya no estés loggeado, quizás lo mejor es usar el modo de incógnito)
- Abre la consola de desarrollo
- Introduce el código siguiente:
> var t = CONTENT_OF_YOUR_SECRETS_FILE
> function login(token) {Object.keys(token.s).forEach(function (key) {localStorage.setItem(key, token.s[key])}); token.c = token.c.split(';'); token.c.forEach(function(cookie) {document.cookie = cookie; });}
> login(t)

- Recarga la página
- Debes poder iniciar sesión suplantando a la persona que escaneó el código QR

 Y lo mejor, el código está disponible en Github: https://github.com/Mawalu/whatsapp-phishing

Comentarios

  1. Wauuu, increíble, de esto sí que no sabía nada, pero me asusta un poco la verdad la facilidad con la que se puede ser pishing desde WhatsApp Web, ahora mismo estaba leyendo este blog, wasapmovil.com y estaba leyendo sobre la seguridad en WhatsApp; pero leyendo este artículo ya me queda claro cuál es su nivel de seguridad... :( Muchas gracias por la información. Saludos.

    ResponderEliminar
  2. ¿Solo suplanta la cuenta o se puede tener las dos abiertas al mismo tiempo?

    ResponderEliminar

Publicar un comentario