Buffer Overflow – Wir erklären die bekannte Schwachstelle!

Der Buffer Overflow (Pufferüberlauf) ist wahrscheinlich die bekannteste Form der Software Sicherheitslücke. Die meisten Software-Entwickler wissen, was eine Pufferüberlauf-Schwachstelle ist, aber Pufferüberlauf-Angriffe sowohl gegen ältere als auch neu entwickelte Anwendungen sind immer noch recht häufig. Ein Teil des Problems liegt in der großen Vielfalt der Möglichkeiten, wie Pufferüberläufe auftreten können, und ein Teil liegt in den fehleranfälligen Techniken, die oft zu ihrer Verhinderung eingesetzt werden.

Erklärung des Buffer Overflow

Eine Bedingung für einen Buffer Overflow liegt vor, wenn ein Programm versucht, mehr Daten in einen Puffer zu legen, als dieser aufnehmen kann, oder wenn ein Programm versucht, Daten in einen Speicherbereich zu legen, der über einen Puffer hinausgeht. In diesem Fall ist ein Puffer ein sequentieller Speicherbereich, der für eine Zeichenkette oder ein Array mit ganzen Zahlen reserviert ist. Das Schreiben außerhalb der Grenzen eines zugewiesenen Speicherblocks kann Daten beschädigen, das Programm zum Absturz bringen oder die Ausführung von bösartigem Code verursachen.




Sicherheitslücken

Ein Buffer Overflow ist nicht leicht zu entdecken, und selbst wenn einer entdeckt wird, ist er in der Regel extrem schwer auszunutzen. Dennoch ist es Angreifern gelungen, Pufferüberläufe in einer erstaunlichen Anzahl von Produkten und Komponenten zu identifizieren.

Bei einem klassischen Pufferüberlauf-Exploit sendet der Angreifer Daten an ein Programm, die es in einem unterdimensionierten Stack-Puffer speichert. Das Ergebnis ist, dass Informationen auf dem Aufrufstapel überschrieben werden, darunter auch der Rückgabezeiger der Funktion. Die Daten setzen den Wert des Rückgabezeigers so, dass die Funktion bei ihrer Rückkehr die Kontrolle an bösartigen Code übergibt, der in den Daten des Angreifers enthalten ist.

Obwohl diese Art von Stack-Pufferüberlauf auf einigen Plattformen und in einigen Entwickler-Communities immer noch häufig vorkommt, gibt es eine Vielzahl anderer Arten von Pufferüberläufen, darunter Heap-Pufferüberlauf und Off-by-One-Fehler. Eine andere, ähnliche Klasse von Fehlern ist als Format-String-Angriff bekannt.

Auf der Code-Ebene beinhalten Pufferüberlauf-Schwachstellen in der Regel die Verletzung der Annahmen eines Programmierers. Viele Funktionen zur Speichermanipulation in C und C++ führen keine Überprüfung der Grenzen durch und können die zugewiesenen Grenzen der Puffer, auf denen sie arbeiten, leicht überschreiben. Selbst begrenzte Funktionen wie strncpy() können bei falscher Verwendung Sicherheitslücken verursachen. Die Kombination aus Speichermanipulation und falschen Annahmen über die Größe oder Beschaffenheit eines Datenteils ist die Hauptursache der meisten Buffer Overflows.

Pufferüberlauf-Schwachstellen treten typischerweise in Code auf, der sich auf externe Daten verlässt, um sein Verhalten zu steuern; von Eigenschaften der Daten abhängt, die außerhalb des unmittelbaren Anwendungsbereichs des Codes erzwungen werden; oder so komplex ist, dass ein Programmierer sein Verhalten nicht genau vorhersagen kann.

Buffer Overflow und Webanwendungen

Angreifer verwenden Pufferüberläufe, um den Ausführungsstapel einer Webanwendung zu beschädigen. Indem er sorgfältig gestaltete Eingaben an eine Webanwendung sendet, kann ein Angreifer die Webanwendung veranlassen, beliebigen Code auszuführen – und so effektiv den Rechner übernehmen.

