Die Hardware-Software-Plattform CHERIoT 1.0 zur Verbesserung der Sicherheit von C-Code

Die endgültige Version der Spezifikation der Programm- und Hardwareplattform CHERIoT 1.0 (Capability Hardware Extension to RISC-V für das Internet der Dinge) wurde vorgestellt. Sie definiert die Erweiterung des Befehlssatzes (ISA) zur Schaffung sicherer Geräte. CHERIoT bietet hardwareseitige Funktionen zur Überwachung des Zugriffs auf den Speicher, zur Überprüfung der Korrektheit der Arbeit mit Zeigern und zur Gewährleistung der Isolation von Codeblöcken. Gleichzeitig wurde ein stabiler Release des Referenzmodells der formalen CHERIoT ISA veröffentlicht, das in der Sprache Sail definiert ist. Die Ergebnisse des Projekts werden unter der BSD-Lizenz veröffentlicht.

Das CHERIoT-Projekt wurde von Microsoft ins Leben gerufen, um Sicherheitsprobleme im bestehenden Code in C- und C++-Sprachen zu lösen und solchen Code zu schützen, ohne ihn neu zu schreiben. Der Schutz erfolgt durch den Einsatz eines modifizierten Compilers, der einen erweiterten Satz von Prozessoranweisungen (ISA) verwendet, um die Integrität von Zeigern zu gewährleisten, die Grenzen bei der Arbeit mit Speicher zu kontrollieren und den Zugriff auf freigegebenen Speicher zu verhindern. Im Jahr 2023 wurden die Ergebnisse von CHERIoT öffentlich gemacht und in ein gemeinsames Projekt umgewandelt, an dem sich auch andere Unternehmen beteiligten.

Die Hardwarekomponenten von CHERIoT sind in Form eines Mikrokontrollers auf Basis der RISC-V-Architektur gestaltet und implementieren die sichere Prozessorkernarchitektur CHERI (Capability Hardware Extension to RISC-V) mit einem speicherverwaltenden Modell auf Basis von 'Capabilities' (jeder Lese- und Schreibvorgang im Speicher wird authorisiert). Auf der von CHERIoT bereitgestellten Architektur des Befehlssatzes (ISA) basiert ein Softwaremodell, das die Sicherheit der Speicherverwaltung auf der Ebene einzelner Objekte gewährleistet, Schutz vor dem Zugriff auf bereits freigegebenen Speicher bietet und ein leichtgewichtiges System zur Isolierung des Speicherzugriffs implementiert.

Das angegebene Schutzprogrammmodell spiegelt sich direkt in das Sprachmodell C/C++ wider, was es ermöglicht, es für bestehende Anwendungen zu verwenden, deren Schutz lediglich eine Neukompilierung und Ausführung auf Hardware erfordert, die ISA CHERIoT unterstützt. Zum Beispiel ermöglicht die Anwendung von CHERIoT, ohne Änderungen am Code automatisch Grenzüberprüfungen, Nachverfolgung der Lebensdauer von Speicherbereichen und Gewährleistung der Integrität von Zeigern in Komponenten, die mit nicht vertrauenswürdigen Daten arbeiten, umzusetzen.

Zu den Problemen, die durch CHERIoT blockiert werden:

  • Übergreifen auf den Speicher des Objekts;
  • Ersatz von Zeigern (bei der Verwendung von CHERIoT müssen alle Zeiger von bereits bestehenden Zeigern abgeleitet sein);
  • Zugriff auf den Speicher nach Freigabe (jeder Zugriff auf den Speicher über einen ungültigen Zeiger oder einen Zeiger, der auf ein freigegebenes Objekt verweist, führt bei der Verwendung von CHERIoT zur Generierung einer Ausnahme).

Neben der Spezifikation und dem formalen Modell wird im Projekt eine Referenzimplementierung einer 32-Bit RISC-V CPU Ibex mit Unterstützung von ISA CHERIoT und ein modifiziertes LLVM-Toolset entwickelt. Die Prototyp-Schemas der CPU und die Beschreibungen der Hardwarekomponenten in Verilog werden unter der Lizenz Apache 2.0 verbreitet. Als Grundlage für die CPU wurde der Ibex-Kern aus dem lowRISC-Projekt verwendet. Basierend auf dem CHERIoT-Kern werden die ICENI-Chips für die Massenproduktion vorbereitet, deren Markteinführung für das nächste Jahr geplant ist. Separat entwickelt Microsoft den Kudu-Mikrocontroller mit Unterstützung von ISA CHERIoT. Ibex und Kudu unterstützen bereits vollständig die CHERIoT 1.0-Spezifikation. Es werden Anstrengungen unternommen, um die CHERI-Erweiterungen für RISC-V-Prozessoren in der RISC-V International-Organisation zu standardisieren.

Zusätzlich wird ein Emulator der Plattform auf Basis von FPGA und ein Docker-Container für Entwickler mit vorinstalliertem Toolset und dem CPU-Simulator Ibex, der mit Verilator realisiert wurde, entwickelt. Darüber hinaus wird auf der Grundlage von CHERIoT ein Prototyp eines Echtzeitbetriebssystems CHERIoT RTOS erstellt, das die Isolation von Compartments (Compartment) selbst auf eingebetteten Systemen mit 256 MB RAM ermöglicht. Der Code für CHERIoT RTOS ist in C++ geschrieben und wird unter der MIT-Lizenz veröffentlicht. Die grundlegenden OS-Komponenten, wie Bootloader, Scheduler und Speichermanagementsystem, sind in Form von Compartments gestaltet.

Ein Kompartiment in CHERIoT RTOS stellt eine isolierte Kombination aus Code und globalen Variablen dar, die einer Shared Library ähnelt, jedoch im Gegensatz zu letzterer ihren Zustand (mutable) ändern und in einem separaten Sicherheitskontext ausgeführt werden kann. Kein externer Code kann die Kontrolle über den Code im Kompartiment übernehmen oder auf Objekte zugreifen, es sei denn, er spricht spezielle definierte Einstiegspunkte an und verwendet Zeiger auf Objekte, die beim Aufruf eines anderen Kompartiments explizit übergeben werden. Für den Code und die globalen Objekte im Kompartiment wird Integrität und Vertraulichkeit gewährleistet.

Quelle: opennet.ru

60GB SSD 8Gb DDR4