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

Дослідники з компанії 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-тестування, статичний аналіз, випробування на проникнення, рецензування коду, аналіз впровадження бекдорів та моделювання загроз.

Джерело: opennet.ru

Додати коментар або відгук