Bluehood обращает гаджеты против владельцев.

Программист Дэнни Макклелланд выпустил Bluehood - открытый Bluetooth-сканер, который наглядно показывает, какие данные могут утекать из устройств с беспроводной связью. Автор задумывал проект как учебный инструмент: он помогает понять, где именно начинаются риски для приватности и почему их легко недооценить.
Идея появилась после истории с уязвимостью WhisperPair (CVE-2025-36911), наглядно показавшей, насколько хрупкой бывает приватность у Bluetooth-устройств. Вокруг нас постоянно десятки и сотни таких штук: смартфоны, автомобили, телевизоры, наушники, слуховые аппараты, транспорт доставки и многое другое. Bluehood демонстрирует, как просто вести пассивное наблюдение за следами присутствия этих гаджетов.
Если собрать достаточно записей, можно попытаться восстановить бытовые привычки: в какое время человек обычно гуляет с собакой, когда кто-то приезжает к дому, как выглядит регулярный маршрут по дням недели. Подобные метаданные иногда раскрывают очень личные детали, хотя с устройствами никто не взаимодействует напрямую и ничего на них не нажимает.
Bluehood постоянно сканирует устройства поблизости и поддерживает два режима: BLE (Bluetooth Low Energy) и классический Bluetooth. Затем программа разбирается, что именно она обнаружила. Для этого она смотрит на MAC-адрес, проверяет UUID сервисов BLE и по совокупности признаков относит устройство к понятной категории: смартфон, аудиоустройство, носимая электроника, IoT, автомобиль и так далее. Чтобы картинка была наглядной, интерфейс строит тепловые карты активности по часам и по дням.
Отдельный блок посвящён адресам, которые постоянно меняются. Многие современные устройства используют рандомизацию MAC, чтобы их было сложнее привязать к одному и тому же человеку. Bluehood честно признаёт эту реальность: записи с меняющимися адресами он не выводит в основной список, потому что устойчивое наблюдение по ним всё равно не получится. Вместо этого в интерфейсе остаётся только счётчик скрытых рандомизированных устройств.
Найденные устройства можно привести в порядок. В интерфейсе их разрешается пометить для наблюдения, разложить по пользовательским группам, дать понятные названия и добавить заметки. Тип устройства определяется довольно уверенно, потому что программа опирается не на один признак, а сразу на несколько.
Аналитика построена вокруг простого вопроса: когда и как часто конкретный гаджет оказывается рядом. Для каждого устройства доступны 30-дневная шкала присутствия, 7-дневный график RSSI (уровня сигнала), а также тепловые карты активности по часам и по дням. Модуль анализа расписания формулирует выводы в духе будни, вечер, 17:00–21:00. Плюс отдельно считается суммарное время, которое устройство провело в зоне обнаружения.
Есть и режим поиска связей между устройствами. Bluehood отмечает те, что регулярно появляются вместе. Так можно заметить типичные пары вроде телефона и умных часов, а также людей, которые часто приходят и уходят одной компанией, или технику, которая включается по одному расписанию.
Классификация устроена по приоритету источников. Сначала учитываются UUID сервисов BLE, это обычно самый точный слой: например, сервис Heart Rate часто встречается у носимых устройств, а профиль A2DP типичен для Bluetooth-аудио. Затем программа проверяет имя устройства и характерные слова,
Горячие клавиши: / фокусирует строку поиска, r обновляет список, c переключает компактный вид, w включает отслеживание выбранного устройства, Esc закрывает модальное окно.
Режим скриншота полезен, когда нужно показать данные публично. При включении MAC-адреса отображаются только первыми 2 октетами (например, AA:BB:XX:XX:XX:XX), а понятные имена - только первыми 2 символами (Da********). Экспорт в CSV этот режим тоже учитывает.
Самый простой запуск - через Docker. Образ лежит в GitHub Container Registry как ghcr.io/dannymcc/bluehood:latest. Достаточно создать docker-compose.yml и запустить:
docker compose up -d docker compose logs -f
Веб-панель будет доступна по адресу http://localhost:8080. Docker требует Linux-хост с Bluetooth-адаптером и установленным BlueZ. Контейнер запускается в привилегированном режиме с host networking, это нужно для BLE-сканирования.
Для ручной установки на Linux шаги тоже понятные. Сначала ставятся системные зависимости, для Arch Linux это:
sudo pacman -S bluez bluez-utils python-pip
Для Debian/Ubuntu команды аналогичные:
sudo apt install bluez python3-pip
Дальше клонируете репозиторий и ставите пакет:
git clone https://github.com/dannymcc/bluehood.git cd bluehood pip install -e .
Для Bluetooth-сканирования нужны повышенные привилегии. Проще всего запустить через sudo:
sudo bluehood
Другой вариант - выдать нужные capabilities интерпретатору Python:
sudo setcap 'cap_net_admin,cap_net_raw+eip' $(readlink -f $(which python)) bluehood
Для постоянной работы удобен systemd-сервис:
sudo cp bluehood.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now bluehood
Отдельный плюс: Bluehood работает нативно на macOS, Docker не обязателен. macOS использует CoreBluetooth вместо BlueZ, а библиотека bleak подхватывает этот слой автоматически. При первом запуске система спросит разрешение на доступ к Bluetooth, его нужно выдать, иначе сканирование не заработает.
Данные лежат в SQLite по пути ~/.local/share/bluehood/bluehood.db. Расположение можно переопределить через переменные окружения BLUEHOOD_DATA_DIR (директория) или BLUEHOOD_DB_PATH (прямой путь к базе).
Bluehood поддерживает несколько режимов запуска. По умолчанию стартует с веб-панелью на порту 8080:
bluehood
Можно задать другой порт:
bluehood --port 9000
Можно выбрать конкретный Bluetooth-адаптер:
bluehood --adapter hci1
Посмотреть список доступных адаптеров:
bluehood --list-adapters
Либо отключить веб-панель и оставить только сканирование:
bluehood --no-web
Окно с деталями устройства собирает всё в одном месте: список обнаруженных BLE-сервисов, тепловые карты активности по часам и по дням, 30-дневную шкалу присутствия, график RSSI за последнюю неделю, результаты анализа расписания, суммарное время в зоне, перечень устройств, которые часто появляются рядом, оценку близости, заметки и выбранную группу.
Анализ расписания строится на временных метках обнаружений. Он разбивает активность по времени суток (утро, день, вечер, ночь), по дням недели (будни, выходные) и по регулярности появления (постоянно, ежедневно, регулярно, периодически, редко). Примеры формулировок: ежедневно, вечер, 17:00-21:00 или будни, утро, 08:00-12:00.
Подсчёт времени в зоне показывает, сколько устройство находилось рядом, опираясь на интервалы между обнаружениями. Порог разрыва можно менять, по умолчанию он равен 15 минутам. Если пауза между отметками больше этого значения, система считает, что началась новая сессия.
Проект пока на ранней стадии и помечен как альфа-версия. Автор предупреждает, что продукт не рассчитан на промышленное использование: функции могут меняться, работать нестабильно или исчезать без уведомлений, а собранные данные лучше воспринимать как экспериментальные.
В разделе с подсказками по неполадкам перечислены типовые проверки. Если сканирование ничего не показывает, стоит включить адаптер командой bluetoothctl power on, проверить наличие адаптера через bluehood --list-adapters и при ошибке доступа попробовать запуск с sudo. Если проблема возникает в Docker, важно убедиться, что BlueZ установлен на хосте, а не только в контейнере, затем проверить состояние службы Bluetooth командой systemctl status bluetooth.
Проект распространяется под лицензией MIT, исходный код открыт на GitHub. К разработке подключились несколько контрибьюторов: они улучшили кеширование информации о производителях, добавили светлую тему, доработали веб-интерфейс и исправили CSV-экспорт.
При наблюдении за Bluetooth-устройствами стоит учитывать законы о приватности в своей юрисдикции. Автор также отмечает, что не несёт ответственности за использование программы в целях злоупотребления.