Эта статья посвящена старой, но все еще актуальной уязвимости протокола Bluetooth Low Energy 4.0 - 4.1.
Справка – версия Bluetooth и BLE не может быть обновлена, так как зависит от адаптера, который чаще всего припаян к плате устройства.
В современном мире понятие Bluetooth перегружено. Что первое приходит на ум, когда говорят: «работает по Bluetooth»? Конечно же беспроводные колонки, фитнес браслеты, пульты управления, клавиатуры, мышки и огромное множество другой мелкой техники, которую в современном мире принято называть Интернет Вещей (IoT). На самом деле большинство из них передают информацию по протоколу Bluetooth Low Energy (BLE или Bluetooth Smart).
Протокол BLE – спецификация ядра Bluetooth, определенная в стандарте Bluetooth 4.0, который отличается малым энергопотреблением по сравнению с классической версией протокола.
Справка – начиная с версии 4.0 Bluetooth SIG фактически поддерживает два стандарта: BR/EDR и Low Energy.
Устройства в Bluetooth на данный момент делятся на 3 типа:
Bluetooth Classic;
Bluetooth Low Energy;
Устройства, поддерживающие оба протокола.
На самом деле большинство современных Bluetooth адаптеров в телефонах, ноутбуках и прочих гаджетов относятся к 3 типу.
Значительная часть современных компактных устройств работает исключительно с протоколом BLE. Получив доступ к умным часам, беспроводным датчикам и прочей электронике, злоумышленник может попытаться использовать их для доступа к вашему телефону или компьютеру. Исходя из этого встает вопрос: насколько безопасно использование устройств с поддержкой BLE?
Теоретическое описание уязвимостей
Для ответа на поставленный вопрос обратимся к одной из первых стадий работы протокола – сопряжение двух устройств. Сопряжение происходит в несколько этапов:
Этап 1. Обмен функциями сопряжения;
Этап 2. (LE legacy pairing) или (LE Secure Connections);
Этап 3. Распределение ключей для транспорта.
Чтобы понимать, как устройства решают каким методом будут пользоваться на 2 этапе, надо ознакомиться с форматом пакета сопряжения. На 1 этапе сопряжения устройства обмениваются пакетами, из которых узнают возможности друг друга и однозначно определяют метод сопряжения. Формат пакета сопряжения приведен на рисунке 1.
Из формата протокола видно, что есть некоторые флаги, от постановки которых зависит выбор метода сопряжения. Если выставлен флаг SC на обоих устройствах, то они будут сопрягаться по Secure Connection, иначе будет использоваться Legacy Pairing.
Этап 2 зависит от версии протокола, которую поддерживает устройство. Изучить подробно все этапы сопряжения можно на официальном сайте Bluetooth SIG или в переводе книги Мохаммада Афане “Intro to Bluetooth Low Energy”. Рассмотрим подробнее этап 2 LE legacy pairing. В нем были найдены уязвимости в процессе сопряжения, благодаря которым можно расшифровать все данные, которыми обмениваются устройства.
Для того, чтобы понять суть уязвимости, и как ее устранили в современной версии протокола BLE, обратимся к теоретическому описанию работы протокола. Legacy pairing имеет три метода сопряжения:
Just Works – временный ключ равен 0. Метод наименее безопасный из всех;
Out of Band (OOB) – использование другого метода передачи, например NFC. Этот способ зависит от степени защиты используемой технологии;
Пароль – используется pin-код из 6 цифр.
В случае использования Legacy pairing для выбора метода сопряжения устройства будут пользоваться таблицей, приведенной на рисунке 2.
Уточнение – в случае использования Secure Connection будет использована другая таблица.
Для того, чтобы понимать дальнейшее описание протокола, будет полезно ознакомиться с небольшим словарем терминов:
Temporary Key (TK) – создание временного ключа зависит от выбора метода сопряжения. Временный ключ создается каждый раз, когда происходит процесс сопряжения. Он используется только в устаревших методах соединения;
Short Term Key (STK) – кратковременный ключ создается с использованием временного ключа, общего для обоих устройств. Кратковременный ключ генерируется каждый раз, когда происходит процесс сопряжения и используется для шифрования данных, передаваемых между устройствами в текущем соединении. Он используется только в устаревших методах соединения;
Long Term Key (LTK) – долгосрочный ключ создается и сохраняется на устройстве во время третьего шага процесса обеспечения безопасности в устаревших соединениях и во время второго шага в безопасных соединениях. Он сохраняется на каждом из двух связанных устройств и используется в последующих соединениях между двумя устройствами;
Mrand и Srand – 128-битные случайные числа, которые генерируют инициатор и ответчик соответственно;
Mconfirm и Sconfirm– 128-битные значения подтверждения, которые вычисляются с помощью функции c1.
В случае, когда выбран метод «Use IO Capabilities» будет произведен еще один шаг для определения метода сопряжения. Выбор метода зависит от нескольких факторов, таких как наличие дисплея и устройств ввода-вывода. Более подробно на рисунке 3.
Если выбран второй метод, то нельзя сказать ничего однозначного, потому что в нем могут применяться разные технологии, но про первый и третий можно порассуждать. Итак, после выбора метода сопряжения начинается шаг 2. Схема выполнения шага 2 изображена на рисунке 4.
Создание случайного значения с обеих сторон: Mrand и Srand;
Вычисляется Mconfirm и Sconfirm с помощью функции c1;
Инициатор отправляет Mconfirm, Sconfirm и Mrand;
-
Отвечающее устройство проверяет значение Mconfirm, повторяя вычисление, выполняемое инициирующим устройством с использованием полученного значения Mrand:
Если вычисленное значение Mconfirm отвечающего устройства не совпадает с полученным значением Mconfirm от инициирующего устройства, то процесс сопряжения будет прерван, и отвечающее устройство отправит команду Pairing Failed с кодом причины «Confirm Value Failed»;
Если вычисленное значение Mconfirm отвечающего устройства совпадает с полученным значением Mconfirm от инициирующего устройства, тогда отвечающее устройство передает Srand инициирующему устройству;
-
Устройство-инициатор проверяет полученное значение Sconfirm, повторяя вычисление, выполняемое отвечающим устройством с использованием полученного значения Srand:
Если инициирующее устройство рассчитало значение Sconfirm, которое не соответствует полученному значению Sconfirm от отвечающего устройства, то процесс сопряжения будет прерван, и устройство-инициатор отправит команду Pairing Failed с кодом причины «Confirm Value Failed»;
Если вычисленное значение Sconfirm инициирующего устройства совпадает с полученным значением Sconfirm от отвечающего устройства, то инициирующее устройство вычисляет Краткосрочный ключ (STK) с помощью функции s1 и сообщает контроллеру включить шифрование.
Функции s1 и c1 подробно описаны в спецификации Bluetooth. Для понимания сути достаточно знать входные данные этих функций.
Функция c1 принимает на вход следующие параметры:
TK;
Mrand для создания Mconfirm или Srand для создания Sconfirm;
Команда запроса на сопряжение;
Команда ответа на сопряжение;
Тип адреса инициатора;
Адрес инициатора;
Тип адреса ответчика;
Адрес ответчика.
Функция s1 принимает на вход следующие параметры:
TK;
Strand;
Mrand.
Стоит отметить, что на третьем шаге в Legacy Pairing создается ключ LTK, который используется для последующего шифрования канала между устройствами. В Secure Connection LTK ключ создается на втором шаге.
Легко заметить, что, зная TK, Srand, Mrand, мы сможем воспроизвести STK, тогда атака на алгоритм сводится к перебору значений от 000000 до 999999.
Почему этим не пользуется каждый? Во-первых, эта уязвимость была в версиях BLE 4.0-4.1, начиная с версии 4.2 в BLE добавили режим сопряжения Secure connection, который для согласования LTK использует ассиметричную криптографию на основе эллиптических кривых Диффи-Хеллмана.
Во-вторых, перехватить все пакеты сопряжения — не самая простая задача. Bluetooth работает на частоте 2.4 ГГц, а точнее в диапазоне 2.402-2.480 ГГц. Получается всего 79 каналов шириной 1 МГц, и помимо шифрования связи используется быстрая смена канала. В связи с этим, для перехвата сопряжения двух устройств нужно использовать специальное оборудование, такое как Ubertooth — это устройство, способное смотреть на все каналы сразу.
Пример реализации описанной атаки
Для реализации атаки понадобится:
Ubertooth или любое другое устройство, способное захватывать пакеты BLE со всех каналов сразу;
Устройство с Linux;
Уязвимое устройство, в моем случае Bluetooth Mouse 3600;
Любое устройство с поддержкой BLE, в моем случае это ноутбук с Windows 10.
Примечание: данную мышь я использую как основную на протяжении нескольких лет, она до сих пор доступна для продажи.
1 шаг. Настраиваем Ubertooth, устанавливаем необходимые библиотеки для снифера трафика, в моем случае Wireshark. Подробности на GitHub Ubertooth. Делаем пробный запуск, чтобы убедиться, что можем двигаться дальше. После проверки оборудования приступаем к основным действиям.
Поднимаем Bluetooth адаптер:
Создаем файл для pipe’s:
Запускаем Ubertooth:
Открываем wireshark и настраиваем файл pipe’s:
2 шаг. Запускаем перехват пакетов.
3 шаг. Начинаем процесс сопряжения устройств.
4 шаг. После успешного процесса сопряжения необходимо проверить наличие нужных пакетов. Сделать это можно с помощью фильтра:
Как понять, что захвачен процесс сопряжения нужных устройств? Для этого достаточно знать MAC-адрес одного из них. Есть множество способов определить MAC-адреса Bluetooth устройств. На мой взгляд самые эффективные и при этом простые:
Поиск Bluetooth устройств: «hcitool scan»;
Поиск BLE устройств: «hcitool lescan»;
Утилита Bettercap;
Утилита BlueHydra;
Утилита Bluescan.
5 шаг. Как только мы смогли найти MAC-адрес интересующего нас устройства, стало понятно, что на 4 шаге было перехвачено искомое соединение. Для того, чтобы найти pin-код и впоследствии LTK, воспользуемся готовым решением: crackle. Программе достаточно дать на вход *.pcap файл и она сама найдет все попытки сопряжения, а после этого попытается выполнить атаку.
В данном случае было найдено 2 попытки сопряжения. Между первой парой устройств не удалось перехватить несколько нужных для атаки пакетов. У второй пары устройств нашлись все нужные пакеты. Как стало понятно, Bluetooth Mouse 3600 использует стандартный pin-код 000000. После нахождения pin-кода удалось получить LTK.
Пример определения Secure Connection продемонстрирован на рисунке 10. Пример взят с GitHub проекта Crackle.
Пример атаки грубой силой для нахождения pin-кода представлен на рисунке 11. Пример взят с GitHub проекта.
Чем это опасно?
Во-первых, если устройством будет не Bluetooth мышь, а «умный» фитнес браслет, то злоумышленник сможет попытаться получить конфиденциальную информацию.
Во-вторых, существуют методы атак на достоверное соединение Bluetooth. Угроза заключается в том, что потенциальный злоумышленник может выдать свое устройство, например беспроводные наушники, за Bluetooth клавиатуру. Как показывает практика до недавнего времени большинство современных операционных систем не замечали кардинальной смены устройства, когда наушники становились клавиатурой. В рассмотренном в статье примере уязвимой является Bluetooth мышь, которая использует такой же, как и клавиатура, профиль Bluetooth – Human Interface Device.
Эта атака является одним из возможных вариантов получения LTK. На момент написания статьи на яндекс маркете продавались сотни устройств, использующие BLE 4.0-4.1, на Aliexpress также продается множество устройств, поддерживающих данную технологию, но зачастую бывает, что продавцы не указывают в описании версию BLE.
Как обезопасить себя?
Во-первых, нужно понимать, что BLE – это ограниченная по дальности технология. В данной статье предполагалось, что атакующий может находится в радиусе до 20 метров. Исходя из этого, стоит правильно выбирать место, где происходит процесс сопряжения устройств.
Во-вторых, в случаях, когда ваше BLE устройство теряет соединение, не торопитесь сразу же делать переподключение, в данной ситуации стоит проявить бдительность.
В-третьих, если Bluetooth не используется, держите его в выключенном состоянии.
В-четвертых, проверьте какой версией BLE оснащено ваше устройство, если версия 4.2 и выше, то данной уязвимости оно не подвержено. А если все-таки версия 4.0-4.1, то не стоит расстраиваться раньше времени, ведь вполне возможно, что ваше устройство для сопряжения использует стороннюю технологию, например NFC, или как делает Apple в своих умных часах – камеру устройства нужно навести на множество постоянно движущихся точек на экране часов, после чего происходит сопряжение. Также стоит обращать внимание на версию Bluetooth при покупке новых устройств. В настоящее время большинство производителей используют Bluetooth 5.0, но зачастую бывает, что на распродажах продают старые устройства, которые могут иметь уязвимую версию протокола.
Уточнение – если телефон или компьютер оснащены самой новой версией Bluetooth, а ваши старенькие наушники или фитнес браслет работают на версии 4.0-4.1, то процесс сопряжения будет проходить по старой версии (Legacy pairing).
Самый быстрый способ определить версию BLE на устройстве – посмотреть в инструкции или на сайте производителя спецификации. О том, как узнать версию BLE другим способом можно написать отдельную статью.
jaha33
А если устройства используют Bonding? В этом случае, при первом соединении создадутся временные ключи, пройдет вся процедура соединения и появятся LTK, которые сохранятся в памяти устройств. И при следующем соединении уже будут сразу использоваться LTK.
И кстати: для прослушки пароля вполне будет достаточно донгла/отладки от Nordic с их прошивкой для сниффера и wireshark,куда надо докинуть плагины от Nordic. Такая комбинация позволяет прослушивать весь трафик между соединенными устройствами, если их поймать в момент первого соединения.
И в BLE не 80 каналов, а 40