Ring (CPU)
(Weitergeleitet von Userland)
Der Befehlssatz wird für unprivilegierte Prozesse derart eingeschränkt, dass sie nicht direkt auf die Hardware zugreifen können und sich auch nicht aus ihrer Privilegierungsebene befreien können. Der Zugriff auf den Speicherbereich anderer Prozesse wird durch Speichervirtualisierung verhindert. Somit wird gewährleistet, dass Prozesse z.B. im Ring 3 in keinem Fall Prozesse im Ring 0 oder auch andere Prozesse im Ring 3 beeinflussen können. Da die unprivilegierten Prozesse nicht auf Hardware direkt zugreifen können, existieren sogenannte „Gates“ als Löcher im Speicher zu dem darunterliegenden Ring, um auf die API (Schnittstelle) des Kernels die notwendigen Aktionen anzufordern.
Prozesse im Ring 0 befinden sich im sogenannten Kernel-Modus (engl. "kernel-mode") - alle anderen im Benutzer-Modus (engl. "user-mode"). Jeder Wechsel von einem Ring zum anderen erfordert in der CPU jedes Mal einen Kontext-Wechsel, der einige Rechenzeit in Anspruch nimmt.
Die CPU muss extern oder intern über eine MMU (Speicher-Verwaltungseinheit) verfügen, die sowohl die Umsetzung zwischen virtuellen und physikalischen Speicheradressen vornimmt - als auch die Auswertung der Deskriptoren der virtuellen Speicherseiten. Darüber hinaus muss die CPU über die Möglichkeit verfügen, den zuletzt ausgeführten Befehl zu wiederholen: Bei einer Zugriffsverletzung (Ein Prozess greift auf nicht zugelassene Befehle oder Speicherseiten zu, die nicht physikalisch vorhanden sind) wird ein Interrupt ausgelöst, dessen Ursache das Betriebssystem auswerten muss und ggf. den letzten Befehl wiederholt.
Diese Berechtigungsmodi werden sowohl von x86-Prozessoren (ab 286) unterstützt – als auch von RISC-Prozessoren und anderen Typen.
Inhaltsverzeichnis |
x86-Systeme
80286-kompatible Prozessoren unterscheiden vier Privilegierungsstufen: Ring 0, 1, 2 und 3. Dabei stellt Ring 0, genannt „supervisor mode“, die höchste Privilegierungsstufe dar, die bis zur Stufe 3 immer weiter eingeschränkt wird.
Um Prozesse in einem geschützten Bereich (Ring > 0) ablaufen zu lassen, wird der physikalische Arbeitsspeicher in virtuelle Speicherseiten aufgeteilt. Zu jeder Speicherseite existiert eine Tabelle, in der unter anderem gespeichert ist, in welchem Level (Ring) der Programmcode, der innerhalb dieser Speicherseite gespeichert ist, ausgeführt wird. Diese Auswertung nimmt die MMU meist extern vor.
Mit der Einführung des AMD64-Opcodes, den auch Intel für seine 64-Bit-Prozessoren übernommen hat, existiert im Speicherseitendeskriptor ein Flag (NX = No eXecution), das eine Unterscheidung zwischen Daten und Programmcode ermöglicht, um so Sicherheitslücken durch Pufferüberläufe vorzubeugen. Der Pufferüberlauf wird zwar nicht direkt verhindert, Programmcode in Datenseiten kann dabei aber nicht zur Ausführung gebracht werden.
Betriebssysteme auf x86
Die verbreiteten Betriebssysteme für x86 (dazu gehören Linux und Windows) nutzen lediglich 2 der 4 möglichen CPU-Ringe. Im Ring 0 werden der Kernel und alle Hardwaretreiber ausgeführt, während die Anwendungssoftware im unprivilegierten Ring 3 arbeitet. Damit bleibt die Portabilität des Betriebssystems auch auf Prozessorarchitekturen gewährleistet die nur 2 Ringe unterscheiden können. IBM OS/2 benutzt allerdings Ring 2 für Grafiktreiber.[1]
Die verstärkt verwendeten Virtualisierungslösungen verwenden auch Ring 1. Hierbei wird der Kernel aus Ring 0 in Ring 1 verschoben und ein weiteres Layer unter den Kernel geschoben ("hypervisor"), der dann in Ring 0 residiert und ggf. mehrere in Ring 1 laufende Kernels verwaltet. Dies kann allerdings auch durch Rootkits ausgenutzt werden, um Schadcode unbemerkt vom Anwender auf dem Ring 0 ausführen zu lassen (siehe auch Virtual Machine Based Rootkit).
Nicht x86-Systeme
Die bei x86-Prozessoren vorgenommene Einteilung in 4 Ringe wurde schon früher z.B. bei der VAX eingesetzt. Die Alpha unterstützt einen zusätzlichen geschützten Bereich für ihren PAL-Code, dieser könnte als Ring -1 aufgefasst werden. Die Honeywell 6180, das erste System mit Hardware-Unterstützung für dieses Konzept, kannte 8 Ringe.
Bei vielen aktuellen Prozessoren wird oft nur zwischen Supervisor- (alles ist möglich) und User-(eingeschränkte Zugriffe auf Speicherbereiche/Systemresourcen/CPU Register) Modus unterschieden. Der Schutz des Arbeitsspeichers erfolgt über die Seitenverwaltungseinheit der CPU.
Dieses Prinzip lässt sich auch auf x86-Systemen anwenden, indem der Speicher über die Segmentierung als Flat Memory angelegt wird. Dabei läuft die CPU nur in den Privileg Leveln 0 & 3.
Siehe auch
fr:Anneau de protection it:User mode ja:リングプロテクション ru:Кольца защиты tr:User mode zh:用户态
