
Доказательство концепции уязвимостей Sweyntooth Bluetooth Low Energy (BLE).
Этот репозиторий является частью результатов исследования ASSET Research Group.

SweynTooth охватывает семейство из 18 уязвимостей в различных наборах средств разработки (SDK) Bluetooth Low Energy (BLE) от шести крупных производителей систем-на-кристалле (SoC). Уязвимости раскрывают недостатки в конкретных реализациях BLE SoC, позволяющие атакующему в зоне действия радиосигнала вызывать взаимоблокировки, сбои и переполнения буфера или полностью обходить защиту в зависимости от обстоятельств. (Обновление) Мы также добавили тестовый скрипт для проверки устройств на вариант BLE KNOB.
Более подробную информацию об уязвимостях, доступных исправлениях и затронутых устройствах можно найти на сайте раскрытия SweynTooth от ASSET Research Group.
Fitbit, August Smart Lock, Eve Energy, CubiTag и другие «умные» устройства затронуты.
В этом PoC используются хорошо поддерживаемые библиотеки, такие как Scapy и Colorama. Формирование и разбор BLE-пакетов выполняется с помощью настраиваемых протокольных слоёв Scapy (bluetooth4LE и bluetooth.py). Сейчас идёт процесс объединения наших дополнений с основным репозиторием Scapy.
Прежде всего, убедитесь, что в вашей системе установлен Python2.7 и пакеты Python, перечисленные в файле requirements.txt.
Если вы используете Ubuntu, выполните следующее:
sudo apt-get install python2.7
sudo pip install -r requirements.txt
Во-вторых, SweynTooth использует Nordic nRF52840 Dongle для отправки и приёма сырых пакетов канального уровня уязвимого периферийного устройства по радиоканалу. Перед запуском скриптов Python 2.7 необходимо прошить в плату драйвер прошивки.
Бинарный файл нашего кода прошивки находится в файле nRF52_driver_firmware.zip. Вам необходимо установить инструмент nrfutil для прошивки платы. Не забудьте перевести nRF52840 в режим DFU перед прошивкой (сбросьте USB-донгл, нажав маленькую кнопку сброса, пока он подключён к ПК).
Для установки зависимостей Python и прошивки выполните следующие команды:
python -m pip install nrfutil pyserial pycryptodome
nrfutil dfu usb-serial -p COM_PORT -pkg nRF52_driver_firmware.zip
Скрипты работают в Linux или Windows. Вам нужно лишь изменить параметр COM_PORT, чтобы он соответствовал имени порта nRF52840.
Если предыдущий способ прошивки не сработал, вы также можете прошить прошивку с помощью nRF Connect App for Desktop, который предоставляет удобный интерфейс для прошивки hex-прошивки (nRF52_driver_firmware.hex).
После установки всех требований вы можете запустить скрипт эксплойта, выполнив следующую команду:
python Telink_key_size_overflow.py COM7 A4:C1:38:D8:AD:A9
Первый аргумент — имя последовательного порта (обычно /dev/ttyACM0 в Linux), а второй — адрес уязвимого BLE-устройства. Вы можете использовать любой BLE-сканер или приложение nRF Connect, чтобы узнать такой адрес.
Если взять в качестве примера уязвимость Key Size Overflow, скрипт выдаёт следующий результат, когда уязвимое устройство зависает после сбоя:

Если вы хотите использовать SweynTooth через Docker-образ, чтобы избежать установки зависимостей Python, вы можете воспользоваться вспомогательным скриптом docker.sh для сборки и запуска Docker-экземпляра или загрузить предварительно собранный Docker-образ (ссылка), доступный на странице релизов. Использование docker.sh описано ниже.
--------- HELP -------------
sudo ./docker run <script_name> <serial_port> <ble_target_address> - Start any sweyntooth script by its name (<script_name>)
sudo ./docker build - Build docker container
sudo ./docker build release - Build docker container and create compressed image for release
sudo ./docker shell - Start docker container shell
---------- EXAMPLE ----------
./docker.sh run extras/Microchip_and_others_non_compliant_connection.py /dev/ttyACM0 f0:f8:f2:da:09:63
Каждый скрипт эксплойта соответствует одной уязвимости. В следующей сводной таблице показано соответствие между уязвимостью и скриптом для эксплуатации этой уязвимости на затронутых SoC.