Buffer-Overflow Angriff

Was ist ein Buffer Overflow Angriff?

Ein Pufferüberlauf (engl. Buffer-Overflow) ist eine Schwachstelle, die vorliegt, wenn es möglich ist, mehr Daten in einen Puffer (Speicherbereich) zu kopieren, als dieser verarbeiten kann.

Am relevantesten sind heute Stack-Pufferüberläufe und Heap-Pufferüberläufe. Stack und Heap sind Elemente des Arbeitsspeichers, die dem ausführenden Programm vom Betriebssystem zur Verfügung gestellt werden.

Wann entsteht ein Buffer-Overflow Angriff?

Ein Buffer-Overflow tritt auf, wenn Daten mithilfe von Funktionen kopiert werden, die keine Längenüberprüfung vornehmen – beziehungsweise wenn ein Programmierer solch eine Funktion verwendet und keine Längenüberprüfung vornimmt. Es handelt sich beim Buffer-Overflow somit nicht um Malware, sondern um das Ausnutzen einer Schwachstelle.

Wird ein Puffer von einer Funktion, die keine Längenüberprüfung vornimmt, mit mehr Daten beschrieben als er aufnehmen kann, kommt es zu einem Überlauf (Buffer-Overflow). In diesem Fall werden Speicherbereiche überschrieben, die für andere Zwecke reserviert sind und nicht zu diesem Puffer gehören. Im günstigsten Fall kommt es zu einem Absturz des Programms oder des Systems. Bei geschickter Wahl des Eingabestroms gelingt es dem Angreifer im ungünstigsten Fall die über den Programmfluss zu erlangen und gezielt Code auszuführen. Dies funktioniert, indem Shellcode (Code der zum Shellzugriff führt) in den Puffer geschrieben wird und versucht wird, den Speicherbereich zu beschreiben, der die Rücksprungadresse enthält. Kontrolliert man die Rücksprungadresse, kann man versuchen, zu dem Shellcode zu springen und er wird ausgeführt.

Ist Deine IT für einen
Buffer Overflow anfällig?
Mit unserem Penetration Test finden wir Deine Schwachstellen!
Zur Seite

Schwachstellen wie der Buffer-Overflow müssen von ihren Entdeckern nicht zwangsläufig ausgenutzt werden. Wer eine Schwachstelle in einem Programm entdeckt, kann den Hersteller darüber informieren. Dieser hat dann die Möglichkeit, die Schwachstelle durch ein Update zu beheben.

In unserem Beitrag über Zero-Day-Exploits können Sie nachlesen, wie wir von ProSec vorgehen, wenn wir auf eine solche Schwachstelle stoßen.

Genegenmaßnahmen bei Buffer-Overflow

Wirkungsvolle Gegenmaßnahmen bei Buffer-Overflow sind beispielsweise DEP (Data-Execution-Prevention), welches Speicherbereiche als nicht ausführbar markiert und somit die Ausführung von Shellcode verhindern kann.

Die ASLR (Address Layout Randomization) ist eine Technik, die die Adressen von Funktionen im Speicher zufällig verändert, welches die genaue Manipulation von Rücksprungadressen erschwert.

Die Stack-Smashing-Protection, zu dessen Maßnahmen das Speichern der Rücksprungadresse außerhalb des Stacks oder das Generieren eines Kontrollwerts (Canary) von der Rücksprungadresse gehören, damit eine Manipulation auffällt.

Die Kritikalität

Bei erfolgreicher Ausnutzung der Buffer-Overflow-Schwachstelle agiert man mit den Rechten, die das Programm oder der Dienst auf dem System haben. Dies bedeutet, dass man in der Regel, eine rollenbasierte Rechteverwaltung vorausgesetzt, bei Übernahme eines Web oder Mail Servers auch nur die eingeschränkten Rechte erhält, die dieser Dienst hat.

Anders wiederum sieht es bei Systemdiensten aus. Bei der SMB Schwachstelle Eternalblue handelt man nach der erfolgreichen Ausnutzung des Exploits als „NT-Authority\System“ (Account mit höchsten Rechten auf einem lokalen Windows System).

Bei nicht erfolgreicher Ausnutzung kommt es in der Regel zum Absturz des Programms oder Systems und damit zu einem „Denial of Service“.

buffer-overflow angriff
Quelle: https://www.acunetix.com/blog/web-security-zone/what-is-buffer-overflow/

Der Formatstring Angriff

Klassische Formatstring Angriffe oder Schwachstellen gehören zu der Klasse von Programmierfehlern. Eine häufig verwendete Funktion in der Programmiersprache „C“ ist printf(). Dies ist eine Funktion aus der Familie der Stringverarbeitung. Ihre Funktionalität besteht darin, einen String (Zeichenkette) und auf Wunsch auch übergebene Werte (z. B. Eingaben) in einer gewünschten Formatierung auszugeben – sprich eine Anweisung, wie ein String zusammenzubauen ist.

Format-String Angriff
Eingaben oder Werte werden ebenfalls im Stack gespeichert. Nimmt ein Programmierer keine Formatspezifikation vor, bedeutet dies, dass nicht genau definiert wird, welcher Datentyp erwartet wird (Inputvalidierung). Dadurch hat ein Angreifer die Möglichkeit, den Inhalt des Formatstrings zum Teil oder ganz zu bestimmen und dadurch einen Buffer-Overflow auszulösen.

Gegenmaßnahmen bei Formatstring

Die einzige, wirksame Gegenmaßnahme für die Buffer-Overflow-Schwachstelle ist eine saubere und sicherheitsbewusste Programmierung und Sourcecode-Screening von Spezialisten.

Kritikalität

Das Ausnutzen dieser Schwachstelle kann dazu führen, dass ein Angreifer Bereiche des Stacks auslesen, Code ausführen oder einen Segmentierungsfehler (Speicherzugriffverletzung) in der laufenden Anwendung verursachen kann.

ANDERE BEITRÄGE

Inhaltsverzeichnis

Wir verwenden Cookies, um Ihnen die bestmögliche Erfahrung zu bieten. Wenn Sie unsere Website weiterhin besuchen, stimmen Sie der Verwendung von Cookies zu, wie in unserer Datenschutzerklärung beschrieben.