Exploits entmystifiziert, Teil 3

Per Heap-Spray-Technik zum Speicher-Exploit

| Autor / Redakteur: Thorsten Henning* / Stephan Augsten

Heap-basierte Sicherheitslücken

In diesem Zusammenhang ist es nicht nötig, tief in die Feinheiten der Heap-basierten Schwachstellen einzutauchen. Dies liegt daran, dass die Rolle der Schwachstellen im Exploitation-Lebenszyklus darin besteht, die Anfangsadresse zu überschreiben. Vom Standpunkt der Sicherheit aus kann diese anfängliche Überschreibung kaum verhindert werden, mit Ausnahme durch einen Hersteller-Patch. Proaktive Prävention kann aber auf die Teile Redirect und Execute (Ausführen) des Exploits angewandt werden, also werden wir uns auf diese konzentrieren.

Für unsere Zwecke genügt es zu wissen, dass es zwei Hauptgruppen von Heap-basierten Schwachstellen gibt:

Heap Overflows machen sich die interne Struktur des Heaps zunutze. Aufeinanderfolgende Heap-Anfragen generieren aufeinanderfolgende Chunks. Jeder Chunk besteht aus einem Header, der die Metadaten des Speicherstücks enthält, und dem tatsächlichen Speicherplatz in der gewünschten Größe. Heap-Overflow-Schwachstellen überschwemmen den Speicherplatz und überschreiben den Header des nächsten Chunks.

Use-after-free-Schwachstellen nutzen die explizite Anfrage für einen Chunk, wie zuvor beschrieben. Dann wird entsprechend dynamischer Speicheranforderungen ein Pointer auf die erste Adresse eines neu zugewiesenen Speicherstücks gerichtet. Wenn dieser Pointer seine Gültigkeit behält, obwohl das Objekt, auf das der Pointer deutet, freigegeben wird, können Angreifer das Objekt überschreiben, um auf ihren eigenen Code (z.B. den platzierten Shellcode) zu verweisen. Auf Use-after-free entfielen 2015 die meisten ausgenutzten Schwachstellen bei Windows 7 und späteren Versionen von Windows.

Heap-basierte Exploitation-Umleitung

Sobald der Angreifer in der Lage ist, eine Heap-Adresse zu überschreiben und zu steuern, ist das Hauptziel, die Adresse des Shellcodes aufzulösen. Aufgrund der Größe und Zuordnungsarchitektur des Heaps ist dies eine viel schwierigere Aufgabe im Vergleich zum entsprechenden Stack-Szenario.

Wenn ein Shellcode auf einem Dateneingang platziert wird, der auf den Heap geladen wird, kann der Angreifer herausfinden, wie der Adressenbereich aussieht, in welchem sich der Shellcode befindet. Er sieht dann aber nicht die genaue Adresse des Shellcodes.

Die Angreifer haben dieses Vorhersageproblem durch das Laden von mehreren Byte-Sequenzen und von Shellcode in den Heap bewältigt. Die grundlegende Implementierung dieser Sequenzen besteht darin, NOPs zu verwenden. NOP steht für „No Operation“ und weist die CPU an, die Anweisungen in einer benachbarten Adresse auszuführen.

NOPs können das Problem der Vorhersage der Heap-Adressen lösen. Betrachten wir einen Block, der eine NOP-Sequenz enthält, gefolgt von einem Shellcode. Nehmen wir an, dass wir durch die CPU eine NOP-Adresse abholen lassen. Die CPU wird sich einfach zur nächsten Adresse bewegen und so weiter und so fort, bis sie den Shellcode erreicht und ihn ausführt. Die NOPs erhöhen erheblich die Wahrscheinlichkeit einer erfolgreichen Ausführung von Shellcode, weil gleich mehrere Adressen zur Verfügung stehen.

Heap Spray

Heap Spraying sorgt dafür, dass kompromittierte Speicherbereiche mit höherer Wahrscheinlichkeit ausgeführt werden.
Heap Spraying sorgt dafür, dass kompromittierte Speicherbereiche mit höherer Wahrscheinlichkeit ausgeführt werden. (Bild: Palo Alto Networks)

Was gerade beschrieben wurde, ist die Grundlage für die Heap-Spray-Technik. Diese „besprüht“ wie der Name schon sagt, einen weiten Bereich im Heap Chunk mit vielen NOPs und Shellcode-Sequenzen. Dies sorgt dafür, dass der Prozess in jedem Fall mit der Ausführung des Shellcodes endet.

Exploit-Autoren verbessen kontinuierlich ihre Fähigkeiten, was die Heap-Vorhersage betrifft. Je genauer die Vorhersage-Fähigkeiten, desto kleiner ist der Heap Spray. Die Heap Sprays, die Palo Alto Networks bei entsprechenden Vorfällen von 2014 bis 2015 beobachtet hat, sind wesentlich kleiner und zielgerichteter als die aus der Zeit davor.

Schlussfolgerung

Damit ist die Beschreibung der wesentlichen Bausteine der Speicherkorruptions-Exploits abgeschlossen. Die drei Beiträge verhelfen zusammen zu einem grundlegenden Verständnis darüber, was ein Speicherkorruptions-Exploit ist und wie er umgesetzt wird. Die skizzierten Grundlagen sollten der erste Schritt sein, um sich mit diesem umfangreichen Thema näher auseinanderzusetzen.

* Thorsten Henning ist Senior Systems Engineering Manager Central & Eastern Europe bei Palo Alto Networks.

Inhalt des Artikels:

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 44025133 / Sicherheitslücken)