OSINT через Bluetooth: как наушники, часы и смартфон выдают владельца

Если даже мемы не мешают вам спать спокойно, то вот информация к размышлению:

  1. Американские операционные системы умеют принудительно активировать заглушенный Bluetooth-сигнал в рамках программы трекинга COVID (да, она актуальна и в 2025 году)
  2. Bluetooth-наушники трех крупнейших производителей сообщают о низком сигнале уровня батареи не шифруя информацию об устройстве (да, Apple, ты тоже в этом списке)
  3. Инсулиновые помпы, например, Medtronic MiniMed и Dexcom G6 не верифицируют устройство, от которого принимают Bluetooth-команды, и про это давно известно.

И если вам кажется, что ваше Bluetooth-соединение достаточно приватно из-за малого радиуса и отсутствия активного соединения, то это иллюзия. Но мы не хакеры, а осинтеры. Поэтому мы не будем ничего ломать и эксплуатировать, а ответим на более простой вопрос: как много информации о человеке сообщают его Bluetooth-устройства.

Как работает Bluetooth и что такое BLE

Bluetooth использует два режима: классический (BR/EDR) и энергоэффективный BLE (Bluetooth Low Energy). Первый нужен для подключения к наушникам или передачи файлов. Второй — для постоянного вещания коротких служебных сообщений, даже без соединения.

Именно BLE и представляет интерес. Большинство современных гаджетов — от фитнес-браслетов и смарт-часов до телефонов и гарнитур — используют BLE, чтобы сообщать о себе в эфире. Эти сигналы — рекламные пакеты (advertising packets) — транслируются каждые 1–10 секунд. Они открыты, не защищены шифрованием и принимаются любым сканером Bluetooth в радиусе до 30 метров.

Что передаёт рекламный пакет

BLE-пакет содержит минимум информации, необходимой для обнаружения и первичной идентификации устройства. Его структура задаётся форматом AD Structure: тип — длина — значение. Внутри можно найти:

  • Имя устройства (если не скрыто).

  • MAC-адрес (настоящий или временный).

  • Manufacturer Specific Data — данные производителя.

  • UUID сервисов — список функций (пульс, заряд, уведомления).

  • RSSI — уровень сигнала, по которому можно прикинуть расстояние.

Пакеты бывают разной длины, с разными комбинациями полей, но даже самый короткий из них может содержать уникальные признаки. И хотя MAC-адрес может быть рандомизирован, другие поля остаются стабильными и позволяют отследить устройство.

Почему рандомизация MAC-адресов не спасает

Производители внедрили механизм автоматической смены MAC-адреса, чтобы усложнить слежку. В теории это должно разрывать связь между пакетами. На практике:

  • Смена адреса происходит редко — раз в 15–60 минут.
  • Имя устройства часто остаётся прежним: “JBL_Tune220”, “Katya_Watch”.
  • Manufacturer Data не меняется вообще.
  • UUID передаются в том же порядке.
  • Устройства создают устойчивые связки — смартфон + часы + наушники.

AirPods передают один и тот же Manufacturer-код, даже если MAC-адрес меняется. Если рядом одновременно появляются три устройства с одинаковыми шаблонами пакетов — это уже цифровой отпечаток конкретного человека.

Пример

Поговорим о конкретных идентификаторах.

Каждое BLE-устройство может включать в рекламный пакет поле Manufacturer Specific Data. Это служебный блок, в котором первые два байта указывают идентификатор компании (например, 0x004C для Apple), а дальше идёт структура данных, определяемая производителем. Эти данные используются для внутренних целей: например, кодирования модели устройства или передачи информации для фирменных приложений. Но для OSINT они превращаются в сигнатуру (так как имеют уникальное поведение).

Например, AirPods используют фиксированную структуру, которую легко распознать по первым байтам. iBeacon — по UUID и major/minor. Mi Band разных поколений имеют отличающиеся Manufacturer Data: по первым 2–3 байтам также можно точно определить модель.А устройства Samsung и Huawei сохраняют структуру Manufacturer Data даже при смене MAC-адресов.

Если такая структура один раз зафиксирована, то её можно использовать для повторной идентификации устройства, даже если имя и MAC-адрес изменились.

Список UUID (Universally Unique Identifiers), то есть сигнатур сервисов, отражает, какие сервисы доступны на устройстве. Это может быть:

  • 180F: Battery Service — уровень заряда.

  • 180A: Device Information — сведения об устройстве.

  • 180D: Heart Rate — пульс.

Производители добавляют и свои UUID. Комбинация UUID уникальна для моделей или прошивок. Например, часы с поддержкой пульса и зарядки отличаются от гарнитуры, у которой только статус батареи и идентификатор производителя.

В OSINT такие списки работают как шаблоны. Даже если MAC и имя скрыты, UUID остаются.

