Берегите ваши донглы: исследование безопасности ресивера клавиатур Logitech

nye8brz9dcrxabamezjupofstzo.png

Так исторически сложилось, что большинство сотрудников пользуются беспроводными клавиатурами и мышами фирмы Logitech. В очередной раз вводя свои пароли, мы — специалисты команды Raccoon Security — задались вопросом: насколько сложно обойти механизмы защиты беспроводных клавиатур? Проведенное исследование выявило архитектурные недостатки и программные ошибки, которые позволяют получить доступ к вводимым данным. Под катом — что у нас получилось.

Почему Logitech?

На наш взгляд, устройства ввода компании Logitech являются одними из самых качественных и удобных. Большинство имеющихся у нас устройств основаны на решении Logitech Unifying — это универсальный донгл-приемник, позволяющий подключать до 6 устройств. Все совместимые с технологией Logitech Unifying устройства маркируются соответствующим логотипом. Простое в использовании приложение позволяет управлять подключением беспроводных клавиатур к компьютеру. Подробно процесс подключения клавиатуры к донглу-приемнику Logitech, как и сама технология, освещены, например, здесь.


vjdydoxcwqaj1luhlm7a_rs877c.jpeg

Донгл-приемник с поддержкой Logitech Unifying

Клавиатура может стать источником информации для злоумышленников. Компания Logitech, учитывая возможную угрозу, позаботилась о безопасности — применила алгоритм шифрования AES128 в радиоканале беспроводной клавиатуры. Первая мысль, которая может посетить злоумышленника при таком раскладе, — перехват ключевой информации при ее передаче по радиоканалу в процессе процедуры связывания. Ведь при наличии ключа можно перехватывать радиосигналы клавиатуры и расшифровывать их. Однако пользователю очень редко (или даже никогда) приходится связывать клавиатуру Unifying-процедурой, и хакеру со сканирующим радиоприемником придется долго ждать. Кроме того, не все так просто обстоит и с самим процессом перехвата. В последнем исследовании в июне 2019 года эксперт по безопасности Маркус Менгс опубликовал в сети сообщение об обнаружении уязвимости в старых прошивках USB-донглов Logitech. Она позволяет злоумышленникам с физическим доступом к устройствам получать ключи шифрования радиоканала и инжектировать нажатия клавиш (CVE-2019–13054).

Мы расскажем про наше исследование безопасности донгла Logitech на базе SoC NRF24 от Nordic Semiconductor. А начнем, пожалуй, с самого радиоканала.

Как «летят» данные в радиоканале

Для частотно-временного анализа радиосигнала мы использовали SDR-приемник на базе устройства Blade-RF в режиме анализатора спектра (об этом также можно почитать здесь).


zntumoj2fmtcgjlg4p2spnjmnvg.jpeg

Устройство SDR Blade-RF

Мы также рассмотрели возможность записи квадратур радиосигнала на промежуточной частоте, чтобы затем проанализировать их с применением методов цифровой обработки сигналов.

Государственной комиссией по радиочастотам в Российской Федерации разрешен к использованию устройствами малого радиуса действия диапазон частот 2400–2483,5 МГц. Это очень «населенный» диапазон, в котором чего только не встретишь: Wi-Fi, Bluetooth, всевозможные пульты ДУ, охранные системы, беспроводные извещатели, мыши с клавиатурами и другие беспроводные цифровые устройства.


ethdaxxjkysh1bmbehmrtfqhmwi.jpeg

Спектр участка диапазона 2,4 ГГц

Помеховая обстановка в диапазоне достаточно сложная. Но несмотря на это компания Logitech смогла обеспечить надежный и устойчивый прием с помощью использования протокола Enhanced ShockBurst в трансивере NRF24 в сочетании с алгоритмами частотной адаптации.

