Windows XP SP2: Auswirkungen auf die Sicherheit

Buffer-Overruns als Angriffs-Vektor

Bevor wir diese Sachlage und deren Auswirkungen demonstrieren, zunächst eine kurze Erklärung, weshalb die neue Compiler-Option das Problem nicht völlig aus der Welt schafft. Wie ein Buffer-Overrun Angriff funktioniert, können Sie im Artikel Basiswissen Buffer Overflow nachlesen.

Prinzipiell ist es so, dass ein Angreifer mögliche Buffer-Overflows ausnutzt, um eine von ihm gewünschte Rücksprungadresse im Stack (oder in selteneren Fällen auch im Heap) zu platzieren. Der Angreifer muss also schon erhebliche Mengen an Energie und Wissen investieren, um überhaupt die richtigen Code-Bytes per Aufruf an die angreifbare Methode zu übergeben. Dazu wird er fast immer einen String mit den von ihm gewünschten Bytes an die Funktion übergeben und die eigentlich richtige Rücksprungadresse überschreiben.

Nun sollte man annehmen, dass ein Test, der überschriebene Puffer-Bytes entdeckt, auch diese Angriffsmethode aufdeckt. Das ist aber nicht der Fall, denn wenn der Angreifer von diesem Test weiß, hält ihn natürlich nichts davon ab, auch die Guard-Bytes zu überschreiben - und zwar mit genau den passenden Werten, die die Testroutinen an der Stelle dieser Bytes erwarten.

Allerdings: Der Angriff wird deutlich schwieriger, da es nun nicht mehr ausreicht, "passend" erzeugte Code-Bytes in den Speicherbereich zu schreiben. Zusätzlich ist noch zu berücksichtigen, dass diese Bytes die richtigen Testwerte an den passenden Stellen enthalten. Das erschwert die Konstruktion des Speicherblocks, macht sie aber nicht unmöglich.