
Strumenti di ricerca per le vulnerabilità MouseJack nei dispositivi wireless nRF24L01, inclusi rilevamento dei dispositivi, sniffing dei pacchetti, mappatura della rete e flashing del firmware per test di sicurezza.
Per informazioni sulle vulnerabilità MouseJack, visita mousejack.com.
Installa le dipendenze su 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
Il seguente hardware è stato testato ed è noto per funzionare.
git submodule init
git submodule update
cd nrf-research-firmware
make
I chip nRF24LU1+ vengono forniti con un bootloader programmato in fabbrica che occupa i 2KB superiori della memoria flash. Il firmware CrazyRadio e il firmware di ricerca RFStorm supportano comandi USB per accedere al bootloader Nordic.
I dongle e le schede breakout possono essere programmati via USB se eseguono uno dei seguenti firmware:
Per eseguire il flash del firmware via USB:
cd nrf-research-firmware
sudo make install
I dongle Unifying più comuni sono basati sul nRF24LU1+, ma alcuni utilizzano chip di Texas Instruments. Questo firmware è supportato solo sulle varianti nRF24LU1+, che hanno un numero di modello C-U0007. Lo script di flashing rileverà automaticamente il tipo di dongle collegato e tenterà di eseguire il flash solo sulle varianti nRF24LU1+.
Per eseguire il flash del firmware via USB su un dongle Logitech Unifying:
cd nrf-research-firmware
sudo make logitech_install
Scarica ed estrai l'immagine del firmware Logitech, che sarà denominata RQR_012_005_00028.hex o simile. Quindi, esegui il seguente comando per eseguire il flash del firmware Logitech sul dongle:
cd nrf-research-firmware
sudo ./prog/usb-flasher/logitech-usb-restore.py [percorso-al-firmware.hex]
Se il tuo dongle o la tua scheda breakout è bricked, puoi in alternativa programmarlo via SPI utilizzando un Teensy.
Questo è stato testato solo con un Teensy 3.1/3.2, ma è probabile che funzioni anche con altre varianti Arduino.
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
Strumento di scoperta dispositivi in modalità pseudo-promiscua, che scansiona un elenco di canali e stampa i pacchetti Enhanced Shockburst decodificati.
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
Scansiona i dispositivi sui canali 1-5
./nrf24-scanner.py -c {1..5}
Scansiona i dispositivi con un indirizzo che inizia con 0xA9 su tutti i canali
cd nrf-research-firmware
./nrf24-scanner.py -p A9
Sniffer che segue il dispositivo, che segue uno specifico dispositivo nRF24 mentre salta tra i canali, e stampa i pacchetti Enhanced Shockburst decodificati dal 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]
Intercetta i pacchetti dall'indirizzo 61:49:66:82:03 su tutti i canali
cd nrf-research-firmware
./nrf24-sniffer.py -a 61:49:66:82:03
Mapper di rete a stella, che tenta di scoprire gli indirizzi attivi in una rete a stella modificando l'ultimo byte dell'indirizzo fornito e inviando un ping a ciascuno dei 256 possibili indirizzi su ogni canale nell'elenco dei canali.
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]
Mappa la rete a stella a cui appartiene l'indirizzo 61:49:66:82:03
cd nrf-research-firmware
./nrf24-network-mapper.py -a 61:49:66:82:03
I chip nRF24LU1+ includono un meccanismo di test per trasmettere un tono continuo, la cui frequenza può essere verificata se si ha accesso a un SDR. Esiste la possibilità che gli offset di frequenza tra i dispositivi causino comportamenti imprevisti. Ad esempio, una delle schede breakout SparkFun testate aveva un offset di frequenza di ~300kHz, che le causava la ricezione di pacchetti su due canali adiacenti.
Questo script farà trasmettere al ricetrasmettitore un tono sul primo canale passato come argomento.
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)
Trasmette un tono continuo a 2405MHz
cd nrf-research-firmware
./nrf24-continuous-tone-test.py -c 5