✍️ Статья Btproxy — инструмент проведения атаки человек-посередине для Bluetooth устройств

The 146X Project Dublikat Web Studio Avram Lincoln AL Service Navigator Knyaz

BlackPope

Команда форума
Модератор DeepWeb ✔️
PR-Group DeepWeb 🔷
Регистрация
27.04.2020
Сообщения
230
Программа выступает в качестве MiTM прокси, используется для активного анализа bluetooth подключений

Справка по Btproxy

btproxy [-h] [-a SET_ADDRESS] [-n] [-c] [-i INTERFACE] [-s SCRIPT] [-l]
[-1 MASTER_NAME] [-2 SLAVE_NAME] [-C] [-v] [-z] [-q]
[addr_master] [addr_slave]
позиционные аргументы:
addr_master Bluetooth адрес целевого главного устройства
addr_slave Bluetooth адрес целевого второстепенного устройства

опциональные аргументы:
-h, --help показать справку и выйти
-a SET_ADDRESS, --set-address SET_ADDRESS
Устанавливаемый адрес для Bluetooth адаптера (требует -i)
-n, --repair Не использовать повторно существующее спаренное соединение
-c, --copy-addresses Скопировать адрес целевого устройства на адаптер.
Будет использовать адрес второстепенного устройства, если используется только один адаптер.
Полезно для эмуляции некоторых устройств. На некоторых
адаптерах это может не работать.
-i INTERFACE, --interface INTERFACE
Выбрать для использования Bluetooth интерфейс (для
использования только с одним адаптером)
-s SCRIPT, --script SCRIPT
Передать python скрипт, содержащий функции определения
для master_cb и slave_cb для живой манипуляции
трафиком
-l, --list Составить список адаптеров
-1 MASTER_NAME, --master-name MASTER_NAME
Подменённое имя для использования основным устройством
-2 SLAVE_NAME, --slave-name SLAVE_NAME
Подменённое имя для использования второстепенным устройством
-C, --slave-active Подменённый второстепенный адаптер будет активно подключён
к основному устройству вместо того, чтобы слушать соединения
-v, --verbose Печатать дополнительную информацию для отладки
-z, --no-sdp Позволить bluetoothd нормально запустить SDP и позволить
btproxy сообщить о скопированных службах. (Не завершено)
-q, --inquire-again Запрашивать службу снова, не использовать
сохранённые настройки.

Руководство по Btproxy

Страница man отсутствует.

Как она работает

Эта программа начинает с убийства процесса bluetoothd и снова запускает его с LD_PRELOAD указывающим на обёртку для системы привязки вызовов для блокировки bluetoothd от привязки к L2CAP порт 1 (SDP). Весь SDP трафик проходит через L2CAP порт 1, что делает простым MiTM/пересылку между двумя устройствами и нам не нужно беспокоиться о сокрытии режима поиска.

Вначале программа сканирует каждое устройство для получения его имени и класса устройства, для создания точных клонов. Она добавит строку '_btproxy' к каждому имени, чтобы сделать их различимыми с точки зрения пользователя. Эту строку вы можете заменить на свою опцией командной строки.

Затем программа просканирует службы вспомогательных (slave) устройств. Она сделает сокетное подключение к каждой службе и откроет порт прослушивания для подключения к основному (master) устройству. Когда основное устройство подключено, Proxy/MiTM полностью готова и вывод будет отправляться в STDOUT (стандартный вывод).

Примечания

Некоторые bluetooth устройства имеют различные методы спаривания, что делает этот процесс более сложным. Прямо сейчас поддерживается SPP и устаревшее спаривание с помощью пина.

У программы ещё отсутствует поддержка Bluetooth с низким энергопотреблением

Примеры запуска Btproxy

Для запуске простой MiTM или прокси для двух устройств запустите:

btproxy <master-bt-mac-address> <slave-bt-mac-address>
# Будет сделано подключение к второстепенному 40:14:33:66:CC:FF устройству
# и ожидание подключения от основного F1:64:F3:31:67:88 устройства
btproxy F1:64:F3:31:67:88 40:14:33:66:CC:FF

Обычно основным устройством выступает телефон, а второстепенным mac адресом обычно является другое периферийное устройство (смарт часы, наушники, клавиатура, obd2 dongle и т.д.).

Основное устройство (master) отправляет запрос на подключение, а второстепенное устройство (slave) прослушивает, чтобы кто-то к нему подключился.

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

hcitool scan
hcitool inq

Для получения списку служб на устройстве:

sdptool records <bt-address>

Использование

Некоторые устройства могут ограничивать подключения, основываясь на имени, классе или адресе другого bluetooth устройства.

Поэтому программа получить эти свойства целевого устройства, которое нужно проксировать, и затем клонирует их в проксирующий адаптер(ы).

Затем она начнёт с попытки подключиться к второстепенному устройству из клонированного мастер адаптера. Это создаст сокет для каждой имеющейся на slave службе и будет ретранслировать трафик независимо для каждой из них.

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

Использование только одного адаптерах

Эта программа использует как 1, так и 2 Bluetooth адаптера. Если вы используете один адаптер, тогда будет клонировано только второстепенное устройство. Если используется 2 адаптера, то будут клонированы оба устройства; это может быть необходимо для более ограничительных Bluetooth устройств.

Продвинутое использование

Манипулирование трафиком может обрабатываться python'ом, указав в опции командной скрипт. Просто реализуйте функции вызова master_cb и slave_cb. Они вызываются при получении и возврате полученных данных обратно на соответствующее устройство.

# replace.py
def master_cb(req):
"""
Что-то получено от основного устройства для отправки второстепенному.
"""
print '<< ', repr(req)
open('mastermessages.log', 'a+b').write(req)
return req

def slave_cb(res):
"""
Как и выше, но от второстепенного устройства для отправки основному
"""
print '>> ', repr(res)
open('slavemessages.log', 'a+b').write(res)
return res

Также смотрите пример функции для манипулирования трафиком с часами Pebble в replace.py

Этот код может быть отредактирован и перегружен во время работы нажатием 'r' в консоле программы. Это позволит избежать возни с повторными соединениями. Любые ошибки будут отловлены, и обычная передача будет продолжаться.

Установка Btproxy

Зависимости

Нужна по крайней мере 1 Bluetooth карта (USB или внутренняя).

Работает на Linux, других *nix или OS X.

BlueZ 4

Установка в Kali Linux

sudo apt-get install bluez bluez-tools libbluetooth-dev python-dev
git clone https://github.com/conorpp/btproxy.git
cd btproxy/
sudo python setup.py install

Установка в BlackArch

sudo pacman -S bluez bluez-utils python2 --needed
git clone https://github.com/conorpp/btproxy.git
cd btproxy/
sudo python setup.py install

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты Btproxy

O7rRtDfC7sA.jpg


Ошибки Btproxy

Зависания btproxy или bluetoothd

Если вы используете bluez 5, вам следует попробовать удалить и установить bluez 4. С bluez 5 возможны зависания.

error accessing bluetooth device (ошибка доступа к устройству bluetooth)

Убедитесь, что bluetooth адаптер подключён и включен.

Запустите

# Просмотр списка адаптеров
hciconfig -a

# Включить
sudo hciconfig hciX up

# если вы получили это сообщение
Can't init device hci0: Operation not possible due to RF-kill (132)

# тогда попробуйте разблокировать его командой rfkill
sudo rfkill unblock all

UserWarning: <path>/.python-eggs is writable by group/others

Исправление:

chmod g-rw,o-x <path>/.python-eggs
 

📌 Золотая реклама

AnonPaste

Верх