
Forschungswerkzeuge für MouseJack-Schwachstellen in nRF24L01-Drahtlosgeräten, einschließlich Geräteerkennung, Paket-Sniffing, Netzwerk-Mapping und Firmware-Flashen für Sicherheitstests.
Informationen zu den MouseJack-Schwachstellen finden Sie unter mousejack.com.
Abhängigkeiten unter Ubuntu installieren:
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
Die folgende Hardware wurde getestet und ist bekanntermaßen funktionsfähig.
git submodule init
git submodule update
cd nrf-research-firmware
make
nRF24LU1+-Chips verfügen über einen werkseitig programmierten Bootloader, der die obersten 2 KB des Flash-Speichers belegt. Die CrazyRadio-Firmware und die RFStorm-Forschungsfirmware unterstützen USB-Befehle zum Aufrufen des Nordic-Bootloaders.
Dongles und Breakout-Boards können über USB programmiert werden, wenn sie eine der folgenden Firmwares ausführen:
Zum Flashen der Firmware über USB:
cd nrf-research-firmware
sudo make install
Die meisten gängigen Unifying-Dongles basieren auf dem nRF24LU1+, einige verwenden jedoch Chips von Texas Instruments. Diese Firmware wird nur auf den nRF24LU1+-Varianten unterstützt, die die Modellnummer C-U0007 haben. Das Flash-Skript erkennt automatisch, welcher Dongle-Typ angeschlossen ist, und versucht nur, die nRF24LU1+-Varianten zu flashen.
Zum Flashen der Firmware über USB auf einen Logitech-Unifying-Dongle:
cd nrf-research-firmware
sudo make logitech_install
Laden Sie das Logitech-Firmware-Image herunter und extrahieren Sie es. Es wird RQR_012_005_00028.hex oder ähnlich heißen. Führen Sie dann den folgenden Befehl aus, um die Logitech-Firmware auf den Dongle zu flashen:
cd nrf-research-firmware
sudo ./prog/usb-flasher/logitech-usb-restore.py [Pfad-zur-Firmware.hex]
Wenn Ihr Dongle oder Breakout-Board gebrickt ist, können Sie es alternativ über SPI mit einem Teensy programmieren.
Dies wurde nur mit einem Teensy 3.1/3.2 getestet, sollte aber wahrscheinlich auch mit anderen Arduino-Varianten funktionieren.
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
Pseudo-promiskuitives Geräteerkennungswerkzeug, das eine Liste von Kanälen durchläuft und dekodierte Enhanced-Shockburst-Pakete ausgibt.
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
Geräte auf den Kanälen 1-5 scannen
./nrf24-scanner.py -c {1..5}
Geräte mit einer Adresse, die mit 0xA9 beginnt, auf allen Kanälen scannen
cd nrf-research-firmware
./nrf24-scanner.py -p A9
Geräteverfolgender Sniffer, der einem bestimmten nRF24-Gerät beim Frequenzspringen folgt und dekodierte Enhanced-Shockburst-Pakete von dem Gerät ausgibt.
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]
Pakete von Adresse 61:49:66:82:03 auf allen Kanälen abfangen
cd nrf-research-firmware
./nrf24-sniffer.py -a 61:49:66:82:03
Sternnetzwerk-Mapper, der versucht, die aktiven Adressen in einem Sternnetzwerk zu ermitteln, indem er das letzte Byte der angegebenen Adresse ändert und jede der 256 möglichen Adressen auf jedem Kanal in der Kanalliste anpingt.
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]
Das Sternnetzwerk kartieren, zu dem Adresse 61:49:66:82:03 gehört
cd nrf-research-firmware
./nrf24-network-mapper.py -a 61:49:66:82:03
Die nRF24LU1+-Chips enthalten einen Testmechanismus zum Senden eines kontinuierlichen Tons, dessen Frequenz verifiziert werden kann, wenn Sie Zugriff auf einen SDR haben. Es besteht die Möglichkeit, dass Frequenzversätze zwischen Geräten unerwartetes Verhalten verursachen. Beispielsweise hatte eines der getesteten SparkFun-Breakout-Boards einen Frequenzversatz von ~300 kHz, wodurch es Pakete auf zwei benachbarten Kanälen empfing.
Dieses Skript veranlasst den Transceiver, einen Ton auf dem ersten übergebenen Kanal zu senden.
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)
Einen kontinuierlichen Ton bei 2405 MHz senden
cd nrf-research-firmware
./nrf24-continuous-tone-test.py -c 5