Schwachstellen in eBPF, die eine Umgehung des Spectre 4-Angriffsschutzes ermöglichen

Im Linux-Kernel wurden zwei Schwachstellen identifiziert, die es ermöglichen, das eBPF-Subsystem zur Umgehung des Schutzes vor dem Spectre v4-Angriff (SSB, Speculative Store Bypass) zu nutzen. Mit einem unprivilegierten BPF-Programm kann ein Angreifer Bedingungen für die spekulative Ausführung bestimmter Operationen schaffen und den Inhalt beliebiger Bereiche des Kernel-Speichers ermitteln. Die Betreuer der eBPF-Subsysteme im Kernel erhielten Zugang zu einem prototypischen Exploit, der die Fähigkeit zur Durchführung von Angriffen in der Praxis demonstriert. Die Probleme wurden in Form von Patches (1, 2) behoben, die im nächsten Linux-Kernel-Update enthalten sein werden. Updates in Distributionskits wurden noch nicht erstellt (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Die Spectre 4-Angriffsmethode basiert auf der Wiederherstellung der im Prozessor-Cache gespeicherten Daten, nachdem das Ergebnis der spekulativen Ausführung von Vorgängen bei der Verarbeitung abwechselnder Schreib- und Lesevorgänge mithilfe indirekter Adressierung verworfen wurde. Wenn ein Lesevorgang auf einen Schreibvorgang folgt (z. B. mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), ist der Offset der Leseadresse möglicherweise bereits bekannt, da ähnliche Vorgänge ausgeführt werden (Lesevorgänge sind). werden viel häufiger durchgeführt und Lesevorgänge können aus dem Cache durchgeführt werden) und der Prozessor kann spekulativ Lesevorgänge vor Schreibvorgängen durchführen, ohne auf die Berechnung des Indirektionsoffsets des Schreibvorgangs warten zu müssen.

Wird nach der Berechnung des Offsets eine Schnittmenge von Speicherbereichen zum Schreiben und Lesen erkannt, verwirft der Prozessor einfach das bereits spekulativ ermittelte Leseergebnis und wiederholt diesen Vorgang. Mit dieser Funktion kann ein Lesebefehl an einer Adresse auf einen alten Wert zugreifen, während der Speichervorgang noch nicht abgeschlossen ist. Nach dem Verwerfen einer erfolglosen spekulativen Operation verbleiben Spuren ihrer Ausführung im Cache. Anschließend kann eine der Methoden zur Bestimmung des Cache-Inhalts verwendet werden, um ihn basierend auf einer Analyse der Änderungen in der Zugriffszeit auf zwischengespeicherte und nicht zwischengespeicherte Daten abzurufen.

Die erste Schwachstelle (CVE-2021-35477) wird durch einen Fehler im Überprüfungsmechanismus des BPF-Programms verursacht. Zum Schutz vor einem Spectre-4-Angriff fügt der Prüfer nach potenziell problematischen Speichern eine zusätzliche Anweisung in den Speicher ein, die einen Nullwert speichert, um Spuren des vorherigen Vorgangs zu verdrängen. Es wurde erwartet, dass die Nullschreiboperation sehr schnell ist und die spekulative Ausführung blockiert, da sie nur von einem Zeiger auf den BPF-Stack-Frame abhängt. Tatsächlich erwies es sich jedoch als möglich, Bedingungen zu schaffen, unter denen ein Befehl, der zu einer spekulativen Ausführung führt, vor dem präventiven Speichervorgang ausgeführt werden kann.

Die zweite Schwachstelle (CVE-2021-3455) ist darauf zurückzuführen, dass der BPF-Verifizierer bei der Identifizierung potenziell gefährlicher Speicherspeichervorgänge nicht initialisierte Bereiche des BPF-Stacks nicht berücksichtigt, da der erste Schreibvorgang nicht geschützt ist. Diese Funktion führt zu der Möglichkeit, einen spekulativen Lesevorgang abhängig von einem nicht initialisierten Speicherbereich durchzuführen, bevor der Speicherbefehl ausgeführt wird. Neuer Speicher für den BPF-Stapel wird zugewiesen, ohne dass die bereits im zugewiesenen Speicher vorhandenen Inhalte überprüft werden, und es gibt eine Möglichkeit, vor der Ausführung des BPF-Programms den Inhalt des Speicherbereichs zu manipulieren, der dann für den BPF-Stack zugewiesen wird.

Source: opennet.ru

Kommentar hinzufügen