Microsoft hat CHERIoT veröffentlicht, eine Hardware-Lösung zur Verbesserung der Sicherheit von Code in der Programmiersprache C.

Die Microsoft Corporation hat Entwicklungen im Rahmen des Projekts CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) vorgestellt, das darauf abzielt, Sicherheitsprobleme im bestehenden Code in den Sprachen C und C++ zu beheben. CHERIoT bietet eine Lösung, die es ermöglicht, bestehende Codebasen in C/C++ zu schützen, ohne dass eine vollständige Neugestaltung erforderlich ist. Der Schutz erfolgt durch den Einsatz eines modifizierten Compilers, der einen speziellen erweiterbaren Satz von Prozessoranweisungen (ISA) nutzt, die vom Prozessor bereitgestellt werden. Diese verfolgen auf Hardware-Ebene den Zugriff auf den Speicher, überprüfen die Korrektheit des Umgangs mit Zeigern und gewährleisten die Isolierung von Codeblöcken.

Das Projekt wurde mit dem Gedanken entwickelt, dass die low-level Natur der Programmiersprache C zu Speicherfehlern führen kann, wie etwa Bufferüberläufen, dem Zugriff auf bereits freigegebenen Speicher, dem Dereferenzieren von Zeigern oder doppeltem Freigeben von Speicher. Die Erfahrung zeigt, dass selbst große Unternehmen wie Google und Microsoft, die strenge Richtlinien für die Überprüfung von Änderungen haben und moderne Entwicklungsansätze sowie Werkzeuge zur statischen Analyse einsetzen, keine Fehlerfreiheit im Umgang mit Speicher garantieren können (zum Beispiel ist etwa 70% der Sicherheitsanfälligkeiten in den Softwareprodukten von Microsoft und Google auf unsicheren Umgang mit Speicher zurückzuführen).

Probleme können durch Programmiersprachen gelöst werden, die eine sichere Speicherverwaltung gewährleisten, oder durch Wrapper mit zusätzlichen Überprüfungen, wie dem Einsatz von MiraclePtr (raw_ptr) anstelle herkömmlicher Zeiger, der zusätzliche Prüfungen des Zugriffs auf freigegebene Speicherbereiche durchführt. Solche Methoden eignen sich jedoch eher für neuen Code, und bestehende Projekte in C/C++ sind oft schwierig anzupassen, insbesondere wenn sie für ressourcenbeschränkte Umgebungen wie eingebettete Systeme und Internet-of-Things-Geräte vorgesehen sind.

Die Hardware-Komponenten von CHERIoT sind als Mikrokontroller basierend auf der RISC-V-Architektur gestaltet und implementieren die sichere Prozessorarchitektur CHERI (Capability Hardware Extension to RISC-V). Diese bietet ein Modell für den kontrollierten Zugriff auf den Speicher, das auf "Capabilities" basiert (jede Lese- und Schreiboperation im Speicher muss autorisiert werden). Auf der Grundlage der in CHERIoT bereitgestellten Befehlssatzarchitektur (ISA) wird ein Softwaremodell aufgebaut, das die Sicherheit der Speicheroperationen auf der Ebene einzelner Objekte gewährleistet, einen Schutz vor Zugriffen auf bereits freigegebene Speicherbereiche bietet und ein leichtgewichtiges System zur Isolierung des Speicherzugriffs implementiert. Dieses Schutzmodell wirkt sich direkt auf die C/C++-Programmiersprachen aus und ermöglicht dessen Anwendung zum Schutz bestehender Anwendungen (es ist lediglich eine Neukompilierung und Ausführung auf Hardware erforderlich, die die ISA von CHERIoT unterstützt).

Die vorgeschlagene Lösung ermöglicht es, Fehler zu blockieren, die zu einem Überlauf im Speicher führen, verhindert die Umgehung von Zeigern (alle Zeiger müssen von bereits vorhandenen Zeigern abgeleitet werden), und verfolgt den Zugriff auf den Speicher nach dessen Freigabe (jeder Zugriff auf den Speicher über einen ungültigen Zeiger oder einen Zeiger, der auf ein freigegebenes Objekt verweist, führt zur Generierung einer Ausnahme). Beispielsweise ermöglicht der Einsatz von CHERIoT, ohne Änderungen am Code, eine automatisierte Überprüfung der Grenzen, die Verfolgung der Lebensdauer von Speicherbereichen und die Gewährleistung der Integrität von Zeigern in Komponenten, die mit nicht vertrauenswürdigen Daten arbeiten.

Das Projekt umfasst die Spezifikation einer erweiterten Architektur des Befehlssatzes CHERIoT, eine Referenzimplementierung einer 32-Bit RISC-V CPU mit Unterstützung für ISA CHERIoT und ein modifiziertes LLVM-Toolset. Die Schemas des CPU-Prototyps und die Beschreibungen der Hardwareeinheiten in Verilog werden unter der Apache 2.0 Lizenz veröffentlicht. Als Grundlage für die CPU wurde der Ibex-Kern aus dem lowRISC-Projekt verwendet. Das Code-Modell der CHERIoT ISA ist in Sail definiert und wird unter der BSD-Lizenz veröffentlicht.

Zusätzlich wurde ein Prototyp des Echtzeitbetriebssystems CHERIoT RTOS vorgestellt, das die Isolation 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 veröffentlicht. Die grundlegenden Komponenten des Betriebssystems sind in Form von Compartments umgesetzt, einschließlich des Bootloaders, des Task-Schedulers und des Speichermanagementsystems.

Ein Compartment in CHERIoT RTOS stellt eine isolierte Kombination aus Code und globalen Variablen dar, die einer gemeinsam genutzten Bibliothek ähnelt, sich jedoch im Gegensatz zu dieser in ihrem Zustand (mutable) ändern kann und in einem separaten Sicherheitskontext ausgeführt wird. Kein externes Code kann die Kontrolle an den Code im Compartment übergeben oder auf Objekte zugreifen, außer durch speziell definierte Einstiegspunkte und die Verwendung von Zeigern auf Objekte, die explizit beim Aufruf eines anderen Compartments übergeben wurden. Die Integrität und Vertraulichkeit von Code und globalen Objekten im Compartment wird garantiert.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster