Forscher des Worcester Polytechnic Institute (USA) haben einen neuen Typ von Angriff namens Mayhem vorgestellt, der die Rowhammer-Methode zur Verzerrung von Bits im dynamischen Arbeitsspeicher nutzt, um Werte von Variablen im Stack zu verändern, die in Programmen als Flags für die Entscheidung über den Erfolg der Authentifizierung und Sicherheitsüberprüfungen verwendet werden. Praktische Beispiele für den Einsatz des Angriffs wurden vorgestellt, um die Authentifizierung in SUDO, OpenSSH und MySQL zu umgehen sowie um die Ergebnisse von sicherheitsrelevanten Überprüfungen in der OpenSSL-Bibliothek zu manipulieren.
Der Angriff kann auf Anwendungen angewendet werden, bei denen bei Überprüfungen die Abweichungen von Null verglichen werden. Beispiel für anfälligen Code: int auth = 0; … // Überprüfungscode, der den Wert von auth im Falle einer erfolgreichen Authentifizierung ändert if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
In diesem Beispiel genügt es, einen einzelnen Bit in dem 32-Bit-Wert der auth-Variable im Stack zu verfälschen, um eine erfolgreiche Attacke zu erreichen. Bei der Veränderung eines beliebigen Bits wird der Wert bereits ungleich Null und die Bedingung im Operator führt zu einer erfolgreichen Authentifizierung. Solche Prüfungsmechanismen sind in Anwendungen weit verbreitet und finden sich zum Beispiel in SUDO, OpenSSH, MySQL und OpenSSL.

Ein Angriff kann auch bei Vergleichen wie 'if(auth == 1)' angewendet werden, jedoch wird dieser komplexer, da nicht irgendein Bit von 32, sondern das letzte Bit verändert werden muss. Diese Methode kann ebenfalls verwendet werden, um Werte in den Prozessorregistern zu beeinflussen, da der Inhalt der Register temporär in den Stack gespeichert werden kann, wenn der Kontext gewechselt, Funktionen aufgerufen oder Signalhandler aktiviert werden. In der Zeit, in der sich die Registerwerte im Speicher befinden, können Änderungen vorgenommen werden, und der veränderte Wert wird im Register wiederhergestellt.

Zur Verzerrung von Bits wird eine Modifikation des RowHammer-Angriffs eingesetzt. Da DRAM-Speicher aus einem zweidimensionalen Array von Zellen besteht, die jeweils aus einem Kondensator und einem Transistor bestehen, führt das kontinuierliche Lesen desselben Speicherbereichs zu Spannungsschwankungen und Anomalien, die einen geringen Verlust an Ladung in benachbarten Zellen verursachen. Bei intensiven Lesevorgängen kann eine benachbarte Zelle genug Ladung verlieren, sodass der nächste Regenerationszyklus nicht in der Lage ist, ihren ursprünglichen Zustand wiederherzustellen, was zu einer Veränderung der in der Zelle gespeicherten Daten führt. Um sich vor RowHammer zu schützen, haben Chip-Hersteller den TRR-Mechanismus (Target Row Refresh) hinzugefügt, der in bestimmten Fällen das Verzerren von Zellen verhindert, jedoch nicht gegen alle möglichen Angriffsvarianten schützt.
Um sich gegen einen Mayhem-Angriff zu schützen, wird empfohlen, bei den Vergleichen nicht die Abweichung von null oder die Übereinstimmung mit eins zu bewerten, sondern Übereinstimmungen zu überprüfen, indem ein zufälliger Wert mit nicht null Oktetten verwendet wird. In diesem Fall ist es notwendig, eine bestimmte Anzahl von Bits genau zu verzerren, um den gewünschten Wert für die Variable festzulegen, was unrealistisch ist, im Gegensatz zur Verzerrung eines einzelnen Bits. Beispiel eines angreifbaren Codes: int auth = 0xbe406d1a; … // Überprüfungscode, der den Wert von auth auf 0x23ab8701 im Falle einer erfolgreichen Authentifizierung setzt if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
Die angegebene Schutzmethode wurde bereits von den Entwicklern von sudo umgesetzt und ist in der Version 1.9.15 als Korrektur der Schwachstelle CVE-2023-42465 enthalten. Der Prototyp für die Durchführung des Angriffs soll nach der Behebung der Hauptschwachstellen in den Projekten veröffentlicht werden.
Quelle: opennet.ru
