
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
RQR_012_005_00028.hex 또는 유사한 이름의 Logitech 펌웨어 이미지를 다운로드하여 압축을 해제하세요. 그런 다음 다음 명령을 실행하여 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+ 브레이크아웃 |
|---|---|---|
| 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) 무차별 모드 장치 탐색 도구로, 채널 목록을 스캔하고 디코딩된 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 브레이크아웃 보드 중 하나는 ~300kHz의 주파수 오프셋이 있어 인접한 두 채널에서 패킷을 수신했습니다.
이 스크립트는 트랜시버가 전달된 첫 번째 채널에서 톤을 전송하도록 합니다.
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