Exploits entmystifiziert, Teil 2

Einen Stack-basierten Pufferüberlauf provozieren

| Autor / Redakteur: Thorsten Henning* / Stephan Augsten

Stapel-basierter Pufferüberlauf

Die inhärente Sicherheitslücke in der Stack-Architektur ist, dass sie implizit davon ausgeht, dass die Eingabe der vorgegebenen Größe entsprechen wird. Dies funktioniert gut, wenn die Eingabe entweder kleiner ist oder identisch ist mit dieser Größe. Das Problem entsteht, wenn die Eingabe größer ist als die vorgegebenen Stapelgrenzen.

Gehen wir zurück zu unserem vereinfachten Stack. Nehmen wir an, wir geben dem Unterprogramm eine Eingabe, die größer ist als 10 Zeichen. Zu beachten ist, dass die Adressen 91 bis 100 für die Eingabe zugewiesen sind und die Adresse 90 bereits von der Rücksendeadresse eingenommen wird.

Wenn unsere Eingabe 11 Zeichen umfasst, wird das erste Zeichen zur Adresse 100 gehen und dann nach unten gedrückt werden. Sobald die 90 erreicht ist, wird die Rücksendeadresse überschrieben. Die CPU wird versuchen, den Anweisungen in Adresse 90 zu folgen. Da diese aber nicht mehr existiert, wird der Ausführungsablauf unterbrochen und infolge dessen der Prozess zum Absturz gebracht. Dies wird als Stack-Overflow, also „Stapelüberlauf“ bezeichnet.

An dieser Stelle sei daran erinnert, dass der Shellcode sich in dem Stapel befindet und der Angreifer versucht zu erreichen, dass er ausgeführt wird. Um den Stapelüberlauf für seine Zwecke zu nutzen, wird der Angreifer den Unterprogramm-Input so manipulieren, dass die Rücksendeadresse mit neuen Anweisungen überschrieben wird, die die CPU zum Shellcode-Speicherort umleiten.

In unserem vereinfachten Stapel wird beispielsweise der Angreifer eine Eingabe mit 11 Zeichen erstellen. Der Shellcode befindet sich in den Zeichen 11 und 10. Zeichen 1 enthält Befehle, um auf 11 zu springen und die Eingabe auszuführen. In diesem Fall, wenn das Unterprogramm aufgerufen wird, wird Zeichen 1 nach unten gerückt werden, die Rücksendeadresse überschrieben und die CPU zur Adresse 100 geleitet, wo der Shellcode sitzt. Die CPU wird den Anweisungen blind folgen und den Shellcode ausführen.

Wie sich im oberen Beispiel sehen lässt, sind die Exploitation-Teile nicht miteinander verbunden: Die Einbettung eines Shellcodes ist völlig entkoppelt vom Bearbeiten der Eingabedatei, um eine bestimmte Schwachstelle auszulösen. Die ausgelöste Schwachstelle ermöglicht es, die Rücksendeadresse zu überschreiben.

Die Anweisungen, die die Rücksendeadresse überschreiben, leiten die CPU zum Shellcode, betreffen aber nicht die Funktionalitäten des Shellcodes in irgendeiner Weise. Die Kunst der Exploits ist es, diese unabhängigen Teile zu orchestrieren, damit sie zusammenarbeiten. In ähnlicher Weise ist die Kunst beim Schutz vor Exploits, entweder die unabhängigen Teile direkt oder die Orchestrierung zwischen ihnen zu behindern.

Schlussfolgerung

Wir haben gelernt, wie das grundlegende Exploitation-Framework auf Stapel-basierte Pufferüberlauf- Schwachstellen angewandt wird. Trotz seines Alters (der früheste dokumentierte Angriff war der Morris-Wurm im Jahr 1988), ist diese Vorgehensweise immer noch weit verbreitet in der Bedrohungslandschaft.

Wir begegnen Fällen von Ausnutzung dieser Schwachstellen in verschiedenen Readern, Playern und Microsoft-Office-Dokumenten, aber auch in industriellen Protokolle und Diensten. Im nächsten Teil werden wir die Umsetzung des Exploitation-Frameworks für Heap-basierte Schwachstellen behandeln.

* 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: 43793086 / Sicherheitslücken)