Pufferüberlauf vermeiden
Speicherschutz mit SP2
Der Pufferüberlauf
Pufferüberlauf vermeiden
Die am häufigsten genutzte Software-Schwachstelle ist der Buffer-Overflow, auch einfach Pufferüberlauf genannt. Hinter dem Begriff Puffer verbirgt sich ein Speicherbereich, der bei der Datenübertragung zwischen zwei unterschiedlich schnellen Partnern steht.
So liefert etwa eine Festplatte die Daten schneller, als ein DVD-Brenner sie auf den Rohling schreiben kann. Damit der Sender (Festplatte) den Empfänger (Brenner) nicht mit Daten überschwemmt (Überlauf), ist eine Pufferung dazwischengeschaltet. Arbeitet der Sender zu schnell oder der Empfänger zu langsam, dann passen die Daten nicht mehr in den Speicher. Es kommt zu einem Überlauf des Puffers. Die Folge: Datenverlust.
Pufferüberläufe werden gerne für Angriffe ausgenutzt. Prozesse legen Variablen, Parameter und Sprungadressen für Unterprogramme auf den Stack. Ruft ein Programm ein Unterprogramm mit drei lokalen Variablen auf, wird als Erstes die Rücksprungadresse auf den Stack geschrieben und dann Platz für die Variablen drei bis eins reserviert. Ein möglicher Fehler: Statt drei Variablen werden fünf eingelesen. Die letzten beiden überschreiben die Rücksprungadresse und der Prozess stürzt ab, weil die Adresse nicht mehr stimmt.
Schlimmer noch als ein Absturz ist es, wenn ein Wurm eigenen Code ins System einschleust und die Rücksprungadresse an dessen Anfang umlenkt. Beispielsweise könnte eine solche Funktion einen Port in der Firewall öffnen oder den Virenscanner abschalten.
Doppelschutz von Microsoft
Pufferüberlauf vermeiden
Gegen Pufferüberläufe lässt sich wenig ausrichten. Wenn der Programmierer die notwendigen Überprüfungen nicht einbaut, tritt ein Urproblem heutiger Rechner-Architekturen zutage: Daten und Code stehen im selben Speicher. Der Benutzer kann nicht verhindern, dass ausführbarer Code in Datenbereichen landet. Wohl aber gibt es Mechanismen, die dessen Ausführung zuverlässig unterbinden.
Am wirksamsten erledigt das ein Feature der aktuellen Prozessoren AMD Athlon 64, Sempron und Intel mit EM64T, die ein Bit der Adressleitung für ein spezielles NX-Flag nutzen. NX steht als Kürzel für »No Execution« und kennzeichnet Speicherbereiche eindeutig als Datensegmente, die keinen ausführbaren Code enthalten. Schafft es jetzt ein Programm, ausführbaren Code durch einen Buffer-Overflow einzuschmuggeln, verweigert der Prozessor dessen Ausführung wegen des NX-Flags. Erst mit SP 2 unterstützt Windows XP diese Funktion.
Das Problem: Die NX-Funktion ist bisher nur in den oben genannten Prozessoren zu finden. Microsoft hat deswegen als zweite Schutzmöglichkeit das SP 2 mit einer speziellen Option ausgestattet, die Software-seitig Schutz bietet. Microsoft nennt dies »Dateiausführungsverhinderung«.
Bei jedem Unterprogramm-Aufruf wird eine Zeichenkette ? oft Cookie genannt ? zwischen Variablen und Rücksprungadresse auf dem Stack platziert. Überschreibt jetzt ein Überlauf die Rücksprungadresse, dann wird vorher auch das Cookie überschrieben. Das SP 2 erkennt die fehlenden Cookies und bricht den aktuellen Prozess ab. Unter Leistungsoptionen in den Systemeigenschaften von Windows XP taucht der Menüpunkt Dateiausführungsverhinderung auf. Microsoft schaltet sie automatisch für XP-Dienste und hauseigene Programme frei.
Nur fehlerfreier Code schützt
Pufferüberlauf vermeiden
Nur fehlerfreier Code schützt vor Overflows. Die NX-Technik verhindert nicht den Überlauf, sondern die Ausführung von Code in Datensegmenten ? das aber zuverlässig. Bleibt die Zwischenlösung, Programme mit speziellen Flags zu kompilieren. Auch diese Methode verhindert nicht den Overflow, stoppt aber bei fehlendem Cookie den laufenden Prozess. Bombensicher ist diese Methode aber nicht, denn erste Beschreibungen, wie sich der Schutz aushebeln lässt, gibt es bereits auf einschlägigen Webseiten.