Forscher des Worcester Polytechnic Institute (USA) haben einen neuen Angriffstyp namens Mayhem vorgestellt, der die Rowhammer-Methode zur Verzerrung von Bits im dynamischen RAM nutzt, um Werte von Variablen im Stack zu Ă€ndern, die im Programm als Flags zur Entscheidung ĂŒber die erfolgreiche Authentifizierung und den Bestehen von SicherheitsprĂŒfungen verwendet werden. Praktische Anwendungsbeispiele des Angriffs wurden zur Umgehung der Authentifizierung in SUDO, OpenSSH und MySQL sowie zur Manipulation des Ergebnisses sicherheitsrelevanter PrĂŒfungen in der OpenSSL-Bibliothek demonstriert.
Der Angriff kann auf Anwendungen angewendet werden, in denen bei PrĂŒfungen Vergleiche der Unterschiede von Werten mit null verwendet werden. Beispiel fĂŒr anfĂ€lligen Code: int auth = 0; ⊠// Code zur PrĂŒfung, der den Wert von auth bei erfolgreicher Authentifizierung Ă€ndert if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
Im Kontext dieses Beispiels genĂŒgt es fĂŒr einen erfolgreichen Angriff, irgendein Bit im Speicher zu verzerren, das einem 32-Bit-Wert auth im Stack zugeordnet ist. Durch die Verzerrung eines beliebigen Bits in der Variablen wird der Wert nicht mehr null und der bedingte Operator bestimmt das erfolgreiche Bestehen der Authentifizierung. Solche PrĂŒfungsbedingungen sind in Anwendungen weit verbreitet und kommen beispielsweise in SUDO, OpenSSH, MySQL und OpenSSL vor.

Der Angriff kann auch auf Vergleiche vom Typ âif(auth == 1)â angewendet werden, aber in diesem Fall wird seine DurchfĂŒhrung komplizierter, da nicht irgendein Bit von 32, sondern das letzte Bit verzerrt werden muss. Die Methode kann auch verwendet werden, um Werte von Variablen in Prozessorregistern zu beeinflussen, da der Inhalt der Register beim Kontextwechsel, bei Funktionsaufrufen oder beim Auslösen eines Signalhandlers vorĂŒbergehend in den Stack zurĂŒckgesetzt werden kann. In dem Zeitraum, in dem die Registerwerte im Speicher liegen, können Verzerrungen in diesen Speicher eingefĂŒhrt werden und es wird der geĂ€nderte Wert im Register wiederhergestellt.

FĂŒr die Verzerrung von Bits wird eine der Modifikationen des RowHammer-Angriffs verwendet. Da DRAM-Speicher ein zweidimensionales Array von Zellen darstellt, die aus einem Kondensator und einem Transistor bestehen, fĂŒhrt das kontinuierliche Lesen desselben Speicherbereichs zu Spannungsschwankungen und Anomalien, die zu einem leichten Verlust von Ladung in benachbarten Zellen fĂŒhren. Wenn die Leselast hoch ist, kann die benachbarte Zelle eine ausreichende Menge an Ladung verlieren, sodass der nĂ€chste Regenerationszyklus nicht ausreicht, um ihren ursprĂŒnglichen Zustand wiederherzustellen, was zu einer Ă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 die Verzerrung von Zellen blockiert, jedoch nicht vor allfĂ€lligen Angriffsvarianten schĂŒtzt.
Um sich vor dem Mayhem-Angriff zu schĂŒtzen, wird empfohlen, anstelle der Beurteilung der Abweichungen von Null oder der Ăbereinstimmung mit Eins Vergleiche durchzufĂŒhren, indem ein zufĂ€lliger Wert mit nicht null Oktetten verwendet wird. In diesem Fall ist es notwendig, eine bestimmte Anzahl an Bits genau zu verzerren, um den gewĂŒnschten Wert einer Variablen festzulegen, was unrealistisch ist, im Gegensatz zur Verzerrung eines einzelnen Bits. Beispiel eines nicht angreifbaren Codes: int auth = 0xbe406d1a; ⊠// PrĂŒfcode, der auth auf 0x23ab8701 setzt, falls die Authentifizierung erfolgreich ist if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
Die genannte Schutzmethode wurde bereits von den Entwicklern von sudo angewendet und ist in das Release 1.9.15 als Sicherheitsupdate fĂŒr die Schwachstelle CVE-2023-42465 aufgenommen worden. Ein Prototypcode fĂŒr den Angriff soll nach der Behebung der HauptanfĂ€lligkeiten veröffentlicht werden.
Quelle: opennet.ru
