1.5.3 Buffer Overflows

Viele Einbrüche in Systeme basieren auf der Ausnutzung von Programmierfehlern, die Pufferüberläufe (engl. Buffer Overflows) ermöglichen. Hauptsächlich sind davon in C oder in C++ geschriebene Anwendungen betroffen, da diese Programmiersprachen durch manche Funktionen nicht überprüfen, ob die Eingaben so sind wie erwartet. Die Java hat diese Problematik wegen der automatischen Speicherverwaltung nicht.

Ein Beispiel ist für so eine Schwachstelle in der Programmierung kann die Verwendung des C-Befehls strcpy-Befehl (String Copy) sein. Dieser kopiert im Speicher Daten von einer Quelle zum Ziel, wobei nicht überprüft wird, ob die Quelldaten im Speicherbereich des Ziels Platz haben. Wenn die Quelldaten größer sind als der Platz im Zielspeicherbereich (z.B. ein String mit 50 Zeichen, wo nur max. 10 Zeichen vorgesehen sind), kommt es zu einem Buffer Overflow und es werden Daten im Speicher des Ziels überschrieben.

Durch Buffer Overflows wird typischerweise der bei Programmaufrufen benötigte Stack überschrieben, wobei die Rücksprungadresse des aufrufenden Programms verändert wird und nun auf einen kurzen Programmcode verweist, der ebenfalls mit auf dem Stack abgelegt wurde. Beim Aufruf des angegriffenen Programms wird der Code des Angreifers ausgeführt, mit dem normalerweise eine Shell gestartet wird, sodass der Angreifer damit Zugang zum System erhält. Die Rechte des angegriffenen Programms werden auch dem Angreifer zugeteilt. Dieser wird daher versuchen Programme mit Administratorrechten durche entsprechende Eingaben zu kompromittieren, damit er anschliessend ungehindert mit vollen Rechten auf dem System arbeiten kann. Das heißt, nach einem erfolgreichen Angriff dieser Art hat ein Angreifer den Rechner vollständig unter seiner Kontrolle.