MITM-прокси для Bluetooth Low Energy GATT-коммуникаций. Клонирует BLE-устройство, подключается к нему от имени легитимного клиента и позволяет перехватывать и модифицировать BLE-трафик в реальном времени. Идеален для атак на IoT-устройства.
npm install gattacker # Сканирование и клонирование: node scan.js node advertise.js <device-id> # MITM: node mitm.js

Пакет Node.js для Man-in-the-Middle (человек посередине) атак и многого другого в BLE (Bluetooth Low Energy).
см.:
https://github.com/sandeepmistry/noble
https://github.com/sandeepmistry/bleno
npm install gattacker
При запуске обоих компонентов настройте переменные в config.env:
Если вы запускаете модули "центральное" и "периферийное" на разных компьютерах только с одним интерфейсом BT4, вы можете оставить значения закомментированными.
sudo node ws-slave
Подключается к целевому периферийному устройству и выступает в роли websocket-сервера.
Отладка:
DEBUG=ws-slave sudo node ws-slave
node scan
Без параметров сканирует широковещательные объявления и записывает их как json-файлы (.adv.json) в DEVICES_PATH
node scan <периферийное>
Исследует службы и характеристики выбранного периферийного устройства. Сохраняет исследованную структуру служб в json-файл (.srv.json) в DEVICES_PATH.
Для активного искажения запросов/ответов настройте функции-хуки для характеристик в json-файле служб устройства.
Пример:
{
"uuid": "06d1e5e779ad4a718faa373789f7d93c",
"name": null,
"properties": [
"write",
"notify"
],
"startHandle": 8,
"valueHandle": 9,
"endHandle": 10,
"descriptors": [
{
"handle": 10,
"uuid": "2902",
"value": ""
}
],
"hooks": {
"dynamicWrite": "dynamicWriteFunction",
"dynamicNotify": "customLog"
}
}
Функции:
dynamic: подключается к оригинальному устройству
static: не подключается к оригинальному устройству, запускает функцию искажения локально
Будет предпринята попытка вызвать указанную функцию из hookFunctions, добавьте свою собственную. Несколько примеров предоставлены в подкаталоге hookFunctions.
staticValue - статическое значение
node advertise -a <файл_объявления_json> [ -s <файл_служб_json> ]
Оно подключается через websocket к ws-slave для пересылки запросов на оригинальное устройство. Статический запуск (-s) устанавливает службы локально, не подключаясь к ws-slave. Вам нужно правильно настроить хуки.
Для многих приложений необходимо клонировать MAC-адрес оригинального устройства. В helpers/bdaddr предоставлен вспомогательный инструмент bdaddr от Bluez.
cd helpers/bdaddr
make
обертка (wrapper script):
./mac_adv -a <файл_объявления_json> [ -s <файл_служб_json> ]
Файлы дампов сохраняются по пути, настроенному в DUMP_PATH в config.env (по умолчанию dump).
Дополнительная информация:
https://github.com/securing/gattacker/wiki/Dump-and-replay
Выключите, скрестите пальцы, попробуйте снова ;)
hciconfig <hci_интерфейс> reset
С такой конфигурацией вы можете столкнуться с различными проблемами.
Попробуйте поменять местами NOBLE_HCI_INTERFACE и BLENO_HCI_INTERFACE
hcidump -x -t <hci_интерфейс>
ЧАВО (FAQ): https://github.com/securing/gattacker/wiki/FAQ
Дополнительная информация: www.gattack.io)
Авторское право (C) 2016 Славомир Ясек, SecuRing slawomir.jasek@securing.pl
Настоящим предоставляется разрешение любому лицу, получившему копию данного программного обеспечения и сопутствующей документации (далее "Программное обеспечение"), на бесвозмездное использование Программного обеспечения без каких-либо ограничений, включая, но не ограничиваясь, права на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного обеспечения, а также предоставление указанным лицам Программного обеспечения, при условии соблюдения следующих условий:
Указанное уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА КАКИЕ-ЛИБО ИСКИ, УБЫТКИ ИЛИ ИНУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ ТО В ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТА ИЛИ ИНАЧЕ, ВОЗНИКШУЮ ИЗ, ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ В ПРОГРАММНОМ ОБЕСПЕЧЕНИИ.