Когда теряются все идентификаторы, остаётся поведение. Оно предсказуемо:

  • Частота передачи пакетов: раз в 1, 5 или 10 секунд.
  • Условия включения, например, при разблокировке экрана, снятии с зарядки.
  • Совместное появление устройств в эфире.

Каждый будний день в 8:47 три устройства с определёнными RSSI и UUID появляются одновременно. Через неделю — в том же месте, с теми же признаками. Это не случайность, а цифровой профиль владельца.

Пример

Наблюдение в реальных условиях

Bluetooth-OSINT применим в реальной среде — в транспорте, на улице, в офисах и на массовых мероприятиях. Поскольку BLE-пакеты передаются постоянно, наблюдателю не нужно вмешиваться или устанавливать соединение. Достаточно слушать эфир.

В реальности десятки BLE-устройств непрерывно транслируют свои сигналы в метро, на остановке, в торговом центре. Замечали, как глючит ваша гарнитура, когда вы проходите мимо рекламного щита? Кстати, особенно активны именно гарнитуры и браслеты. Сканер фиксирует их MAC-адреса, уровни сигнала, UUID и Manufacturer Data.

Если устройства повторяются в одном и том же месте и времени, можно выделить регулярные маршруты, группы устройств (например, “смартфон + наушники”) и даже аномалии, скажем, новое устройство среди стабильных или устройство с необычной сигнатурой. Если будет любопытно поработать с такой задачей, вот вам идея для собственного исследования: определить перечень сигнатур датчиков мониторинга уровня глюкозы в крови, которыми пользуются диабетики (а точнее, их ретрансляторов, чьи сигналы ничем не защищены).

Возьмем для примера закрытую конференцию. Участники приходят с личными гаджетами. В течение 4 часов фиксируются все рекламные пакеты в радиусе 30 метров. Используется Ubertooth One и Wireshark. Вот что вполне реально собрать:

  • 1500+ MAC-адресов.
  • 600 уникальных Manufacturer Data.
  • 200 устройств с одинаковыми UUID.
  • 70 устойчивых связок.

По времени появления и совпадению RSSI строится карта перемещений. В некоторых случаях сигнатуры совпадают с данными из соцсетей (например, опубликовано фото с настройками Bluetooth). Результат: подтверждена принадлежность устройств как минимум 10 участникам, 15 — с высокой вероятностью.

Между прочим Bluetooth сам по себе даёт много информации. Но если подключить другие источники, такая система может стать полноценным инструментом слежки и корреляции. Например, бесценными становятся Wi-Fi-сканеры, которые фиксируют MAC-адреса, поведение в сети и, очевидно, местонахождение / движение владельца.

Автоматизация анализа и сигнатуры устройств

Однако надо понимать, что сотни или тысячи пакетов вручную не обработать. Поэтому используется автоматизация: парсинг *.pcap-файлов, извлечение данных, группировка по признакам. Это позволяет строить базы сигнатур и отслеживать повторяющиеся устройства.

Для OSINTа по Bluetooth не требуются дорогое аппаратное или программное обеспечение. Всё, что нужно — это любой компьютер с установленной ОС GNU/Linux, приёмник BLE и софт для анализа. Но от качества оборудования зависит стабильность захвата и глубина анализа.

Извлечение BLE-пакетов с помощью tshark

Сначала нужен *.pcap, захваченный Wireshark или Ubertooth. Затем — извлекаем нужные поля:

import subprocess import json def extract_adv_data(pcap_file): cmd = [ 'tshark', '-r', pcap_file, '-Y', 'btcommon.eir_ad.entry', '-T', 'json', '-e', 'btcommon.addr', '-e', 'btcommon.eir_ad.entry.device_name', '-e', 'btcommon.eir_ad.entry.manufacturer_specific', '-e', 'btcommon.eir_ad.entry.service_uuid128', '-e', 'frame.time_epoch', '-e', 'radiotap.dbm_antsignal' ] proc = subprocess.run(cmd, capture_output=True, text=True) packets = json.loads(proc.stdout) devices = [] for pkt in packets: layers = pkt['_source']['layers'] addr = layers.get('btcommon.addr', [''])[0] man_data = layers.get('btcommon.eir_ad.entry.manufacturer_specific', [''])[0] if 'btcommon.eir_ad.entry.manufacturer_specific' in layers else None name = layers.get('btcommon.eir_ad.entry.device_name', [''])[0] if 'btcommon.eir_ad.entry.device_name' in layers else None uuid = layers.get('btcommon.eir_ad.entry.service_uuid128', []) timestamp = layers.get('frame.time_epoch', [''])[0] rssi = layers.get('radiotap.dbm_antsignal', [''])[0] if 'radiotap.dbm_antsignal' in layers else None devices.append({ 'addr': addr, 'manufacturer_data': man_data, 'name': name, 'service_uuids': uuid, 'timestamp': float(timestamp) if timestamp else None, 'rssi': int(rssi) if rssi else None }) return devices