Каналы в диапазоне размещены в позициях целых значений МГц, как определено в спецификации NRF24 Nordic Semiconductor — всего 84 канала в сетке частот. Число одновременно используемых Logitech частотных каналов, конечно, меньше. Мы выявили использование как минимум четырех. Из-за ограниченной полосы обзора применяемого анализатора спектра сигналов точный список используемых частотных позиций определить не удалось, но в этом и не было необходимости. Информация от клавиатуры к донглу-приемнику передается в режиме Burst (короткими включениями трансмиттера) с использованием двухпозиционной частотной модуляции GFSK на символьной скорости 1 Мбод:


ua93q8sc0cd53uzs9qnjnirlvc4.jpeg

Радиосигнал клавиатуры во временном представлении

Ресивер использует корреляционный принцип приема, поэтому в составе передаваемого пакета присутствуют преамбула и адресная часть. Помехоустойчивое кодирование не применяется, тело данных шифруется алгоритмом AES128.

В общем, радиоинтерфейс беспроводной клавиатуры Logitech можно характеризовать как полностью асинхронный со статистическим уплотнением и частотной адаптацией. Это означает, что трансмиттер клавиатуры переключает канал для передачи каждого нового пакета. Приемнику неизвестны заранее ни время передачи, ни частотный канал, а известен только их список. Приемник и передатчик встречаются в канале благодаря согласованным алгоритмам обхода и прослушивания частот, а также механизмам подтверждений Enhanced ShockBurst. Мы не исследовали, является ли список каналов статическим. Вероятно, его изменение обусловлено алгоритмом частотной адаптации. Что-то близкое к методу ППРЧ (псевдослучайная перестройка рабочей частоты) угадывается в использовании частотного ресурса диапазона.

Таким образом, в условиях частотно-временной неопределенности для гарантированного приема всех сигналов клавиатуры злоумышленнику понадобится контролировать в постоянном режиме всю сетку частот диапазона из 84 позиций, что требует значительных временных затрат. Здесь становится понятно, почему уязвимость извлечения ключа через USB (CVE-2019–13054) в источниках позиционируется как возможность инжектирования нажатий клавиши, а не получения доступа злоумышленника к вводимым с клавиатуры данным. Очевидно, что радиоинтерфейс беспроводной клавиатуры устроен достаточно сложно и обеспечивает надежную радиосвязь между устройствами Logitech в условиях сложной помеховой обстановки в диапазоне 2,4 ГГц.

Взгляд на проблему изнутри

Для исследования мы выбрали одну из имеющихся у нас клавиатур Logitech K330 и донгл Logitech Unifying.


jed3qhby5961hhflyuqstcyuehm.jpeg

Logitech K330

Заглянем внутрь клавиатуры. Интересный для исследования элемент на плате — чип SoC NRF24 от Nordic Semiconductor.


xscp9l7avxwh0ylf2rmc_2budsa.jpeg

SoC NRF24 на плате беспроводной клавиатуры Logitech K330

Прошивка размещена во внутренней памяти, механизмы чтения и отладки выключены. К сожалению, прошивка в открытых источниках не опубликована. Поэтому мы решили подойти к проблеме с другой стороны — изучить внутреннее содержание донгл-приемника Logitech.

«Внутренний мир» донгл-приемника устроен достаточно интересно. Донгл легко разбирается, несет на борту знакомый нам NRF24 в релизе со встроенным USB-контроллером и может быть перепрограммирован как со стороны USB, так и непосредственно программатором.


2cycllt09np1jxzpaol1d6sz9uc.jpeg

Донгл Logitech без корпуса

Поскольку существует штатный механизм обновления прошивки с использованием приложения Firmware Update Tool (из которого можно извлечь обновленную версию прошивки), искать прошивку внутри донгла нет необходимости.

Что было выполнено: из тела приложения Firmware Update Tool была извлечена прошивка RQR_012_005_00028.bin. Для проверки ее целостности контроллер донгла был подключен шлейфом к программатору ChipProg-48:


