
BLE-фреймворк Man-in-the-Middle, перехватывающий, воспроизводящий и изменяющий GATT-трафик между Bluetooth Smart-устройствами и мобильными приложениями через веб-интерфейс прокси-перехвата.
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
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 в правом верхнем углу, или воспользоваться контекстным меню, чтобы включить или отключить перехват (hook) для конкретного сервиса и характеристики. Каждый раз, когда перехватывается GATT-операция, появляется следующее диалоговое окно:

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

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

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