Der sogenannte Pufferüberlauf ist ein häufiger Softwarefehler, der es erlaubt, Angriffe auf den Computer über das Internet auszuführen. Hier erklären wir Ihnen, worum es sich dabei genau handelt und wie Sie sich dagegen schützen können.
Angriffe durch Pufferüberlauf (buffer overflow) sollen ein Programm dazu bringen, einen bestimmten Code auszuführen, und senden ihm dabei größere Datenmengen als vorgesehen.
Programme, die parametrische Eingangsdaten akzeptieren, speichern sie temporär in einem Bereich des Arbeitsspeichers, der Puffer (buffer) genannt wird. Allerdings können manche Lesefunktionen, wie die strcpy()-Funktionen der Sprache C, nicht mit dieser Art von Überlauf umgehen. Das hat den Absturz der Anwendung zur Folge, kann zur Ausführung eines beliebigen Codes führen und so Zugang zum System erlauben.
Die Durchführung dieser Art von Angriff ist sehr kompliziert, da genaues Wissen über die Programmarchitektur und Prozessoren nötig ist. Allerdings gibt es viele Exploits, die in der Lage sind, diesen Angriff zu automatisieren und ihn damit auch für Quasi-Neulinge zugänglich zu machen.
Das Funktionsprinzip eines Pufferüberlaufs hängt stark mit der Architektur des Prozessors zusammen, auf dem die anzugreifende Anwendung läuft.
Die von einer Anwendung aufgenommenen Daten werden im Puffer des Arbeitsspeichers gespeichert. Ein korrekt konzipiertes Programm sieht eine Maximalgröße für Eingangsdaten vor und überprüft, ob die aufgenommenen Daten diesen Wert überschreiten. Die Anweisungen und Daten eines laufenden Programms werden ständig provisorisch gespeichert, in einem Bereich, der Stapelspeicher heißt (stack). Die Daten, die hinter dem Puffer liegen, enthalten eine Retour-Adresse (genannt Befehlszähler), durch den das Programm weiterläuft. Wenn die Größe der Daten die Größe des Puffers überschreitet, wird die Retour-Adresse überschrieben. Das Programm liest dann eine fehlerhafte Adresse ein, was zu einer Schutzverletzung (segmentation fault) der Anwendung führt.
Ein Hacker mit guten technischen Kenntnissen kann kann sicherstellen, dass die überschriebene Speicheradresse einer realen Adresse entspricht, die zum Beispiel im Puffer selbst liegt. Indem er Anweisungen in den Puffer schreibt (beliebiger Code), kann er diese also leicht ausführen. So ist es möglich, Anweisungen in den Puffer einzuschreiben, die eine Eingabe-Schnittstelle öffnen können (shell) und es dem Hacker ermöglichen, das System zu steuern. Dieser beliebige Code, der die Ausführung der Eingabe-Schnittstelle ermöglicht, heißt shellcode.
Vor dieser Art des Angriffs kann man sich schützen, indem man Anwendungen mit hochentwickelten Programmiersprachen erstellt, bei denen die Speicherzuteilung genau geregelt wird, oder mit Sprachen niedrigeren Niveaus, und dabei sichere Funktionsbibliotheken verwendet (zum Beispiel strncpy()-Funktionen).
Es werden regelmäßig Sicherheitswarnungen veröffentlicht, die auf die Anfälligkeit bestimmter Anwendungen für Pufferüberlauf-Angriffe hinweisen. Daraufhin veröffentlichen die Herausgeber der betroffenen Software in der Regel Korrekturen (patches), durch die sich die Schwachstelle ausbessern lässt.
Jeder System- und Netzwerkadministrator sollte auf dem Laufenden bleiben, was die Sicherheitswarnungen betrifft und die Patches so schnell wie möglich installieren.
Foto: © yuriy2design - 123RF.com