
PoC для записи аудио с Bluetooth-устройства

Этот репозиторий содержит реализацию proof of concept для записи и воспроизведения аудио с Bluetooth-устройства без ведома законного пользователя.
PoC был продемонстрирован во время доклада BSAM: Seguridad en Bluetooth на RootedCON 2024 в Мадриде.
Он предназначен для повышения осведомлённости о небезопасном использовании Bluetooth-устройств и необходимости последовательной методологии для оценки безопасности. Именно для этого создана BSAM — методология оценки безопасности Bluetooth, опубликованная Tarlogic и доступная здесь.
Данный proof of concept эксплуатирует несоблюдение контроля BSAM-PA-05 в рамках методологии BSAM. Вследствие этого устройство разрешает процедуру сопряжения без необходимости взаимодействия с пользователем и открывает свои функции любому агенту в пределах радиуса действия сигнала.
Дополнительная информация в нашем блоге.
Код написан на Python и протестирован с Python 3.11.8, но в основном он использует широко доступные инструменты в Linux-системах.
PoC использует следующие инструменты:
bluetoothctlbtmgmtpactlparecordpaplayВ дистрибутивах Arch Linux bluetoothctl и btmgmt можно установить с помощью пакета bluez-utils, а pactl, parecord и paplay доступны в пакете libpulse.
Для работы PoC необходима рабочая установка Bluetooth-стека BlueZ, доступного в пакете bluezдля дистрибутивов Arch Linux. Для записи и воспроизведения аудио также требуется рабочая установка аудиосервера, совместимого с PulseAudio, например PipeWire.
Убедитесь, что ваше устройство может работать в качестве источника аудио, то есть имеет микрофон, и что оно доступно для обнаружения и подключения через Bluetooth.
Например, чтобы быть обнаруживаемыми и подключаемыми, наушники, использовавшиеся во время доклада, должны находиться вне зарядного кейса. По умолчанию они активируют микрофон только при размещении в ушах пользователя, хотя эту настройку можно изменить в приложении конфигурации.
Кроме того, убедитесь, что устройство ещё не подключено или, как вариант, что оно поддерживает несколько подключений.
Сначала адрес устройства необходимо обнаружить с помощью такого инструмента, как bluetoothctl:
$ bluetoothctl
[bluetooth]# scan on
После того как адрес устройства обнаружен, скрипт может выполнить остальную часть работы:
$ python BlueSpy.py -a <address>
Примечание: скрипт может запросить права суперпользователя для изменения конфигурации вашего экземпляра BlueZ и сопряжения с удалённым устройством.
BlueSpy.py — это основной скрипт, который выполняет все этапы процесса. Однако если у вас возникнут проблемы с каким-либо из этапов, может быть полезно выполнять их по отдельности:
pair.py использует инструмент командной строки btmgmt для изменения конфигурации вашего BlueZ и инициирования процесса сопряжения с удалённым устройством. Точные используемые команды находятся в функции pair внутри core.py.connect.py использует инструмент командной строки bluetoothctl для запуска быстрого сканирования (необходимого для BlueZ) и установления соединения с устройством. Точные используемые команды находятся в функции connect внутри core.py.just_record.py использует инструменты командной строки pactl и parecord для поиска устройства в аудиоисточниках системы (оно должно работать как микрофон) и запуска сеанса записи. Точные используемые команды находятся в функции record внутри core.py.Если у вас возникают проблемы с каким-либо из этапов, изучите команды в core.py и попробуйте выполнить их в оболочке. Это даст больше информации о том, что может быть причиной сбоя.
Если у вас есть вопросы о том, как работает стандарт Bluetooth или как оценивать безопасность Bluetooth-устройства, обратитесь к нашей веб-странице методологии BSAM:
playback внутри core.py выполняет paplay для воспроизведения захваченного аудио.