Checkpoint schlug die Safe-Linking-Schutztechnik vor, die das Ausnutzen von Schwachstellen erschwert

Checkpoint-Unternehmen präsentiert Safe-Linking-Schutzmechanismus, der es schwierig macht, Exploits zu erstellen, die die Definition oder Änderung von Zeigern auf Puffer manipulieren, die beim Ausführen eines Malloc-Aufrufs zugewiesen werden. Safe-Linking blockiert die Möglichkeit der Ausnutzung von Schwachstellen nicht vollständig, erschwert jedoch bei minimalem Overhead die Erstellung bestimmter Kategorien von Exploits erheblich, da zusätzlich zum ausnutzbaren Pufferüberlauf eine weitere Schwachstelle gefunden werden muss, die zum Verlust von Informationen führt die Platzierung des Heaps im Speicher.

Patches zur Implementierung von Safe-Linking wurden für Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) und Google TCMalloc vorbereitet und werden auch für die Aktualisierung des Schutzes in Chromium (in) vorgeschlagen
Seit 2012 hat Chromium bereits die MaskPtr-Schutztechnik eingebaut, die das gleiche Problem lösen soll, allerdings weist die Lösung von Checkpoint eine höhere Leistung auf.
Vorgeschlagene Patches wurden bereits zur Auslieferung in der August-Version freigegeben Glibc 3.32 und Safe-Linking wird standardmäßig aktiviert. uClibc-NG unterstützt Safe-Linking eingegeben ist in Version 1.0.33 enthalten und standardmäßig aktiviert. Änderungen in gperftools (altes tcmalloc) akzeptiert, wird aber in einer zukünftigen Version als Option angeboten.

Entwickler TCMalloc (neuer tcmalloc) lehnte die Annahme ab ändern, unter Berufung auf schwerwiegende Leistungseinbußen und die Notwendigkeit, umfangreiche Tests hinzuzufügen, um regelmäßig zu überprüfen, ob alles wie erwartet funktioniert. Tests durch Checkpoint-Ingenieure haben gezeigt, dass die Safe-Linking-Methode nicht zu zusätzlichem Speicherverbrauch führt und die Leistung bei der Durchführung von Heap-Vorgängen im Durchschnitt nur um 0.02 % und im schlimmsten Fall um 1.5 % reduziert wird (zum Vergleich: der Overhead in Die in Chrom verwendete Methode wird auf „weniger als 2 %“ geschätzt. Aufnahme
Safe-Linking führt dazu, dass bei jedem Aufruf von free() zwei bis drei zusätzliche Assembly-Anweisungen und bei jedem Aufruf von malloc() drei bis vier Anweisungen ausgeführt werden. Das Ausführen der Initialisierungs- und Zufallswertgenerierungsphasen ist nicht erforderlich.

Checkpoint schlug die Safe-Linking-Schutztechnik vor, die das Ausnutzen von Schwachstellen erschwert

Safe-Linking kann nicht nur zur Verbesserung der Sicherheit verschiedener Heap-Implementierungen verwendet werden, sondern auch zum Hinzufügen von Integritätskontrollen zu allen Datenstrukturen, die einfach verknüpfte Zeigerlisten neben den Puffern selbst verwenden. Die Methode ist sehr einfach zu implementieren und erfordert lediglich das Hinzufügen eines Makros und dessen Anwendung auf Zeiger auf den nächsten Block im Code (z. B. für Glibc). Änderungen nur ein paar Zeilen Code). Die Methode läuft auf folgende Änderungen hinaus:

+#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 aus dem ASLR-Adress-Randomisierungsmechanismus (mmap_base) zu verwenden, um einfach verknüpfte Listen wie Fast-Bins und TCache zu schützen. Bevor der Wert auf einen Zeiger auf das nächste Element in der Liste angewendet wird, führt er eine Maskenkonvertierung durch und prüft die Seitenausrichtung. 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 der Zeiger gespeichert ist.

Checkpoint schlug die Safe-Linking-Schutztechnik vor, die das Ausnutzen von Schwachstellen erschwert

Bei Verwendung im System ASLR (Address Space Layout Randomization) Ein Teil der L-Bits mit der Heap-Basisadresse enthält Zufallswerte, die als Schlüssel zum Codieren von P verwendet werden (extrahiert durch eine 12-Bit-Verschiebungsoperation für 4096-Byte-Seiten). Diese Manipulation verringert das Risiko einer Zeigerübernahme bei einem Exploit, da der Zeiger nicht in seiner ursprünglichen Form gespeichert wird und für dessen Ersatz Kenntnisse über die Heap-Zuordnung erforderlich sind. Darüber hinaus enthält der Patchcode auch eine zusätzliche Prüfung der Blockausrichtung, die es einem Angreifer nicht erlaubt, einen Zeiger durch einen nicht ausgerichteten Wert zu ersetzen und die Kenntnis der Anzahl der ausgerichteten Bits erfordert, was auf 64-Bit-Systemen zusätzlich das Blockieren ermöglicht 15 von 16 Angriffsversuchen, bei denen die Ausrichtung nicht berücksichtigt wird.

Die Methode ist wirksam zum Schutz vor Angriffen, die teilweises Umschreiben des Zeigers (Änderung niedriger Bytes), vollständiges Umschreiben des Zeigers (Umleitung zum Code des Angreifers) und Ändern der Listenposition an einer nicht ausgerichteten Adresse nutzen. Als Beispiel wird gezeigt, dass die Verwendung von Safe-Linking in malloc die Blockierung neuer Ausnutzungen ermöglichen würde identifiziert von denselben Schwachstellenforschern CVE-2020-6007 im Philips Hue Bridge Smart Light, das durch einen Pufferüberlauf verursacht wird und es Ihnen ermöglicht, die Kontrolle über das Gerät zu erlangen.

Source: opennet.ru

Kommentar hinzufügen