
nRF24L01ワイヤレスデバイスにおけるMouseJack脆弱性の調査ツール。デバイス発見、パケットスニッフィング、ネットワークマッピング、セキュリティテスト用のファームウェア書き込み機能を含む。
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+ チップには、フラッシュメモリの最上位 2KB を占める工場出荷時プログラム済みブートローダーが搭載されています。CrazyRadio ファームウェアと RFStorm リサーチファームウェアは、Nordic ブートローダーに入るための USB コマンドをサポートしています。
以下のファームウェアのいずれかを実行しているドングルおよびブレイクアウトボードは、USB 経由でプログラムできます:
USB 経由でファームウェアを書き込む場合:
cd nrf-research-firmware
sudo make install
最も一般的な Unifying ドングルは nRF24LU1+ ベースですが、一部は Texas Instruments のチップを使用しています。 このファームウェアは、モデル番号が C-U0007 の nRF24LU1+ バリアントのみでサポートされています。書き込み スクリプトは、接続されているドングルの種類を自動的に検出し、nRF24LU1+ バリアントのみに書き込みを試みます。
USB 経由で Logitech Unifying ドングルにファームウェアを書き込む場合:
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 [path-to-firmware.hex]
ドングルまたはブレイクアウトボードがブリックした場合は、Teensy を使用して SPI 経由でプログラムすることもできます。
これは Teensy 3.1/3.2 でのみテストされていますが、他の 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
擬似プロミスキャスモードのデバイス発見ツールです。チャンネルリストをスイープし、デコードされた 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 個の可能なアドレスそれぞれに ping を送信することで、スター型ネットワーク内のアクティブなアドレスの発見を試みます。
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 ブレイクアウトボードの 1 つには約 300kHz の周波数オフセットがあり、隣接する 2 つのチャンネルでパケットを受信していました。
このスクリプトは、渡された最初のチャンネルでトランシーバーにトーンを送信させます。
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)
2405MHz で連続トーンを送信する場合
cd nrf-research-firmware
./nrf24-continuous-tone-test.py -c 5