Checkpoint hat die Safe-Linking-Schutztechnik angeboten, die die Ausnutzung von Schwachstellen erschwert.

Das Unternehmen Checkpoint präsentierte Der Safe-Linking-Schutzmechanismus, der die Erstellung von Exploits erschwert, die mit der Definition oder Änderung von Zeigern auf während des malloc-Aufrufs zugewiesenen Puffern arbeiten. Safe-Linking blockiert nicht vollständig die Möglichkeit, Schwachstellen auszunutzen, erleichtert jedoch mit minimalen Overhead erheblich die Erstellung bestimmter Arten von Exploits, da neben dem ausgenutzten Pufferüberlauf eine weitere Schwachstelle gefunden werden muss, die Informationen über die Heap-Speicherplatzierung leakt.

Patches zur Implementierung von Safe-Linking wurden für Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) und Google TCMalloc vorbereitet und wurden auch zur Verbesserung des Schutzes in Chromium angeboten (in
Chromium ist seit 2012 bereits eine Technik namens MaskPtr integriert, die auf die gleiche Problematik abzielt, aber die Lösung von Checkpoint zeigt eine höhere Leistung).
Die vorgeschlagenen Patches wurden bereits für die August-Version genehmigt Glibc 3.32 und die Anwendung von Safe-Linking wird standardmäßig enthalten sein. In uClibc-NG ist die Unterstützung für Safe-Linking wurde aufgenommen in der Version 1.0.33 enthalten und standardmäßig aktiviert. In gperftools (altes tcmalloc) wurden Änderungen vorgenommen. hat, aber sie werden in einer der zukünftigen Versionen als Option angeboten.

Die Entwickler TCMalloc (neues tcmalloc) wurden abgelehnt wurde eine Änderung, unter Berufung auf einen signifikanten Rückgang der Leistung und die Notwendigkeit, erweiterte Tests hinzuzufügen, um regelmäßig sicherzustellen, dass alles ordnungsgemäß funktioniert. Die Tests der Ingenieure von Checkpoint haben gezeigt, dass die Safe-Linking-Methode keinen zusätzlichen Speicherverbrauch verursacht und die Leistung bei Heap-Operationen im Durchschnitt nur um 0,02 % sinkt, und im schlimmsten Fall um 1,5 % (zum Vergleich: die Kosten des in Chromium verwendeten Verfahrens werden auf „unter 2 %“ geschätzt). Die Aktivierung
von Safe-Linking führt dazu, dass bei jedem Aufruf von free() 2-3 zusätzliche Assembleranweisungen und bei einem Aufruf von malloc() 3-4 Anweisungen ausgeführt werden. Der Start der Initialisierungsphasen und der Erzeugung zufälliger Werte ist nicht erforderlich.

Checkpoint hat die Safe-Linking-Schutztechnik angeboten, die die Ausnutzung von Schwachstellen erschwert.

Safe-Linking kann nicht nur zur Erhöhung der Sicherheit verschiedener Heap-Implementierungen verwendet werden, sondern auch zur Hinzufügung von Integritätsprüfungen in beliebige Datenstrukturen, in denen verkettete Listen von Zeigern eingesetzt werden, die direkt neben den Puffern vorhanden sind. Die Methode ist sehr einfach umzusetzen und erfordert lediglich die Hinzufügung eines Makros und dessen Anwendung auf die Zeiger auf den nächsten Block im Code (zum Beispiel für Glibc. verändert nur einige Zeilen im Code). Die Methode umfasst die folgenden Änderungen:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

- nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);

Der Kern der Methode besteht darin, Zufallsdaten vom Adressrandomisierungsmechanismus ASLR (mmap_base) zu verwenden, um verkettete Listen wie Fast-Bins und TCache zu schützen. Bevor die Maskierung auf den Zeigerwert des nächsten Elements in der Liste angewendet wird, wird eine Maskierung und eine Ausrichtungsprüfung an der Speichergrenze durchgeführt. Der Zeiger wird durch das Ergebnis der Operation „(L >> PAGE_SHIFT) XOR (P)“ ersetzt, wobei P der Wert des Zeigers und L der Speicherort ist, an dem dieser Zeiger gespeichert ist.

Checkpoint hat die Safe-Linking-Schutztechnik angeboten, die die Ausnutzung von Schwachstellen erschwert.

Bei Verwendung im System ASLR (Address Space Layout Randomization) Ein Teil der Bits L mit der Basisadresse des Heaps enthält zufällige Werte, die als Schlüssel zur Kodierung von P verwendet werden (die durch eine 12-Bit-Verschiebungsoperation für 4096-Byte-Seiten extrahiert werden). Eine solche Manipulation verringert das Risiko des Pointer-Overwrites im Exploit, da der Pointer nicht im ursprünglichen Format gespeichert wird und zum Ersetzen Kenntnisse über die Heap-Position erforderlich sind. Darüber hinaus enthält der Patch-Code auch eine zusätzliche Blockausrichtungsprüfung, die es einem Angreifer nicht erlaubt, den Pointer durch einen nicht ausgerichteten Wert zu ersetzen, und Kenntnisse über die Anzahl der Bits erfordert, die für die Ausrichtung verwendet wurden, was auf 64-Bit-Systemen zusätzlich 15 von 16 Angriffsversuchen blockiert, die keine Ausrichtung berücksichtigen.

Die Methode ist wirksam zum Schutz vor Angriffen, die teilweise Pointer-Übersteuerung (Änderung der niederwertigen Bytes), vollständige Pointer-Überschreibung (Umleitung auf den Code des Angreifers) und Positionsänderungen von Listen an nicht ausgerichteten Adressen verwenden. Es wurde gezeigt, dass die Anwendung von Safe-Linking in malloc die Ausnutzung von neuen Schwachstellen verhindern könnte. das 2015 festgestellt wurde, für das nun neue Angriffsvektoren identifiziert wurden. Darüber hinaus wurde das Problem den Entwicklern bereits im September des vergangenen Jahres gemeldet, aber der Patch wurde denselben Forschern von Schwachstellen CVE-2020-6007 in der intelligenten Beleuchtung Philips Hue Bridge, verursacht durch einen Bufferüberlauf und ermöglicht die Übernahme des Geräts.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster