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-тестирование, статический анализ, испытания на проникновение, рецензирование кода, анализ внедрения бэкдоров и моделирование угроз.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.