Schwachstellen im eBPF-Subsystem, die die Umgehung des Schutzes vor Spectre-Angriffen ermöglichen

Im Linux-Kernel (CVE-2021-33624) wurde eine Schwachstelle identifiziert, die es ermöglicht, das eBPF-Subsystem zur Umgehung des Schutzes vor Schwachstellen der Spectre-Klasse zu nutzen, die es ermöglichen, den Inhalt des Speichers als Ergebnis der Erstellung von Bedingungen für die zu bestimmen spekulative Ausführung bestimmter Operationen. Der Spectre-Angriff erfordert das Vorhandensein einer bestimmten Befehlsfolge in privilegiertem Code, die zur spekulativen Ausführung von Anweisungen führt. Durch die Manipulation von zur Ausführung übertragenen BPF-Programmen ist es möglich, ähnliche Anweisungen in eBPF zu generieren und den Inhalt des Kernel-Speichers und beliebige Bereiche des physischen Speichers über Seitenkanäle preiszugeben.

Die Schwachstelle wird durch Fehler im Verifizierer verursacht, der zur Erkennung von Fehlern und inakzeptablen Aktivitäten in BPF-Programmen verwendet wird. Der Verifizierer listet mögliche Codeausführungspfade auf, überspringt jedoch Verzweigungsoptionen, die aus Sicht der Semantik der Befehlssatzarchitektur inakzeptabel sind. Bei der Ausführung eines BPF-Programms können solche Verzweigungsoptionen, die vom Prüfer nicht berücksichtigt werden, vom Prozessor falsch vorhergesagt und im spekulativen Modus ausgeführt werden. Bei der Analyse der „Lade“-Operation geht der Verifizierer beispielsweise davon aus, dass der Befehl ein Register mit einer Adresse verwendet, deren Wert immer innerhalb der angegebenen Grenzen liegt. Ein Angreifer kann jedoch Bedingungen schaffen, unter denen der Prozessor versucht, spekulativ eine Operation auszuführen eine Adresse, die die Verifizierungsbedingungen nicht erfüllt.

Das Problem tritt seit der Veröffentlichung von Kernel 4.15 auf und wurde in Form von Patches (1, 2, 3, 4) behoben. Die Schwachstelle bleibt in Distributionen (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch) unbehoben.

Darüber hinaus können Sie den Hinweis zu den Auswirkungen von Tools zum Schutz vor Spectre-Schwachstellen auf die Leistung beachten. Der Hinweis fasst die Ergebnisse der Optimierung des rr-Debuggers (Record and Replay) zusammen, der einst in Mozilla erstellt wurde, um schwer wiederholbare Fehler in Firefox zu debuggen. Durch das Zwischenspeichern der Systemaufrufe, die zur Überprüfung der Existenz von Verzeichnissen verwendet werden, konnte der „rr-Quellen“-Vorgang für das Testprojekt von 3 Minuten 19 Sekunden auf 36 Sekunden reduziert werden.

Der Autor der Optimierung beschloss, zu prüfen, wie sich die Leistung nach der Deaktivierung des Spectre-Schutzes ändern würde. Nach dem Laden des Systems mit dem Parameter „mitigations=off“ betrug die Ausführungszeit von „rr resources“ ohne Optimierung 2 Minuten 5 Sekunden (1.6-mal schneller) und mit Optimierung 33 Sekunden (9 % schneller). Interessanterweise reduzierte die Deaktivierung des Spectre-Schutzes nicht nur die Code-Ausführungszeit auf Kernel-Ebene um das 1.4-fache (von 2:9 s auf 1:32 s), sondern halbierte auch die Ausführungszeit im Benutzerbereich (von 1:9 s auf 0:33 s), vermutlich aufgrund der verringerten Effizienz des CPU-Cache-Betriebs und des TLB Wird zurückgesetzt, wenn der Spectre-Schutz aktiviert ist.

Source: opennet.ru

Kommentar hinzufügen