btlejack

Wireless & RF ★ Рекомендуемый v2.1.1 · 18.11.2022 не обновлялся >2 лет

BLE Swiss-army knife: перехват, джамминг и угон Bluetooth Low Energy соединений. Работает с BBC Micro:Bit в роли снифферов. Позволяет перехватывать уже установленные BLE-соединения — уникальная возможность среди BLE-инструментов.

v2.1.1
18.11.2022 current
Добавлен 25.06.2026 · Обновлён 07.07.2026 · Wireless & RF
Установка
pip3 install btlejack
# Установить firmware на BBC Micro:Bit

# Скан активных BLE соединений:
btlejack -s

# Перехват соединения:
btlejack -c aa:bb:cc:dd:ee:ff

# Джамминг:
btlejack -j aa:bb:cc:dd:ee:ff
переведено ИИ

BtleJack: новый швейцарский нож для Bluetooth Low Energy

Btlejack предоставляет все необходимые инструменты для перехвата, глушения и перехвата управления устройствами Bluetooth Low Energy. Он использует одно или несколько устройств BBC Micro:Bit <http://microbit.org/> со специальной прошивкой. Вы также можете использовать сниффер Adafruit Bluefruit LE <https://www.adafruit.com/product/2269> или nRF51822 Eval Kit <https://www.waveshare.com/wiki/BLE400>_, так как добавлена поддержка этих устройств.

Текущая версия инструмента (2.0) поддерживает BLE 4.x и 5.x. Поддержка BLE 5.x ограничена, так как она работает только с 1Mbps Uncoded PHY и не поддерживает обновление карты каналов.

Требования

Вам нужна система на основе UNIX (например, Raspberry Pi). Если вы используете BBC Micro:Bit, вам понадобится от одного до трех устройств Micro:Bit (рекомендуется три) и по одному свободному USB-порту для каждого устройства. Потребление Micro:Bit довольно низкое, поэтому вы можете использовать один USB-порт и пассивный хаб для питания трех рекомендуемых устройств.

Если вы подключите 3 microbit одновременно к компьютеру, Btlejack сможет перехватывать данные на всех каналах рассылки и будет иметь гораздо больше шансов захватить запрос на соединение.

Как установить

Сначала установите клиентское ПО btlejack для Python3 с помощью Pip:

::

$ sudo pip3 install btlejack

Затем подключите устройство Micro:Bit к компьютеру с помощью USB-кабеля, смонтируйте связанное устройство массового хранения (точка монтирования должна содержать MICROBIT), и выполните следующую команду:

::

$ btlejack -i

Это запрограммирует каждое подключенное к компьютеру устройство Micro:Bit и подготовит их к использованию с Btlejack. Будет использоваться правильная версия прошивки для текущего клиентского ПО, поэтому настоятельно рекомендуется выполнять эту процедуру установки прошивки при каждом обновлении Btlejack.

Если вы используете сниффер Bluefruit LE или nRF51822 Eval Kit, то, пожалуйста, используйте внешний SWD-программатор для прошивки вашего устройства этой прошивкой <https://github.com/virtualabs/btlejack-firmware/raw/master/dist/btlejack-firmware-ble400.hex>_.

Оставьте устройства подключенными, и все готово!

ПРИМЕЧАНИЕ Это работает только с совместимыми с posix системами.

Как использовать Btlejack

Использовать Btlejack довольно просто. Btlejack может:

  • использовать различные устройства
  • перехватывать данные в существующем соединении BLE
  • перехватывать данные в новых соединениях BLE
  • глушить существующее соединение BLE
  • перехватывать управление существующим соединением BLE
  • экспортировать захваченные пакеты в различные форматы PCAP

Указание используемых устройств

Btlejack обычно пытается автоматически обнаружить и использовать подключенные совместимые устройства (пока только Micro:Bit), но поскольку прошивку можно изменить для работы с другими платами на базе nRF51822, он предоставляет специальную опцию для совместимости с этими устройствами.

Опция -d позволяет указать одно или несколько устройств для Btlejack. Обратите внимание, что эта опция отключит автоматическое обнаружение устройств, и вам следует добавить столько устройств, сколько вам может понадобиться:

::

$ btlejack -d /dev/ttyACM0 -d /dev/ttyACM2 -s

Перехват данных в существующем соединении

Сначала найдите существующее соединение для целевого анализа с помощью btlejack:

::

$ btlejack -s BtleJack version 1.1

[i] Enumerating existing connections ... [ - 54 dBm] 0xcd91d517 | pkts: 1 [ - 46 dBm] 0xcd91d517 | pkts: 2

Первое значение (в dBm) показывает мощность сигнала, чем больше это значение, тем лучше будет перехваченное соединение.

Второе значение (шестнадцатеричное) - связанный адрес доступа (access address), 32-битное значение, идентифицирующее связь между двумя совместимыми с Bluetooth Low Energy устройствами.

