|
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. |
|