Анализ прошивки дрона DJI Mavic 3: часть 2

Анализ прошивки дрона DJI Mavic 3: часть 2

Как случайно сгенерированный пароль может подвести владельца устройства?

image

Хотя общественность может представлять дроны как игрушки или инструменты, используемые кинопроизводителями, прогресс в доступных геопространственных технологиях, сборе данных и диагностике только увеличил их популярность. Сегодня дроны используются во многих отраслях, таких как производство, сельское хозяйство и видеонаблюдение. Учитывая, что современные дроны способны функционировать на расстоянии свыше 10 км от оператора и на высоте более 5 км над землёй, диапазон сценариев их использования воистину стремится к бесконечности.

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

Как было представлено в первой части серии анализа прошивки беспилотника DJI Mavic 3, эксперты из Nozomi Networks Labs провели исследование безопасности протокола QuickTransfer Mode на основе Wi-Fi, используемого в дронах DJI. Этот протокол обеспечивает быстрое извлечение изображений и видео на мобильные устройства пользователей.

Основной целью исследования было выявление потенциальных уязвимостей, которые могли бы представлять угрозу для дрона или привести к утечке данных. В ходе исследования было выявлено в общей сложности девять уязвимостей, требующих взаимодействия с пользователем (активации режима QuickTransfer).

В то время как в первой части исследования объяснялся процесс получения прошивки дрона и её распаковки, вторая часть, в свою очередь, описывает непосредственный анализ прошивки, а также критичность и потенциальные последствия каждой выявленной специалистами уязвимости. Эти уязвимости потенциально могут способствовать несанкционированному извлечению видео и изображений путём эксплуатации протокола Wi-Fi в режиме QuickTransfer.

DJI изучила все уязвимости, о которых ей сообщили специалисты, и определила все затронутые модели дронов. Компания устранила семь из девяти проблем, сочтя оставшиеся две ненужными для исправления, но, тем не менее, присвоив им CVE-идентификатор. DJI выпустила обновление прошивки для решения выявленных проблем в каждой затронутой модели дрона:

- Mavic 3 Pro: v01.01.0300;

- Mavic 3: v01.00.1200;

- Mavic 3 classic v01.00.0500;

- Mavic 3 Enterprise v07.01.10.03;

- Matrice 300 v57.00.01.00;

- Matrice M30 V07.01.0022;

- Mini 3 Pro v01.00.0620.

Далее перейдём непосредственно к материалу статьи и разберёмся, что делали исследователи, а также что именно они обнаружили.

Анализ и эмуляция сервисов

После получения и распаковки прошивки первым шагом был произведён анализ скриптов инициализации (включая init.rc и все импортированные конфигурационные скрипты) для выявления сервисов, работающих на дроне, которые представляют потенциальную поверхность атаки. Особый интерес представляли те сервисы, которые предоставляют внешнюю функциональность (сокетные соединения, загрузка файлов, HTTP API и т.д.), поскольку они представляют эксплуатируемую поверхность атаки для смежного атакующего (например, вредоносного приложения на мобильном устройстве, использующего режим QuickTransfer). Впоследствии были предприняты два типа анализа:

1. Статический анализ: обратная разработка бинарных файлов;

2. Динамический анализ: отладка сервисов во время выполнения.

Учитывая, что прошивка Mavic 3 представляет собой настроенную сборку Android, динамический анализ был облегчён выполнением целевых бинарных файлов в тонко настроенном эмуляторе Android. Этот подход позволил отслеживать и анализировать примечательные сервисы с помощью таких инструментов, как strace и gdb.

Wi-Fi соединение

Протокол QuickTransfer Mode создаёт Wi-Fi соединение между дроном и мобильным устройством. Для инициирования Wi-Fi сессии находящийся на земле дрон создаёт точку доступа на основе WPA2, к которой мобильное устройство получает доступ через приложение DJI Fly. В целом, это стандартная система связи на всех дронах DJI. На рисунке 1 показан пример обнаруженной точки доступа для DJI Mini 3 Pro.

Пароль для подключения генерируется дроном и безопасно передаётся на мобильное устройство через Bluetooth. При анализе скриптов инициализации прошивки дрона становится очевидным, что сервис, отвечающий за управление Wi-Fi соединением, выполняется из бинарного файла, расположенного по пути /system/bin/dji_network, и инициируется во время процесса загрузки (Рисунок 2).

При углублении в бинарный файл можно увидеть, что пароль Wi-Fi генерируется случайным образом во время первоначальной загрузки дрона и остаётся неизменным после этого. Этот процесс облегчается функцией generate_default_passwd(), которая вызывает процедуру libc random() четыре раза, как показано на Рисунке 3.

