whatsapp-phishing 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