
Herramientas de investigación para vulnerabilidades MouseJack en dispositivos inalámbricos nRF24L01, incluyendo descubrimiento de dispositivos, captura de paquetes, mapeo de redes y flasheo de firmware para pruebas de seguridad.
Para obtener información sobre las vulnerabilidades MouseJack, visite mousejack.com.
Instale las dependencias en Ubuntu:
sudo apt-get install sdcc binutils python python-pip
sudo pip install -U pip
sudo pip install -U -I pyusb
sudo pip install -U platformio
Se ha probado el siguiente hardware y se sabe que funciona.
git submodule init
git submodule update
cd nrf-research-firmware
make
Los chips nRF24LU1+ vienen con un bootloader programado de fábrica que ocupa los 2KB superiores de la memoria flash. El firmware CrazyRadio y el firmware de investigación RFStorm admiten comandos USB para entrar en el bootloader de Nordic.
Los dongles y las placas de desarrollo se pueden programar por USB si ejecutan uno de los siguientes firmwares:
Para flashear el firmware por USB:
cd nrf-research-firmware
sudo make install
Los dongles Unifying más comunes están basados en el nRF24LU1+, pero algunos usan chips de Texas Instruments. Este firmware solo es compatible con las variantes nRF24LU1+, que tienen un número de modelo C-U0007. El script de flasheo detectará automáticamente qué tipo de dongle está conectado y solo intentará flashear las variantes nRF24LU1+.
Para flashear el firmware por USB en un dongle Logitech Unifying:
cd nrf-research-firmware
sudo make logitech_install
Descargue y extraiga la imagen del firmware de Logitech, que se llamará RQR_012_005_00028.hex o similar. Luego, ejecute el siguiente comando para flashear el firmware de Logitech en el dongle:
cd nrf-research-firmware
sudo ./prog/usb-flasher/logitech-usb-restore.py [ruta-al-firmware.hex]
Si su dongle o placa de desarrollo está bloqueado (bricked), también puede programarlo por SPI usando un Teensy.
Esto solo se ha probado con un Teensy 3.1/3.2, pero es probable que funcione con otras variantes de Arduino.
cd nrf-research-firmware/prog
platformio run --project-dir teensy-flasher --target upload
| Teensy | CrazyRadio PA | Placa de desarrollo Sparkfun nRF24LU1+ |
|---|---|---|
| GND | 9 | GND |
| 8 | 3 | RESET |
| 9 | 2 | PROG |
| 10 | 10 | P0.3 |
| 11 | 6 | P0.1 |
| 12 | 8 | P0.2 |
| 13 | 4 | P0.0 |
| 3.3V | 5 | VIN |
cd nrf-research-firmware
sudo make spi_install
Herramienta de descubrimiento de dispositivos en modo pseudo-promiscuo, que recorre una lista de canales e imprime paquetes Enhanced Shockburst decodificados.
usage: ./nrf24-scanner.py [-h] [-c N [N ...]] [-v] [-l] [-p PREFIX] [-d DWELL]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-p PREFIX, --prefix PREFIX Promiscuous mode address prefix
-d DWELL, --dwell DWELL Dwell time per channel, in milliseconds
Escanee dispositivos en los canales 1-5
./nrf24-scanner.py -c {1..5}
Escanee dispositivos con una dirección que comience en 0xA9 en todos los canales
cd nrf-research-firmware
./nrf24-scanner.py -p A9
Sniffer de seguimiento de dispositivos, que sigue a un dispositivo nRF24 específico mientras salta de canal, e imprime paquetes Enhanced Shockburst decodificados del dispositivo.
usage: ./nrf24-sniffer.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS [-t TIMEOUT] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Address to sniff, following as it changes channels
-t TIMEOUT, --timeout TIMEOUT Channel timeout, in milliseconds
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
Capture paquetes de la dirección 61:49:66:82:03 en todos los canales
cd nrf-research-firmware
./nrf24-sniffer.py -a 61:49:66:82:03
Mapeador de redes en estrella, que intenta descubrir las direcciones activas en una red en estrella cambiando el último byte de la dirección dada y haciendo ping a cada una de las 256 direcciones posibles en cada canal de la lista de canales.
usage: ./nrf24-network-mapper.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS [-p PASSES] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Known address
-p PASSES, --passes PASSES Number of passes (default 2)
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
Mapee la red en estrella a la que pertenece la dirección 61:49:66:82:03
cd nrf-research-firmware
./nrf24-network-mapper.py -a 61:49:66:82:03
Los chips nRF24LU1+ incluyen un mecanismo de prueba para transmitir un tono continuo, cuya frecuencia se puede verificar si tiene acceso a un SDR. Existe la posibilidad de que los desfases de frecuencia entre dispositivos causen comportamientos inesperados. Por ejemplo, una de las placas de desarrollo SparkFun que se probó tenía un desfase de frecuencia de ~300kHz, lo que provocaba que recibiera paquetes en dos canales adyacentes.
Este script hará que el transceptor transmita un tono en el primer canal que se le pase.
usage: ./nrf24-continuous-tone-test.py [-h] [-c N [N ...]] [-v] [-l]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
Transmita un tono continuo a 2405MHz
cd nrf-research-firmware
./nrf24-continuous-tone-test.py -c 5