Рисунок 3 раскрывает первую уязвимость, поскольку пароль генерируется как 8-символьная строка, использующая шестнадцатеричный набор символов ([0-9a-f]). При 8-символьном пароле и 16 символах шестнадцатеричного набора существует всего чуть более четырёх миллиардов возможных комбинаций паролей, что по сегодняшним стандартам недостаточно для обеспечения высокого уровня безопасности.

Фактически, это количество комбинаций паролей может быть легко взломано с помощью инструмента Hashcat или аналогичного, а также при помощи мощного графического процессора. Быстрый эксперимент с одним GPU Nvidia T4 показал, что пароль Wi-Fi может быть взломан примерно за 2 часа, а в худшем случае – примерно за 4 часа, как показано ниже.

Рисунки 4 и 5 соответственно показывают схему атаки и результаты попытки взлома одного из уязвимых дронов DJI (в данном случае DJI Mini Pro 3). Потребовалось около 2 часов, чтобы взломать пароль с использованием одного GPU Nvidia T4, размещённого на облачном сервере, созданном на лету. Пароль Wi-Fi для атакуемого дрона был следующим – df46c50a.

Уязвимости с подбором пароля Wi-Fi присвоен идентификатор CVE-2023-6951 с оценкой CVSS 6.6 (AV:A/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N – СРЕДНИЙ). Используя эту проблему, злоумышленник, находящийся в пределах досягаемости Wi-Fi сети дрона, может установить соединение с последним без какой-либо авторизации. Впоследствии злоумышленник может взаимодействовать с дроном, потенциально используя дополнительные уязвимости для компрометации его безопасности.

FTP-сервис

Одной из поверхностей атаки, исследованных в ходе анализа, был FTP-сервис, работающий на дроне и предоставляющий доступ к зашифрованным диагностическим данным без необходимости аутентификации. Путём фаззинга сервиса, запущенного на эмуляторе Android, была обнаружена постоянная атака типа «отказ в обслуживании» (DoS), вызванная некорректным запросом параметра SIZE. Исправление этой проблемы требует перезагрузки устройства для правильного перезапуска FTP-сервиса.

Учитывая, что FTP-протокол на дроне предназначен исключительно для диагностических целей, его доступность может не считаться высоко критичной, и, несмотря на присвоение этой уязвимости CVE (CVE-2023-6950) и оценки CVSS 3.0 (AV:A/AC:L/PR:L/UI:R/S:U/C:N/I:N/A:L – НИЗКИЙ), DJI решила не устранять её. Обоснование этого решения заключается в том, что сервис предназначен исключительно для диагностических целей, предоставляя доступ только к зашифрованным данным.

Сервис vtwo_sdk

Демон-сервис vtwo_sdk инстанцируется через бинарный файл /system/bin/dji_vtwo_sdk. Этот сервис, вероятно, служит для целей обслуживания, и его значимость как поверхности для атаки обусловлена его выполнением с повышенными привилегиями (root), как показано на Рисунке 6, а также его участием в прослушивании порта 10000 для TCP-соединений.

Данный сервис делает устройство уязвимым для внешних атак, будь то вредоносное приложение, установленное на мобильном телефоне, использующем режим QuickTransfer, или злоумышленник, подключенный к Wi-Fi сети дрона с авторизацией или без, эксплуатирующий ранее описанную уязвимость для получения случайно сгенерированного пароля (CVE-2023-6951).

Сервис vtwo_sdk построен на основе пользовательского протокола TLV (Type-Length-Value) поверх TCP для обработки внешних входных команд. В попытке выявить уязвимости в этом протоколе он был подвергнут анализу на эмуляторе Android. Для изучения потенциальных проблем безопасности была начата простая кампания по фаззингу, направленная на обнаружение крайних случаев, которые могли бы выявить уязвимости безопасности. Рисунок 7 показывает сервис, работающий на эмуляторе во время фаззинга.

В результате были выявлены шесть различных ошибок, три из которых эксплуатируемы исключительно для атаки типа «отказ в обслуживании» (CVE-2023-6948, CVE-2023-51452, CVE-2023-51453), что связано с проверкой целостности, обеспечиваемой функцией безопасности Android FORTIFY. Всем этим уязвимостям присвоена базовая оценка CVSS 3.0 (AV:A/AC:L/PR:L/UI:R/S:U/C:N/I:N/A:L – НИЗКИЙ).

Оставшиеся три сбоя включали две проблемы записи за пределами границ, а также одну уязвимость индекса массива за пределами границ. В зависимости от квалификации злоумышленника, эти примитивы могут потенциально привести к выполнению произвольного кода или утечке информации, в конечном итоге приводя к полной компрометации дрона, благодаря повышенным привилегиям, предоставленным сервису vtwo_sdk.

Этим трём уязвимостям (CVE-2023-51454, CVE-2023-51455, CVE-2023-51456) присвоена оценка CVSS 6.8 (AV:A/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H – СРЕДНИЙ).

