Microsoft hat CHERIoT eröffnet, eine Hardwarelösung zur Erhöhung der Sicherheit von Code in C.

Microsoft hat Entwicklungen im Zusammenhang mit dem CHERIoT-Projekt (Capability Hardware Extension to RISC-V für das Internet der Dinge) vorgestellt, das darauf abzielt, Sicherheitsprobleme im bestehenden Code in C und C++ zu verhindern. CHERIoT bietet eine Lösung, die es ermöglicht, bestehende Codebasen in C/C++ zu schützen, ohne sie umzuschreiben. Der Schutz erfolgt durch die Anwendung eines modifizierten Compilers, der einen speziellen erweiterten Satz von Prozessoranweisungen (ISA) verwendet, die vom Prozessor bereitgestellt werden und auf Hardware-Ebene den Zugriff auf den Speicher überwachen, die Korrektheit des Umgangs mit Zeigern prüfen und die Isolierung von Codeblöcken gewährleisten.

Das Projekt wurde mit dem Blick darauf entwickelt, dass der niedrige Grad an Abstraktion der Sprache C eine Quelle für Fehler im Umgang mit dem Speicher darstellt, die zu Problemen wie Pufferüberläufen, dem Zugriff auf bereits freigegebenen Speicher, dem Dereferenzieren von Zeigern oder doppelter Speicherfreigabe führen. Die Praxis zeigt, dass selbst große Unternehmen wie Google und Microsoft, die strikte Änderungsprüfungsrichtlinien haben und moderne Entwicklungs- sowie statische Analysetools verwenden, keine Garantie für die Fehlerfreiheit im Umgang mit dem Speicher geben können (z. B. sind etwa 70 % der Schwachstellen in Softwareprodukten von Microsoft und Google auf unsicheren Speicherzugriff zurückzuführen).

Das Problem kann durch die Verwendung von Programmiersprachen gelöst werden, die einen sicheren Umgang mit dem Speicher garantieren, oder durch Wrapper mit zusätzlichen Überprüfungen, beispielsweise durch die Verwendung von speziellen Zeigertypen wie MiraclePtr (raw_ptr), die zusätzliche Prüfungen beim Zugriff auf freigegebenen Speicher durchführen. Solche Methoden eignen sich jedoch eher für neuen Code, während bestehende Projekte in C/C++ ziemlich problematisch umzubauen sind, insbesondere wenn sie für den Einsatz in ressourcenbeschränkten Umgebungen, wie eingebetteten Systemen und Internet-of-Things-Geräten, vorgesehen sind.

Die Hardwarekomponenten von CHERIoT sind in Form eines Mikrokontrollers auf der Basis der RISC-V-Architektur gestaltet, die die geschützte Prozessorarchitektur CHERI (Capability Hardware Extension zu RISC-V) implementiert und ein modelliertes, verwaltetes Zugriffsmodell auf den Speicher basierend auf „Capabilities“ bereitstellt (jeder Lese- und Schreibvorgang im Speicher wird autorisiert). Auf der bereitgestellten Architektur der CHERIoT-Befehlssatzarchitektur (ISA) basiert ein Softwaremodell, das die Sicherheit beim Arbeiten mit Speicher auf der Ebene einzelner Objekte garantiert, Schutz gegen den Zugriff auf bereits freigegebenen Speicher bietet und ein leichtgewichtiges System zur Isolierung des Zugriffs auf den Speicher implementiert. Dieses Software-Schutzmodell spiegelt sich direkt in das Sprachmodell C/C++ wider, was die Anwendung zum Schutz bestehender Anwendungen ermöglicht (es ist lediglich eine Neubewertung und Ausführung auf der Hardware erforderlich, die die ISA CHERIoT unterstützt).

Die vorgeschlagene Lösung ermöglicht es, Fehler, die einen Überlauf von Objekten im Speicher verursachen, zu blockieren, lässt keine Pointer-Austauschung zu (alle Pointer müssen von bereits vorhandenen Pointern abgeleitet werden), verfolgt den Zugriff auf den Speicher nach der Freigabe (jeder Zugriff auf den Speicher über einen ungültigen Pointer oder einen Pointer, der auf ein freigegebenes Objekt verweist, führt zur Generierung einer Ausnahme). Zum Beispiel ermöglicht die Anwendung von CHERIoT, ohne Änderungen am Code eine automatische Überprüfung der Grenzen, die Überwachung der Lebensdauer von Speicherräumen und die Gewährleistung der Integrität von Pointern in Komponenten, die vertrauensunwürdige Daten verarbeiten, zu implementieren.

Das Projekt umfasst die Spezifikation einer erweiterten Architektur des CHERIoT-Befehlssatzes, eine Referenzimplementierung eines 32-Bit-RISC-V-CPUs mit Unterstützung der ISA CHERIoT und ein modifiziertes LLVM-Toolset. Die Schaltpläne des CPU-Prototyps und die Beschreibungen der Hardwareblöcke in Verilog werden unter der Apache 2.0-Lizenz verbreitet. Als Grundlage für den CPU wurde der Ibex-Core aus dem lowRISC-Projekt verwendet. Das Modell des CHERIoT ISA-Codes ist in der Sprache Sail definiert und wird unter der BSD-Lizenz veröffentlicht.

Zusätzlich wurde ein Prototyp des Echtzeit-Betriebssystems CHERIoT RTOS vorgestellt, der die Isolierung von Compartments selbst auf eingebetteten Systemen mit 256 MB RAM ermöglicht. Der Code von CHERIoT RTOS ist in C++ geschrieben und wird unter der MIT-Lizenz verbreitet. In Form von Compartments sind die grundlegenden Komponenten des Betriebssystems wie Bootloader, Scheduler und Speichermanagement organisiert.

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