Platforma sprzętowo-programowa CHERIoT 1.0 dla zwiększenia bezpieczeństwa kodu w języku C

Przedstawiono ostateczną wersję specyfikacji platformy sprzętowo-programowej CHERIoT 1.0 (Capability Hardware Extension to RISC-V for Internet of Things), określającej rozszerzenie zestawu instrukcji (ISA) do tworzenia zabezpieczonych urządzeń. CHERIoT zapewnia możliwości sprzętowe do śledzenia dostępu do pamięci, weryfikacji poprawności pracy z wskaźnikami oraz zapewnienia izolacji bloków kodu. Jednocześnie opublikowano stabilną wersję etalonowego formalnego modelu CHERIoT ISA, zdefiniowanego w języku Sail. Opracowania projektu są udostępniane na licencji BSD.

Projekt CHERIoT został stworzony przez firmę Microsoft w celu rozwiązania problemów z bezpieczeństwem w istniejącym kodzie napisanym w językach C i C++, oraz ochrony takiego kodu bez konieczności jego przerabiania. Ochrona jest realizowana poprzez zastosowanie zmodyfikowanego kompilatora, który wykorzystuje rozszerzony zestaw instrukcji procesora (ISA) w celu zapewnienia integralności wskaźników, kontroli granic przy pracy z pamięcią oraz zapobiegania dostępowi do zwolnionej pamięci. W 2023 roku osiągnięcia CHERIoT zostały otwarte i przekształcone w projekt współpracy, do którego dołączyły również inne firmy.

Komponenty sprzętowe CHERIoT są zrealizowane w formie mikrokontrolera opartego na architekturze RISC-V, który implementuje zabezpieczoną architekturę procesora CHERI (Capability Hardware Extension to RISC-V) z modelem zarządzanego dostępu do pamięci opartym na 'capability' (każda operacja odczytu i zapisu do pamięci jest autoryzowana). Na bazie dostarczanej w architekturze zestawu instrukcji CHERIoT zbudowany jest model programowy, gwarantujący bezpieczeństwo pracy z pamięcią na poziomie poszczególnych obiektów, oferujący ochronę przed dostępem do już zwolnionej pamięci oraz implementujący lekką system izolacji dostępu do pamięci.

Podany model programowy ochrony bezpośrednio odzwierciedla się w modelu językowym C/C++, co pozwala na jego zastosowanie w istniejących aplikacjach, których ochrona wymaga jedynie rekompilacji i uruchomienia na sprzęcie obsługującym ISA CHERIoT. Na przykład, zastosowanie CHERIoT pozwala na automatyczne sprawdzanie granic, śledzenie czasu życia obszarów pamięci i zapewnienie integralności wskaźników w komponentach przetwarzających dane, które nie są godne zaufania, bez wprowadzania zmian w kodzie.

Wśród problemów, które są blokowane za pomocą CHERIoT:

  • Wyjście poza obszar obiektu w pamięci;
  • Zamiana wskaźników (przy zastosowaniu CHERIoT wszystkie wskaźniki muszą pochodzić z już istniejących wskaźników);
  • Odwołanie do pamięci po jej zwolnieniu (jakiekolwiek odwołanie do pamięci przez nieprawidłowy wskaźnik lub wskaźnik odnoszący się do zwolnionego obiektu prowadzi w zastosowaniu CHERIoT do generowania wyjątku).

Oprócz specyfikacji i formalnego modelu, projektem rozwijana jest wzorcowa implementacja 32-bitowego procesora RISC-V Ibex z wsparciem ISA CHERIoT oraz zmodyfikowane narzędzia LLVM. Schematy prototypu CPU i opisy bloków sprzętowych w języku Verilog są udostępniane na licencji Apache 2.0. Jako podstawę dla CPU wykorzystano rdzeń Ibex z projektu lowRISC. Na bazie rdzenia CHERIoT Ibex przygotowywane są do masowej produkcji chipy ICENI, których sprzedaż planowana jest na przyszły rok. Oddzielnie firma Microsoft rozwija mikroprocesor Kudu z wsparciem ISA CHERIoT. Ibex i Kudu w pełni wspierają specyfikację CHERIoT 1.0. Prowadzone są prace nad standaryzacją rozszerzeń CHERI dla procesorów RISC-V w organizacji RISC-V International.

Dodatkowo rozwijany jest emulator platformy oparty na FPGA oraz kontener Docker dla programistów z preinstalowanymi narzędziami i symulatorem CPU Ibex, zrealizowanym przy użyciu Verilator. Ponadto na bazie CHERIoT przygotowany został prototyp systemu operacyjnego czasu rzeczywistego CHERIoT RTOS, który umożliwia izolację kompartmentów (compartment) nawet na wbudowanych systemach z 256 MB RAM. Kod CHERIoT RTOS napisany jest w języku C++ i dostępny jest na licencji MIT. W formie kompartmentów zaprojektowane są podstawowe komponenty systemu operacyjnego, takie jak bootloader, scheduler i 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