Zeigerlecks durch zeigerbasier... Notiz

Zeigerlecks durch zeigerbasierte Datenstrukturen

Google Project Zero diskutierte die Notwendigkeit von Remote-ASLR-Leaks zur Ausnutzung von Speicherfehlern auf Apple-Geräten. Dies führte zur Entdeckung einer Technik, die einen Zeiger remote leaken konnte, ohne Verletzungen der Speichersicherheit oder Timing-Angriffe. Die Methode gilt für Angriffsflächen, die Daten von Angreifern deserialisieren, re-serialisieren und zurückgeben. Obwohl keine unmittelbare reale Angriffsfläche auf macOS/iOS identifiziert wurde, wurde die Technik anhand eines künstlichen Falls mit NSKeyedArchiver getestet. Das Problem wurde Apple gemeldet und behoben, obwohl aufgrund fehlender nachgewiesener realer Auswirkungen kein öffentlicher Bug-Tracker-Eintrag vorgenommen wurde. Diese neuartige Technik baut auf früheren Arbeiten im Zusammenhang mit Hash-Tabellen-Kollisionsangriffen auf. Historisch gesehen nutzten HashDoS-Angriffe die schlechteste Leistung von Hash-Tabellen, um Denial-of-Service zu verursachen. Frühere Forschungen deuteten auch darauf hin, Hash-Kollisionen zum Leaken von Adressen zu verwenden. Das HashDoS-Konzept kann als ein Angreifer betrachtet werden, der den Zugriff auf bestimmte Hash-Buckets verlangsamt. Dieses Prinzip wurde in Firefox genutzt, um Heap-Adressen durch Timing-Messungen von JavaScript Map-Einfügungen zu leaken. Das Iterieren über Zeiger-Schlüssel-Datenstrukturen kann auch Informationen über Objektadressen preisgeben. Serialisierungsmechanismen, insbesondere solche, die beliebige Objektgraphen zulassen, können unsicher sein. Apples NSKeyedUnarchiver arbeitet mit einer Whitelist von deserialisierbaren Klassen. Ein spezifischer Testfall zielt darauf ab, den Shared-Cache-Zeiger zu leaken, indem Angreifer-Daten mit NSKeyedUnarchiver deserialisiert und re-serialisiert werden. Der Hash des NSNull-Singleton-Objekts wird, wenn er nicht explizit behandelt wird, standardmäßig auf seine Adresse gesetzt, die im Shared Cache gespeichert ist. NSNumber-Instanzen werden je nach numerischem Wert unterschiedlich gehasht. Dictionaries verwenden Hash-Codes modulo der Anzahl der Buckets, um die Platzierung von Schlüsseln zu verwalten.