« poprzedni punkt  następny punkt »


2. Wykorzystanie fragmentacji pakietów

Fragmentacja to proces dzielenia pakietu na mniejsze części celem transmisji przez różnego rodzaju sieci. Proces ten opisany jest szczegółowo w RFC 791. Jedną z wielkości charakteryzujących każdą sieć komputerową jest MTU (Maximum Transmission Unit). Określa ona maksymalną wielkość pakietu, który może przez daną sieć zostać przesłany. Dla sieci Ethernet MTU wynosi 1500 bajtów, dla połączeń PPP zwykle 296 bajtów. Pakiet przemierzający Internet przechodzi przez wiele sieci o różnych wielkościach MTU. Urządzenia łączące te sieci (najczęściej routery) odpowiadają za fragmentację pakietów gdy jest ona potrzebna. Każdy fragment niesie w sobie następujące informacje:

Przykład fragmentacji przedstawiono na rys. 1.

Większa liczba pakietów oznacza, że istnieje większa szansa na ich zagubienie i konieczność retransmisji. Dlatego większość systemów operacyjnych (między innymi.: Linux) stara się uniknąć fragmentacji kiedy tylko jest to możliwe. Służą do tego flagi w nagłówku IP - Nie Fragmentuj (Don't Fragment - DF). Urządzenie sieciowe, które stwierdzi potrzebę podzielenia pakietu z zapaloną flagą DF na mniejsze części, odrzuci pakiet generując komunikat ICMP Destination Unreachable z wyszczególnionym powodem: potrzebna fragmentacja a flaga DF jest ustawiona (fragmentation needed and DF set) . Podana zostanie również wartość MTU jaka wymagana jest na łączu wymuszającym fragmentację. Kiedy źródło odbierze komunikat ICMP retransmitowany zostanie pakiet o mniejszej długości spełniający warunek MTU. Proces ten nazywa się odkrywaniem ścieżki MTU (Path MTU discovery). Implementacja fragmentacji pakietów w stosie protokołów TCP/IP zawierała i zawiera wiele luk i niedociągnięć, które po ich odkryciu są wykorzystywane do przeprowadzania ataków. Powstało wiele wariantów takich ataków.

Rys. 1. Przykład fragmentacji

Ping of Death

Atak ten polega na wysłaniu do zdalnej maszyny fragmentów datagramu ICMP Echo request o łącznym rozmiarze przekraczającym 65535 bajtów. Jest to maksymalna wielość jaką może przyjąć pole długość pakietu w nagłówku IP. Niektóre systemy operacyjne nie są w stanie poprawnie przetworzyć takiego pakietu co powoduje zwykle zawieszenie lub restart maszyny. Atak ten do przeprowadzenia nie wymaga specjalnych narzędzi. Wystarczy standardowe polecenie ping. Datagram wysyłany jest w częściach, które złożone razem są większe niż 65535 bajtów. Niektóre maszyny podejmą próbę odtworzenia takiego datagramu i ulegną atakowi. W tej chwili jest to atak raczej nieskuteczny.

Teardrop

Teardrop atakuje zdalny system poprzez ustawianie nakładających się znaczników przesunięcia w nagłówkach IP. Pakiet o długości 4000 bajtów prawidłowo pofragmentowany na trzy części zawierałby przykładowe następujące wartości znacznika przesunięcia:

Teardrop ustawia wskaźnik przesunięcia tak, że kolejne kawałki pofragmentowanego pakietu zachodzą na siebie. Przykładowo dla 4000 bajtowego pakietu w trzech częściach wskaźniki mogłyby posiadać wartości:

Innym wariant tego ataku przedstawiony jest na rys. 2. W przykładzie na rys. 2 pakiety zachodzą na siebie zakresami. Co więcej - cały pakiet nie zostanie odebrany bowiem ostatni kawałek pokazuje na wartość 3200, czyli nie pełną długość pierwotnego pakietu. Host po odebraniu takich pakietów nie jest w stanie ich poprawnie złożyć, co może prowadzić do większej zajętości procesora z powodu obsługi wielu błędów rekonstrukcji lub nawet restartu maszyny czy jej zawieszenia. Kolejne wersje ataku Teardrop znane były pod nazwami; Bonk, Boink oraz Newtear.

Rys. 2. Wariant ataku Teardrop

Nakładanie fragmentów (Fragment Overlapping)

Atak ten posiada schemat podobny do Teardrop, ale jego działanie jest inne. Fragmentacja IP jest tutaj wykorzystywana w celu obejścia reguł filtrowania i przejścia przez zaporę ogniową lub inne urządzenie filtrujące. Atak ten próbuje nadpisać część nagłówka TCP z pierwszego fragmentu. Nagłówek ten oryginalnie zawiera dane, które są zgodne z polityką bezpieczeństwa zaimplementowaną na zaporze przez co nie jest przez nią odrzucany. Drugi fragment poprzez wykorzystanie wskaźnika przesunięcia fragmentacji stara się nadpisać część nagłówka z pierwszego datagramu zmieniając profil całego połączenia. Można w ten sposób uzyskać poprzez zaporę połączenie np. z portem 23 (telnet) wysyłając pierwszy pakiet na port 80 (HTTP), a następnie nadpisując tą wartość w drugim datagramie. Sztuczka ta nie uda się z zaporami ogniowymi dokonującymi łączenia pakietów. Inną metodą jest ustalenie minimalnej dopuszczalnej wartości wskaźnika przesunięcia na routerze.


« poprzedni punkt  następny punkt »