Последнее значение - количество пакетов, увиденных с этим адресом доступа. Чем выше это значение, тем вероятнее, что соответствующий адрес доступа используется.

Затем используйте опцию -f для отслеживания конкретного соединения:

::

$ btlejack -f 0xdda4845e BtleJack version 1.1

[i] Detected sniffers:

Sniffer #0: fw version 1.1

[i] Synchronizing with connection 0xdda4845e ... ✓ CRCInit: 0x2a035e ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 39 ✓ Hop increment = 15 [i] Synchronized, packet capture in progress ... LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70 LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70

Если вы используете более 1 microbit, Btlejack будет распараллеливать некоторые операции перехвата для ускорения восстановления параметров соединения!

Прослушивание новых соединений

Опция -c, поддерживаемая btlejack, позволяет указать целевой BD-адрес, или вы можете использовать any для захвата любого нового созданного соединения.

::

$ btlejack -c any BtleJack version 1.1

[i] Detected sniffers:

Sniffer #0: version 1.1 Sniffer #1: version 1.1 LL Data: 05 22 df b4 6f 95 c5 55 c0 0a f6 99 23 40 1d 7b 2f 0a 9a f4 93 01 12 00 27 00 00 00 d0 07 ff ff ff ff 1f 0b [i] Got CONNECT_REQ packet from 55:c5:95:6f:b4:df to 40:23:99:f6:0a:c0

|-- Access Address: 0x0a2f7b1d |-- CRC Init value: 0x93f49a |-- Hop interval: 39 |-- Hop increment: 11 |-- Channel Map: 1fffffffff |-- Timeout: 20000 ms

LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 0b 06 0c 08 0f 00 09 41 LL Data: 03 06 0c 07 1d 00 d3 07

или вы можете указать целевой BD-адрес:

::

$ btlejack -c 03:e1:f0:00:11:22

Глушение соединения

После того как соединение идентифицировано по его адресу доступа, вы можете начать глушить его с помощью опции -j:

::

$ btlejack -f 0x129f3244 -j

Перехват управления соединением BLE

Btlejack также способен перехватить управление существующим соединением, для этого используйте опцию -t. После перехвата управления Btlejack предоставит вам приглашение для взаимодействия с перехваченным устройством.

Сначала перехватите управление существующим соединением:

::

$ btlejack -f 0x9c68fd30 -t -m 0x1fffffffff BtleJack version 1.1

[i] Using cached parameters (created on 2018-08-11 01:48:24) [i] Detected sniffers:

Sniffer #0: fw version 1.1

[i] Synchronizing with connection 0x9c68fd30 ... ✓ CRCInit: 0x81f733 ✓ Channel map is provided: 0x1fffffffff ✓ Hop interval = 39 ✓ Hop increment = 9 [i] Synchronized, hijacking in progress ... [i] Connection successfully hijacked, it is all yours \o/ btlejack>

Затем используйте следующие команды для взаимодействия с устройством: - discover: выполняет перечисление сервисов и характеристик, предоставит вам всю информацию о сервисах и характеристиках. - write: записывает данные в конкретный дескриптор значения. - read: читает данные из конкретного дескриптора значения. - ll: отправляет необработанный пакет канальной уровня (для ниндзя).

Команда discover

Команда discover будет отправлять и получать пакеты Bluetooth LE и извлекать все UUID и параметры сервисов, а также UUID и параметры характеристик:

::

btlejack> discover start: 0001 end: 0005 start: 0014 end: 001a start: 0028 end: ffff Discovered services: Service UUID: 1801 Characteristic UUID: 2a05

 | handle: 0002
 | properties: indicate  (20)
 \ value handle: 0003

Service UUID: 1800 Characteristic UUID: 2a04

 | handle: 0019
 | properties: read  (02)
 \ value handle: 001a

Characteristic UUID: 2a00

 | handle: 0015
 | properties: read  (02)
 \ value handle: 0016

Characteristic UUID: 2a01

 | handle: 0017
 | properties: read  (02)
 \ value handle: 0018

Service UUID: 1824 Characteristic UUID: 2abc

 | handle: 0029
 | properties: write indicate  (28)
 \ value handle: 002a

Команда read

Команда read принимает один параметр - дескриптор значения, соответствующей характеристике, из которой вы хотите прочитать данные:

::

btlejack> read 0x16 read>> 4c 47 20 77 65 62 4f 53 20 54 56

Команда write

Команда write принимает три параметра:

::

btlejack> write

Поддерживаемые форматы данных:

  • hex: шестнадцатеричные данные (например, "414261")
  • str: текстовая строка, может быть обрамлена двойными кавычками.

Команда ll

Последняя команда позволяет отправлять PDU канального уровня Bluetooth Low Energy в шестнадцатеричном формате, как указано в Томе 6, Часть B, Главе 2.4.

