Разведывательный инструмент для Bluetooth: сканирование BR/EDR и BLE устройств, определение версии стека, поддерживаемых профилей, SDP browsing, определение производителя по OUI. Основная задача — разведка перед атакой на Bluetooth-устройство.
pip install bluing # Сканирование BLE: bluing -i hci0 --ll-scan # Сканирование BR/EDR: bluing -i hci0 --br-scan # Детальная разведка цели: bluing -i hci0 --br-sdp-browse aa:bb:cc:dd:ee:ff
<a href="https://fo-000.github.io/bluing/">English</a> · <a href="https://fo-000.github.io/bluing/index-cn.html">Упрощённый китайский</a>
Bluing (ранее bluescan) — это инструмент для сбора информации (Bluetooth Intelligence Gathering), написанный в основном на Python. Он может помочь нам исследовать внутреннюю структуру Bluetooth — сложного протокола, или взламывать Bluetooth-устройства. Вот основные возможности этого инструмента:
Bluing частично зависит от BlueZ, официального стека протоколов Bluetooth для Linux. Поэтому он поддерживает только работу в Linux. Следующая команда используется для установки зависимостей:
sudo apt install python3-pip python3-dev libcairo2-dev libgirepository1.0-dev \
libbluetooth-dev libdbus-1-dev bluez-tools python3-cairo-dev \
rfkill meson patchelf bluez ubertooth adb python-is-python3
В настоящее время bluing распространяется через PyPI и поддерживает только Python 3.10. Следующая команда для установки:
sudo pip3.10 install bluing
- Бог сказал: «Да будет цветно», и появился цветной мир.
- Возможно, вы захотите посмотреть краткий обзор рекомендуемого оборудования.
$ bluing --help
Инструмент для сбора информации о Bluetooth Использование: bluing [-h | --help] bluing (-v | --version) bluing [-i <hci>] --clean BD_ADDR bluing --flash-micro-bit bluing <команда> [<аргументы>...] Аргументы: BD_ADDR Адрес Bluetooth-устройства Опции: -h, --help Вывести справку и выйти -v, --version Вывести информацию о версии и выйти -i <hci> Устройство HCI --clean Очистить кэшированные данные удаленного устройства --flash-micro-bit Загрузить специальную прошивку в micro:bit(ы) Команды: br Система Basic Rate, включает опциональное расширение Enhanced Data Rate (EDR) le Система Low Energy android Стек Bluetooth для Android spoof Спуфинг с использованием новой информации локального устройства plugin Управление плагинами Выполните `bluing <команда> --help` для получения дополнительной информации о команде.
br: Система базовой скорости (Basic Rate)$ bluing br --help
Использование:
bluing br [-h | --help]
bluing br [-i <hci>] [--inquiry-len=<n>] --inquiry
bluing br [-i <hci>] --sdp BD_ADDR
bluing br [-i <hci>] --local --sdp
bluing br [-i <hci>] --lmp-features BD_ADDR
bluing br [-i <hci>] --local --lmp-features
bluing br [-i <hci>] --stack BD_ADDR
bluing br [-i <hci>] --local --stack
bluing br [-i <hci>] [--inquiry-scan] --mon-incoming-conn
bluing br --org=<name> --timeout=<sec> --sniff-and-guess-bd-addr
Аргументы:
BD_ADDR Адрес Bluetooth-устройства BR/EDR
Опции:
-h, --help Вывести эту справку и выйти
-i <hci> Устройство HCI
--local Направлять на локальное BR/EDR-устройство вместо удалённого
--inquiry Обнаружить другие близлежащие BR/EDR-контроллеры
--inquiry-len=<n> Максимальное время (добавляемое к --ext-inquiry-len=<n>),
определяемое до остановки запроса (Inquiry).
Время = n * 1.28 с
Диапазон времени: 1.28 до 61.44 с
Диапазон n: 0x01 до 0x30 [по умолчанию: 8]
--ext-inquiry-len=<n> Расширенная длина запроса (Extended_Inquiry_Length), измеряемая в
количестве слотов базовой полосы (Baseband slots).
Длина интервала = n * 0.625 мс (1 слот базовой полосы)
Диапазон времени: 0 до 40.9 с
Диапазон n: 0x0000 до 0xFFFF [по умолчанию: 0]
--sdp Получить информацию из базы данных SDP
удалённого BR/EDR-устройства
--lmp-features Прочитать функции LMP удалённого BR/EDR-устройства
--stack Определить тип стека Bluetooth удалённого BR/EDR-устройства
--mon-incoming-conn Печатать входящие соединения от других близлежащих BR/EDR-устройств
--inquiry-scan Включить сканирование запросов (Inquiry Scan)
--sniff-and-guess-bd-addr Перехватывать SAPы адресов BD_ADDR в эфире, затем угадывать
адрес по названию организации. Необходимо как минимум
одно устройство Ubertooth
--org=<name> Название организации из файла OUI.txt
--timeout=<sec> Тайм-аут в секундах
--inquiry: Обнаружение других близлежащих BR/EDR-контроллеров$ sudo bluing br --inquiry
[INFO] Обнаружение других близлежащих BR/EDR-контроллеров на hci0 в течение 10.24 сек BD_ADDR: B0:C9:52:45:33:13 (GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD) Режим повтора запроса на подключение (Page scan repetition mode): 1 (R1) Зарезервировано: 0x02 Класс устройства (CoD): 0x5a020c Класс службы: 0b1011010000 Телефония Передача объектов Захват данных Сетевые технологии Основной класс устройства: 0b00010, Телефон Смещение тактовой частоты: 0x50D5 RSSI: -61 Расширенный ответ на запрос (Extended inquiry response): Полное локальное имя: old man phone Полный список 16-битных UUID классов служб 0x1105 OBEXObjectPush 0x110a AudioSource 0x110c A/V_RemoteControlTarget 0x110e A/V_RemoteControl 0x1112 Headset - Audio Gateway (AG) 0x1115 PANU 0x1116 NAP 0x111f HandsfreeAudioGateway 0x112d SIM_Access 0x112f Phonebook Access - PSE 0x1200 PnPInformation 0x1132 Message Access Server Полный список 32-битных UUID классов служб Нет Полный список 128-битных UUID классов служб A49EAA15-CB06-495C-9F4F-BB80A90CDF00 00000000-0000-0000-0000-000000000000 ... ... [INFO] Запрос имён всех обнаруженных устройств... B0:C9:52:45:33:13 : old man phone ... ...
--sdp: Получение информации из базы данных SDP удалённого BR/EDR-устройства$ sudo bluing br --sdp 34:13:46:23:6A:4D
Сканирование ⠋ Количество записей служб: 18 Запись службы 0x0000: ServiceRecordHandle (uint32) 0x0001000d 0x0001: ServiceClassIDList (sequence) 0x1105: OBEXObjectPush 0x0004: ProtocolDescriptorList (sequence) 0x0100: L2CAP 0x0003: RFCOMM channel: 0x0c 0x0008: OBEX 0x0005: BrowseGroupList (sequence) 0x1002: PublicBrowseRoot 0x0009: BluetoothProfileDescriptorList (sequence) 0x1105: OBEXObjectPush v1.2 0x0100: ServiceName (угадано) (text) OBEX Object Push 0x0200: GoepL2CapPsm (угадано) (uint16) 0x1023 0x0303: SupportedFormatsList (угадано) (sequence) 0x01: vCard 2.1 0x02: vCard 3.0 0x03: vCal 1.0 0x04: iCal 2.0 0xff: Любой тип объекта ... ...
--lmp-features: Чтение функций LMP удалённого BR/EDR-устройства$ sudo bluing br --lmp-features 6A:8D:99:33:56:AE
Версия Версия: Bluetooth Core Specification 5.2 (LMP) Bluetooth Core Specification 5.2 (LL) Название производителя: HiSilicon Technologies CO., LIMITED Подверсия: 33561 Функции LMP 3-слотовые пакеты: Да 5-слотовые пакеты: Да Шифрование: Да Смещение слота: Да Точность тайминга: Да Смена роли: Да Режим удержания (Hold mode): Нет Режим подглядывания (Sniff mode): Да Ранее использовалось: Нет Запросы управления питанием: Да Управление скоростью передачи данных в зависимости от качества канала (CQDDR): Да ... ... Расширенные возможности LMP Страница 1 Безопасное простое сопряжение (поддержка хоста): True Поддержка LE (хост): True Возможность одновременного LE и BR/EDR к одному устройству (хост): True Безопасные соединения (поддержка хоста): True Страница 2 Бесконтактная широкая передача ведомому - Режим ведущего: False Бесконтактная широкая передача ведомому - Режим ведомого: False Поезд синхронизации: False Сканирование синхронизации: False Событие HCI_Inquiry_Response_Notification: True ... ...
--mon-incoming-conn: Вывод входящих соединений от других близлежащих устройств BR/EDR$ sudo bluing br --inquiry-scan --mon-incoming-conn
[INFO] Inquiry_Scan_Interval: 4096, 2560.0 ms Inquiry_Scan_Window: 4096, 2560.0 ms [INFO] Сканирование опроса и страницы включены A0:DE:0F:99:EF:78 входящее CoD: 0x5a020c Класс сервиса: 0b1011010000 Телефония Передача объектов Захват Сетевые Основной класс устройства: 0b00010, Телефон тип соединения: 0x01 - ACL ... ...
--sniff-and-guess-bd-addr: Перехват и угадывание BD_ADDR в эфире$ bluing br --org='Huawei Device Co., Ltd.' --timeout=600 --sniff-and-guess-bd-addr
[INFO] Возможный BD_ADDR для ??:??:99:4C:45:C3 24:A7:99:4C:45:C3 [INFO] Возможный BD_ADDR для ??:??:E4:2D:69:EE BC:1A:E4:2D:69:EE D0:05:E4:2D:69:EE 30:AA:E4:2D:69:EE [INFO] Возможный BD_ADDR для ??:??:15:60:81:7F 64:23:15:60:81:7F D4:74:15:60:81:7F ... ...
le команда: система Bluetooth Low Energy$ bluing le --help
Использование:
bluing le [-h | --help]
bluing le [-i <hci>] [--scan-type=<type>] [--timeout=<sec>] [--sort=<key>] --scan
bluing le [-i <hci>] --pairing-feature [--timeout=<sec>] [--addr-type=<type>] PEER_ADDR
bluing le [-i <hci>] --ll-feature-set [--timeout=<sec>] [--addr-type=<type>] PEER_ADDR
bluing le [-i <hci>] --gatt [--io-cap=<name>] [--addr-type=<type>] PEER_ADDR
bluing le [-i <hci>] --local --gatt
bluing le [-i <hci>] --mon-incoming-conn
bluing le [--device=</dev/tty>] [--channel=<num>] --sniff-adv
Аргументы:
PEER_ADDR Адрес LE-устройства Bluetooth
Опции:
-h, --help Вывести эту справку и выйти
-i <hci> Устройство HCI
--scan Обнаружить устройства поблизости, отправляющие рекламные пакеты
--scan-type=<type> Тип выполняемого сканирования. Активное или пассивное [по умолчанию: активное]
--sort=<key> Сортировать обнаруженные устройства по ключу, в настоящее время
поддерживается только RSSI [по умолчанию: rssi]
--ll-feature-set Прочитать LL FeatureSet удалённого LE-устройства
--pairing-feature Запросить функции сопряжения удалённого LE-устройства
--timeout=<sec> Продолжительность LE-сканирования, но может быть неточной [по умолчанию: 10]
--gatt Обнаружить иерархию профилей GATT удалённого LE-устройства
--io-cap=<name> Задать возможности ввода/вывода агента. Доступные значения:
DisplayOnly, DisplayYesNo, KeyboardOnly, NoInputNoOutput,
KeyboardDisplay (KeyboardOnly) [по умолчанию: NoInputNoOutput]
--addr-type=<type> Тип LE-адреса, публичный или случайный
--sniff-adv Перехватывать PDU физического канала рекламы. Требуется как минимум
один micro:bit (или другое поддерживаемое устройство NRF51, указанное через --device)
--channel=<num> Физический канал рекламы LE, 37, 38 или 39 [по умолчанию: 37,38,39]
--device=</dev/tty> Устройство для использования, через запятую (например, /dev/ttyUSB0,/dev/ttyUSB1,/dev/ttyUSB2)
Требуется только при использовании устройств NRF51, отличных от micro:bit (например, Bluefruit)
--scan: Обнаружение устройств с рекламными пакетами поблизости$ sudo bluing le --scan
[WARNING] Возможно, вы захотите подменить свой LE-адрес перед выполнением активного сканирования [INFO] LE активное сканирование на hci0 в течение 10 секунд Сканирование ⠴ ----------------Результат сканирования LE-устройств---------------- Адрес: 74:A3:4A:D4:78:55 (ZIMI CORPORATION) Тип адреса: публичный Подключаемость: Да RSSI: -68 dBm Профиль общего доступа: Флаги: LE General Discoverable Mode BR/EDR Not Supported Данные сервиса - 16-битный UUID: UUID: 0x95FE Данные: 9055990701b743e34aa3740e00 Внешний вид: 0000 Уровень мощности передатчика: 0 dBm (потери 68 dBm) Полное локальное имя: Mesh Mi Switch ... ...
--ll-feature-set: Чтение LL FeatureSet удалённого LE-устройства$ sudo bluing le --ll-feature-set --addr-type=public 18:D9:8F:77:24:F1
[INFO] Чтение LL FeatureSet устройства 18:D9:8F:77:24:F1 на hci0 Чтение ⠼ LE LL возможности: LE-шифрование: Да Процедура запроса параметров соединения: Нет Расширенное указание отклонения: Нет Инициируемый ведомым обмен возможностями: Нет LE Ping: Нет Расширение длины пакета данных LE: Да Конфиденциальность LL: Нет Расширенные политики фильтрации сканера: Нет LE 2M PHY: Нет Стабильный индекс модуляции - передатчик: Нет Стабильный индекс модуляции - приёмник: Нет ... ...
--pairing-feature: Запрос функций сопряжения удалённого LE-устройства$ sudo bluing le --pairing-feature --addr-type=public 18:D9:8F:77:24:F1
[INFO] Запрос функций сопряжения устройства 18:D9:8F:77:24:F1 на hci0 Запрос ⠧ Ответ на сопряжение Возможности ввода/вывода: 0x03 - NoInputNoOutput Флаг OOB-данных: 0x00 - Отсутствуют Запрос аутентификации: 0x01 Максимальный размер ключа шифрования: 16 Распределение ключей инициатора: 0x00 EncKey: Нет IdKey: Нет SignKey: Нет LinkKey: Нет RFU: 0b0000 Распределение ключей респондента: 0x01 EncKey: Да IdKey: Нет SignKey: Нет LinkKey: Нет RFU: 0b0000
--gatt: Обнаружение иерархии профилей GATT удалённого LE-устройства$ sudo bluing le --gatt --addr-type=public 18:D9:8F:77:24:F1
Подключение ⠋ Обнаружение всех первичных сервисов ⠏ Обнаружение всех характеристик сервиса 0x0001 ⠹ ... ... Обнаружение всех дескрипторов характеристики 0x0002 ⠼ ... ... Чтение значения дескриптора 0x0013 ⠴ ... ... ----------------Результат сканирования GATT---------------- Количество сервисов: 6 Сервис (0x0100 - 0x0112, 7 характеристик) Объявление Дескриптор: 0x0100 Тип: 2800 (объявление первичного сервиса) Значение: 1812 (Human Interface Device) Права доступа: Чтение (без аутентификации/авторизации) --- Характеристика (2 дескриптора) Декларация Дескриптор: 0x010d Тип: 2803 (Декларация характеристики) Значение: Свойства: Чтение, Запись без ответа, Запись, Уведомление Дескриптор: 0x010e UUID: 2A4D (Отчёт (Report)) Разрешения: Чтение (без аутентификации/авторизации) Значение Дескриптор: 0x0302 Тип: 4A02 (Неизвестно) Значение: Чтение не разрешено Разрешения: Задаются на более высоком уровне Дескриптор Дескриптор: 0x010f Тип: 2902 (Декларация конфигурации клиентской характеристики) Значение: b'\x00\x00' Разрешения: Чтение (без аутентификации/авторизации), Запись (аутентификация/авторизация задаётся на более высоком уровне) ... ...
--sniff-adv: Перехват PDU физического канала объявлений$ sudo bluing le --sniff-adv
[ИНФО] Используется micro:bit /dev/ttyACM2 на канале 37 [ИНФО] Используется micro:bit /dev/ttyACM1 на канале 38 [ИНФО] Используется micro:bit /dev/ttyACM0 на канале 39 [ИНФО] micro:bit 38 < Готово -> Старт [ИНФО] micro:bit 37 < Готово -> Старт [ИНФО] micro:bit 39 < Готово -> Старт [38] [ADV_NONCONN_IND] случайный AdvA: 28:7A:88:B2:35:0B [39] [ADV_IND] публичный AdvA: A4:E4:72:B1:CB:8D [37] [SCAN_REQ] случайный ScanA: 6A:90:0C:07:3E:14 случайный AdvA: 7D:9B:A8:5A:F2:81 ... ...
android: Стек Bluetooth Android$ bluing android --help
Использование:
bluing android [-h | --help]
bluing android [-t ] --collect-btsnoop-log [-o ]
Опции:
-h, --help Показать эту справку и выйти
-t Использовать устройство Android с указанным транспортным идентификатором.
Эта опция игнорируется, если доступно только одно устройство.
--collect-btsnoop-log Собирать генерируемый лог btsnoop в локальный файл,
по умолчанию ./btsnoop_hci.log
-o Сохранить вывод в [по умолчанию: ./btsnoop_hci.log]
--collect-btsnoop-log: Сбор генерируемого лога btsnoop$ bluing android -t 3 --collect-btsnoop-log -o btsnoop_hci.log; file btsnoop_hci.log
btsnoop_hci.log: BTSnoop version 1, HCI UART (H4)
spoof: Подмена с новой информацией о локальном устройстве$ bluing spoof --help
Использование: bluing spoof [-h | --help] bluing spoof [-i ] --bd-addr= bluing spoof [-i ] --cls-of-dev= bluing spoof --host-name= bluing spoof [-i ] --alias= Опции: -h, --help Показать эту справку и выйти -i Устройство HCI --bd-addr= Подменить на новый BD_ADDR --cls-of-dev= Подменить на новый Class of Device (класс устройства) --host-name= Подменить на новое имя хоста --alias= Подменить на новый псевдоним
--bd-addr=<BD_ADDR>: Подмена на новый BD_ADDRЭта функция в настоящее время основана на spooftooph, который можно установить, выполнив sudo apt install spooftooph, если вы используете его в Kali Linux. Однако, если вы используете эту функцию в Ubuntu, вам потребуется вручную скомпилировать и установить spooftooph.
$ sudo bluing spoof --bd-addr=AA:BB:CC:DD:EE:FF
[ПРЕДУПРЕЖДЕНИЕ] Номер исходного устройства HCI мог быть изменен [ИНФОРМАЦИЯ] BD_ADDR изменен: 11:22:33:44:55:66 -> AA:BB:CC:DD:EE:FF
--cls-of-dev=<num>: Подмена на новый Class of Device$ sudo bluing spoof --cls-of-dev=0x6c0100
Нет вывода при успешном выполнении
--host-name=<name>: Подмена на новое имя хоста$ sudo bluing spoof --host-name=Bluing
Нет вывода при успешном выполнении
--alias=<alias>: Подмена на новый псевдоним контроллера$ sudo bluing spoof --alias='Bluing Alias'
Нет вывода при успешном выполнении
plugin: Управление плагинами$ bluing plugin --help
Использование: bluing plugin [-h | --help] bluing plugin [...] Опции: -h, --help Показать эту справку и выйти Команды: list Вывести список установленных плагинов install Установить плагин uninstall Удалить плагин run Запустить плагин
Многие функции bluing требуют доступа как минимум к 1 адаптеру Bluetooth. Хотя можно использовать адаптер, поставляемый с физической машиной Linux, или сделать виртуальную машину Linux эксклюзивно для адаптера хост-машины, все же рекомендуется использовать внешний USB-адаптер Bluetooth для большей стабильности, например, Parani UD100-G03.
Для перехвата PDU физического канала рекламы (le --sniff-adv) bluing требуется как минимум 1 оригинальный micro:bit, и рекомендуется использовать одновременно 3 таких устройства. Этим micro:bit необходимо запустить специальную прошивку, 제공ляемую bluing. После подключения micro:bit к Linux, предварительно собранную прошивку можно загрузить, выполнив следующую команду:
bluing --flash-micro-bit
Хотя micro:bit менее удобен в использовании, но более доступен для покупки, также могут поддерживаться более универсальные адаптеры на базе NRF51. Добавлена поддержка плат Adafruit Bluefruit LE Friend и BLE400. Для их использования потребуется прошивка через SWD. Этот инструмент не поддерживает прошивку этих устройств. Кроме того, инструмент не может автоматически распознать эти устройства. Вместо этого опция --devices должна идентифицировать порты, подключенные к компьютеру.
При перехватах и угадывании находящихся рядом BD_ADDR (br --sniff-and-guess-bd-addr) bluing требуется Ubertooth One.
rfkill не может найти hci0Ниже приведено сообщение об ошибке:
Exception: Can't find the ID of hci0 in rfkill
Эта ошибка может быть вызвана отсутствием поддержки опций -r и -n в старой версии rfkill, например:
$ cat /etc/os-release | head -n 2 NAME="Ubuntu" VERSION="16.10 (Yakkety Yak)" $ rfkill --version rfkill 0.5-1ubuntu3 (Ubuntu)
В этом случае обновление rfkill до более новой версии решает проблему, например:
$ cat /etc/os-release | head -n 2 PRETTY_NAME="Kali GNU/Linux Rolling" NAME="Kali GNU/Linux" $ rfkill --version rfkill from util-linux 2.38.1
scanend не удалось выполнитьНиже приведено сообщение об ошибке:
ERROR: Failed to execute management command 'scanend' (code: 11, error: Rejected)
Попробуйте перезапустить службу Bluetooth для решения проблемы:
sudo systemctl restart bluetooth.service