
BtleJuice Bluetooth Smart (LE) Man-in-the-Middle framework
BtleJuice — это полноценный фреймворк для проведения атак типа «человек посередине» (Man-in-the-Middle) на устройства Bluetooth Smart (также известные как Bluetooth Low Energy). Он состоит из:
Установка BtleJuice проста как дважды два. Прежде всего убедитесь, что в вашей системе используется актуальная версия Node.js (>=4.3.2) и npm. Затем установите все необходимые зависимости:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
### Fedora / Other-RPM based
sudo yum install bluez bluez-libs bluez-libs-devel npm
Наконец, установите BtleJuice с помощью npm:
sudo npm install -g btlejuice
Если всё прошло успешно, BtleJuice готов к использованию!
BtleJuice состоит из двух основных компонентов: прокси-сервера перехвата и ядра. Эти два компонента должны работать на независимых машинах, чтобы одновременно задействовать два адаптера Bluetooth 4.0+. BtleJuice Proxy не работает в контейнере Docker.
Использование виртуальной машины может помочь запустить этот фреймворк на одном компьютере.
В виртуальной машине установите btlejuice и убедитесь, что USB-адаптер BT4 доступен из виртуальной машины:
$ sudo hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 10:02:B5:18:07:AD ACL MTU: 1021:5 SCO MTU: 96:6
DOWN
RX bytes:1433 acl:0 sco:0 events:171 errors:0
TX bytes:30206 acl:0 sco:0 commands:170 errors:0
$ sudo hciconfig hci0 up
Затем убедитесь, что у виртуальной машины есть IP-адрес, доступный с хоста.
Запустите прокси в виртуальной машине:
$ sudo btlejuice-proxy
На хосте не забудьте остановить службу bluetooth и убедиться, что устройство HCI остаётся открытым/инициализированным:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
Наконец, выполните на хосте следующую команду:
$ sudo btlejuice -u <Proxy IP address> -w
Флаг -w указывает BtleJuice запустить веб-интерфейс, а опция -u задаёт IP-адрес прокси.
Веб-интерфейс теперь доступен по адресу http://localhost:8080. Обратите внимание, что порт веб-сервера можно изменить через командную строку.
Веб-интерфейс BtleJuice предоставляет в правом верхнем углу набор ссылок для управления ядром перехвата, как показано ниже.

Сначала нажмите кнопку Select target — появится диалог, отображающий все доступные устройства Bluetooth Low Energy, обнаруженные ядром перехвата:

Дважды щёлкните по нужной цели, дождитесь готовности интерфейса (вид кнопки Bluetooth изменится). Как только поддельное устройство будет готово, используйте соответствующее мобильное приложение или другое устройство (в зависимости от ожидаемого) для подключения к поддельному устройству. Если подключение успешно, на главном интерфейсе отобразится событие Connected.

Все перехваченные GATT-операции отображаются с соответствующими UUID служб и характеристик, а также, конечно, с связанными с ними данными. По умолчанию данные показываются в формате HexII (вариант формата, разработанного Анжем Альбертини), но вы можете переключаться между HexII и Hex (и обратно), щёлкая по самим данным. BtleJuice поддерживает оба формата: Hex и HexII.
Можно повторить любую GATT-операцию, щёлкнув по ней правой кнопкой мыши и выбрав опцию Replay, как показано ниже:


Нажмите кнопку Write (или Read), чтобы повторить соответствующую GATT-операцию. Эта операция будет записана в журнале главного интерфейса.
И последнее, но не менее важное: интерфейс может перехватывать локально или глобально любую GATT-операцию и позволять модификацию данных на лету. Вы можете использовать глобальный перехват, нажав кнопку Intercept в правом верхнем углу, или использовать контекстное меню для включения/отключения перехвата для конкретной службы и характеристики. При каждом перехвате GATT-операции будет появляться следующее диалоговое окно:

Начиная с версии 1.0.6 интерфейс предоставляет функцию экспорта данных, поддерживающую читаемый и JSON-экспорт. Эти экспорты формируются на основе перехваченных GATT-операций, но также включают информацию об устройстве-цели. При нажатии кнопки Export появится следующее диалоговое окно:

Нажмите кнопку Export внизу диалогового окна, чтобы загрузить JSON (или текстовую) версию перехваченных данных.
Диалог настроек в настоящее время предоставляет единственную опцию, позволяющую автоматически переподключать прокси при отключении устройства-цели. Это может быть полезно при работе с устройствами, которые активны в течение короткого времени.

Нажатие кнопки Select Target в правом верхнем углу, когда прокси активен, остановит его и позволит снова выбрать цель.
Привязки BtleJuice для Node.js также можно установить через npm:
$ sudo npm install -g btlejuice-bindings
Дополнительная информация об использовании привязок для Node.js — в документации пакета.
Особая благодарность Slawomir Jasek, который указал множество трюков с noble/bleno для обхода проблем с мобильными приложениями и поделился стратегиями BLE MITM на DEF CON 24 =). Он также является автором Gattacker.
Copyright (c) 2016 Econocom Digital Security
Настоящим предоставляется бесплатное разрешение любому лицу, получившему копию данного программного обеспечения и сопутствующей документации (далее — «Программное обеспечение»), безвозмездно распоряжаться Программным обеспечением без ограничений, включая, без ограничения, права на использование, копирование, изменение, объединение, публикацию, распространение, сублицензирование и/или продажу копий Программного обеспечения, а также разрешать лицам, которым предоставляется данное Программное обеспечение, делать это при соблюдении следующих условий:
Вышеуказанное уведомление об авторском праве и данное уведомление о разрешении должны быть включены во все копии или значительные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ОПРЕДЕЛЕННОМУ НАЗНАЧЕНИЮ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, УБЫТКАМ ИЛИ ИНЫМ ТРЕБОВАНИЯМ, КАК В СВЯЗИ С ДОГОВОРОМ, ДЕЛИКТОМ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКШИМ ИЗ, В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С НИМ.