Was ist ein Pufferüberlauf?

In einem Computerprogramm werden Variablen Speicherblöcke mit fester Größe zugewiesen. Nachdem dieser Speicher zugewiesen wurde, kann das Programm Daten an diesen Speicherorten speichern und abrufen. Pufferüberläufe treten auf, wenn die in einen dieser Speicherblöcke geschriebene Datenmenge dessen Größe überschreitet. Dadurch wird für andere Zwecke reservierter Speicher überschrieben, was verschiedene Auswirkungen auf das Programm haben kann.

E-Book herunterladen Demo anfordern

Was ist ein Pufferüberlauf?

Ein Pufferüberlaufangriff

Ein Pufferüberlaufangriff ist ein häufiger Cyberangriff , der absichtlich eine Pufferüberlauf-Schwachstelle ausnutzt, bei der benutzergesteuerte Daten in den Speicher geschrieben werden. Indem der Angreifer mehr Daten übermittelt, als in den zugewiesenen Speicherblock passen, kann er Daten in anderen Teilen des Speichers überschreiben.

Angreifer können Pufferüberlaufangriffe aus verschiedenen Gründen durchführen, z. B. indem sie kritischen Code oder Daten überschreiben, um das Programm zum Absturz zu bringen, bösartigen Code zur Ausführung in das Programm einzuschleusen oder kritische Werte zu ändern und so den Ausführungsfluss des Programms zu verändern.

Bedrohung durch Pufferüberlauf

Pufferüberlaufangriffe können zum Erreichen verschiedener Ziele eingesetzt werden, darunter:

  • Denial of Service (DoS) Attacks: Im Speicherbereich einer Anwendung befinden sich Zeiger, Code und andere Datenelemente, die für die Ausführungsfähigkeit des Programms von entscheidender Bedeutung sind. Das Überschreiben dieser Daten könnte zum Absturz des Programms und damit zu einem DoS-Angriff führen.
  • Codeausführung: Ein häufiges Ziel von Pufferüberlauf-Exploits besteht darin, die anfällige Anwendung zur Ausführung von vom Angreifer bereitgestelltem Code zu zwingen. Dadurch kann der Angreifer Code auf dem betroffenen System mit demselben Zugriff und denselben Berechtigungen wie die ausgenutzte Anwendung ausführen.
  • Umgehungen der Zugriffskontrolle: Die Ausnutzung von Pufferüberläufen zum Ausführen von Code kann den Zugriff eines Angreifers auf ein Zielsystem erhöhen. Dieser erweiterte Zugriff kann dann für Folgeangriffe genutzt werden.

Arten von Pufferüberlaufangriffen

Ein Pufferüberlaufangriff kann auf verschiedene Arten durchgeführt werden, einige der häufigsten Beispiele sind jedoch:

  • Stapelbasierter Pufferüberlauf: Der Programmstapel enthält wichtige Kontrollflussdaten für eine Anwendung – wie z. B. Funktionsrückgabezeiger – und ist ein häufiges Ziel von Pufferüberlaufangriffen. Das Überschreiben eines Rückgabezeigers kann dazu führen, dass das Programm zu vom Angreifer kontrollierten Daten springt und diese als Code ausführt, sodass der Angreifer Code mit denselben Berechtigungen wie die Anwendung ausführen kann.
  • Heap-basierter Pufferüberlauf: Der Programm-Heap wird verwendet, um Variablen, deren Größe beim Kompilieren des Programms nicht definiert ist, dynamisch Speicher zuzuweisen. Indem ein Angreifer eine Pufferüberlauf-Schwachstelle ausnutzt und den System-Heap überflutet, kann er kritische Anwendungsdaten überschreiben.
  • Format-String-Angriffe: Funktionen in der printf-Familie in C/C++ können Format-Strings verwenden, die das Lesen und Schreiben von Speicher ermöglichen. Wenn vom Benutzer bereitgestellte Daten als Formatzeichenfolge interpretiert werden, können sie dazu verwendet werden, vertrauliche Werte preiszugeben oder zu ändern.

Beispiele für Pufferüberlaufangriffe