2l4tfhuxvz7bbb9speeyoyd-dk4.jpeg

Шлейф подключения донгла Logitech к программатору ChipProg 48

Для контроля целостности прошивки она была успешно размещена в памяти контроллера и заработала корректно, клавиатура и мышь были подключены к донглу через Logitech Unifying. Возможна заливка модифицированной прошивки с помощью штатного механизма обновления, т. к. каких-либо механизмов криптографической защиты прошивки не предусмотрено. Мы же в целях исследования использовали физическое подключение к программатору, поскольку так проводить отладку гораздо быстрее.

Исследование прошивки и атака на пользовательский ввод

Чип NRF24 спроектирован на основе вычислительного ядра Intel 8051 в традиционной гарвардской архитектуре. Для ядра трансивер выступает в качестве периферийного устройства и размещен в адресном пространстве как набор регистров. Документацию на чип и примеры исходных текстов можно найти в Интернете, поэтому дизассемблирование прошивки не представляет трудности. В ходе реверс-инжиниринга мы локализовали функции получения данных о нажатиях клавиш из радиоканала и преобразования их в формат HID для передачи на хост по USB-интерфейсу. В свободных адресах памяти был размещен код инъекции, в который вошли инструменты перехвата управления, сохранения и восстановления оригинального контекста исполнения, а также функциональный код.

Принятый донглом из радиоканала пакет нажатия или отпускания клавиши дешифруется, преобразуется в стандартный HID-репорт и направляется в USB-интерфейс как от обычной клавиатуры. В рамках исследования для нас наибольший интерес представляет часть HID-репорта, содержащая байт флагов-модификаторов и массив из 6 байт с кодами нажатий клавиш (для справки информация о HID здесь).

Структура HID-репорта:

// Keyboard HID report structure.
// See https://flylib.com/books/en/4.168.1.83/1/ (last access 2018 december)
// "Reports and Report Descriptors", "Programming the Microsoft Windows Driver Model"
typedef struct{
    uint8_t Modifiers;
    uint8_t Reserved;
    uint8_t KeyCode[6];
}HidKbdReport_t;

Непосредственно перед передачей HID-структуры на хост инжектированный код получает управление, копирует в памяти 8 байт нативных HID-данных и отправляет их на побочный радиоканал в открытом виде. В коде это выглядит так:

//~~~~~~~~~ Send data via radio ~~~~~~~~~~~~~~~~~~~~~~~~~>
// Profiling have shown time execution ~1.88 mSec this block of code
SaveRfState();                  // save transceiver state
RfInitForTransmition(TransmitRfAddress);        // configure for special trnsmition
hal_nrf_write_tx_payload_noack(pDataToSend,sizeof(HidKbdReport_t)); // Write payload to radio TX FIFO
CE_PULSE();                 // Toggle radio CE signal to start transmission
RestoreRfState();               // restore original transceiver state
//~~~~~~~~~ Send data via radio ~~~~~~~~~~~~~~~~~~~~~~~~~<

Побочный канал организуется на установленной нами частоте с определенными характеристиками скорости манипуляции и структуры пакета.

Работа трансивера в чипе NRF24 основана на графе состояний, в который органично вписан протокол Enhanced ShockBurst. Мы выяснили, что непосредственно перед передачей HID-данных в USB-интерфейс хоста трансивер находился в состоянии IDLE. Это делает возможным его безопасное переконфигурирование для работы в побочном канале. Инжектированный код перехватывает управление, сохраняет оригинальную конфигурацию трансивера в полном объеме и переводит его в новый режим передачи на побочный канал. Механизм подтверждений Enhanced ShockBurst в этом режиме выключен, HID-данные в открытом виде передаются в радиоэфир. Структура пакета в побочном канале представлена на рисунке ниже, эпюры сигнала получены после демодуляции и до восстановления тактовой синхронизации данных. Значение адреса выбрано для удобства визуальной идентификации пакета.


