Schwachstellen in eBPF, die eine Umgehung des Schutzes gegen den Spectre 4-Angriff ermöglichen.

Im Linux-Kernel wurden zwei Schwachstellen entdeckt, die es ermöglichen, die eBPF-Subsystem zur Umgehung des Schutzes vor dem Spectre v4-Angriff (SSB, Speculative Store Bypass) zu verwenden. Mithilfe eines nicht privilegierten BPF-Programms kann ein Angreifer Bedingungen schaffen, um bestimmte Operationen spekulativ auszuführen und den Inhalt beliebiger Speicherbereiche des Kernels zu ermitteln. Die begleitenden eBPF-Subsysteme im Kernel erhielten Zugang zu einem Exploit-Prototyp, der die Möglichkeit demonstriert, Angriffe in der Praxis durchzuführen. Die Probleme wurden in Form von Patches (1, 2) behoben, die in das nächste Kernel-Update von Linux aufgenommen werden. Updates in den Distributionen wurden bisher noch nicht bereitgestellt (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Die Spectre 4-Angriffsmethode basiert auf der Wiederherstellung von Daten, die im Prozessor-Cache verblieben sind, nachdem das Ergebnis der spekulativen Ausführung von Operationen bei der Verarbeitung von alternierenden Lese- und Schreiboperationen unter Verwendung indirekter Adressierung verworfen wurde. Wenn eine Leseoperation auf eine Schreiboperation folgt (zum Beispiel: mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), kann der Adressoffset für das Lesen bereits bekannt sein aufgrund ähnlicher durchgeführter Operationen (Leseoperationen werden erheblich häufiger ausgeführt und das Lesen kann aus dem Cache erfolgen), und der Prozessor kann spekulativ das Lesen vor dem Schreiben durchführen, ohne darauf zu warten, dass der Offset der indirekten Adressierung für das Schreiben berechnet wird.

Wenn nach der Berechnung des Offsets eine Überlappung der Speicherbereiche für das Schreiben und Lesen festgestellt wird, wird das bereits spekulativ erhaltene Leseergebnis vom Prozessor verworfen und die Operation wird wiederholt. Diese Eigenschaft ermöglicht es der Leseanweisung, während die Speicheroperation noch nicht abgeschlossen ist, auf den alten Wert an einer bestimmten Adresse zuzugreifen. Nach der Verwerfung der gescheiterten spekulativen Operation bleiben Spuren ihrer Ausführung im Cache zurück, wonach zur Extraktion dieser Spuren eine der Methoden zur Bestimmung des Cache-Inhalts basierend auf der Analyse der Zugriffszeiten auf gecachte und nicht gecachte Daten angewendet werden kann.

Die erste Schwachstelle (CVE-2021-35477) resultiert aus einer unzureichenden Umsetzung des Überprüfungsmechanismus für BPF-Programme. Zum Schutz vor dem Spectre 4-Angriff fügt der Verifier nach potenziell problematischen Speicheroperationen eine zusätzliche Anweisung hinzu, die einen Nullwert speichert, um die Spuren der vorherigen Operation zu verbergen. Es wurde angenommen, dass die Nullschreiboperation sehr schnell durchgeführt wird und die spekulative Ausführung blockiert, da sie nur vom Zeiger auf den BPF-Stackrahmen abhängt. In der Praxis stellte sich jedoch heraus, dass Bedingungen geschaffen werden können, unter denen die Anweisung, die zur spekulativen Ausführung führt, vor der verdrängenden Speicheroperation ausgeführt werden kann.

Die zweite Schwachstelle (CVE-2021-3455) hängt damit zusammen, dass beim Erkennen potenziell gefährlicher Speicheroperationen durch den BPF-Verifier die nicht initialisierten Bereiche des BPF-Stacks nicht berücksichtigt werden, deren erste Schreiboperation nicht geschützt ist. Eine solche Eigenschaft ermöglicht es, eine spekulative Leseoperation auszuführen, die von einem nicht initialisierten Speicherbereich abhängt, bevor die Speicheranweisung ausgeführt wird. Neuer Speicher für den BPF-Stack wird ohne Überprüfung des Inhalts, der bereits im reservierten Speicher vorhanden ist, zugewiesen, und vor der Ausführung des BPF-Programms gibt es eine Möglichkeit, den Inhalt des Speicherbereichs zu steuern, der später für den BPF-Stack reserviert wird.

Quelle: opennet.ru

60GB SSD 8Gb DDR4