Bluetooth, как мы уже знаем, стала самой популярной и широко используемой во всем мире технологией беспроводной связи. С быстрым ростом развития Интернета вещей (IoT) в технологии Bluetooth, группа стандартов Bluetooth Special Interest Group (SIG) предпринимает постоянные усилия для увеличения скорости передачи с максимальным акцентом на маяки (beacons), медицинские датчики, поддержку устройств для развлечения и фитнеса.
Bluetooth Low Energy (BLE) это часть спецификации Bluetooth 4.0, которая дополнительно включает в себя классические устройства (Classic Bluetooth) и высокоскоростные протоколы (Bluetooth High Speed Protocols). В сравнении с классическими устройствами Bluetooth, устройства BLE предназначены для приложений с малым потреблением энергии (что красноречиво обозначено в названии), с сохранением примерно тех же дистанций для радиообмена данными. BLE работает по принципу "всегда выключено", и передает радиосигналы с минимально допустимыми порциями данных, только когда это необходимо. Это значительно уменьшает потребление тока устройствами BLE, что идеально подходит для применений, когда необходимо постоянное соединение с низкой скоростью передачи данных. BLE отлично подходит для пультов управления телевизором (TV remote), но не для беспроводной передачи медиа-информации (звук, видео), когда требуется передать большой объем данных. Технология BLE встроена во многие современные устройства - смартфоны, "умные" телевизоры (smart TV), медицинское оборудование, бытовое оборудование (пылесосы, кофе-машины и т. п.).
Примечание: непонятные термины и сокращения, встречающиеся в этом описании, см. в Словарике [2].
Первоначально Nokia разработала BLE для собственного проекта под названием "WIBREE", который позже был принят на вооружение Bluetooth SIG. BLE была задумана с акцентом на быструю установку соединения и повышенную энергоэффективность.
Чем BLE выделяется по сравнению с другими технологиями передачи данных по радио?
• Позволяет организовать обмен информацией между разными программно-аппаратными платформами: можно довольно просто взаимодействовать с широким спектром устройств. BLE работает на Android, iOS, Linux, Windows Phone, Windows 8/10, OS X. • Быстрая установка взаимодействия (pairing speed). • Помогает поддерживать соединение в течение длительных интервалов времени. • Значительно снижает стоимость реализации. • Высокая энергоэффективность.
Звучит хорошо, но так ли это на самом деле? Хороший вопрос с точки зрения безопасности.
Фактически BLE это просто протокол. На совести производителей оборудования лежит реализация защиты своих устройств BLE. Известно, что даже самый сильный криптографический протокол не работает из-за того, что генератор случайных чисел не является "достаточно случайным". То же самое относится и к BLE. Таким образом можно утверждать, что защита связи BLE находится в руках разработчиков, которые используют BLE.
Рассмотрим три основные уязвимости, которые BLE может подвергнуть своих пользователей:
Eavesdropping: название (eavesdropping переводится как "подслушивание") нам говорит о том, что передаваемые по радио данные, которыми обмениваются два связавшихся между собой устройства, можно "прослушать" с помощью стороннего оборудования. Соединение внутри пары устройств обозначает цепь доверия между ними. Цепь разрывается, когда отключается одно из устройств. Атакующий может использовать идентификационный номер одного из устройств (device unit number) для получения доступа к другим устройствам Bluetooth, доступным для соединения. Даже если ключи шифрования/дешифровки на устройстве должны были быть удалены, атакующий может подобрать (brute force) PIN-кода устройства, зная ID устройства, полученный с помощью Bluetooth Sniffer. Как только был вычислен PIN-код, может быть легко захвачено управление устройством.
Man in the Middle (MITM, атака "человек посередине"): в этом случае стороннее устройство представляется как два доверенных устройства, организуя через себя прозрачный обмен данными между этими двумя устройствами. Эти два устройства обмениваются данными друг с другом, ничего не подозревая о том, что на самом деле обмен происходит через третье устройство. Это третье устройство тогда получает полный контроль над радиообменом - оно может записывать передаваемые данные в свою память, удалять передаваемые данные или подменять их своими данными.
Denial of Service & Fuzzing Attack: этот тип атак обозначает нарушение связи между устройствами, возможно организованное третьей стороной. Поскольку большинство беспроводных устройств сегодня работают от встроенных батареек, есть риск возникновения ситуации атаки типа "отказ в обслуживании" (Denial of Service, DoS). Атаки DoS создают возможность частых сбоев связи из-за полного расхода энергии батареи. Fuzzing-атаки приводят к сбоям в системе связи, когда атакующий формирует неправильно сформированные или не стандартные пакеты (malformed, non-standard data), передавая их по радио в устройства Bluetooth и проверяя их ответ, что может вызвать чрезмерную нагрузку на атакуемые устройства и нарушить их работоспособность.
[Основные концепции BLE]
В технологии BLE существует две базовые концепции.
GAP - Generic Access Profile (профиль общего доступа). GATT - Generic Attribute Protocol (протокол обмена основными атрибутами).
Generic Access Profile (GAP). Эта концепция отвечает за соединения и радиооповещения (advertising). GAP дает возможность "увидеть" оповещающее о себе устройство в радиосети BLE, и это играет основную роль в том, как устройства BLE взаимодействуют с другими устройствами.
GAP подразумевает 2 роли устройств при установке радиообмена:
Peripheral devices (периферийные устройства). Обычно это маленькие, маломощные устройства, работающие от батареек, к которым могут подключаться другие устройства, обычно более сложные и мощные. Хороший пример такого устройства - датчик сердцебиения (Heart Rate Monitor, HRM sensor). Периферийное устройство оповещает от себе advertising-пакетами и действует как сервер в сети BLE, к которому могут подключаться клиенты BLE.
Central devices (центральные устройства). Обычно это сотовые телефоны или другие подобные гаджеты, у которых больше памяти и вычислительной мощности. Центральные устройства работают как клиенты BLE, прослушивая advertising-пакеты и осуществляя сеанс подключения к нужному периферийному устройству.
Здесь был упомянут процесс оповещения (advertising). Периферийное устройство может передавать advertising-данные каждые 2 (в принципе этот интервал устанавливается разработчиком, и может быть любым). Если центральное устройство готово прослушать advertisement-пакеты, то оно может отвечать на них запросом ответа (scan response). В ответ на этот запрос периферийное устройство будет передавать данные ответа на запрос (scan response data). Таким образом, центральное и периферийное устройства получают оповещение друг о друге и соединяются друг с другом.
Generic Attribute Protocol (GATT). В общем протоколе данных BLE, известном как протокол атрибутов (Attribute Protocol), концепция GATT определяет, каким образом два устройства BLE обмениваются данными друг с другом данными. Это вводит еще две дочерние концепции BLE - служба (или сервис, service) и характеристика службы (characteristic). Этот протокол GATT сохраняет все службы и их характеристики в специальную таблицу поиска атрибутов (lookup table), используя для этого 16-разрядные универсальные идентификаторы (UUID). Многие значения UUID заранее определены организацией Bluetooth SIG для определенного назначения [4] (например, характеристике значения сердцебиения назначен UUID BLE_UUID_HEART_RATE_SERVICE 0x180D). Важно отметить, что GATT становится инициированным только после того, как завершится advertising-процесс, регулируемый GAP.
Итак, GATT формируют следующие две концепции. Обе эти концепции находятся в периферийном устройстве, центральное устройство получает к ним доступ:
• Сервисы • Характеристики
Сервисы (Services). Сервис можно представить себе как шкаф, в котором есть выдвижные ящики, называемые в свою очередь характеристиками. В периферийном устройстве обычно реализовано 2 службы, но может быть одна служба или несколько служб. В службе может быть одна или несколько характеристик. Каждая служба в устройстве уникально идентифицируется с помощью UUID (Universally Unique IDentifier), который может быть длиной 16 бит для официально зарегистрированных служб, или 128 бит для пользовательских служб (custom services, т. е. это службы, произвольно созданные производителем устройства).
Характеристики (Characteristics). Это наиболее фундаментальная концепция для транзакции GATT. Каждая характеристика содержит в себе одну порцию данных, относящихся к сервису, и каждая характеристика снабжена уникальным идентификатором UUID, который однозначно отличает её от других характеристик. Например, это датчик сердцебиения HRM sensor содержит характеристику, у которой UUID = 0x180D, и из этой характеристики можно прочитать значение частоты пульса.
Организация SIG предоставляет информационные таблицы назначенных стандартных идентификаторов для сервисов и характеристик различных устройств BLE. Любое устройство BLE, которое претендует на соответствие стандарту, должно использовать идентификаторы UUID, которые организация SIG выделила для их приложений. Например, официальному идентификатору для передаваемой мощности (TX power UUID) SIG назначила значение 0x1804. Приложение устройства маячка BLE (beacon), которое было просканировано приложением nRF Connect [5], должно иметь такой же TX power UUID, как было назначено спецификациями SIG.
[Инструментарий для исследования сетей BLE]
Linux предоставляет самую лучшую поддержку для BLE. Чтобы использовать BLE, нам надо установить стек Bluetooth (BlueZ). Его можно установить, запустив команду:
pi@raspberrypi:~ $ sudo apt-get install bluez
Мы будем использовать платку Raspberry Pi 4 model B [6] с операционной системой Raspberry Pi Desktop (порт Linux Debian), на которой установлен пакет BlueZ. Можно для той же цели использовать обычный компьютер PC или ноутбук, где установлена Ubuntu. Raspberry Pi будет работать как центральный шлюз для обмена с другими периферийными устройствами. Назначения стека BlueZ - программировать и реализовать беспроводные стандарты Bluetooth.
На моей платке Raspberry Pi пакет blueZ уже был установлен, поэтому установщик пакетов вывел следующие сообщения:
pi@raspberrypi:~ $sudo apt-get install bluez
Reading package lists... Done
Building dependency tree
Reading state information... Done
bluez is already the newest version (5.50-1.2~deb10u2+rpt1).
bluez set to manually installed.
The following package was automatically installed and is no longer required:
python-colorzero
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
pi@raspberrypi:~ $ sudo apt autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
python-colorzero
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 130 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 168375 files and directories currently installed.)
Removing python-colorzero (1.1) ...
pi@raspberrypi:~ $
После установки пакета BlueZ нам понадобятся две утилиты, чтобы сканировать сеть BLE, подключаться к устройствам, читать и записывать их данные:
hcitool gatttool
Перед тем, как начать экспериментировать, нам нужно просканировать сеть BLE, чтобы обнаружить устройства, находящиеся поблизости. Если найдется устройство BLE, то мы должны выяснить, как к нему подключиться, как прочитать/записать данные. Есть некая надежда, что в устройстве обнаружится уязвимость, которую можно будет впоследствии эксплуатировать. Для этой цели незаменима утилита hcitool.
hcitool. Эта утилита использует интерфейс контроллера хоста (Host Controller Interface, HCI) в центральном устройстве (в нашем случае это будет Raspberry Pi), чтобы коммуницировать с устройствами BLE и читать/записывать их данные. Таким образом, hcitool полезна для обнаружения устройств BLE в текущем окружении, которые оповещают (advertise) о себе в сети, и после этого hcitool может быть полезна для чтения и изменения их значений (характеристик).
Значения/данные могут быть изменены только если заранее известны соответствующие служба и характеристика, откуда поступают (или куда поступают) данные. Чтобы обнаружить нужные службы и их характеристики, можно использовать другую утилиту - gatttool.
gatttool. Как было отмечено в предыдущем абзаце, gatttool в основном полезна для поиска идентификаторов служб и характеристик в устройстве BLE, их параметров доступа BLE, чтобы данные атакуемой цели должны считываться/записываться в целях исследования (уязвимостей).
[hciconfig]
Утилита hciconfig нужна только если в системе установлено несколько адаптеров Bluetooth, и для сканирования Вы хотите использовать выбранный адаптер. Основные команды hciconfig приведены в таблице 1. Полная справка по командам доступна по man hciconfig (см. также врезку ниже).
Таблица 1. Команды общего назначения.
Команда
Функция
hciconfig
Используется для конфигурирования локальных устройств и адаптеров Bluetooth. Мы можем запустить эту команду, чтобы получить список аппаратных устройство BLE (dongles), подключенных к нашему компьютеру, вместе с базовой информацией о них.
hciconfig hciX up
Включит (активирует) устройство Bluetooth с именем hciX(1).
Примечание (1): если на компьютере только один адаптер Bluetooth (как например у Raspberry Pi), то его имя обычно hci0.
ОПИСАНИЕ
hciconfig используется для конфигурирования устройств Bluetooth devices. Здесь
hciX это имя устройства, установленного в системе. Если hciX не предоставлено,
то hciconfig напечатает имя и базовую информацию о всех устройствах Bluetooth,
установленных в системе. Если hciX предоставлено, но не указана ни одна из команд,
то будет распечатана информация только об устройстве hciX. Базовая информация
это тип интерфейса, BD-адрес, ACL MTU, SCO MTU, флаги (up, init, running, raw,
page scan enabled, inquiry scan enabled, inquiry, authentication enabled,
encryption enabled).
ОПЦИИ
-h, --help
Выдаст список возможных команд.
-a, --all
Отличная от базовой информация, функции печати (print features), тип
пакета (packet type), политика соединения (link policy), режим соединения
(link mode), имя (name), класс (class), версия (version).
КОМАНДЫ
up Открыть и инициализировать устройство HCI.
down Закрыть устройство HCI.
reset Сбросить устройство HCI.
rstat Сбросить счетчики статистики.
auth Разрешить аутентикацию (установит устройство в security mode 3).
noauth Запретить аутентикацию.
encrypt
Разрешить шифрование (установит устройство в security mode 3).
noencrypt
Запретить шифрование.
secmgr Разрешить security manager (поддержка со стороны текущего ядра ограничена).
nosecmgr
Запретить security manager.
piscan Разрешить сканирование страниц и запросов (page and inquiry scan).
ptype [type]Без указания type отобразит текущие типы пакетов. Иначе будут установлены
все указанные типы пакетов. Здесь type это список типов пакетов, отделенных
друг от друга запятой. Возможные типы пакетов: DM1, DM3, DM5, DH1, DH3, DH5,
HV1, HV2, HV3.
name [name]Без указания name печатает локальное имя. Иначе установит локальное имя в name.
class [class]Без указания class печатает класс устройства. Иначе установит класс устройства
в class. Здесь class это 24-битное hex-число, описывающее класс устройства,
как это указывается в section 1.2 документа Bluetooth Assigned Numers.
voice [voice]Без указания voice печатает установки voice.Иначе установит настройки voice
в voice. Здесь voice это 16-разрядное hex-число, описывающее настройки voice.
iac [iac]Без указания iac печатает текущие установки IAC. Иначе установит IAC в iac.
inqtpl [level]Без указания level напечатает текущий уровень мощности запроса передачи.
Иначе установит текущий уровень мощности запроса передачи в level.
inqmode [mode]Без указания mode распечатает текущий режим запроса. Иначе установит текущий
режим запроса в mode.
inqdata [data]
Без data напечатает текущие данные запроса. Иначе установит данные запроса в data.
inqtype [type]
Без type напечатает текущий тип запроса сканирования. Иначе установит тип
запроса сканирования в type.
inqparams [win:int]
Без win:int напечатает окно сканирования запроса и интервал. Иначе установит окно
сканирования в win слотов, и интервал запроса сканирования в int слотов.
pageparms [win:int]
Без win:int, напечатает окно сканирования страницы и интервал. Иначе установит окно
сканирования страницы в win слотов, и интервал сканирования страницы в int слотов.
pageto [to]
Без указания to напечатает таймаут страницы. Иначе установит таймаут страницы
в .I to слотов.
afhmode [mode]
Без mode напечатает текущий режим AFH. Иначе установит режим AFH в mode.
sspmode [mode]
Без mode напечатает текущий режим упрощенной установки связи (Simple Pairing
mode). Иначе установит режим Simple Pairing в значение mode.
aclmtu mtu:pkt
Установит ACL MTU в mtu байт, и размер буфера ACL в pkt пакетов.
scomtu mtu:pkt
Установит SCO MTU в mtu байт, и размер буфера SCO в pkt пакетов.
delkey < bdaddr >
Эта команда удалит из устройства сохраненный ключ соединения (link key) для bdaddr.
oobdata
Получит локальные данные OOB (что делает недостоверными ранее прочитанные данные).
commands
Отобразит поддерживаемые команды.
features
Отобразит функции устройства.
version
Отобразит информацию версии.
revision
Отобразит информацию ревизии.
lm [mode]Без mode напечатает режим соединения (link mode). MASTER или SLAVE соответственно
обозначают запрос для перехода в режим master, или для того, чтобы остаться
в режиме slave, когда поступает запрос на соединение. Дополнительное ключевое
слово ACCEPT означает, что соединения в базовом диапазоне будут приниматься, даже
если нет прослушивающих сокетов AF_BLUETOOTH. Здесь mode это NONE, или список
отделенных друг от друга запятой ключевых слов, где возможны ключевые слова MASTER
и ACCEPT. NONE установит политику соединения (link policy) в поведение по умолчанию,
чтобы оставаться slave и не принимать соединения в базовом диапазоне, если нет
прослушивающих сокетов AF_BLUETOOTH. Если присутствует MASTER, то устройство будет
запрашивать переход в состояние master, если поступил запрос соединения. Если
присутствует ACCEPT, то устройство будет принимать соединения в базовом диапазоне,
даже когда нет прослушивающих AF_BLUETOOTH сокетов.
[hcitool]
Утилита hcitool используется для конфигурирования соединений Bluetooth, и посылает некоторые специальные команды устройствам Bluetooth. См. также man hcitool, или врезку ниже.
Таблица 2. Основные команды hcitool.
Команда
Функция
hcitool -i hciX
Использовать для команды интерфейс hciX. Если не указано, то по умолчанию будет использоваться первый доступный интерфейс.
hcitool scan
Запуск сканирования классических (не BLE) устройств Bluetooth, которые находятся в режиме, доступном для распознавания (discoverable mode).
ОПИСАНИЕhcitool используется для конфигурирования соединений Bluetooth и для отправки некоторых
специальных команд в устройства Bluetooth. Если не предоставлена command, или если
используется опция -h, то hcitool распечатает информацию по использованию (usage)
и завершит работу.
ОПЦИИ-h Выдаст список доступных команд.
-i < hciX >
Команда применяется к устройству hciX. Здесь hciX должно быть именем установленного
устройства Bluetooth. Если не указано, то команда будет отправлена в первое доступное
устройство Bluetooth.
КОМАНДЫdev Отобразит локальные устройства.
inq Опрашивает remote-усройства. Для каждого обнаруженного устройства печатаются адрес
устройства Bluetooth, смещение частоты тактов (clock offset) и класс (class).
scan Запрашивает список remote-устройств. Для каждого обнаруженного устройства печатаются
его имя (device name).
name < bdaddr >
Печатает device name для remote-устройства по указанному Bluetooth-адресу bdaddr.
info < bdaddr >
Печатает device name, версию и поддерживаемые функции для remote-устройства
по указанному Bluetooth-адресу bdaddr.
spinq Запускает процесс периодических опросов (periodic inquiry). Результаты опроса
не печатаются.
epinq Выход из процесса периодических опросов (periodic inquiry).
cmd < ogf > < ocf > [parameters]
Отправит произвольную HCI-команду в локальное устройство. Здесь ogf, ocf
и parameters это hex-байты.
con Отобразит активные соединения в базовом диапазоне.
cc [--role=m|s] [--pkt-type=< ptype >] < bdaddr >
Создаст соединение в базовом диапазоне с remote-устройством по Bluetooth-адресу
bdaddr. Опция --pkt-type задает список разрешенных типов пакетов. Здесь ptype это
список типов пакетов, где каждый тип отделен друг от друга запятой. Возможные
типы пакетов DM1, DM3, DM5, DH1, DH3, DH5, HV1, HV2, HV3. По умолчанию допускаются
все типы пакетов. Опция --role может иметь значение m (на разрешать смену роли,
оставаться master) или s (разрешить переключение роли, перейти в режим slave,
если пир запросит переход в режим master). По умолчанию используется m.
dc < bdaddr > [reason]
Удаляет соединение в базовом диапазоне с remote-устройством по Bluetooth-адресу
bdaddr. Здесь reason может быть одним из кодов ошибки Bluetooth HCI. По умолчанию
19 для соединений, завершенных по инициативе пользователя. Указываемое значение
должно быть в десятичном формате.
sr < bdaddr > < role >
Переключение роли соединения базового диапазона с remote-устройством в режим
master или slave.
cpt < bdaddr > < packet types >
Меняет типы пакетов для соединения в базовом диапазоне для устройства по
Bluetooth-адресу bdaddr. Параметр packet types это список типов пакетов,
где каждый тип отделен друг от друга запятой. Допускаются типы пакетов DM1,
DM3, DM5, DH1, DH3, DH5, HV1, HV2, HV3.
rssi < bdaddr >
Отображает информацию об уровне принимаемого сигнала (received signal strength
information) для соединения с устройством по Bluetooth-адресу bdaddr.
lq < bdaddr >
Отобразит качество соединения (link quality) с устройством по Bluetooth-адресу
bdaddr.
tpl < bdaddr > [type]
Отобразит уровень передаваемой мощности для соединения с устройством по
Bluetooth-адресу bdaddr. Здесь type может быть 0 для текущего уровня передаваемой
мощности (по умолчанию) или 1 для максимального уровня передаваемой мощности.
afh < bdaddr >
Отобразит карту каналов AFH для соединения с устройством по Bluetooth-адресу bdaddr.
lp < bdaddr > [value]
Без value отобразит настройки политики соединения (link policy) для соединения
с устройством по Bluetooth-адресу bdaddr. Если указано value, то установит link
policy для этого соединения в value. Возможны значения для value: RSWITCH, HOLD,
SNIFF и PARK.
lst < bdaddr > [value]
Без value отобразит таймаут супервизора соединения (link supervision timeout)
с устройством по Bluetooth-адресу bdaddr. Если указано value, то установит link
supervision timeout для этого соединения в значение value слотов, или в бесконечность,
если value равно 0.
auth < bdaddr >
Запрашивает аутентикацию для устройства с Bluetooth-адресом bdaddr.
enc < bdaddr > [encrypt enable]
Разрешает или запрещает шифрование для устройства по Bluetooth-адресу bdaddr.
key < bdaddr >
Меняет ключ линка (link key) соединения для устройства по Bluetooth-адресу bdaddr.
clkoff < bdaddr >
Считывает смещение тактов (clock offset) для устройства по Bluetooth-адресу bdaddr.
clock [bdaddr] [which clock]
Считывает такты для для устройства по Bluetooth-адресу bdaddr. Здесь clock может
быть 0 для локальных тактов, или 1 для piconet clock (по умолчанию).
Команда grep используется для фильтрации вывода информации о найденных устройствах. Здесь stdbuf -oL используется, чтобы избежать промежуточной буферизации вывода hcitool, и необходимые искомые отфильтрованные значения отображались сразу [3].
[gatttool]
Утилита gatttool позволяет распознавать GATT. С её помощью можно прочитать структуру GATT, а также читать и записывать характеристики GATT. См. также полный список команд в результатах вывода man gatttool, или врезку ниже.
Таблица 3. Основные команды gatttool.
Команда
Функция
gatttool -I
Запуск gatttool в интерактивном режиме.
gatttool -t random -b [adr] -I
Запуск gatttool в интерактивном режиме, с использованием случайного адреса BLE. Соединение с remote-устройством Bluetooth, у которого адрес adr.
primary
Проверка наличия доступных сервисов у подключенного устройства BLE.
characteristic
Проверка наличия доступных характеристик у подключенного устройства BLE, откуда мы могли бы прочитать данные.
char-desc
Распознавание описателя характеристики (Characteristics Descriptor Discovery). Проверка для n количества дескрипторов (handles).
NAME
gatttool - утилита для работы с устройством Bluetooth Low Energy (BLE)
SYNOPSIS
gatttool
ОПИСАНИЕ
gatttool это инструмент, который может использоваться для манипуляции атрибутами
устройства BLE.USAGE
gatttool [опция...]
Help по опциям:
-h, --help Показать подсказку по опциям.
--help-all Показать подсказку всем опциям.
--help-gatt Показать все команды GATT.
--help-params Показать все аргументы Primary Services/Characteristics.
--help-char-read-write Показать все аргументы Characteristics Value/Descriptor
Read/Write
Опции приложения:
--i, ---adapter=hciX Указать адаптер локального интерфейса
--b, ---device=MAC Указать Bluetooth-адрес remote-устройства
--t, ---addr-type=[public | random] Установить тип адреса LE. По умолчанию: public
--m, ---mtu=MTU Указать размер MTU
--p, ---psm=PSM Указать PSM для GATT/ATT поверх BR/EDR
--l, ---sec-level=[low | medium | high] Установить security level. По умолчанию: low
--I, ---interactive Использовать интерактивный режим
Пример интерактивной сессии с подключением к устройству BLE, у которого MAC-адрес D9:9D:36:54:C5:26:
pi@raspberrypi:~ $sudo gatttool -t random -b D9:9D:36:54:C5:26 -I
[D9:9D:36:54:C5:26][LE]> connect
Attempting to connect to D9:9D:36:54:C5:26
Connection successful
[D9:9D:36:54:C5:26][LE]>
Примечание: здесь указана опция -t random для того, чтобы избежать ошибки подключения "Error: connect error: Connection refused (111)" [7].
Пример чтения информации об идентификаторах служб (uuid:). Здесь также выдаются значения дескрипторов служб (attr handle:).
[D9:9D:36:54:C5:26][LE]> primary
attr handle: 0x0001, end grp handle: 0x0009 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000a, end grp handle: 0x000a uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x000b, end grp handle: 0xffff uuid: 0000180D-0000-1000-8000-00805f9b34fb
Пример чтения информации об идентификаторах характеристик (uuid:). Здесь также выдаются свойства характеристик (char properties:) и значения дескрипторов хаоактеристик (char value handle:). Значения дескрипторов характеристик понадобятся для того, чтобы считывать и записывать характеристики.