
Ferramentas de pesquisa para vulnerabilidades MouseJack em dispositivos sem fio nRF24L01, incluindo descoberta de dispositivos, captura de pacotes, mapeamento de rede e gravação de firmware para testes de segurança.
Para informações sobre as vulnerabilidades MouseJack, visite mousejack.com.
Instale as dependências no 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
O seguinte hardware foi testado e é conhecido por funcionar.
git submodule init
git submodule update
cd nrf-research-firmware
make
Os chips nRF24LU1+ vêm com um bootloader programado de fábrica que ocupa os 2KB superiores da memória flash. O firmware CrazyRadio e o firmware de pesquisa RFStorm suportam comandos USB para entrar no bootloader Nordic.
Dongles e placas de desenvolvimento podem ser programados via USB se estiverem executando um dos seguintes firmwares:
Para gravar o firmware via USB:
cd nrf-research-firmware
sudo make install
Os dongles Unifying mais comuns são baseados no nRF24LU1+, mas alguns usam chips da Texas Instruments. Este firmware é suportado apenas nas variantes nRF24LU1+, que possuem número de modelo C-U0007. O script de gravação detectará automaticamente qual tipo de dongle está conectado e só tentará gravar as variantes nRF24LU1+.
Para gravar o firmware via USB em um dongle Logitech Unifying:
cd nrf-research-firmware
sudo make logitech_install
Baixe e extraia a imagem do firmware Logitech, que será nomeada RQR_012_005_00028.hex ou similar. Em seguida, execute o seguinte comando para gravar o firmware Logitech no dongle:
cd nrf-research-firmware
sudo ./prog/usb-flasher/logitech-usb-restore.py [caminho-para-firmware.hex]
Se o seu dongle ou placa de desenvolvimento estiver bloqueado (bricked), você pode alternativamente programá-lo via SPI usando um Teensy.
Isso só foi testado com um Teensy 3.1/3.2, mas provavelmente funcionará com outras variantes Arduino também.
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
Ferramenta de descoberta de dispositivos em modo pseudo-promíscuo, que varre uma lista de canais e imprime pacotes 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
Varra por dispositivos nos canais 1-5
./nrf24-scanner.py -c {1..5}
Varra por dispositivos com um endereço começando em 0xA9 em todos os canais
cd nrf-research-firmware
./nrf24-scanner.py -p A9
Ferramenta de sniffer que segue um dispositivo, que rastreia um dispositivo nRF24 específico enquanto ele salta de canal, e imprime pacotes Enhanced Shockburst decodificados do 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 pacotes do endereço 61:49:66:82:03 em todos os canais
cd nrf-research-firmware
./nrf24-sniffer.py -a 61:49:66:82:03
Mapeador de rede em estrela, que tenta descobrir os endereços ativos em uma rede em estrela alterando o último byte do endereço fornecido e enviando ping para cada um dos 256 endereços possíveis em cada canal da lista de canais.
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]
Mapeie a rede em estrela à qual o endereço 61:49:66:82:03 pertence
cd nrf-research-firmware
./nrf24-network-mapper.py -a 61:49:66:82:03
Os chips nRF24LU1+ incluem um mecanismo de teste para transmitir um tom contínuo, cuja frequência pode ser verificada se você tiver acesso a um SDR. Existe a possibilidade de deslocamentos de frequência entre dispositivos causarem comportamento inesperado. Por exemplo, uma das placas de desenvolvimento SparkFun testadas tinha um deslocamento de frequência de ~300kHz, o que fez com que ela recebesse pacotes em dois canais adjacentes.
Este script fará o transceptor transmitir um tom no primeiro canal passado como argumento.
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 um tom contínuo em 2405MHz
cd nrf-research-firmware
./nrf24-continuous-tone-test.py -c 5