Buffer Overflow

Was ist Buffer Overflow?

Bei einem Buffer Overflow handelt es sich um einen Programmierfehler im Quellcode von Computerprogrammen. Diese Fehler sind äußerst gefährlich und können dazu führen, dass der Zwischenspeicher (Buffer) eines Rechners, auf dem der fehlerhafte Code ausgeführt wird, mit mehr Daten versorgt wird, als er in der Lage ist temporär zu speichern. Dadurch landen die Daten nicht nur im vorgesehenen Puffer, sondern können die Speicherstellen überschreiten.

Diese Tatsache können Computerhacker ausnutzen, um unerlaubte Codes auszuführen, und so auf diese Weise ein System kompromittieren. Die Behebung von Pufferüberläufen ist äußerst kompliziert, da in vielen Fällen die tieferen Schichten eines Computerprogramms betroffen sind.

Funktionsweise

Bei der Ausführung eines Computerprogramms werden während seiner Laufzeit Funktionsparameter sowie lokale und globale Variablen im Arbeitsspeicher des Computers abgelegt. Moderne Betriebssysteme weisen jeder definierten und initialisierten Datenstruktur einen eigenen Adressraum im Arbeitsspeicher zu. Dieser Adressraum ist virtuell und die Größe wird dynamisch angepasst. Bei der Ausführung eines Programms werden drei Speicher-Segmente angelegt, und zwar:

  • ein Code-Segment
  • ein Heap-Segment
  • ein Stack-Segment

Stack-Segment

Der Stack-Segment wird bei der Ausführung von Programmen als Zwischenspeicher verwendet und befindet sich am Anfang des virtuellen Adressraums. Der Stack basiert auf einer sogenannten “LIFO-Datenstruktur” (Last in First out). Um ältere Datensegmente abzurufen, muss der Stack zunächst entleert werden. Genau hier, kann es zu einem Buffer Overflow kommen.

Es kann passieren, dass eine Variable im Stack mit Daten gefüllt wird, die größer sind als der vorgesehene Platz innerhalb der Variable. Dabei kann die Rücksprungadresse verloren gehen, was zu einem Buffer Overflow führt.

Gefahren durch Buffer Overflow

Ein Pufferüberlauf kann sich auf unterschiedliche Weisen äußern. Programmabstürze, Verfälschung von Daten und Beschädigungen von Datenstrukturen sind die häufigsten Folgen eines Buffer Overflows. Besonders problematisch ist, wenn die Rücksprungadresse einer Subroutine mit verfälschten Daten überschrieben wird. Damit kann sich ein Angreifer durch Ausführung unautorisierter Befehle die Kontrolle bzw. den Zugang zum System verschaffen.

Ein besonders begehrtes Ziel ist der Root-Zugang bei Unix– und Linux-Systeme, der dem Angreifer volle Admin-Rechte verleiht.

Angriffe auf Basis von Buffer Overflows sind in der Computer- und Netzwerksicherheit ein wichtiges Thema. Sie können nicht nur über sämtliche Netzwerkarchitekturen, sondern auch lokal auf einem System realisiert werden. Die Fehler im Programmcode werden in der Regel durch Patches der Hersteller behoben. Neben Fehlern bei der Entwicklung von Programmen wird ein Buffer Overflow primär durch die moderne Computer-Architektur begünstigt, die auf dem Modell von Von-Neumann basiert.

Problematische Programmiersprachen

Die primäre Ursache für Buffer Overflows ist der Einsatz von Programmiersprachen, bei denen die Speicherbereiche manuell überwacht werden müssen, um das Überschreiten von Speicherbereichen zu verhindern. Zu diesem Kreis gehören insbesondere die Programmiersprachen C und C++, die einen hohen Wert auf Performance legen, und auf Mechanismen zur automatischen Speicher-Überwachung verzichten.

Gegenmaßnahmen

Eine sehr wirksame Gegenmaßnahme gegen einen Buffer Overflow ist der Einsatz typischer Programmier- und Script-Sprachen, wie beispielsweise Java, Go oder C#. Bei diesen werden die zugewiesenen Speicherbereiche bereits beim Transpilieren in Maschinensprache durch den Compiler kontrolliert und zur Laufzeit kontinuierlich überwacht. Darüber hinaus sind spezielle Überprüfungstools erhältlich. Diese bieten Entwicklern die Möglichkeit, den Quellcode zu analysieren, um mögliche Schwachstellen frühzeitig zu erkennen und zu beheben.


Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG


Weitere Inhalte