25 уразлівасцяў у RTOS Zephyr, у тым ліку якія эксплуатуюцца праз ICMP-пакет

Даследчыкі з кампаніі NCC Group апублікавалі вынікі аўдыту вольнага праекту Зефір, развіваючага аперацыйную сістэму рэальнага часу (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

Дадаць каментар