Ping smrti

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Ping smrti

Ping smrti (anglicky Ping of death) je v počítačové síti varianta útoku typu Denial of Service využívající chyby v implementaci protokolu TCP/IP.

Program ping se běžně používá pro ověření, zda vzdálený server pracuje. Mnoho počítačových systémů neumělo zpracovat ping větší než 65535 bajtů, což je maximální velikost paketu v protokolu IP. Tento abnormálně velký paket pak útočník pošle do určité sítě, kde může způsobit chyby (obvykle tzv. přetečení zásobníku) vedoucí k selhání systémů, které nejsou proti takovým chybným paketům odolné.

Tato chyba byla relativně lehce zneužitelná. Poslat ping o nedovolené velikosti standardně není možné. Pokud je však paket fragmentovaný, lze poslat i větší než povolenou velikost. Jakmile ho cílový počítač defragmentuje, může dojít ke zmíněnému přetečení zásobníku a pádu systému.

Tato chyba postihla mnoho systémů včetně Unixu, Linuxu, Macu, Windows, ale také tiskárny a routery (směrovače). V letech 19971998 byla však drtivá většina systémů opravena, takže se dnes jedná spíše o historickou chybu.

Časem se však rozšířil další druh útoku, tzv. ping flood. Ve zkratce jde o to, že se cílová linka zahltí ping pakety. Ve snaze odpovědět na ping dojde i k zahlcení odchozí komunikace cílové linky.

Technické vysvětlení[editovat | editovat zdroj]

RFC 791 definuje, že maximální velikost IP paketu je 65535 bajtů. Limit vychází z toho, že na popis velikosti paketu je určeno číslo o šířce 16 bitů (2^{16}-1).

U ethernetu je maximální velikost přenášeného fragmentu 1500 bajtů (viz MTU). Proto jsou větší pakety děleny (fragmentovány), aby splnily daný limit. Příjemce tyto fragmenty spojí zpět do jednoho paketu a zpracuje ho.

Pokud dojde k fragmentaci, každý IP fragment musí obsahovat informaci, na jaké místo v kterém paketu patří. Tato informace se nachází v 13bitové části Fragment offset v IP hlavičce. Neobsahuje nic jiného než offset – posun tohoto fragmentu v původním IP paketu – v jednotkách 8 bajtů, čímž lze zapsat maximální offset 65 528 ((2^{13}-1)\times 8). Znamená to, že IP fragment s maximálním offsetem by neměl obsahovat data větší než 7 bajtů, jinak by paket překročil povolenou velikost.

Útočník však může poslat IP fragment s maximálním offsetem a daty mnohem většími než 7 bajtů. Jakmile je příjemce spojí, dostane IP paket mnohem větší, než je povolená velikost 65535 bajtů. Dojde k přetečení paměťového prostoru, který byl vyhrazen pro paket. To může způsobit mnoho problémů.

Z popisu vyplývá, že se tento problém týká zpracování IP fragmentů a nikoliv ICMP. Proto se může vyskytnout i u jiných protokolů (TCP, UDP, IGMP atd.)

Řešením je kontrolovat spojování IP fragmentů. Musí platit, že součet polí Fragment Offset a Total Length v IP hlavičce každého fragmentu je menší než 65535 bajtů. Pokud je součet větší, paket je neplatný a IP fragment je zahozen. Tento součet poskytují například některé firewally. Je tu i možnost použít ke spojení IP fragmentů větší paměťový prostor např. 32bitový (dochází k porušení specifikací pro daný protokol, navíc je zde možná podpora paketů o velikosti skoro 1 MB).