Stack overflow


Bei einem sogenannten stack overflow oder auch buffer overflow (dt. Pufferüberlauf) handelt es sich um einen Programmfehler, der dazu führt, dass der Zwischenspeicher eines Servers oder PCs mit zu großen Datenmengen „überläuft“. Dies bedeutet, dass die gespeicherten Daten nicht nur im Puffer landen, sondern auch Speicherstellen überschreiben können, die dahinter liegen. Der stack overflow ist eine häufig genutzte Sicherheitslücke von Hackern, die darüber Schadsoftware installieren. Die Behebung dieses Problems gehört demnach in den Bereich Netzwerksicherheit.

Hintergrund

Bei jeder Computersoftware werden für deren Laufzeit Variablen lokal abgelegt. Ebenso gibt es Parameter für die Übergabe von Funktionen sowie sogenannte Rücksprungadressen, die im Arbeitsspeicher, und zwar im Stack-Segment hinterlegt werden. In einem aktuellen Betriebssystem wird nun jedem Softwareprogramm ein eigener Adressraum zugeteilt, der virtuell und dessen Größe variabel ist. Beim Programmstart werden nun drei Segmente angelegt: ein Code-Segment, ein Daten-Segment (heap) und das Stack-Segment. Letzteres wird bei der Ausführung des Programms als Zwischenspeicher verwendet und befindet sich am oberen Ende des Adressraums. Sollen ältere Datensegmente abgerufen werden, muss der Stack zunächst gelöscht werden.

Das ist der Moment, in dem ein stack overflow stattfinden kann. So kann es nämlich passieren, dass ein Programm eine lokale Variable im Puffer mit Inhalten bzw. einer Zeichenkette füllt, die größer sind als der verfügbare Platz innerhalb der Variablen. In diesem Fall kann z.B. die Rücksprungadresse überschrieben werden. Ein Programmabsturz kann dann die Folge sein.

Folgen

Die Konsequenz eines stack overflow ist, dass das verwendete Programm abstürzt, als Folge von falsch befüllten Variablen oder weil eine Rücksprungadresse kein erreichbares Ziel enthält. Im Falle eines Exploits schafft es der Angreifer, den Stack mit seinem eigenen Code zu überschreiben und dadurch diesen Code an die Rücksprungadresse zu setzen. Eine häufig genutzte Methode, um diesen Code einzubringen, ist es, ihn als Benutzereingabe zu tarnen.

Weitere Folgen eines Pufferüberlaufs sind die Beschädigung von gespeicherten Daten oder deren Veränderung.

Konsequenzen

Anfällig für einen stack overflow ist vor allem die Programmiersprache C, da sie die Grenzen für die Speicherverwaltung nicht überwachen kann. Darüber hinaus sind vor allem die Programme anfällig, die Programmdaten und andere Daten im gleichen Speicherraum ablegen. Sprachen wie Java sind resistent gegen einen stack overflow. Als Vorsorge vor möglichen Pufferüberläufen können auch Compiler eingesetzt werden.

Weblinks