HTTP-сервис

Последней рассмотренной поверхностью атаки является HTTP-сервис, работающий на порте 80, доступный с мобильного устройства, подключенного через QuickTransfer. При анализе скриптов инициализации образа прошивки было определено, что этот сервис реализован в бинарном файле /system/bin/dji_http_server.

Путём реверс-инжиниринга бинарного файла было установлено, что HTTP-сервис включает неаутентифицированный API, позволяющий сканировать память дрона и загружать из неё изображения и видео. Отсутствие аутентификации между приложением DJI Fly и HTTP-сервером на дроне делает API уязвимым для злоупотребления, позволяя несанкционированное извлечение медиаданных с дрона.

В свете этих проблем, уязвимость Missing-Authentication-For-Critical-Function была доведена до сведения DJI для решения и обеспечения безопасности этой функциональности.

Более подробно, HTTP API можно вызвать следующей командой:

v2?storage=[storage_id]&path=[file_path]

где:

- storage: выбор между 0 и 1, указывающий на внутреннюю или внешнюю (sdcard) память дрона;

- file_path: путь к медиафайлу для загрузки, относительно выбранного хранилища.

Поскольку сгенерированные имена файлов имеют стандартный формат при сохранении в памяти (DCIM/100MEDIA/DJI_xxxx.JPG или DCIM/100MEDIA/DJI_xxxx.MP4, где xxxx – это возрастающее число), можно угадать имя файла и загрузить фотографии и видео несанкционированным способом (например, используя скрипт на Python для перебора путей к файлам).

Пример HTTP-запроса, который может извлечь данные с дрона (192.168.2.1):

GET/v2?storage=1&path=DCIM/100MEDIA/DJI_0005.JPG HTTP/1.1
Host:192.168.2.1:80
User-Agent:python-requests/2.28.1
Accept-Encoding:gzip, deflate
Accept:*/*
Connection:close

Рисунок 8 показывает, как неаутентифицированный запрос на статический IP-адрес дрона (192.168.2.1) с запросом файла DJI_0005.JPG успешно выполняется.

Используя ранее упомянутую уязвимость, связанную со слабой генерацией случайного пароля Wi-Fi (CVE-2023-6951), злоумышленник мог бы подключиться к дрону и злоупотребить этим API (Рисунок 9a). Более того, вредоносное приложение, установленное на мобильном устройстве, использующем QuickTransfer, могло бы тихо извлекать изображения и видео с дрона, не требуя никаких привилегий, кроме доступа к интернету (необходимого для выполнения HTTP-запросов), как показано на Рисунке 9б.

Уязвимость официально идентифицирована как CVE-2023-6949 и имеет оценку CVSS 5.2 (AV:A/AC:L/PR:L/UI:R/S:U/C:H/I:N/A:N – СРЕДНИЙ). Однако её статус отмечен как «оспариваемый» (disputed), поскольку DJI не признает её проблемой безопасности. Это решение основано на убеждении, что исправление слабой генерации пароля Wi-Fi (CVE-2023-6951) полностью устранило бы данный вектор атаки. Кроме того, любая потенциальная компрометация мобильного устройства считается личной ответственностью пользователя.

Оценка и управление рисками

Использование дронов становится всё более распространённым и служит самым различным целям. Компания DJI, владея более 90% доли рынка, является ведущим поставщиком этой техники. Учитывая широкое распространение данных устройств, особенно в профессиональных сферах, обеспечение безопасности дронов DJI имеет первостепенное значение.

Эксперты Nozomi Networks Labs настоятельно рекомендуют пользователям оперативно обновлять свои беспилотные устройства до последних версий прошивки, тем самым защищая свои данные от потенциальных рисков безопасности.

Организации, эксплуатирующие любой тип дронов, также должны учитывать, как эти операции и связанные приложения могут быть затронуты кибератакой. Если функции внутри дрона были скомпрометированы, как это изменит подверженность риску во время данной операции?

Для устройств, которые предлагают такую функциональность, как передача операций от одного оператора к другому, каким может быть результат, если неавторизованный оператор сможет взять под контроль устройство? Может ли это произойти случайно во время операции, где работают несколько дронов с несколькими операторами?

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

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

В то же время организации должны также учитывать, как эксплуатация дронов третьих сторон может повлиять на их бизнес и операционный риск. Современная история видела уже немало примеров прерывания работы аэропортов из-за несанкционированного вторжения дронов. Руководители по управлению рисками и безопасности должны рассмотреть, как такое вторжение повлияет на их операции и какие меры по смягчению последствий могут потребоваться для контроля и управления этими рисками.

Заключение

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

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

Ищем уязвимости в системе и новых подписчиков!

Первое — находим постоянно, второе — ждем вас

Эксплойтните кнопку подписки прямо сейчас