Microsoft uruchomił CHERIoT, rozwiązanie sprzętowe mające na celu zwiększenie bezpieczeństwa kodu w języku C

Firma Microsoft ujawniła prace związane z projektem CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), który ma na celu rozwiązywanie problemów z bezpieczeństwem w istniejącym kodzie napisanym w językach C i C++. CHERIoT oferuje rozwiązanie umożliwiające zabezpieczenie istniejących baz kodu w C/C++ bez konieczności ich przerabiania. Ochrona realizowana jest poprzez zastosowanie zmodyfikowanego kompilatora, który wykorzystuje specjalny rozszerzony zestaw instrukcji procesora (ISA), instaluje na poziomie sprzętowym śledzenie dostępu do pamięci, sprawdza poprawność działania wskaźników oraz zapewnia izolację bloków kodu.

Projekt stworzono z myślą o tym, że niski poziom języka C często prowadzi do błędów w zarządzaniu pamięcią, co skutkuje takimi problemami jak nadpisanie bufora, dostęp do już zwolnionej pamięci, dereferencja wskaźników lub podwójne zwolnienie pamięci. Praktyka pokazuje, że nawet duże korporacje, takie jak Google i Microsoft, które mają rygorystyczne zasady recenzowania zmian oraz stosują nowoczesne metody rozwoju i narzędzia analizy statycznej, nie mogą zagwarantować braku błędów w zarządzaniu pamięcią (na przykład około 70% luk w oprogramowaniu Microsoft i Google wywołanych jest przez niebezpieczne zarządzanie pamięcią).

Problem można rozwiązać, wykorzystując języki programowania zapewniające bezpieczne zarządzanie pamięcią lub z wykorzystaniem dodatkowych kontroli, na przykład poprzez zastosowanie zamiast zwykłych wskaźników typu MiraclePtr (raw_ptr), który wykonuje dodatkowe kontrole dostępu do zwolnionych obszarów pamięci. Jednak podobne metody bardziej nadają się do nowego kodu, a adaptacja już istniejących projektów w C/C++ jest wystarczająco problematyczna, zwłaszcza jeśli są one zaprojektowane do działania w ograniczonych środowiskach, takich jak systemy wbudowane i urządzenia internetu rzeczy.

Komponenty sprzętowe CHERIoT są zrealizowane jako mikrokontroler oparty na architekturze RISC-V, implementujący chronioną architekturę procesora CHERI (Capability Hardware Extension to RISC-V), oferującą model kontrolowanego dostępu do pamięci na podstawie „capability” (każda operacja odczytu i zapisu do pamięci jest autoryzowana). Na podstawie architektury zbioru poleceń (ISA) dostarczonej w CHERIoT opracowano model oprogramowania, który zapewnia bezpieczeństwo operacji z pamięcią na poziomie pojedynczych obiektów, oferując ochronę przed dostępem do już zwolnionej pamięci oraz wprowadzając lekką system izolacji dostępu do pamięci. Zdefiniowany model oprogramowania ochrony bezpośrednio przekłada się na model języka C/C++, co pozwala na jego zastosowanie w zabezpieczaniu istniejących aplikacji (wymagana jest jedynie rekompilacja i uruchomienie na sprzęcie wspierającym ISA CHERIoT).

Proponowane rozwiązanie umożliwia blokowanie błędów powodujących wyjście poza granice obiektu w pamięci, nie dopuszcza podmieniania wskaźników (wszystkie wskaźniki muszą pochodzić od już istniejących wskaźników), monitoruje dostęp do pamięci po jej zwolnieniu (jakikolwiek dostęp do pamięci za pomocą niepoprawnego wskaźnika lub wskaźnika odnoszącego się do zwolnionego obiektu prowadzi do generowania wyjątku). Na przykład, zastosowanie CHERIoT pozwala na realizację automatycznej kontroli granic, śledzenia czasu życia obszarów pamięci oraz zapewnienia integralności wskaźników w komponentach obsługujących dane, które nie są godne zaufania, bez wprowadzania zmian w kodzie.

Projekt obejmuje specyfikację rozszerzonej architektury zbioru poleceń CHERIoT, referencyjną implementację 32-bitowego CPU RISC-V z wsparciem ISA CHERIoT oraz zmodyfikowane narzędzia LLVM. Schematy prototypu CPU oraz opisy bloków sprzętowych w języku Verilog są dystrybuowane na licencji Apache 2.0. Jako podstawę dla CPU wykorzystano rdzeń Ibex z projektu lowRISC. Model kodu CHERIoT ISA zdefiniowano w języku Sail i jest dystrybuowany na licencji BSD.

Dodatkowo zaproponowano prototyp systemu operacyjnego czasu rzeczywistego CHERIoT RTOS, który zapewnia możliwość izolacji kompartamentów (compartment) nawet w systemach wbudowanych z 256 MB RAM. Kod CHERIoT RTOS jest napisany w języku C++ i jest udostępniany na licencji MIT. W formie kompartamentów znajdują się podstawowe komponenty systemu operacyjnego, takie jak bootloader, scheduler oraz system zarządzania pamięcią.

Kompartament w CHERIoT RTOS to izolowana kombinacja kodu i zmiennych globalnych, która przypomina bibliotekę współdzieloną, ale w przeciwieństwie do niej może zmieniać swoje stany (mutable) i być uruchamiana w osobnym kontekście bezpieczeństwa. Żaden kod z zewnątrz nie może przejąć kontroli nad kodem w kompartamencie ani uzyskać dostępu do obiektów, z wyjątkiem odwołań do specjalnie zdefiniowanych punktów wejścia oraz użycia wskaźników na obiekty, które zostały jawnie przekazane podczas wywoływania innego kompartamentu. Gwarantuje się integralność i poufność kodu oraz globalnych obiektów w kompartamencie.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster