25 na mga kahinaan sa RTOS Zephyr, kabilang ang mga pinagsamantalahan sa pamamagitan ng isang ICMP packet

Mga mananaliksik mula sa NCC Group nai-publish libreng resulta ng pag-audit ng proyekto Hanging palay-palay, umuunlad isang real-time na operating system (RTOS), na naglalayong magbigay ng mga device na sumusunod sa konsepto ng Internet of Things (IoT, Internet of Things). Sa panahon ng pag-audit ito ay ipinahayag 25 mga kahinaan sa Zephyr at 1 kahinaan sa MCUboot. Ang Zephyr ay binuo kasama ang pakikilahok ng mga kumpanya ng Intel.

Sa kabuuan, 6 na mga kahinaan ang natukoy sa network stack, 4 sa kernel, 2 sa command shell, 5 sa system call handler, 5 sa USB subsystem at 3 sa firmware update mechanism. Dalawang isyu ang na-rate na kritikal, dalawa ang mataas, 9 ang katamtaman, 9 ang mababa, at 4 ang para sa pagsasaalang-alang. Ang mga kritikal na problema ay nakakaapekto sa IPv4 stack at MQTT parser, ang mga mapanganib ay nakakaapekto sa USB mass storage at USB DFU driver. Sa oras ng pagsisiwalat ng impormasyon, ang mga pag-aayos ay inihanda lamang para sa 15 sa mga pinaka-mapanganib na kahinaan; ang mga problemang humahantong sa pagtanggi sa serbisyo o nauugnay sa mga bahid sa karagdagang mekanismo ng proteksyon ng kernel ay nananatiling hindi naitama.

Ang isang malayuang mapagsamantalang kahinaan ay natukoy sa IPv4 stack ng platform, na humahantong sa pagkasira ng memorya kapag pinoproseso ang mga ICMP packet na binago sa isang tiyak na paraan. Ang isa pang seryosong problema ay natagpuan sa MQTT protocol parser, na sanhi ng kakulangan ng tamang pagsuri sa haba ng field ng header at maaaring humantong sa malayuang pagpapatupad ng code. Ang hindi gaanong malubhang mga isyu sa pagtanggi sa serbisyo ay makikita sa IPv6 stack at ang pagpapatupad ng CoAP protocol.

Ang iba pang mga problema ay maaaring mapagsamantalahan nang lokal upang maging sanhi ng pagtanggi sa serbisyo o magsagawa ng code sa antas ng kernel. Karamihan sa mga kahinaan na ito ay nauugnay sa kakulangan ng wastong pagsusuri ng mga argumento ng system call, at maaaring humantong sa mga arbitrary na bahagi ng memorya ng kernel na isinulat at binabasa. Ang mga problema ay umaabot din sa system call processing code mismoβ€”ang pagtawag sa negatibong system call number ay nagreresulta sa isang integer overflow. Natukoy din ng kernel ang mga problema sa pagpapatupad ng proteksyon ng ASLR (address space randomization) at ang mekanismo para sa pagtatakda ng mga marka ng canary sa stack, na ginagawang hindi epektibo ang mga mekanismong ito.

Maraming mga problema ang nakakaapekto sa USB stack at mga indibidwal na driver. Halimbawa, ang mga problema sa USB mass storage ay maaaring magdulot ng buffer overflow at mag-execute ng code sa kernel level kapag nakakonekta ang device sa isang USB host na kinokontrol ng attacker. Ang isang kahinaan sa USB DFU, isang driver para sa pag-load ng bagong firmware sa pamamagitan ng USB, ay nagbibigay-daan sa iyo na mag-load ng binagong imahe ng firmware sa panloob na Flash ng microcontroller nang hindi gumagamit ng pag-encrypt at pag-bypass sa secure na boot mode na may pag-verify ng mga bahagi gamit ang isang digital na lagda. Bukod pa rito, pinag-aralan ang open bootloader code MCUboot, kung saan natagpuan ang isang benign na kahinaan,
na maaaring humantong sa isang buffer overflow kapag ginagamit ang SMP (Simple Management Protocol) na protocol sa UART.

Alalahanin na sa Zephyr, isang global shared virtual address space lamang (SASOS, Single Address Space Operating System) ang ibinibigay para sa lahat ng proseso. Ang code na tukoy sa application ay pinagsama sa isang kernel na tukoy sa application upang bumuo ng isang monolitikong executable na maaaring i-load at patakbuhin sa partikular na hardware. Ang lahat ng mga mapagkukunan ng system ay tinutukoy sa oras ng pag-compile, binabawasan ang laki ng code at pagtaas ng pagganap. Ang imahe ng system ay maaaring isama lamang ang mga tampok ng kernel na kinakailangan upang patakbuhin ang application.

Kapansin-pansin na kabilang sa mga pangunahing bentahe ng Zephyr nabanggit pag-unlad na nasa isip ang kaligtasan. Naaprubahanna ang lahat ng mga yugto ng pag-unlad ay sumasailalim sa mga mandatoryong yugto ng pagkumpirma ng seguridad ng code: fuzzing testing, static analysis, penetration testing, code review, pagsusuri ng backdoor na pagpapatupad at threat modeling.

Pinagmulan: opennet.ru

Magdagdag ng komento