25 уязвимостей в RTOS Zephyr, в том числе эксплуатируемые через ICMP-пакет

27 мая 2020 года

Исследователи из компании NCC Group опубликовали результаты аудита свободного проекта Zephyr, развивающего операционную систему реального времени (RTOS), нацеленную на оснащение устройств, соответствующих концепции "Интернет вещей" (IoT, Internet of Things). В ходе аудита было выявлено 25 уязвимостей в Zephyr и 1 уязвимость в MCUboot. Разработка Zephyr ведётся при участии компаний Intel.

В сумме было выявлено 6 уязвимостей в сетевом стеке, 4 - в ядре, 2 - в командной оболочке, 5 в обработчиках системных вызовов, 5 в подсистеме USB и 3 в механизме обновления прошивки. Двум проблема присвоен критический уровень опасности, двум - высокий, 9 умеренный, 9 - низкий и 4 - для принятия во внимание. Критические проблемы затрагивают IPv4 стек и парсер MQTT, опасные - драйверы USB mass storage и USB DFU. На момент раскрытия информации исправления были подготовлены только для 15 наиболее опасных уязвимостей, неисправленными пока остаются проблемы, приводящие к отказу в обслуживании или связанные с недоработками в механизмах дополнительной защиты ядра.

В IPv4 стеке платформы выявлена удалённо эксплуатируемая уязвимость, приводящая к повреждению памяти при обработке определённым образом модифицированных ICMP-пакетов. Ещё одна серьёзная проблема найдена в парсере протокола MQTT, которая вызвана отсутствием должной проверки длины полей в заголовке и может привести удалённому выполнению кода. Менее опасные проблемы, приводящие к отказу в обслуживании, найдены в IPv6-стеке и реализации протокола CoAP.

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

Много проблем затрагивают USB-стек и отдельные драйверы. Например, проблема в USB mass storage позволяют вызвать переполнение буфера и выполнить код на уровне ядра при подключении устройства к подконтрольному атакующему USB-хосту. Уязвимость в USB DFU, драйвере для загрузки новой прошивки по USB, позволяет загрузить модифицированный образ прошивки во внутренний Flash микроконтроллера без применения шифрования и обойдя режим защищённой загрузки с проверкой компонентов по цифровой подписи. Дополнительно был изучен код открытого загрузчика MCUboot(недоступная ссылка), в котором была найдена одна неопасная уязвимость, которая может привести к переполнению буфера при испльзовании протокола SMP (Simple Management Protocol) через UART.

Напомним, что в Zephyr для всех процессов предоставляется только одно глобальное совместно используемое виртуальное адресное пространство (SASOS, Single Address Space Operating System). Специфичный для приложений код комбинируется с адаптированным под конкретное применение ядром и образует монолитный исполняемый файл для загрузки и запуска на определённом оборудовании. Все системные ресурсы определяются на этапе компиляции, что сокращает размер кода и увеличивает производительность. В системный образ могут включаться только те возможности ядра, которые требуются для выполнения приложения.

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

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «25 уязвимостей в RTOS Zephyr, в том числе эксплуатируемые через ICMP-пакет», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.