MouseJack (o por qué no usar ratones inálambricos)

(N.d.E. Por un error hemos publicado una entrada que publicamos hace unos meses. La que sigue sí es nueva :)

Hace ya algún tiempo el equipo de investigación de Bastille informó que los ratones y teclados inalámbricos de diferentes marcas están afectados por vulnerabilidades relacionadas con la transmisión de datos.

 


Bastille – Mousejack Explainer Video

Aunque el vídeo sea un poco peliculero, al más puro estilo Mr. Robot, es de tener un poco de cabeza que si las conexiones inalámbricas como Wi-Fi o Bluetooth son susceptibles de vulnerabilidades que permitan interceptar el tráfico de red, ¿por que no podrían serlo otro tipo de comunicaciones inalámbricas como los ratones y teclados inalámbricos?

Obviamente no todo es tan bonito como parece en ese video. Para empezar este tipo de ataque solo puede llevarse a cabo sobre dispositivos que NO hagan uso de Bluetooth (MagicMouse está a salvo, Apple fanboys) para establecer la comunicación. Continuando con los requisitos para poder explotar la “vulnerabilidad”, solo algunas marcas, aunque bastante extendidas, están afectadas. El mayor de los inconvenientes es que es necesario tener mapeadas las pulsaciones de los teclados de las marcas afectadas. Si, de los teclados, no de los ratones.

Para ello haciendo uso de un dongle usb con el chip nRF24LU1+, y previa modificación del firmware de este, habrá que analizar las comunicaciones que se realizan entre el teclado y el receptor usb de este.

En este caso se ha usado el dispositivo USB ideado para controlar el Dron CrazyFlie, ya que es facilmente modificable y dispone de un conector de antena externa para aumentar la recepción.

Esto es relativamente sencillo haciendo uso del firmware nrf-research-firmware y las herramientas desarrolladas por el propio equipo de Bastille.

Haciendo uso del scanner es posible identificar si en las proximidades (dependiendo de la antena y entorno será más o menos) existe algún dispositivo que se corresponda con este tipo de comunicaciones, lo que no significa que sea vulnerable.

sudo ./nrf24-scanner.py -l

El parámetro -l se corresponde con el LNA, lo que es únicamente posible haciendo uso del *Crazyflie Radio USB*. Durante nuestras pruebas hemos identificado un dispositivo, cuya dirección (algo así como la MAC) es “34:XX:XX:XX:07” (los valores intermedios han sido omitidos por seguridad). El siguiente paso es capturar, al más puro estilo tcpdump, que es lo que se envía, para ello haremos uso de nrf24-sniffer.py y se le indicará la dirección a analizar.

sudo ./nrf24-sniffer.py -l -a 34:XX:XX:XX:07

Por pantalla aparecerán resultados similares a lo siguiente:

00:D3:D6:12:12:EE:CF:52:15:D0:85:CB:7F:AA:00:00:00:00:00:00:00:C6
00:4F:00:00:55:00:00:00:00:5C
00:40:00:55:6B
00:D3:12:66:15:AE:73:6F:6F:C8:85:CB:7F:AB:00:00:00:00:00:00:00:5F
00:4F:00:00:55:00:00:00:00:5C
00:4F:00:03:70:00:00:00:00:3E
00:D3:6A:8B:16:FC:DC:C8:0B:AA:85:CB:7F:AC:00:00:00:00:00:00:00:52
00:4F:00:00:55:00:00:00:00:5C
00:40:00:55:6B
00:D3:B6:41:B4:A2:4D:16:5D:E8:85:CB:7F:AD:00:00:00:00:00:00:00:BC
00:4F:00:00:55:00:00:00:00:5C
00:4F:00:03:70:00:00:00:00:3E
00:D3:0F:C2:42:7C:2A:0E:4D:46:85:CB:7F:AE:00:00:00:00:00:00:00:56
00:4F:00:00:55:00:00:00:00:5C
00:40:00:55:6B
...

Los mensajes cortos (**00:40:00:55:6B**) se corresponden con comprobaciones que se realizan entre el teclado, en este caso, y el receptor USB, a modo de keepalive. Los de mayor longitud, compuestos por 22 octetos, corresponden con pulsaciones de teclas. En el caso de los movimientos del ratón los mensajes son más cortos, únicamente de 10 octetos.

En este punto lo que se tiene es un bonito keylogger, para el que solo se requiere estar relativamente próximo a la víctima. De este modo es posible replicar las pulsaciones que ha realizado el target sobre otro receptor compatible, con lo que obtenemos así en la pantalla la combinación de teclas pulsada. Se puede comprobar, si se dispone del hardware usado en este post, que cada pulsación de tecla envía dos mensajes (22 octetos) distintos y al volver al pulsar esa misma tecla esos valores cambian de nuevo. Esto no es así al hacer click con el ratón, donde los valores son siempre los mismos.

Que los valores obtenidos al pulsar la misma tecla sean diferentes, no implica que los mensajes enviados sean de un solo uso. Durante el transcurso de las pruebas, se ha comprobado que estos pueden ser reutilizados para el siguiente propósito.

Enviar “pulsaciones” de teclas, como si de un teclado real se tratase, al receptor del teclado/ratón. De este modo es posible preparar ataques de tipo HID, similar a los que se realizan con un Rubber Ducky, con la excepción de que es necesario tener un enlace establecido entre nuestro dispositivo emisor y el receptor del teclado.

Para ello, es necesario usar otras herramientas, en realidad un Fork de las de Bastille, desarrolladas por iamckn, concretamente hay que hacer uso de la herramienta `nrf24-replay.py` la cual permite enviar “pulsaciones” a la víctima. Codificando cada uno de los carácteres tal y como hace el teclado, de ahí que sea necesario interceptar el tráfico de la misma marca de teclado, es posible generar una serie de ordenes que puedan descargar contenido malicioso en el equipo de la víctima.

sudo ./nrf24-replay.py -l -a 34:XX:XX:XX:07 -i keylogs/dropper.log

Donde en dropper.log se encuentran codificados los comandos para descargar contenido malicioso en el equipo de la víctima.

Lo curioso del caso es que los mensajes del teclado pueden ser enviados a un receptor como si de un ratón se tratasen, por lo que, si se ha montado el fichero con la codificación de pulsaciones, es posible enviar una secuencia de pulsaciones de teclas a un equipo que únicamente disponga de un ratón inalámbrico conectado. Algo relativamente común, ya que mucha gente hace uso de estos dispositivos cuando trabajan con su ordenador portátil.

Aunque lo explicado suena a película de juanquers malvados que se infiltran en la NSA con un trozo de papel de aluminio, esto es algo a tener muy en cuenta. Este tipo de ataque, por ejemplo, podría ser usado por un insider para obtener las credenciales de altos cargos.

(NOTA: Para las pruebas realizadas se ha usado el conjunto de teclado y ratón inalámbricos MK220 de Logitech, así como el ratón Dell WM311, fabricado por Logitech).