Allgemeine Einführung in IP-Fragmentierung (Ping of Death)
Marc Ruef

 

Ein einzelnes IP-Paket ist inklusive Header maximal 65'535 Bytes lang, Ethernet-Pakete können jedoch maximale 1'500 Bytes Daten übertragen. Grössere Pakete werden fragmentiert und beim Empfänger wieder defragmentiert, wobei die Zusammensetzung anhand eines Offset-Wertes erfolgt. Dies wird gemacht, um Netzwerkabschnitte zu überwinden, welche lediglich eine maximale Paketlänge unterstützen. Jedes Paketfragment erhält neben dem Offset-Wert auch noch eine Identifikationsnummer, aber nur das erste enthält den TCP-Header und damit die Port-Nummer. Dieser Offset-Wert bestimmt für jedes Fragment, wohin es gehört oder wohin es soll. Dadurch ist es möglich, dem letzten Fragment einen Offset zu geben, der inklusive Fragmentgrösse einen grösseren Wert als die maximalen 65'535 Bytes ergibt. Dieses übergrosse Ping-Paket erzeugt anschliessend einen Buffer-Overflow. Dieser Angriff funktioniert nicht nur mit ICMP und Ping, sondern auch mit UDP und TCP. Obwohl ein ordentlicher Ping-Befehl keine Pakete grösser als 65'507 Bytes (65'535 Bytes abzüglich 20 Bytes IP-Header und 8 Bytes ICMP-Header) zulässt, bot bei den ersten Versionen von Windows 95 der dort implementierte Ping-Befehl das antsprechende Feature in Form eines Parameters. Einfach "ping -l 65510 zielhost" eingeben, und der Todes-Ping wird ausgeführt.