
Инструменты для исследования уязвимостей MouseJack в беспроводных устройствах nRF24L01, включая обнаружение устройств, перехват пакетов, построение карты сети и прошивку встроенного ПО для тестирования безопасности.
За информацией об уязвимостях MouseJack посетите mousejack.com.
Установка зависимостей в 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
Следующее оборудование было протестировано и, как известно, работает.
git submodule init
git submodule update
cd nrf-research-firmware
make
Чипы nRF24LU1+ поставляются с заводским загрузчиком, занимающим верхние 2 КБ флэш-памяти. Прошивка CrazyRadio и исследовательская прошивка RFStorm поддерживают USB-команды для входа в загрузчик Nordic.
Донглы и платы расширения можно программировать через USB, если на них установлена одна из следующих прошивок:
Для прошивки через USB:
cd nrf-research-firmware
sudo make install
Наиболее распространённые донглы Unifying основаны на nRF24LU1+, но некоторые используют чипы от Texas Instruments. Эта прошивка поддерживается только на вариантах nRF24LU1+ с номером модели C-U0007. Скрипт прошивки автоматически определит тип подключённого донгла и попытается прошить только варианты nRF24LU1+.
Для прошивки донгла Logitech Unifying через USB:
cd nrf-research-firmware
sudo make logitech_install
Скачайте и распакуйте образ прошивки Logitech, который будет называться RQR_012_005_00028.hex или похожим образом. Затем выполните следующую команду для прошивки донгла оригинальной прошивкой Logitech:
cd nrf-research-firmware
sudo ./prog/usb-flasher/logitech-usb-restore.py [путь-к-прошивке.hex]
Если ваш донгл или плата расширения «окирпичены», вы можете альтернативно запрограммировать их через SPI с помощью Teensy.
Это было протестировано только с Teensy 3.1/3.2, но, вероятно, будет работать и с другими вариантами Arduino.
cd nrf-research-firmware/prog
platformio run --project-dir teensy-flasher --target upload
| Teensy | CrazyRadio PA | Плата расширения 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
Инструмент обнаружения устройств в псевдо-всеядном режиме, который сканирует список каналов и выводит декодированные пакеты Enhanced Shockburst.
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
Сканирование устройств на каналах 1–5
./nrf24-scanner.py -c {1..5}
Сканирование устройств с адресом, начинающимся с 0xA9, на всех каналах
cd nrf-research-firmware
./nrf24-scanner.py -p A9
Сниффер, отслеживающий устройство, который следует за конкретным устройством nRF24 при его перескоках между каналами и выводит декодированные пакеты Enhanced Shockburst от этого устройства.
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]
Перехват пакетов с адреса 61:49:66:82:03 на всех каналах
cd nrf-research-firmware
./nrf24-sniffer.py -a 61:49:66:82:03
Картограф звёздной сети, который пытается обнаружить активные адреса в звёздной сети, изменяя последний байт заданного адреса и отправляя пинг на каждый из 256 возможных адресов на каждом канале из списка каналов.
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]
Построение карты звёздной сети, к которой принадлежит адрес 61:49:66:82:03
cd nrf-research-firmware
./nrf24-network-mapper.py -a 61:49:66:82:03
Чипы nRF24LU1+ включают тестовый механизм для передачи непрерывного тона, частоту которого можно проверить при наличии SDR. Существует вероятность, что частотные смещения между устройствами могут вызывать неожиданное поведение. Например, одна из протестированных плат расширения SparkFun имела частотное смещение ~300 кГц, из-за чего она принимала пакеты на двух соседних каналах.
Этот скрипт заставит приёмопередатчик передавать тон на первом переданном канале.
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)
Передача непрерывного тона на частоте 2405 МГц
cd nrf-research-firmware
./nrf24-continuous-tone-test.py -c 5