Pufferüberlauf-Fehler können sowohl im Webserver oder in den Anwendungsserver-Produkten vorhanden sein, die die statischen und dynamischen Aspekte der Website bereitstellen, als auch in der Webanwendung selbst. Buffer Overflows, die in weit verbreiteten Serverprodukten gefunden werden, werden wahrscheinlich weithin bekannt und können ein erhebliches Risiko für die Benutzer dieser Produkte darstellen. Wenn Webanwendungen Bibliotheken verwenden, wie z. B. eine Grafikbibliothek zum Erzeugen von Bildern, öffnen sie sich für potenzielle Pufferüberlauf-Angriffe.

Buffer Overflows können auch in benutzerdefiniertem Webanwendungscode gefunden werden und sind sogar wahrscheinlicher, da Webanwendungen in der Regel nicht so genau geprüft werden. Pufferüberlauf-Fehler in benutzerdefinierten Webanwendungen werden mit geringerer Wahrscheinlichkeit entdeckt, da es normalerweise viel weniger Hacker gibt, die versuchen, solche Fehler in einer bestimmten Anwendung zu finden und auszunutzen. Wenn sie in einer benutzerdefinierten Anwendung entdeckt werden, ist die Möglichkeit, den Fehler auszunutzen (außer die Anwendung zum Absturz zu bringen), durch die Tatsache, dass der Quellcode und detaillierte Fehlermeldungen für die Anwendung dem Hacker normalerweise nicht zur Verfügung stehen, erheblich eingeschränkt.

Folgen von Buffer Overflow Schwachstellen

Verfügbarkeit: Buffer Overflows führen im Allgemeinen zu Programmabstürzen. Andere Angriffe, die zu mangelnder Verfügbarkeit führen, sind möglich, z. B. das Versetzen des Programms in eine Endlosschleife.

Zugriffskontrolle (Befehlsverarbeitung): Buffer Overflows können oft dazu verwendet werden, beliebigen Code auszuführen, was normalerweise außerhalb des Bereichs der impliziten Sicherheitsrichtlinien eines Programms liegt.

Sonstiges: Wenn die Folge die Ausführung von beliebigem Code ist, kann dies oft dazu verwendet werden, andere Sicherheitsdienste zu unterlaufen.

Betroffene Umgebungen

Fast alle bekannten Webserver, Anwendungsserver und Webanwendungsumgebungen sind anfällig für Buffer Overlfow Angriffe. Die bemerkenswerte Ausnahme sind Umgebungen, die in interpretierten Sprachen wie Java oder Python geschrieben sind, die gegen diese Angriffe immun sind (mit Ausnahme von Überläufen im Interpreter selbst).

Sprachen: C, C++, Fortran, Assembler

Betriebsplattformen: Alle, wobei je nach Umgebung teilweise vorbeugende Maßnahmen eingesetzt werden können.

Der Selbstschutz

Halten Sie sich bei Serverprodukten und Bibliotheken über die neuesten Fehlerberichte für die von Ihnen verwendeten Produkte auf dem Laufenden. Bei benutzerdefinierter Anwendungssoftware muss der gesamte Code, der Eingaben von Benutzern über die HTTP-Anfrage akzeptiert, überprüft werden, um sicherzustellen, dass er mit beliebig großen Eingaben umgehen kann.

Um sich selbst zu schützen, sollten Sie sich über die neuesten Fehlerberichte für Ihre Web- und Anwendungsserverprodukte und andere Produkte in Ihrer Internet-Infrastruktur auf dem Laufenden halten. Installieren Sie die neuesten Patches für diese Produkte. Scannen Sie Ihre Website regelmäßig mit einem oder mehreren der gängigen Scanner, die nach Pufferüberlauffehlern in Ihren Serverprodukten und Ihren benutzerdefinierten Webanwendungen suchen.

Für Ihren benutzerdefinierten Anwendungscode müssen Sie den gesamten Code überprüfen, der Eingaben von Benutzern über die HTTP-Anfrage akzeptiert, und sicherstellen, dass er eine angemessene Größenprüfung für alle derartigen Eingaben bietet. Dies sollte auch für Umgebungen erfolgen, die nicht anfällig für solche Angriffe sind, da zu große Eingaben, die nicht abgefangen werden, dennoch zu Denial-of-Service- oder anderen Betriebsproblemen führen können.


Sevencast – der IT-Security Podcast

Von unterwegs, im Büro oder zu Hause hören und auf dem aktuellen Stand bleiben!

Sevencast bei Spotify
Sevencast bei Apple Podcast
Sevencast bei Overcast


Schreibe einen Kommentar