
Outils de recherche pour les vulnérabilités MouseJack dans les dispositifs sans fil nRF24L01, incluant la découverte d'appareils, la capture de paquets, la cartographie réseau et le flashage de firmware pour les tests de sécurité.
Pour plus d'informations sur les vulnérabilités MouseJack, veuillez consulter mousejack.com.
Installer les dépendances sur 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
Le matériel suivant a été testé et est connu pour fonctionner.
git submodule init
git submodule update
cd nrf-research-firmware
make
Les puces nRF24LU1+ sont livrées avec un bootloader programmé en usine occupant les 2 Ko supérieurs de la mémoire flash. Le firmware CrazyRadio et le firmware de recherche RFStorm prennent en charge les commandes USB permettant d'entrer dans le bootloader Nordic.
Les dongles et les cartes de développement peuvent être programmés via USB s'ils exécutent l'un des firmwares suivants :
Pour flasher le firmware via USB :
cd nrf-research-firmware
sudo make install
Les dongles Unifying les plus courants sont basés sur le nRF24LU1+, mais certains utilisent des puces de Texas Instruments. Ce firmware n'est pris en charge que sur les variantes nRF24LU1+, qui portent le numéro de modèle C-U0007. Le script de flashage détectera automatiquement le type de dongle branché et ne tentera de flasher que les variantes nRF24LU1+.
Pour flasher le firmware via USB sur un dongle Logitech Unifying :
cd nrf-research-firmware
sudo make logitech_install
Téléchargez et extrayez l'image du firmware Logitech, qui sera nommée RQR_012_005_00028.hex ou similaire. Ensuite, exécutez la commande suivante pour flasher le firmware Logitech sur le dongle :
cd nrf-research-firmware
sudo ./prog/usb-flasher/logitech-usb-restore.py [chemin-vers-firmware.hex]
Si votre dongle ou votre carte de développement est brické, vous pouvez également le programmer via SPI à l'aide d'un Teensy.
Cela n'a été testé qu'avec un Teensy 3.1/3.2, mais cela devrait probablement fonctionner avec d'autres variantes Arduino également.
cd nrf-research-firmware/prog
platformio run --project-dir teensy-flasher --target upload
| Teensy | CrazyRadio PA | Sparkfun nRF24LU1+ Breakout |
|---|---|---|
| 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
Outil de découverte d'appareils en mode pseudo-promiscuité, qui balaie une liste de canaux et affiche les paquets Enhanced Shockburst décodés.
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
Rechercher des appareils sur les canaux 1 à 5
./nrf24-scanner.py -c {1..5}
Rechercher des appareils avec une adresse commençant par 0xA9 sur tous les canaux
cd nrf-research-firmware
./nrf24-scanner.py -p A9
Sniffer de suivi d'appareil, qui suit un appareil nRF24 spécifique pendant qu'il saute de canal en canal, et affiche les paquets Enhanced Shockburst décodés provenant de l'appareil.
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]
Renifler les paquets de l'adresse 61:49:66:82:03 sur tous les canaux
cd nrf-research-firmware
./nrf24-sniffer.py -a 61:49:66:82:03
Mappeur de réseau en étoile, qui tente de découvrir les adresses actives d'un réseau en étoile en modifiant le dernier octet de l'adresse donnée, puis en envoyant une requête ping à chacune des 256 adresses possibles sur chaque canal de la liste de canaux.
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]
Mapper le réseau en étoile auquel appartient l'adresse 61:49:66:82:03
cd nrf-research-firmware
./nrf24-network-mapper.py -a 61:49:66:82:03
Les puces nRF24LU1+ incluent un mécanisme de test permettant de transmettre une tonalité continue, dont la fréquence peut être vérifiée si vous avez accès à un SDR. Il existe un risque que des décalages de fréquence entre appareils provoquent un comportement inattendu. Par exemple, l'une des cartes de développement SparkFun testées présentait un décalage de fréquence d'environ 300 kHz, ce qui l'amenait à recevoir des paquets sur deux canaux adjacents.
Ce script fera transmettre à l'émetteur-récepteur une tonalité sur le premier canal passé en argument.
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)
Transmettre une tonalité continue à 2405 MHz
cd nrf-research-firmware
./nrf24-continuous-tone-test.py -c 5