Null Problemo

Der Internet Explorer ist bekannt dafür, dass er selbst kaputte Seiten noch darstellt. Er geht dabei so weit, selbst Null-Zeichen zu ignorieren. Antiviren-Software und Intrusion Detection/Prevention Systeme lassen sich damit austricksen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 6 Min.
Inhaltsverzeichnis

Das NUL-Zeichen -- also ein ASCII-Zeichen mit dem Wert 0 - kennen Programmierer als Kennung für das Ende eines Strings oder einen nicht definierten Wert. Auch in Textdateien oder HTML-Seiten können Bytes mit dem Wert Null auftauchen, wenn sie beispielsweise als Multibyte-Unicode vorliegen. Die Zwei-Byte-Kodierung UTF-16 beispielsweise stellt hinter jedes ASCII-Zeichen eine Null (beziehungsweise je nach Byte-Order davor).

Microsofts Internet Explorer hat eine sehr eigenwillige Art, mit solchen Null-Bytes umzugehen: Er ignoriert sie einfach -- selbst wenn sie mitten in einem HTML-Tag oder innerhalb von Script-Code auftauchen. Und das alles völlig lösgelöst vom Zeichensatz des Dokuments. So funktioniert

alert("Hello world");

genauso wie

a\0x00lert("Hello world");

Selbst Seiten, in denen nach jedem sinnvollen Zeichen über 4000 Nullen folgen, stellt der Microsoft-Browser ohne Fehler dar.

Selbst mit mehr Nullen als Code funktioniert der Exploit im Internet Explorer noch.

Andere Browser sind da penibler und achten auf den Zeichensatz des Dokuments, der entweder vom Web-Server festgelegt oder vom Browser selbst ermittelt wird. In Webseiten mit herkömmlichen Ein-Byte-Kodierungen wie ASCII oder ISO-8859-1 stellen sie NUL-Zeichen im Text als Sonderzeichen dar. Treten sie innerhalb eines HTML-Tags auf, erkennen die IE-Konkurrenten es anders als der Internet Explorer nicht mehr als gültig an.

Die diesbezügliche Toleranz der Redmonder stellt Hersteller von Sicherheits-Software vor einige Probleme. Ein Antiviren-Programm oder ein Intrusion Prevention System, das vor bösen HTML-Seiten schützen soll, muss dieses Verhalten des Internet Explorer kennen und bei seinen Tests berücksichtigen. Schließlich könnte ein Angreifer seinen bösen Code mit Nullen verschleiern und so versuchen, ihn an den Schutzvorkehrungen seiner Opfer vorbeizumogeln.

Dass dies durchaus praktikabel ist, zeigten erste Tests mit Demos des c't-Browserchecks. Selbst modifizierte Demos mit über 4000 Nullen an mehreren Stellen waren noch in der Lage, auf einem ungepatchten System eine Datei aus dem Internet herunterzuladen und auszuführen.