Btproxy
Описание Btproxy
Btproxy — это инструмент проведения атаки человек-посередине для Bluetooth устройств. Программа выступает в качестве MiTM прокси, используется для активного анализа bluetooth подключений
Домашняя страница: https://github.com/conorpp/btproxy
Автор: Conor Patrick
Лицензия: GPLv3
Справка по 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) прослушивает, чтобы кто-то к нему подключился.
После того, как прокси подключается к второстепенному устройству, и основное устройство подсоединяется к прокси устройству, вы сможете видеть и модифицировать трафик.
Как узнать BT MAC адрес?
Вы можете посмотреть его в настройках, обычно это возможно для телефона. Самый надёжный способ — это перевести режим в режим поиска и просканировать его.
Имеется два способа просканировать устройства: сканирование и запрос. Это можно сделать с hcitool:
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
Ошибки 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
Инструкции по Btproxy
Ссылки на инструкции будут добавлены позже.
Comments are Closed