Pufferüberlauf-Schwachstellen kommen in C/C++ häufig vor und treten auf, wenn ein Programm einen Speicherblock mit fester Größe zuweist und dann Daten unsicher dorthin kopiert. Das folgende Codebeispiel enthält eine Pufferüberlauf-Schwachstelle:

char buf[BUFSIZE]; 

 bekommt(buf);

In diesem Codebeispiel hat die Variable buf die feste Größe BUFSIZE. Die Funktion gets liest jedoch Daten und speichert sie in buf , bis sie einen Nullterminator (0x00) erreicht. Ein Angreifer kann dies ausnutzen, um Daten über das Ende von buf hinaus zu überschreiben.

Formatstring-Angriffe sind ein Sonderfall von Pufferüberläufen. Das folgende Codebeispiel enthält eine Formatzeichenfolge Schwachstelle.

#include <stdio.h>

void main(int argc, char **argv) 

 { 

 printf(argv[1]); 

 }

In diesem Beispiel übernimmt das Programm vom Benutzer bereitgestellte Eingaben von argv[1] und gibt sie auf dem Terminal aus. Wenn die Benutzereingabe jedoch eine Formatzeichenfolge enthält, könnte dies einem Angreifer ermöglichen, den Speicher im System zu lesen oder zu bearbeiten.

So verhindern Sie Pufferüberläufe

Pufferüberlauf-Schwachstelle kann verhindert werden durch:

  • Eingabevalidierung durchführen: Pufferüberlauf Schwachstellen treten auf, wenn ein Programm Annahmen über vom Benutzer bereitgestellte Eingaben trifft, ohne diese Annahmen zu validieren. Das Überprüfen der Datenlänge oder das Kopieren nur einer bestimmten Anzahl von Bytes an einen Speicherort kann helfen, Pufferüberläufe zu vermeiden.
  • Aktivieren des Laufzeitspeicherschutzes: Die meisten Computer verfügen über integrierte Schutzmaßnahmen gegen Pufferüberläufe, wie z. B. Address Space Layout Randomization (ASLR), Data Execution Prevention (DEP) und Structured Exception Handling Overwrite Protection. Durch die Aktivierung dieser Schutzmaßnahmen wird die Durchführung von Pufferüberlaufangriffen erheblich erschwert.
  • Vermeiden anfälliger Funktionen: Pufferüberläufe werden durch anfällige Funktionen wie gets, scanf und strcpy in C/C++ ermöglicht. Die Pufferüberlauf-Schwachstelle lässt sich durch den richtigen Einsatz der sicheren Versionen dieser Funktionen vermeiden.
  • Verwendung speichersicherer Sprachen: Pufferüberläufe treten in Programmiersprachen mit Variablen fester Größe und ohne Speicherschutz auf. Die Verwendung anderer Programmiersprachen wie Python, Java oder C# macht Pufferüberläufe schwierig oder unmöglich.
  • Verhinderung der Ausnutzung von Schwachstellen: Web Application Firewall (WAFs) und Webanwendung and API Protection (WAAP)-Lösungen können versuchte Ausnutzung von Pufferüberlauf-Schwachstellen identifizieren und blockieren. Dies verringert das Risiko, das Pufferüberlaufangriffe für die Unternehmensanwendungssicherheit (AppSec) darstellen.

Pufferüberlaufschutz mit CloudGuard AppSec

Die Ausnutzung der Pufferüberlauf-Schwachstelle kann zu Programmabstürzen, Datenlecks oder der Ausführung von Schadcode auf den Systemen einer Organisation führen. Erfahren Sie in diesem E-Book , wie CloudGuard AppSec zum Schutz vor Pufferüberlaufangriffen und anderen Bedrohungen beitragen kann. Dann melden Sie sich für eine kostenlose Demo an, um selbst zu sehen, wie CloudGuard AppSec die Sicherheit Ihrer Cloud-Anwendung verbessern kann.

×
  Feedback
Diese Website verwendet Cookies für ihre Funktionalität sowie für Analyse- und Marketingzwecke. Mit der weiteren Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen finden Sie in unserem Cookies Hinweis.
OK