Sicherheitsanfälligkeiten im eBPF-Subsystem, die Angriffe der Klasse Spectre umgangen werden können

Im Linux-Kernel wurde eine Schwachstelle (CVE-2021-33624) entdeckt, die es ermöglicht, die eBPF-Subsystem zum Umgehen des Schutzes vor Spectre-ähnlichen Schwachstellen zu verwenden. Dies kann dazu führen, dass der Inhalt des Speichers offenbart wird, wenn bestimmte Bedingungen für die spekulative Ausführung bestimmter Operationen geschaffen werden. Für einen Spectre-Angriff ist es notwendig, dass im privilegierten Code eine bestimmte Befehlskette vorhanden ist, die zur spekulativen Ausführung von Instruktionen führt. Durch Manipulation mit den zur Ausführung übergebenen BPF-Programmen können ähnliche Instruktionen in eBPF erzeugt werden, was zu einem Leak des Kernspeichers und beliebigen Bereichen des physischen Speichers über Seitenkanäle führen kann.

Die Schwachstelle resultiert aus Mängeln im Verifizierer, der zur Erkennung von Fehlern und unzulässiger Aktivität in BPF-Programmen eingesetzt wird. Der Verifizierer durchläuft mögliche Ausführungswege des Codes, lässt jedoch Verzweigungsoptionen außer Acht, die aus der Sicht der Architektur des Befehlssatzes semantisch ungültig sind. Bei der Ausführung eines BPF-Programms können solche Verzweigungsoptionen, die vom Verifizierer nicht berücksichtigt wurden, vom Prozessor falsch vorhergesagt und spekulativ ausgeführt werden. Beispielsweise geht der Verifizierer bei der Analyse der Operation "load" davon aus, dass in der Anweisung ein Register mit einer Adresse verwendet wird, dessen Wert immer innerhalb festgelegter Grenzen liegt, aber ein Angreifer kann Bedingungen schaffen, unter denen der Prozessor versucht, spekulativ eine Operation mit einer Adresse auszuführen, die nicht den Überprüfungsbedingungen entspricht.

Das Problem tritt ab der Kernel-Version 4.15 auf und wurde durch Patches (1, 2, 3, 4) behoben. In den Distributionen bleibt die Schwachstelle jedoch bis jetzt ungepatcht (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Zusätzlich kann eine Anmerkung über die Auswirkungen von Spectre-Schutzmaßnahmen auf die Leistung gemacht werden. In der Anmerkung werden die Ergebnisse der Optimierung des Debuggers rr (Record and Replay) zusammengefasst, der ursprünglich von Mozilla zur Fehlersuche bei schwer reproduzierbaren Fehlern in Firefox entwickelt wurde. Das Caching von Systemaufrufen, die zur Überprüfung der Existenz von Verzeichnissen verwendet werden, hat die Ausführungszeit des Befehls „rr sources“ für das Testprojekt von 3 Minuten 19 Sekunden auf 36 Sekunden reduziert.

Der Autor der Optimierung entschied sich zu prüfen, wie sich die Leistung nach Deaktivierung des Spectre-Schutzes verändert. Nach dem Start des Systems mit dem Parameter „mitigations=off“ betrug die Ausführungszeit von „rr sources“ ohne Optimierung 2 Minuten 5 Sekunden (1,6-mal schneller), und mit Optimierung 33 Sekunden (9% schneller). Interessant ist, dass die Deaktivierung des Spectre-Schutzes nicht nur die Ausführungszeit des Codes auf Kernel-Ebene um das 1,4-fache (von 2m9s auf 1m32s) verkürzte, sondern auch die Ausführungszeit im Benutzerspeicher um das Zweifache verringerte (von 1m9s auf 0m33s), vermutlich aufgrund der verringerten Effizienz des CPU-Caches und der TLB-Resets bei aktivem Spectre-Schutz.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster