Microsoft eröffnet CHERIoT, eine Hardwarelösung zur Verbesserung der C-Code-Sicherheit

Microsoft hat Entwicklungen im Zusammenhang mit dem CHERIoT-Projekt (Capability Hardware Extension to RISC-V for Internet of Things) entdeckt, das darauf abzielt, Sicherheitsprobleme in vorhandenem Code in C und C++ zu blockieren. CHERIoT bietet eine Lösung, mit der Sie bestehende C/C++-Codebasen schützen können, ohne sie überarbeiten zu müssen. Der Schutz wird durch die Verwendung eines modifizierten Compilers implementiert, der einen speziellen erweiterten Satz von Prozessoranweisungen (ISA) verwendet, der vom Prozessor bereitgestellt wird und auf Hardwareebene den Speicherzugriff überwacht, die Richtigkeit der Arbeit mit Zeigern überprüft und die Isolierung von Codeblöcken gewährleistet.

Das Projekt wurde mit Blick auf die Tatsache erstellt, dass die Low-Level-Natur der C-Sprache bei der Arbeit mit dem Speicher zu einer Fehlerquelle wird, die zu Problemen wie Pufferüberläufen, Zugriff auf bereits freigegebenen Speicher, Zeiger-Dereferenzierungen oder doppelte Freigaben führt . Die Praxis zeigt, dass selbst große Unternehmen wie Google und Microsoft, die eine strenge Änderungsprüfungsrichtlinie haben und moderne Entwicklungsmethoden und statische Analysetools verwenden, die Fehlerfreiheit bei der Arbeit mit dem Speicher nicht garantieren können (z. B. etwa 70 % der Schwachstellen in Microsoft). und Google werden durch unsichere Speicherverwaltung verursacht).

Das Problem kann durch den Einsatz von Programmiersprachen gelöst werden, die einen sicheren Betrieb mit dem Speicher gewährleisten, oder durch Bindungen mit zusätzlichen Prüfungen, beispielsweise durch die Verwendung von Zeigern wie MiraclePtr (raw_ptr) anstelle gewöhnlicher Zeiger, die zusätzliche Prüfungen für den Zugriff auf freigegebene Speicherbereiche durchführen. Solche Methoden eignen sich jedoch besser für neuen Code, und die Überarbeitung vorhandener C/C++-Projekte ist ziemlich problematisch, insbesondere wenn sie für die Ausführung in ressourcenbeschränkten Umgebungen wie eingebetteten Systemen und Geräten für das Internet der Dinge konzipiert sind.

CHERIoT-Hardwarekomponenten sind als Mikrocontroller auf Basis der RISC-V-Architektur konzipiert und implementieren die geschützte CHERI-Prozessorarchitektur (Capability Hardware Extension to RISC-V), die ein Modell für kontrollierten Speicherzugriff basierend auf „Fähigkeit“ (jedes Lesen und Schreiben) bietet (Speichervorgang ist zulässig). Basierend auf der in CHERIoT bereitgestellten Befehlssatzarchitektur (ISA) wird ein Softwaremodell erstellt, das die Sicherheit der Arbeit mit Speicher auf der Ebene einzelner Objekte gewährleistet, Schutz vor Zugriffen auf bereits freigegebenen Speicher bietet und ein leichtes System zur Speicherzugriffsisolierung implementiert . Das spezifizierte Softwareschutzmodell spiegelt sich direkt im C/C++-Sprachmodell wider, wodurch es zum Schutz vorhandener Anwendungen verwendet werden kann (nur eine Neukompilierung und Ausführung auf Geräten, die ISA CHERIoT unterstützen, ist erforderlich).

Die vorgeschlagene Lösung ermöglicht das Blockieren von Fehlern, die dazu führen, dass ein Objekt die Speichergrenzen überschreitet, erlaubt keine Zeigerersetzung (alle Zeiger müssen aus vorhandenen Zeigern generiert werden) und überwacht den Speicherzugriff nach der Freigabe (jeder Zugriff auf den Speicher mit einem falschen). Ein Zeiger oder ein Zeiger, der auf ein freigegebenes Objekt verweist, führt dazu, dass eine Ausnahme ausgelöst wird. Mit CHERIoT können Sie beispielsweise automatische Grenzprüfungen, die Verfolgung der Speicherlebensdauer und die Durchsetzung der Zeigerintegrität in Komponenten implementieren, die nicht vertrauenswürdige Daten verarbeiten, ohne dass Codeänderungen erforderlich sind.

Das Projekt umfasst eine Spezifikation der erweiterten CHERIoT-Befehlssatzarchitektur, eine Referenzimplementierung einer 32-Bit-RISC-V-CPU, die CHERIoT ISA unterstützt, und ein modifiziertes LLVM-Toolkit. CPU-Prototypdiagramme und Hardwareblockbeschreibungen in Verilog werden unter der Apache 2.0-Lizenz vertrieben. Als Basis für die CPU wurde der Ibex-Kern aus dem lowRISC-Projekt verwendet. Das CHERIoT ISA-Codemodell ist in der Sail-Sprache definiert und steht unter der BSD-Lizenz.

Darüber hinaus wird ein Prototyp des Echtzeitbetriebssystems CHERIoT RTOS vorgeschlagen, das die Möglichkeit bietet, Kompartimente auch auf eingebetteten Systemen mit 256 MB RAM zu isolieren. Der CHERIoT RTOS-Code ist in C++ geschrieben und wird unter der MIT-Lizenz vertrieben. Die Grundkomponenten des Betriebssystems, wie Bootloader, Scheduler und Speicherverteilungssystem, sind in Form von Compartments konzipiert.

Ein Fach in CHERIoT RTOS ist eine isolierte Kombination aus Code und globalen Variablen, die einer gemeinsam genutzten Bibliothek ähnelt, aber im Gegensatz zu dieser kann es seinen Zustand ändern (veränderbar) und in einem separaten Sicherheitskontext ausgeführt werden. Kein Code von außen kann die Kontrolle an den Code in einem Compartment übertragen und auf Objekte zugreifen, es sei denn, er greift auf speziell definierte Einstiegspunkte zu und verwendet Zeiger auf Objekte, die beim Aufruf eines anderen Compartments explizit übergeben werden. Integrität und Vertraulichkeit sind für Code und globale Objekte in einem Compartment gewährleistet.

Source: opennet.ru

Kommentar hinzufügen