bluing

Wireless & RF v0.12.0 · 13.02.2023 не обновлялся >2 лет

Разведывательный инструмент для Bluetooth: сканирование BR/EDR и BLE устройств, определение версии стека, поддерживаемых профилей, SDP browsing, определение производителя по OUI. Основная задача — разведка перед атакой на Bluetooth-устройство.

v0.12.0
13.02.2023 current
Добавлен 25.06.2026 · Обновлён 25.06.2026 · Wireless & RF
Установка
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
переведено ИИ

Bluing

Инструмент для сбора информации о Bluetooth

<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 &lthci>] [--inquiry-len=&ltn>] --inquiry
  bluing br [-i &lthci>] --sdp BD_ADDR
  bluing br [-i &lthci>] --local --sdp
  bluing br [-i &lthci>] --lmp-features BD_ADDR
  bluing br [-i &lthci>] --local --lmp-features
  bluing br [-i &lthci>] --stack BD_ADDR
  bluing br [-i &lthci>] --local --stack
  bluing br [-i &lthci>] [--inquiry-scan] --mon-incoming-conn
  bluing br --org=&ltname> --timeout=&ltsec> --sniff-and-guess-bd-addr

Аргументы:
  BD_ADDR    Адрес Bluetooth-устройства BR/EDR

Опции:
  -h, --help                   Вывести эту справку и выйти
  -i &lthci>                     Устройство HCI
  --local                      Направлять на локальное BR/EDR-устройство вместо удалённого
  --inquiry                    Обнаружить другие близлежащие BR/EDR-контроллеры
  --inquiry-len=&ltn>            Максимальное время (добавляемое к --ext-inquiry-len=&ltn>), 
                               определяемое до остановки запроса (Inquiry).
                                   Время = n * 1.28 с
                                   Диапазон времени: 1.28 до 61.44 с
                                   Диапазон n: 0x01 до 0x30 [по умолчанию: 8]
  --ext-inquiry-len=&ltn>        Расширенная длина запроса (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=&ltname>                 Название организации из файла OUI.txt
  --timeout=&ltsec>              Тайм-аут в секундах

--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 &lthci>] [--scan-type=&lttype>] [--timeout=&ltsec>] [--sort=&ltkey>] --scan
  bluing le [-i &lthci>] --pairing-feature [--timeout=&ltsec>] [--addr-type=&lttype>] PEER_ADDR
  bluing le [-i &lthci>] --ll-feature-set [--timeout=&ltsec>] [--addr-type=&lttype>] PEER_ADDR
  bluing le [-i &lthci>] --gatt [--io-cap=&ltname>] [--addr-type=&lttype>] PEER_ADDR
  bluing le [-i &lthci>] --local --gatt
  bluing le [-i &lthci>] --mon-incoming-conn
  bluing le [--device=&lt/dev/tty>] [--channel=&ltnum>] --sniff-adv

Аргументы:
  PEER_ADDR    Адрес LE-устройства Bluetooth

Опции:
  -h, --help            Вывести эту справку и выйти
  -i &lthci>              Устройство HCI
  --scan                Обнаружить устройства поблизости, отправляющие рекламные пакеты
  --scan-type=&lttype>    Тип выполняемого сканирования. Активное или пассивное [по умолчанию: активное]
  --sort=&ltkey>          Сортировать обнаруженные устройства по ключу, в настоящее время
                        поддерживается только RSSI [по умолчанию: rssi]
  --ll-feature-set      Прочитать LL FeatureSet удалённого LE-устройства
  --pairing-feature     Запросить функции сопряжения удалённого LE-устройства
  --timeout=&ltsec>       Продолжительность LE-сканирования, но может быть неточной [по умолчанию: 10]
  --gatt                Обнаружить иерархию профилей GATT удалённого LE-устройства
  --io-cap=&ltname>       Задать возможности ввода/вывода агента. Доступные значения:
                            DisplayOnly, DisplayYesNo, KeyboardOnly, NoInputNoOutput,
                            KeyboardDisplay (KeyboardOnly) [по умолчанию: NoInputNoOutput]
  --addr-type=&lttype>    Тип LE-адреса, публичный или случайный
  --sniff-adv           Перехватывать PDU физического канала рекламы. Требуется как минимум
                        один micro:bit (или другое поддерживаемое устройство NRF51, указанное через --device)
  --channel=&ltnum>       Физический канал рекламы LE, 37, 38 или 39 [по умолчанию: 37,38,39]
  --device=&lt/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          Запустить плагин

Рекомендуемое оборудование

Адаптер Bluetooth

Многие функции bluing требуют доступа как минимум к 1 адаптеру Bluetooth. Хотя можно использовать адаптер, поставляемый с физической машиной Linux, или сделать виртуальную машину Linux эксклюзивно для адаптера хост-машины, все же рекомендуется использовать внешний USB-адаптер Bluetooth для большей стабильности, например, Parani UD100-G03.

Оригинальный micro:bit (опционально)

Для перехвата 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 должна идентифицировать порты, подключенные к компьютеру.

Ubertooth One (опционально)

При перехватах и угадывании находящихся рядом 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
Комментарии
Войдите, чтобы оставить комментарий