Badacze z firmy NCC Group wyniki audytu wolnego projektu , system operacyjny czasu rzeczywistego (RTOS), zaprojektowany z myślą o urządzeniach w koncepcji «Internet rzeczy» (IoT, Internet of Things). Podczas audytu zidentyfikowano w Zephyr oraz 1 luka w MCUboot. Rozwój Zephyr odbywa się przy udziale firm Intel.
W sumie zidentyfikowano 6 luk w stosie sieciowym, 4 w jądrze, 2 w powłoce, 5 w obsłudze wywołań systemowych, 5 w podsystemie USB oraz 3 w mechanizmie aktualizacji oprogramowania. Dwie z problemów mają krytyczny poziom zagrożenia, dwie — wysoki, 9 — umiarkowany, 9 — niski i 4 — do rozważenia. Krytyczne problemy dotyczą stosu IPv4 oraz parsera MQTT, niebezpieczne — sterowników USB mass storage oraz USB DFU. W momencie ujawnienia informacji poprawki były przygotowane tylko dla 15 najniebezpieczniejszych luk, a problemy prowadzące do odmowy usługi lub związane z niedostatkami w mechanizmach dodatkowej ochrony jądra pozostają niezałatane.
W stosie IPv4 platformy zidentyfikowano lukę, którą można wykorzystać zdalnie, prowadzącą do uszkodzenia pamięci podczas przetwarzania specjalnie zmodyfikowanych pakietów ICMP. Kolejny poważny problem wystąpił w parserze protokołu MQTT, spowodowany brakiem odpowiedniej weryfikacji długości pól w nagłówku, co może prowadzić do zdalnego wykonania kodu. Mniej poważne problemy, prowadzące do odmowy usługi, znaleziono w stosie IPv6 oraz w implementacji protokołu CoAP.
Pozostałe problemy mogą być wykorzystywane lokalnie do wywołania odmowy usługi lub wykonania kodu na poziomie jądra. Większość z tych luk jest związana z brakiem odpowiednich weryfikacji argumentów wywołań systemowych, co może prowadzić do zapisu i odczytu z dowolnych obszarów pamięci jądra. Problemy dotyczą także samego kodu obsługi wywołań systemowych — odwołanie do ujemnego numeru wywołania systemowego prowadzi do przepełnienia całkowitego. W jądrze zidentyfikowano również problemy w implementacji ochrony ASLR (losowanie przestrzeni adresowej) oraz mechanizmu ustawiania znaczników kanarkowych w stosie, co czyni te mechanizmy nieskutecznymi.
Wiele problemów dotyczy stosu USB oraz poszczególnych sterowników. Na przykład, problem z pamięcią masową USB może spowodować przepełnienie bufora i wykonanie kodu na poziomie jądra, gdy urządzenie jest podłączone do kontrolowanego przez atakującego hosta USB. Wada w USB DFU, sterowniku do ładowania nowego oprogramowania przez USB, pozwala na załadowanie zmodyfikowanego obrazu oprogramowania do wewnętrznej pamięci Flash mikrokontrolera bez stosowania szyfrowania i obejścia trybu bezpiecznego uruchamiania z weryfikacją komponentów za pomocą podpisu cyfrowego. Dodatkowo badano kod otwartego bootloadera , w którym znaleziono jedną niegroźną lukę,
która może prowadzić do przepełnienia bufora przy użyciu protokołu SMP (Simple Management Protocol) przez UART.
Przypominamy, że w Zephyrze wszystkie procesy mają tylko jedną globalną współdzieloną przestrzeń adresową (SASOS, Single Address Space Operating System). Specyficzny dla aplikacji kod jest łączony z jądrami dostosowanymi do konkretnego zastosowania i tworzy monolitowy plik wykonywalny do załadowania i uruchomienia na określonym sprzęcie. Wszystkie zasoby systemowe są definiowane na etapie kompilacji, co zmniejsza rozmiar kodu i zwiększa wydajność. Do obrazu systemowego mogą być dołączane tylko te funkcje jądra, które są potrzebne do uruchomienia aplikacji.
Warto zauważyć, że wśród kluczowych zalet Zephyr rozwoju z uwzględnieniem bezpieczeństwa. , wszystkie etapy rozwoju przechodzą obowiązkowe etapy weryfikacji bezpieczeństwa kodu: testy fuzzingowe, analiza statyczna, testy penetracyjne, przegląd kodu, analiza wprowadzania backdoorów oraz modelowanie zagrożeń.
Źródło: opennet.ru