iddnufyui08i2kkvaom5fgyvyfe.jpeg

Демодулированный сигнал Burst-пакета в побочном канале

После завершения передачи пакета в побочный канал инжектированный код восстанавливает состояние трансивера. Теперь он снова готов к работе в штатном режиме в контексте оригинальной прошивки.

В частотной и частотно-временной областях побочный канал выглядит так, как показано на рисунке:


lp3yqbllvbmqmdjauphlxgfimyi.jpeg

Спектральное и частотно-временное представление побочного канала

Для проверки работы чипа NRF24 с измененной прошивкой мы собрали стенд, в который вошли Logitech-донгл с модифицированной прошивкой, беспроводная клавиатура и приемник, собранный на базе китайского модуля с чипом NRF24.


ztj1fwupsmjvvgaww5wyjfzwyuu.jpeg

Схема перехвата радиосигнала беспроводной клавиатуры Logitech


f1v-tjbnnzo3lmrowctori-jw4q.jpeg

Модуль на базе NRF24

На стенде при нормальной работе клавиатуры после подключения ее к донглу Logitech мы наблюдали передачу открытых данных о нажатиях клавиш в побочном радиоканале и нормальную передачу шифрованных данных в основном радиоинтерфейсе. Таким образом, нам удалось обеспечить прямой перехват клавиатурного ввода пользователя:


gc_or1g-dxo-ovsrusyrbz34rfm.png

Результат перехвата клавиатурного ввода

Инжектированный код вносит небольшие задержки в работу прошивки донгла. Однако они слишком малы для того, чтобы пользователь мог их заметить.

Как вы понимаете, для такого вектора атаки можно использовать любую клавиатуру Logitech, совместимую с технологией Unifying. Поскольку атака направлена на приемник Unifying, который входит в комплект большинства клавиатур Logitech, то она не зависит от конкретной модели клавиатуры.

Заключение

Полученные результаты исследования подталкивают к мысли о возможном использовании рассмотренного сценария злоумышленниками: если хакер заменит жертве донгл-приемник для беспроводной клавиатуры Logitech, то он сможет узнать пароли к учетным записям жертвы со всеми вытекающими последствиями. Не стоит забывать о том, что инжектировать нажатие клавиш тоже возможно, а значит, выполнить произвольный код на компьютере жертвы не представляет трудности.

А если вдруг злоумышленник сможет удаленно модифицировать прошивку любого Logitech-донгла через USB? Тогда из близко расположенных донглов можно сложить сеть ретрансляторов и увеличить дистанцию утечки. Хотя «финансово обеспеченному» злоумышленнику современные средства радиоприема с высокоселективными системами, чувствительными радиоприемниками с малым временем перестройки частоты и узконаправленными антеннами позволят «слушать» клавиатурный ввод и нажимать клавиши даже из соседнего здания.


sbqgm-hr2sp7ai4a1ywzlvihgca.jpeg

Профессиональное оборудование для радиоприема

Поскольку беспроводной канал передачи данных клавиатуры Logitech достаточно хорошо защищен, найденный вектор атаки требует наличия физического доступа к ресиверу, что сильно ограничивает атакующего. Единственным вариантом защиты в данном случае могло бы быть использование механизмов криптографической защиты для прошивки ресивера, например проверка подписи загружаемой прошивки на стороне ресивера. Но, к сожалению, NRF24 это не поддерживает и в рамках текущей архитектуры устройства реализовать защиту невозможно. Так что берегите ваши донглы, ведь описанный вариант атаки требует физического доступа к ним.


6dtslv2uikkshhl7tmsi7fgjp0y.png

Raccoon Security — специальная команда экспертов НТЦ «Вулкан» в области практической информационной безопасности, криптографии, схемотехники, обратной разработки и создания низкоуровневого программного обеспечения.

© Habrahabr.ru