Was ist CHERI?

Abkürzung für Capability Hardware Enhanced RISC Instructions. Befehlssatzerweiterung, die Zeiger durch Capabilities ersetzt, die zusätzlich zur Adresse den Bereich, auf den sie zeigen dürfen, und ihre Rechte tragen, sodass Zugriffe außerhalb der Grenzen und gefälschte Zeiger in Hardware gestoppt werden. Sie wurde von der University of Cambridge und SRI International entwickelt. Arm stellte Forschenden Anfang der 2020er-Jahre Morello bereit, einen darauf basierenden Prototyp-Prozessor.

Japanische Bezeichnung: CHERI

„CHERI“ kommt in 1 Übungsfragen aus 1 Themen vor, z. B. Aktuelle Entwicklungen der Hardwaresicherheit.

Fachgebiet: Aktuelle Entwicklungen der Hardwaresicherheit

Was eine Capability enthält

Ein herkömmlicher Zeiger ist nur eine Adresse, und die Hardware hat keine Möglichkeit zu prüfen, worauf er zeigt. Eine CHERI-Capability enthält neben der Adresse Unter- und Obergrenze des Bereichs, auf den sie zeigen darf, sowie Rechte wie Lesen, Schreiben und Ausführen. Bei 64-Bit-Adressen werden die Grenzen komprimiert dargestellt, sodass die Capability in 128 Bit passt, und ein weiteres Tag-Bit wird außerhalb des normalen Speicherinhalts gehalten. Die CPU prüft Grenzen und Rechte bei jedem Load und Store und löst bei Verstößen eine Ausnahme aus, sodass Fehler wie ein Pufferüberlauf sofort gestoppt werden.

Tags, die Fälschung verhindern

Das Tag wird nur gesetzt, wenn eine Capability mit den dafür vorgesehenen Befehlen erzeugt oder durch Einengen des Bereichs aus einer bestehenden Capability abgeleitet wird. Wird eine Capability als gewöhnliche Daten überschrieben, wird ihr Tag gelöscht, und ein Wert ohne Tag kann nicht als Zeiger verwendet werden. Grenzen und Rechte lassen sich nur einengen, nie erweitern, sodass ein Programm nicht mehr Befugnisse erzeugen kann, als es erhalten hat. Diese Eigenschaft erlaubt es auch, ein einzelnes Programm in kleine Abschnitte zu unterteilen, die jeweils nur auf das zugreifen dürfen, was ihnen zusteht (Kompartimentierung).

Hürden für die Verbreitung

Da sich die Größe von Zeigern verdoppelt, sind Speicherverbrauch und Cache-Effizienz betroffen, und Software, die Zeiger als Ganzzahlen behandelt, muss angepasst werden. Die Forschung hat gezeigt, dass viele C- und C++-Programme mit kleinen Änderungen laufen. Mit Stand Mitte der 2020er-Jahre handelt es sich vor allem um Forschungsprototypen und einige Implementierungen für Mikrocontroller; in den CPUs gewöhnlicher PCs und Smartphones ist CHERI nicht zu finden.

Jetzt üben: Fragen zu CHERI

Welche Beschreibung der Capabilities in der als CHERI bezeichneten Befehlssatzerweiterung ist richtig?

  1. AZeigerwerte werden vor dem Ablegen im Speicher mit einem Schlüssel in der CPU verschlüsselt und bei jeder Verwendung entschlüsselt, sodass andere Programme und das Betriebssystem sie nicht lesen können
  2. BDie CPU prüft bei jedem einzelnen ausgeführten Befehl die digitale Signatur der ausführbaren Datei des Programms und führt keine unsignierten Befehle aus
  3. CEin Zeiger erhält den Bereich, auf den er zugreifen darf, und seine Rechte, und ein 1-Bit-Tag, das Software im Speicher nicht schreiben kann, unterscheidet, ob er legitim erzeugt wurde
Antwort und Erläuterung anzeigen

Antwort: C. Ein Zeiger erhält den Bereich, auf den er zugreifen darf, und seine Rechte, und ein 1-Bit-Tag, das Software im Speicher nicht schreiben kann, unterscheidet, ob er legitim erzeugt wurde

CHERI ersetzt Zeiger, die nur aus einer Adresse bestehen, durch Capabilities, die die Adresse, Ober- und Untergrenze des Bereichs, auf den sie zeigen dürfen, sowie Rechte wie Lesen, Schreiben und Ausführen bündeln (bei 64-Bit-Adressen werden sie komprimiert in 128 Bit untergebracht, mit einem separaten 1-Bit-Tag). Die CPU prüft Bereich und Rechte bei jedem Zugriff, sodass Fehler der Speichersicherheit wie Lese- und Schreibzugriffe außerhalb eines Array-Bereichs in Hardware gestoppt werden können. Das Tag wird nur gesetzt, wenn eine Capability mit den dafür vorgesehenen Befehlen erzeugt wird, und verschwindet, wenn sie als gewöhnliche Daten überschrieben wird; Zeiger lassen sich daher nicht fälschen. Die Forschung wurde von der University of Cambridge und anderen vorangetrieben, und Arm stellte Forschenden Anfang der 2020er-Jahre Morello bereit, einen darauf basierenden Prototyp-Prozessor mit Evaluierungsboard.

Häufige Fragen

Was unterscheidet CHERI von MTE (Memory Tagging Extension)?

MTE vergleicht 4-Bit-Tags an Speicher und Zeigern und findet Fehler probabilistisch. CHERI gibt jedem Zeiger eigene Grenzen und Rechte und stoppt Zugriffe außerhalb der Grenzen deterministisch. MTE lässt sich leichter in vorhandene Software einführen, während CHERI stärkere Garantien bietet, dafür aber größere Änderungen an Befehlssatz und Software erfordert.

Beseitigt CHERI alle Probleme der Speichersicherheit?

Es verhindert Zugriffe außerhalb der Grenzen und das Fälschen von Zeigern, doch um die Verwendung von Speicher nach seiner Freigabe zu verhindern, sind zusätzliche Vorkehrungen im Allokator nötig. Logikfehler und der Missbrauch legitim erteilter Rechte lassen sich ebenfalls nicht verhindern. CHERI wird zusammen mit anderen Maßnahmen eingesetzt.

„CHERI“ in den Erläuterungen

Fragen mit „CHERI“ (1)

  1. Welche Beschreibung der Capabilities in der als CHERI bezeichneten Befehlssatzerweiterung ist richtig?

Verwandte Begriffe

Zeiger (Pointer) Array Arm CCA (Confidential Compute Architecture) Confidential Computing DICE (Device Identifier Composition Engine) FIPS 140-3 HBOM (Hardware-Stückliste) Kontrollflussintegrität (Control-Flow Integrity) Laser-Fault-Injection Logic Locking

Zur Glossarübersicht