Экспорт в файл PCAP

Одной из интересных функций Btlejack является возможность экспортировать захваченные данные в файл PCAP.

Btlejack поддерживает следующие форматы DLT:

  • DLT_BLUETOOTH_LE_LL_WITH_PHDR (такой же)
  • DLT_NORDIC_BLE (тот, который используется сниффером Nordic)
  • DLT_BLUETOOTH_LE_LL (поддерживается в последних версиях Wireshark)

Выходной файл может быть указан с помощью опции -o, а формат вывода - с помощью опции -x. Допустимые значения форматов: ll_phdr, nordic или pcap (по умолчанию).

::

$ btlejack -f 0xac56bc12 -x nordic -o capture.nordic.pcap Тип экспорта ll_phdr полезен при перехвате зашифрованных соединений, поскольку он также поддерживается инструментом crackle. Если вы хотите перехватывать и взламывать зашифрованные соединения, это правильный выбор.

Вам также может потребоваться указать crackle использовать определённую стратегию взлома с помощью опции -s:

::

$ crackle -i some.pcap -s 1

Кэш соединений

Btlejack использует кэш соединений для хранения некоторых значений, связанных с соединениями, чтобы немного ускорить работу. Этот кэш соединений может вызывать некоторые проблемы, особенно если адрес доступа уже встречался ранее.

Этот кэш можно очистить с помощью опции -z:

::

$ btlejack -z

Вывод пакетов в реальном времени с помощью Wireshark

В btlejack 2.0 появилась новая опция -w, которая позволяет указать путь к FIFO (существующему или новому) для выполнения анализа пакетов в реальном времени:

::

$ btlejack -c any -w /tmp/blepipe

Вы можете использовать FIFO и выходной файл одновременно:

::

$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap

Подсказка по использованию btlejack на Raspberry Pi

Если вы ранее включали виртуальный Ethernet через USB (RNDIS), например, для настройки Raspberry Pi Zero W через USB, вам нужно отключить это снова (то есть удалить dtoverlay=dwc2 из boot/config.txt и modules-load=dwc2,g_ether из boot/cmdline.txt, а затем выполнить sudo reboot), иначе это будет мешать USB-соединениям снифферов.

Поддержка Bluetooth LE 5 & 5.1

Эта версия поддерживает Bluetooth Low Energy версий 5 и 5.1, и особенно новый алгоритм выбора канала, представленный в версии 5 (CSA #2). Однако, поскольку используемое оборудование не поддерживает два новых PHY, добавленных начиная с версии 5, сниффинг, глушение и, возможно, перехват соединений будет возможен только с использованием 1Mbps uncoded PHY.

Обратите также внимание, что текущая реализация CSA #2, включённая в Btlejack, пока не поддерживает обновления карты каналов.

Перехват нового BLE 5 соединения

Btlejack автоматически определяет используемый алгоритм выбора канала, поэтому вам не нужно об этом беспокоиться — просто перехватывайте пакеты как обычно.

Перехват существующего BLE 5 соединения

Перехват существующего BLE 5 соединения (использующего 1Mbps uncoded PHY, и только этот PHY) не так сложен. Сначала вы должны указать, что вы хотите нацелиться на BLE 5 соединение, с помощью опции -5. Обратите внимание, что нет способа определить, использует ли существующее соединение CSA #2 или CSA #1, поэтому вам придется пробовать обе техники, пока одна из них не сработает.

::

$ btlejack -f 0x11223344 -5

Btlejack затем восстановит используемую карту каналов, а затем значение интервала перескока:

::

$ btlejack -f 0x11223344 -5 [i] Synchronizing with connection 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 160

После этого он попытается восстановить значение счётчика ГСЧ (PRNG) этого соединения:

::

$ btlejack -f 0x11223344 -5 [i] Synchronizing with connection 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 160 ✓ CSA2 PRNG counter = 5137 [i] Synchronized, packet capture in progress ...

Как только это будет сделано, Btlejack синхронизируется с этим соединением и будет обрабатывать пакеты как обычно.

Глушение существующего BLE 5 соединения

Здесь ничего нового, за исключением того, что вы должны указать, что вы атакуете BLE 5 соединение, с помощью опции -5.

Обратите внимание, что вы можете оптимизировать эту атаку, также указав карту каналов и значение интервала перескока с помощью флагов -m и -p соответственно. Оба флага ОБЯЗАНЫ быть предоставлены, иначе атака не сработает.

Перехват существующего BLE 5 соединения

На данный момент мне не удалось перехватить BLE 5 соединение, поскольку эта атака является времязависимой. Мои BLE 5 устройства используют задержку (latency) 0, что не допускает никакой задержки и приводит к провалу этой атаки.

Когда у меня появятся некоторые легитимные BLE 5 устройства, я улучшу это.

Комментарии
Войдите, чтобы оставить комментарий