Группировка по сигнатурам

Устройства группируются по Manufacturer Data и UUID:

from collections import defaultdict def group_devices(devices): groups = defaultdict(list) for dev in devices: key = (dev['manufacturer_data'], tuple(sorted(dev['service_uuids']))) groups[key].append(dev) return groups

Так формируются устойчивые цифровые отпечатки. По числу повторов, времени появления и стабильности сигнала можно оценить поведение и частоту использования.

Аппаратные средства

Ubertooth One

Открытое устройство для анализа Bluetooth-трафика. Поддерживает sniffer-режим, позволяет видеть настоящие MAC-адреса при установке соединения, фиксирует BLE-пакеты без участия системы. Пример захвата будет выглядеть так:

ubertooth-btle -f -c capture.pcap

Файл можно открыть в Wireshark для анализа.

SDR: HackRF, BladeRF

Применяются в сложных задачах — полный спектральный захват, анализ нестандартных протоколов, радиопрофилирование. Могут ловить BLE, ZigBee и другие сигналы одновременно. Не обязательны для базового OSINT, но полезны при исследовании нестандартных устройств.

Внешние адаптеры BLE

Некоторые ноутбуки имеют ограниченный доступ к HCI-интерфейсу. Для стабильного сканирования лучше использовать внешний USB-модуль с поддержкой режима мониторинга.

Программное обеспечение

Wireshark

Наверное, самый известный инструмент для анализа трафика, в том числе поддерживает BLE, отображает поля advertising-пакетов, позволяет фильтровать по MAC, UUID, RSSI. Он будет просто необходим для ручного анализа. Например:

btcommon.eir_ad.entry.device_name

btmon

CLI-инструмент на Linux. Показывает живой поток HCI-событий. Подходит для быстрой проверки, но шумит — требует постобработки.

sudo btmon

blesuite (Python)

Фреймворк для сканирования и анализа BLE. Позволяет писать скрипты, декодировать пакеты, имитировать устройства.

BlueHydra

Сканер BLE и Bluetooth Classic. Работает в паре с Ubertooth. Автоматически классифицирует устройства, собирает сигнатуры, ведёт базу.

nRF Connect (Android)

Приложение от Nordic Semiconductor. Показывает BLE-устройства, UUID, уровни сигнала, manufacturer data. Полезно для мобильных наблюдений.

Эти инструменты — лишь часть арсенала OSINT-специалиста.
Если вы хотите освоить их в связке с другими методами (соцсети, геоданные), полезным будет курс "OSINT:технология боевой разведки", где разбираются реальные кейсы и тактики сбора информации

Немного про приватность BLE

Спецификация BLE предусматривает защиту приватности: временные MAC-адреса, обфускация соединений, временные UUID. Но в реальности эти меры почти не работают. Причины:

  1. MAC меняется редко, предсказуемо или вовсе не меняется, при этом Manufacturer Data и UUID остаются постоянными.
  2. Имя устройства часто передается в явном виде.
  3. Поведение устройства — частота, время, сочетания — на текущий момент не шифруется и даёт уникальную сигнатуру.

Согласно независимым исследователям, производители могут позволить себе нарушать рекомендации. Например, бюджетные китайские устройства вообще не реализуют рандомизацию, а некоторые меняют только последние байты MAC. Протокол GAP транслирует набор сервисов, а GATT — их структуру, и с ненулевой вероятностью эти данные будут доступны без подключения.

Пример обхода на практике

Зафиксированы два пакета:

Пакет 1

  • MAC: C2:45:89:A1:23:9F
  • Manufacturer: Apple (AirPods Pro)
  • UUID: 180F, 180A
  • RSSI: -55 dBm
  • Время: 12:00:00

Пакет 2

  • MAC: C2:45:89:A1:23:A2
  • Manufacturer и UUID — те же
  • Время: 12:03:00
  • RSSI: -54 dBm

MAC-адрес разный, но всё остальное идентично, так как это одно устройство. Смена MAC не спасает, если вся остальная структура не изменена. Поэтому на сегодняшний день Bluetooth становится источником утечек, о котором забывают. BLE-протокол делает возможным пассивное наблюдение без соединения и взлома. Даже с рандомизированными MAC-адресами устройства остаются узнаваемыми по Manufacturer Data, UUID и поведению. Связки “смартфон + часы + наушники” становятся цифровыми отпечатками пользователя.

Более того, чем больше у вас Bluetooth-устройств, тем проще жизнь того, кто захочет их изучить. На данный момент для отслеживания достаточно только трех составляющих: ноутбук с Ubertooth или Android с nRF Connect, который будет выполнять роль сканера BLE, софт для анализа, например, Wireshark, и Python-скрипт для группировки.

Так что не забывайте, что приватность — это не настройка в меню, а ваше реальная и систематическая цифровая гигиена.

Катя Тьюринг
Кибердетектив
Александр Вир
8
Начать дискуссию