Windows XP SP2: Auswirkungen auf die Sicherheit

Puffer-Überlauf: Ein Beispiel

Soviel zur Vorgeschichte: Stellt sich die Frage, welche Auswirkungen diese Änderung in Windows auf Entwickler hat. Um diese Auswirkung zu verdeutlichen, zeigen wir zunächst einmal ein kleines Beispielprogramm, das einen Buffer-Overflow ermöglicht. Hier der C++ Quellcode zum Beispiel:

void bar() {
char buffer[100];

for (int i=0 ; i < 200; i++) {
buffer[i] = "a";
}

buffer[sizeof( buffer)-1] = 0;
printf( buffer);
}

int _tmain(int argc, _TCHAR* argv[]) {
bar();
return 0;
}

Die Funktion bar() hat einen offensichtlichen Fehler: Sie schreibt 200 Zeichen in einen Puffer, der nur Platz für 100 Zeichen hat.

Dieses Programm sollten Sie nun mit der folgenden Kommandozeile übersetzen:

cl /O2 /ML /Ehsc unchecked.cpp

Wie man am Parameter /O2 unschwer erkennen kann, handelt es sich hier um ein optimiertes Build - es geht also nicht um eine Debug-Version.

Wenn Sie das Programm starten, stützt es irgendwann ab, und Windows zeigt die von solchen Fällen bekannte Fehlermeldung an. Die ist aber nur eine Reaktion auf den Absturz!

Wäre die Rücksprung-Adresse nicht überschrieben worden, so könnte das Programm in ähnlichen Fällen den Eindruck erwecken, völlig korrekt zu laufen - und das, obwohl es im Daten-Bereich Amok läuft.