Kees Cook führte neue Patches ein, um die Sicherheit des Linux-Kernel-Stacks zu verbessern

Linux

Kees Cook, ein ehemaliger Chef-Systemadministrator bei kernel.org und Leiter des Ubuntu-Sicherheitsteams, das jetzt bei Google arbeitet, um Android und ChromeOS zu schützen. hat eine Reihe von Patches veröffentlicht, die die Kernel-Stack-Offsets zufällig sortieren bei der Bearbeitung von Systemaufrufen. Patches verbessern die Kernelsicherheit, indem sie den Stapelspeicherort ändern. L.oder das macht Stapelangriffe viel schwieriger und weniger erfolgreich

Die ursprüngliche Idee für den Patch gehört zum PaX RANDKSTACK-Projekt. Im Jahr 2019 versuchte Elena Reshetova, eine Ingenieurin bei Intel, eine Implementierung dieser Idee zu erstellen, die für die Aufnahme in die Hauptzusammensetzung des Linux-Kernels geeignet ist.

Anschließend wurde die Initiative von Kees Cook ergriffen die eine geeignete Implementierung für die Hauptversion des Kernels vorgestellt haben und deren Patches für Version 5.13 von Linux geplant sind.

Der Modus ist standardmäßig deaktiviert. Um ihn zu aktivieren, wird der Kernel-Befehlszeilenparameter angeboten "Randomize_kstack_offset = on / off»Und Einstellungen CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, Darüber hinaus wird der Aufwand für die Aktivierung des Modus auf ca. 1% Leistungsverlust geschätzt.

Das Wesentliche des vorgeschlagenen Schutzes besteht darin, bei jedem Systemaufruf einen zufälligen Stapelversatz zu wählenDies erschwert die Bestimmung des Stapellayouts im Speicher, selbst wenn Adressinformationen empfangen werden, da sich die Basisadresse des Stapels beim nächsten Aufruf ändert.

Im Gegensatz zur Implementierung von PaX RANDK STACK, in den Patches, die für die Aufnahme in den Kernel vorgeschlagen wurden, Die Randomisierung erfolgt im Anfangsstadium nicht, aber nach dem Setzen der Struktur pt_regsDies macht es unmöglich, ptrace-basierte Methoden zu verwenden, um einen zufälligen Offset während eines lang laufenden Systemaufrufs zu bestimmen.

Da sich der Schutz des Linux-Kernel-Stacks ständig verbessert hat (vmap-basiertes Stack-Mapping mit Schutzseiten, Entfernen von thread_info, STACKLEAK), mussten Angreifer neue Wege finden, damit ihre Exploits funktionieren.

Sie haben und verlassen sich weiterhin auf den Kernel-Stack-Determinismus in Situationen, in denen VMAP_STACK und THREAD_INFO_IN_TASK_STRUCT Sie waren nicht relevant. Beispielsweise wären die folgenden jüngsten Angriffe behindert worden, wenn der Stapelversatz zwischen Systemaufrufen nicht deterministisch gewesen wäre

Der Zweck der Funktion randomize_kstack_offset besteht darin, einen zufälligen Versatz hinzuzufügen Nachdem pt_regs auf den Stack verschoben wurde und bevor der Rest des Thread-Stacks während der Systemaufrufverarbeitung verwendet wird, ändern Sie ihn jedes Mal, wenn ein Prozess einen Systemaufruf ausgibt. Die Quelle der Zufälligkeit wird derzeit von der Architektur definiert (x86 verwendet jedoch das niedrige Byte von rdtsc ()).

Zukünftige Verbesserungen sind für verschiedene Entropiequellen möglich, liegen jedoch außerhalb des Bereichs dieses Patches. Um die Unvorhersehbarkeit zu erhöhen, werden am Ende von Systemaufrufen neue Offsets ausgewählt (deren Zeitpunkt vom Benutzerbereich aus weniger einfach zu messen sein sollte als zum Zeitpunkt des Eingangs des Systemaufrufs) und in einer Variablen pro gespeichert CPU, so dass die Lebensdauer des Werts nicht explizit an eine einzelne Aufgabe gebunden bleibt.

Unter x86 gibt es hierfür keine sichtbaren Änderungen, da der Stack Saver für die Kompilierungseinheit bereits unbedingt deaktiviert ist, die Änderung jedoch in arm64 erforderlich ist. Leider gibt es kein Attribut, mit dem der Stack Saver für bestimmte Funktionen deaktiviert werden kann. Vergleich mit der PaX RANDKSTACK-Funktion: Die RANDKSTACK-Funktion randomisiert die Position des Starts des Stapels (cpu_current_top_of_stack), dh die Position der pt_regs-Struktur auf dem Stapel.

zunächst Dieser Patch folgte dem gleichen Ansatz: In den letzten Diskussionen wurde jedoch festgestellt, dass die ptrace-Funktionalität für einen Angreifer von geringem Wert ist. Sie können PTRACE_PEEKUSR verwenden, um verschiedene Offsets in die pt_regs-Struktur zu lesen / schreiben, das Cache-Verhalten der Zugriffe auf pt_regs zu beobachten und das herauszufinden zufälliger Stapelversatz.

Schließlich wird das erwähnt Die Erstimplementierung unterstützt ARM64- und x86 / x86_64-Prozessoren.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.