15 mar 2017

QRLJacking: Técnica con la que los malos roban sesiones de WhatsApp a través de QR Code

Recientemente en María Pita Defcon, evento celebrado en A Coruña los días 9 y 10 de Marzo, tuve el placer de ir de ponente. En este evento hablé de la evolución de las estafas y los engaños, como por ejemplo el phishing, durante los últimos 20 años. Una de las partes, quizá, más chulas fue la exposición del QRLJacking sobre WhatsApp y cómo pueden robarte las sesiones y la información asociada: contactos, conversaciones, etcétera.

La ingeniería social es una rama muy antigua de la seguridad informática. El juego del gato y del ratón en el que las víctimas deben estar espabiladas para no caer en la trampa. Hoy queremos hablar de QRLJacking, una técnica que permite, mediante el uso del QR Code, llevar a cabo ataques que pongan en ventaja al atacante. Como ejemplo presentamos al servicio más famoso que hace uso del QR Code, WhatsApp. WhatsApp tiene la opción de ser utilizado a través de su aplicación web WhatsApp Web. Antes de nada, decir que el artículo es totalmente educativo y divulgativo. No nos hacemos responsables de un mal uso de esta información.

La gente de OWASP ha publicado una herramienta denominada QRLJacking, la cual permite al auditor llevar a cabo este tipo de pruebas de forma sencilla y directa. ¿En qué consiste este tipo de pruebas?

El esquema es sencillo. En primer lugar, se debe configurar un servidor web dónde almacenar un sitio web falso y el QR Code con el que se quiere engañar a la víctima. De alguna forma, lograr que la víctima visite dicho sitio web falso y que lea el QR Code con el dispositivo móvil. A partir de dicho momento, el atacante tendrá todo lo necesario para obtener el privilegio. En el caso de WhatsApp, los atacantes buscan mostrar un QR Code de WhatsApp Web a la víctima y, mediante el engaño de ésta, obtener la sesión de WhatsApp de la víctima.


Montando lo necesario

En primer lugar, se necesita bajar los ficheros de QRLJacking, lo cual puede ser llevado a cabo desde Github. Como se indica en el propio Github, existen dos partes diferentes en la configuración del ataque: la parte client side y la parte server side.

La parte server side necesita que se suba el fichero qrHandler.php a un servidor web. Este fichero es el encargado de transformar el QR Code que se capturará de WhatsApp a base64. El fichero PHP devuelve un fichero JPG con el QR Code.

Además, debemos utilizar la imaginación de cada uno para “convencer” al usuario de que el QR Code que se le mostrará en una web preparada debe ser leído con su aplicación de WhatsApp. Para ejemplificar esto, crearemos una web dónde se informe al usuario de que hay un premio y que para participar debe leer el QR Code con la aplicación de WhatsApp.

La parte client side es la parte más “Javascript”. Necesitamos realizar varias acciones en nuestro navegador para poder capturar el QR Code de WhatsApp y enviarlo al fichero PHP que se encuentra en la parte server side, explicada anteriormente. ¿Qué hay que configurar en nuestro Firefox
  • En primer lugar, hay que escribir en la barra de direcciones “about:config” para acceder a las configuraciones del navegador. Hay que buscar la directiva “security.csp.enable” y deshabilitarla.
  • Después, utilizando el add-on Greasemonkey hay que cargar el fichero WhatsAppQRJackingModule.js. Este plugin de Firefox se encarga de inyectar el código JS necesario para extraer el QR Code del sitio web de WhatsApp Web y enviarlo al fichero PHP qrHandler.php, que se encuentra en el servidor web. Luego se genera el fichero JPG con la imagen del QR Code extraído y el sitio web falso podría utilizar dicho QR Code.
  • Por último, se debe acceder al sitio web de WhatsApp Web desde nuestro propio navegador. Se llevará a cabo todo el proceso, explicado anteriormente, y si el proceso de ingeniería social es correcto, se obtendrá la sesión de WhatsApp Web de un usuario.
Dame tu sesión de WhatsApp Web

La web de WhatsApp Web genera códigos QR cada ‘x’ tiempo, por lo que el código JS inyectado por el plugin va consultando cada ‘x’ tiempo para ir extrayendo el código QR y generar el proceso. A continuación, se muestra un QR Code válido en la web de WhatsApp Web.

En este instante el plugin de Firefox Greasemonkey captura el QR Code y lo envía al servidor dónde se haya configurado. Para esta prueba de concepto, el base64 del QR Code se envía a la dirección IP del atacante, al fichero QRHandler.php, el cual generará el fichero JPG con la imagen del QR Code.

Ahora llega el momento de ver cómo un atacante puede obrar para que la víctima lea el QR Code con su móvil. Para ello, éste puede hacer un phishing clásico en el que se indique que se ha ganado un premio, quizá suscripción infinita a WhatsApp. Esto ya cae en la imaginación de cada uno. El sitio web que se presenta a continuación refresca cada ‘x’ tiempo el QR Code. Nadie da duros a pesetas, es algo que tenemos que tener siempre en la cabeza. Si nos toca un premio en Internet, desconfiemos.


Si la víctima cae en este tipo de engaño, el atacante recibe la sesión de WhatsApp en su navegador web. Es decir, en el mismo sitio dónde el plugin de Firefox está inyectando el código JS para capturar el QR Code original de WhatsApp.


Por último, decir que existe otro vector que el ataque de Man in the Middle en una red de área local. Con este ataque un atacante podría lograr inyectar el QR Code en páginas legítimas, realizando un ataque, quizás, más real. Sea como sea, interesante prueba de concepto que nos ayuda a ver lo fácil que puede ser, en algunas ocasiones, que caigamos ante las múltiples amenazas que tiene Internet. La ingeniería social sigue avanzando y mejorando ante las nuevas tecnologías que van apareciendo, por lo que la concienciación y el buen uso de éstas es algo vital para estar un poco más seguro en la red.

No hay comentarios:

Publicar un comentario