Verhinderung des Zugriffs im Supervisor-Modus - Supervisor Mode Access Prevention

Supervisor Mode Access Prevention ( SMAP ) ist eine Funktion einiger CPU- Implementierungen wie der Intel Broadwell- Mikroarchitektur, mit der Supervisor-Modus- Programme optional Speicherzuordnungen für den Benutzerbereich festlegen können, sodass der Zugriff auf diese Zuordnungen aus dem Supervisor-Modus eine Falle verursacht. Dies macht es für bösartige Programme schwieriger, den Kernel dazu zu bringen, Anweisungen oder Daten aus einem User-Space-Programm zu verwenden.

Geschichte

Die Supervisor Mode Access Prevention wurde entwickelt , um die zuvor eingeführte Supervisor Mode Execution Prevention (SMEP) zu ergänzen . SMEP kann verwendet werden, um zu verhindern, dass der Supervisor-Modus unbeabsichtigt User-Space-Code ausführt. SMAP erweitert diesen Schutz auf Lese- und Schreibvorgänge.

Leistungen

Ohne Zugriffsverhütung im Supervisor-Modus verfügt der Supervisor-Code normalerweise über vollständigen Lese- und Schreibzugriff auf Speicherzuordnungen im Benutzerbereich (oder über den vollständigen Zugriff). Dies hat zur Entwicklung mehrerer Sicherheits-Exploits geführt, einschließlich Exploits zur Eskalation von Berechtigungen , bei denen der Kernel auf den Speicherplatz im Benutzerbereich zugreift, wenn dies nicht beabsichtigt war. Betriebssysteme können diese Exploits blockieren, indem sie mithilfe von SMAP unbeabsichtigte Speicherzugriffe im Benutzerbereich erzwingen, um Seitenfehler auszulösen . Darüber hinaus kann SMAP fehlerhaften Kernelcode verfügbar machen, der nicht den beabsichtigten Verfahren für den Zugriff auf den Speicherplatz im Benutzerbereich entspricht.

Die Verwendung von SMAP in einem Betriebssystem kann jedoch zu einer größeren Kernelgröße und langsameren Speicherzugriffen im Benutzerbereich über den Supervisor-Code führen, da SMAP jedes Mal vorübergehend deaktiviert werden muss, wenn der Supervisor-Code auf den Speicher im Benutzerbereich zugreifen möchte.

Technische Details

Prozessoren geben die Unterstützung für die Verhinderung des Zugriffs im Supervisor-Modus über das CPUID-Blatt für erweiterte Funktionen an .

SMAP ist aktiviert, wenn Memory Paging aktiv ist und das SMAP-Bit im CR4-Steuerregister gesetzt ist. SMAP kann vorübergehend für explizite Speicherzugriffe deaktiviert werden, indem das Flag EFLAGS.AC (Alignment Check) gesetzt wird. Mit den Anweisungen stac (AC-Flag setzen) und clac (AC-Flag löschen) können Sie das Flag einfach setzen oder löschen.

Wenn das SMAP-Bit in CR4 gesetzt ist, führt der explizite Speicher zum Lesen und Schreiben auf Seiten im Benutzermodus, die von Code ausgeführt werden, der mit einer Berechtigungsstufe von weniger als 3 ausgeführt wird, immer zu einem Seitenfehler, wenn das Flag EFLAGS.AC nicht gesetzt ist. Implizite Lese- und Schreibvorgänge (z. B. für Deskriptortabellen ) auf Seiten im Benutzermodus lösen immer einen Seitenfehler aus, wenn SMAP aktiviert ist, unabhängig vom Wert von EFLAGS.AC.

Betriebssystemunterstützung

Die Unterstützung des Linux-Kernels für Supervisor Mode Access Prevention wurde von H. Peter Anvin implementiert . Es wurde in den Linux 3.7-Hauptkernel integriert und ist standardmäßig für Prozessoren aktiviert, die diese Funktion unterstützen.

FreeBSD unterstützt seit 2012 die Verhinderung der Ausführung im Supervisor-Modus und seit 2018 die Verhinderung des Zugriffs im Supervisor-Modus.

OpenBSD unterstützt seit 2012 die Supervisor Mode Access Prevention und die zugehörige Supervisor Mode Execution Prevention. OpenBSD 5.3 ist die erste Version mit Unterstützung für die aktivierte Funktion.

Die NetBSD- Unterstützung für Supervisor Mode Execution Prevention (SMEP) wurde im Dezember 2015 von Maxime Villard implementiert. Die Unterstützung für Supervisor Mode Access Prevention (SMAP) wurde im August 2017 auch von Maxime Villard implementiert. NetBSD 8.0 war die erste Version mit beiden unterstützten Funktionen und aktiviert.

Die Haiku- Unterstützung für Supervisor Mode Execution Prevention (SMEP) wurde im Januar 2018 von Jérôme Duval implementiert.

macOS unterstützt SMAP mindestens seit der Veröffentlichung von macOS 10.13 im Jahr 2017.

Siehe auch

Verweise