Атакуем синезубого короля
Английское слово Bluetooth -- буквальный перевод прозвища короля викингов Харальда I Синезубого. Он правил на территории современных Дании и части Норвегии в X веке и вошел в историю как правитель, который объединил враждовавшие датские племена в единое королевство.
Подразумевается, что Bluetooth делает то же самое с протоколами связи, объединяя их в один универсальный стандарт.
Сегодня практически каждый из нас использует далеко не одно беспроводное устройство, начиная от наушников, умных часов и IoT-устройств, и заканчивая автоматизированными системами на промышленных предприятиях.
Но задумывался ли кто-то над тем:
как работает данная технология,
как устройства общаются друг с другом,
как происходит обмен информацией,
и, что особенно актуально сейчас, -- насколько эта технология безопасна?
В этой статье попробуем ответить на поставленные вопросы.
Что за "синий зуб"
Bluetooth -- производственная спецификация беспроводных персональных сетей.
Bluetooth обеспечивает обмен информацией между такими устройствами, как персональные компьютеры, мобильные телефоны, принтеры, фотоаппараты, наушники, гарнитуры, работающие на надежной, бесплатной и повсеместно доступной радиочастоте для ближней связи.
Принцип действия основан на использовании радиоволн. Радиосвязь Bluetooth осуществляется в ISM-диапазоне (Industry, Science and Medicine), который используется в различных бытовых приборах и беспроводных сетях.
Частоты работы Bluetooth: 2,402-2,48 ГГц.
Версии Bluetooth
Технология Bluetooth появилась без малого 25 лет назад, и за такой промежуток времени претерпела огромное количество изменений.
Например:
быстрое подключение и обнаружение,
увеличение скорости передачи данных,
повышение стойкости к радиопомехам,
повышение защищенности соединения и др.
Но в истории развития этой технологии реальным скачком стала версия Bluetooth 4.0, в которой был представлен Bluetooth с низким энергопотреблением (BLE). До появления BLE активно развивался Bluetooth Classic (BR/EDR), который используется в беспроводных громкоговорителях, автомобильных информационно-развлекательных системах и наушниках.
В чем же заключался этот прорыв?
Bluetooth Classic VS Bluetooth Low Energy
Существует большая разница между "классическим" Bluetooth и Bluetooth с низким энергопотреблением с точки зрения технических спецификаций, реализации и типов приложений, для которых они предназначены. Кроме того, они несовместимы друг с другом.
BT classic:
используется для потоковых приложений, таких как трансляция аудио- и видео-контента и непрерывная передача данных;
не оптимизирован для низкого энергопотребления, но поддерживает большую скорость передачи (максимум 3 МБит/с);
использует 79 радиоканалов;
обнаружение происходит на 32 каналах.
BLE:
используется в сенсорах и для управления устройствами и приложениями, не требующими передачи больших объемов данных (максимум 2 МБит/с);
предназначен для применения в малопотребляющих устройствах с большими интервалами между передачей данных;
использует 40 радиоканалов;
обнаружение происходит на 3 каналах, что приводит к более быстрому обнаружению и установке соединения.
Ниже представлена сводная таблица с основными отличиями
BT classic | BLE | |
---|---|---|
Передача большого объема данных | + | - |
Стриминг контента | + | -/+ |
Радиус действия | - | + |
Энергопотребление | - | + |
На данный момент последняя версия Bluetooth -- 5.3, но сейчас она мало представлена в устройствах.
Совсем недавно Bluetooth SIG завершила разработку спецификации Bluetooth LE Audio, которая позволит сделать беспроводные аудиоустройства более энергоэффективными, поскольку они будут использовать BLE вместо BT classic. Ожидается, что LE Audio появится в Android 13 и iOS 16.
Вот ролик про все прелести данной технологии.
Архитектура
Топология сети
BT classic
Все устройства в сети, образующие пикосеть, делятся на ведущие (master) и подчиненные (slave).
Основные принципы:
Обмен информацией может осуществляться только между ведущим и подчиненным устройствами, при этом каждое устройство может быть как ведущим, так и подчиненным.
Основным элементом организации сетей Bluetooth является пикосеть, состоящая из одного ведущего устройства и от 1 до 7 активных подчиненных устройств.
В одну пикосеть может входить неограниченное количество устройств, находящихся в неактивном режиме.
Подчиненное устройство может общаться только с ведущим, причем только тогда, когда это разрешает ведущее устройство.
В каждый момент времени обмен данными может идти только между двумя устройствами в одном направлении.
Любое устройство одной пикосети может также входить в другую пикосеть в качестве как подчиненного, так и ведущего.
BLE
BLE также поддерживает модель пикосети BT classic (изображения 1, 2), о которой было рассказано выше.
Но даже тут BLE привнес свои нововведения: новую топологию сети -- Mesh. Цель Mesh -- увеличение дальности связи сетей BLE и обеспечение поддержка индустриальных приложений, использующих технологию BLE. С Bluetooth Mesh устройства могут работать в ячеистой топологии “многие ко многим”.
Топология mesh-сети дает два важных преимущества:
увеличенная дальность связи.
Участники сети могут ретранслировать данные для передачи устройствам, находящимся на большем расстояние от передатчика, размер сети и количество устройств в них могут быть значительно увеличены.
способность к самовосстановлению.
Если один из элементов сети выйдет из строя, остальные продолжат работу и смогут передавать данные друг другу.
Bluetooth Mesh -- это отдельный стандарт с своей спецификацией, стеком протоколов и т.д. Поэтому сегодня мы концентрироваться на нем не будем -- он заслуживает отдельного внимания.
Стек протоколов
Чтобы лучше понимать, как именно атаковать данную технологию, необходимо знать ее стек протоколов и спецификацию.
Как уже было упомянуто, BT classic и BLE -- это фактически два разных стандарта, отличающихся аппаратно и несовместимых друг с другом.
Принципиальные различия этих стандартов кроются именно в стеке протоколов, которые представлены ниже.
Поэтому все устройства Bluetooth могут быть одним из следующих типов:
одиночный режим — поддерживает профиль BR/EDR или LE.
двойной режим — поддерживает профили BR/EDR и LE.
BT classic
Поскольку здесь мы сконцентрируемся на атаках на "классическую" версию Bluetooth, придется более подробно разобраться в его устройстве.
Для большего понимания будем использовать сетевую модель OSI как референсную.
уровни BR/EDR Radio и Baseband и Link Control стека Bluetooth (BR/EDR) сопоставляются с физическим уровнем модели OSI;
уровни Link Manager Protocol (LMP), L2CAP, RFCOMM и PPP стека Bluetooth (BR/EDR) соответствуют канальному уровню OSI;
уровни UDP, TCP и IP стека Bluetooth (BR/EDR) сопоставляются с комбинированным: сетевым, транспортным и сеансовым уровнями модели OSI;
на прикладном уровне -- однозначное сопоставление.
Как можно заметить, некоторые протоколы, используемые Bluetooth, применяются и в других областях IT. В целом, их можно поделить на группы:
внутренние (основные) протоколы;
протоколы контроля телефонии;
протокол кабельной замены;
адаптированные протоколы.
Внутренние протоколы образуют так называемое ядро системы Bluetooth и формируют пятиуровневый стек, состоящий из следующих элементов:
BR/EDR Radio описывает детали радиоинтерфейса (используемые частоты, тип модуляции, мощность передачи).
Baseband и Link Control описывает некоторые функции физического уровня и функции управления доступом к среде (установление соединения, распределение временных интервалов, кодирование/декодирование аудиопотока, аутентификация и шифрование).
Link Manager Protocol (LMP) отвечает за установление логического канала связи между устройствами Bluetooth и его текущее администрирование (аутентификация, шифрование), согласование размеров пакетов, параметров качества передачи.
Logical Link Control and Adaptation Protocol (L2CAP) адаптирует протоколы высших уровней к уровню передачи в базовой полосе частот.
Service Discovery Protocol (SDP) служит для того, чтобы приложение запрашивало информацию о службах, предоставляемых устройством Bluetooth или через него, и их характеристиках.
Как атаковать
Атак на Bluetooth достаточно много, и они могут быть направлены на разные его спецификации, о которых шла речь ранее. Есть отличная репа, в которой собраны многие исследования, связанные с безопасностью Bluetooth.
На данный момент самым актуальным исследованием является Braktooth от ASSET Research Group. Сейчас опубликованы не только PoC и на найденные уязвимости, но и создан полноценный фреймворк, который можно использовать в собственных исследованиях.
Braktooth
BrakTooth -- семейство уязвимостей безопасности в стеке BT, которые варьируются от отказа в обслуживании (DoS) и взаимоблокировки через сбой в прошивке в обычном оборудовании до выполнения произвольного кода (ACE) в некоторых IoT-устройствах. Было оценено 13 Bluetooth-устройств от 11 вендоров и обнаружено в общей сложности 16 новых уязвимостей безопасности.
Вот список протестированных чипов. Как можно заметить, тут представлены очень актуальные компоненты, которые используется в топовых мобильных устройствах.
Начало атаки
Для воспроизведения атаки нам потребуется:
Linux (на хосте или VM)
плата ESP32 (ESP-WROVER-KIT)
специальная прошивка для запуска инструмента PoC.
Инструкция про прошивке платы представлена на гитхабе. Никаких проблем лично я не испытал.
После того, как на плату будет установлена соответствующая прошивка, дело остается за малым. Остается найти устройство <target bdaddr>
, которое будем атаковать (это можно сделать с помощью встроенного в прошивку фаззера) и выбрать соответствующий эксплоит <exploit_name>
.
Теперь переходим непосредственно к атакам. Многие из них очень похожи, поэтому рассмотрим наиболее интересные из них.
Arbitrary Code Execution in IoT's (CVE-2021-28139)
Наиболее критическая уязвимость затрагивает ESP32 SoC, который используется во многих устройствах Wi-Fi и Bluetooth IoT (автоматизация промышленности, умные дома, фитнес-браслеты и т.д.)
Проблема заключалась в отсутствии проверки записи за пределы ESP32 BT-библиотеки.
Это позволяло получать мутированный LMP-пакет (LMP_feature_response_ext
), с помощью которого появляется возможность для вставки восьми байт произвольных данных за пределы расширенной таблицы функций (E. Features Table
). Так как прошивку целевого устройства (ESP32) довольно просто найти в глобальной сети (атакующий даже может собрать ее сам), у злоумышленника появляется возможность записать известный адрес функции JMP Addr
в смещение, указанное в поле таблицы функций (Feat. Page
) в мутированном LMP-пакете (LMP_feature_response_ext
).
В этом случае BT-библиотека хранит указатели вызова в пределах смещения таблицы функций за пределами ее границ, и такой обратный вызов функции в конечном итоге вызывается во время соединения устройств BT, что и приводит к выполнению произвольного кода.
Пример кода:
...
static char txt[64];
int tx_post_dissection(uint8_t *pkt_buf, int pkt_length, void *p)
{
// Look for TX feature_ext_response
if (p && pkt_length > 5 && ((pkt_buf[4] >> 1) == 127) && (pkt_buf[5] == 0x04))
{
// 1 Set page to 0x62
pkt_buf[6] = 0x62; // Page 0x62
// 2 Set arbitrary address
uint32_t *pc_addr = (uint32_t *)&pkt_buf[8];
// *pc_addr = 0xDEADBEEF;
// *pc_addr = 0x400d34d0; // start_cpu0_default
// *pc_addr = 0x40081108; // call_start_cpu0
*pc_addr = 0x400ebda8; // address of nvs_flash_erase - (Effect: Deadlock + NVS flushed)
// address of nvs_flash_erase - (Effect: Deadlock + NVS flushed)
// *pc_addr = 0x40112c94; // target firmware built/flashed via idf.py build
// *pc_addr = 0xDEADBEEE; // target firmware built/flashed via make
// *(pc_addr + 1) = 0xABCDEFAB; // target firmware built/flashed via make
snprintf(txt, sizeof(txt), "Page 0x62 sent to execute address 0x%04X!!!\n", *pc_addr);
wd_log_y(txt);
return 1; // Indicate that packet has been changed
}
return 0;
}
...
Используя эту уязвимость, можно исполнить произвольный код на SoC ESP32. Стоит отметить, что, поскольку эти устройства используются широко в разных областях, то лучше использовать команды, которые практически всегда будут включены в ESP32 SDK.
А именно:
удаление NVRAM --
nvs_flash_erase
;отключение BT или BLE --
esp_bt_controller_disable
;отключение Wi-Fi --
disable_wifi_agc
и др.
Как и ожидалось, эта уязвимость имеет серьезные последствия, если такая атака будет применена к продуктам умного дома, которые используют данный SoC.
DoS in Laptops & Smartphones (CVE-2021-34147)
Реализация "классического" Bluetooth в стеке BT не обрабатывает должным образом прием искаженного ответа точности синхронизации LMP (LMP_timing_acc_response
). Далее происходит несколько повторных подключений к целевому подчиненному устройству. Это позволяет атакующему исчерпать ресурсы BT-устройства.
Таким образом атакующий вызывает сбой Bluetooth посредством нескольких попыток отправки созданного LMP_timing_acc_response
, за которым следует внезапное повторное подключение к цели со случайным BDAddress.
Примечательно, что устройство на которое будет производиться атака, не будет показывать уведомление о новом запросе на подключение.
После этого устройство либо вызывает сбой прошивки, либо отключает другие активные устройства BT. Чем быстрее будет выполнено переподключение при атаке, тем легче удастся нарушить работу других устройств BT.
Воздействие этой атаки не сохраняется после ее прекращения. Это связано с тем, что устройство, на которое производилась атака, обычно пытается восстановить подключения BT, выполняя повторные подключения к ранее отключенным устройствам. Например, в случае сбоя прошивки на Android перезапускается демон Bluetooth и повторно загружает образ прошивки.
Тем не менее, во всех случаях нормально использовать устройство во время атаки не представляется возможным, так как BT-соединение может постоянно прерываться. Атакующему нужно знать только BDAddress целевого устройства, ведь для запуска атаки не требуется аутентификация.
Дополнительные возможности фреймворка
sudo bin/bt_fuzzer --help
Bluetooth Classic Fuzzer (Baseband, LMP, L2CAP, etc)
Usage:
BT Fuzzer [OPTION...]
--help Print help
--default-config Start with default config
--autostart Automatically start (default: true)
--no-gui Start without GUI
--test-webview Test GUI webview performance (requires internet)
--live-capture Open wireshark in live capture mode
--exploit [=arg(=)] Exploit Name
--list-exploits List all exploits
--host arg Host BDAddress
--host-port arg Host serial port name of BT Interface
(ESP-WROVER-KIT)
--random_bdaddress Enable/Disable host BDAddress randomization
--target arg Target BDAddress (default: /dev/ttyUSB1)
--target-port arg Target serial port name to detect crashes
(default: /dev/ttyUSB2)
--target-baud arg Target baud rate (default: 115200)
--bounding Enable/Disable Bounding (default: true)
--iocap arg IO Capabilities (default: 3)
--authreq arg Authentication Request flag (default: 3)
--scan Scan BT Targets
Автономная версия Wireshark для просмотра обмена данными между устройствами
Возможность модификации существующих эксплоитов или создание новых
В данном материале мы познакомились с технологией Bluetooth, ее спецификацией, архитектурой и актуальными атаками на нее.
Braktooth, в свою очередь, предоставляет не только уже готовый пул эксплойтов, но также является полноценным инструментом для поиска и эксплуатации новых уязвимостей.
Если вас заинтересовала данная тематика, и вы хотите глубоко разобраться в ней, то советую почитать: