Podstawy protokołu ICMP

Protokół ICMP (Internet Control Message Protocol) jest protokołem warstwy sieci, wykorzystywanym do diagnostyki połączeń sieciowych dlatego przede wszystkim jest używany przez urządzenia sieciowe (routery). Głównym zadaniem protokołu ICMP jest zgłaszanie błędów w transmisji. Jeśli w trakcie komunikacji pomiędzy hostami występuje jakiś problem, urządzenie sieciowe, na którym błąd wystąpił, generuje odpowiedni komunikat ICMP i wysyła go do nadawcy, żeby poinformować go o problemie. Na przykład, jeśli przesyłany pakiet jest za duży i router nie może go przesłać dalej, wygeneruje on odpowiedni komunikat ICMP i wyśle go do nadawcy pakietu.

Ponadto ICMP może być używany do diagnostyki. Aplikacje takie jak PING i traceroute bazując na pakietach Echo-request i Echo-replay oraz ewentualnych błędach zgłaszanych poprzez protokół ICMP pozwalają na zbadanie aktualnych ścieżek routingu, opóźnień w sieci oraz dostępności hostów w sieci.

Jak działa ICMP?

W przeciwieństwie do protokołu IP ICMP nie jest powiązany z żadnym z protokołów warstwy transportowej takim jak TCP albo UDP. Oznacza to, że ICMP jest protokołem bezpołączeniowym. Protokół TCP przed wysłaniem danych ustanawia połączenie za pomocą TCP handshake, żeby upewnić się, że oba urządzenia są gotowe do wymiany danych. Protokół ICMP nie otwiera połączenia w ten sposób. Jego działanie jest bardziej zbliżone do protokołu UDP, a więc komunikaty i dane wysyłane są już w pierwszym pakiecie transmisji, a my musimy założyć, że dotrą do adresata.

Inną ważną cechą ICMP jest to, że do wysyłania danych nie są używane porty źródłowe ani docelowe. Warto o tym pamiętać, bo wielokrotnie od osób konfigurujących na firewallu reguły dla ICMP słyszałem pytania, jakie porty powinni wybrać? W przypadku reguł firewall nie wskazujemy wtedy portów a co najwyżej typy komunikatów, o których napiszę w dalszej części.

Budowa pakietu ICMP

Budowa nagłówka ICMP

Budowa pakietu ICMP jest bardzo prosta. Składa się on z typu i kodu komunikatu ICMP oraz sumy kontrolnej. Pole danych jest opcjonalne i pakiet może nie zawierać żadnych danych, ale może też zawierać bardzo dużo danych jak np. przy ataku Ping of death.

Przykłady komunikatów ICMP

W ramach ICMP możemy rozróżnić dwa typy komunikatów, te do raportowania o błędach i komunikaty diagnostyczne. Wśród komunikatów raportujących o błędach najczęściej spotykane to:

  • Destination unreachable (Type 3) – Taki komunikat jest wysyłany, kiedy pakiet nie może trafić do miejsca przeznaczenia. Jeśli nieosiągalny jest host docelowy, taką informację wyśle router z sieci docelowej. Jeśli natomiast nieosiągalny jest port docelowy, czyli usługa, z którą próbujemy się połączyć, nie jest uruchomiona, to taki komunikat wyśle host docelowy. Informacja o tym, który z wielu wariantów komunikatu Destination unreacheble wystąpił, przekazywana jest w polu Code i może mieć następujące wartości:
0Destination network unreachable 
1Destination host unreachable 
2Destination protocol unreachable 
3Destination port unreachable 
4Fragmentation required, and DF flag set 
5Source route failed 
6Destination network unknown 
7Destination host unknown 
8Source host isolated 
9Network administratively prohibited 
10Host administratively prohibited 
11Network unreachable for ToS 
12Host unreachable for ToS 
13Communication administratively prohibited 
14Host Precedence Violation 
15Precedence cutoff in effect 
  • Time exceeded (Type 11) – Komunikat o przekroczeniu czasu może zostać wygenerowany w dwóch przypadkach. Jednym z nich jest sytuacja, w której wartość pola TTL (Time To Live) w nagłówku IP spadła do zera i pakiet musiał zostać odrzucony. Drugim jest przypadek, w którym urządzenie nie mogło ponownie złożyć pofragmentowanego pakietu w wyznaczonym czasie i pakiet został odrzucony. Informacja o tym, jaki był powód odrzucenia, znajduje się oczywiście w polu Code:
0Time to live exceeded in transit
1Fragment reassembly time exceeded
  • Parameter problem (Type 12) – To ogólny komunikat, który jest używany, jeśli nie ma zastosowania żaden bardziej szczegółowy błąd. Wtedy w polu danych będzie znajdował się wskaźnik lokalizujący problem w oryginalnym pakiecie. Ten komunikat będzie również używany w przypadku uszkodzenia lub brakujących danych w nagłówku IP. Jednak w takim przypadku nie będzie wskaźnika problemu. W końcu trudno wskazać dane, których nie ma 😊
0Pointer indicates the error
1Missing a required option
2Bad length
  • Redirect (Type 5) – Komunikat przekierowania ICMP pomaga w zwiększeniu wydajności routingu. W przypadku, gdy host routuje pakiety przez bramę domyślną, ale brama domyślna wie, że inny router w sieci lokalnej jest lepszy dla sieci docelowej komunikacji, wówczas brama główna wyśle przekierowanie do hosta źródłowego, informując o użyciu innego router. Takie przekierowanie może dotyczyć całego ruchu do określonej sieci docelowej lub tylko ruchu do określonego hosta. Ważne, żeby pamiętać, że ICMP Redirect pomaga zwiększyć wydajność routingu, ale nie jest używane do tworzenia i modyfikowania tabel routingu.
0Redirect datagram for the network (or subnet)
1Redirect datagram for the host

Do komunikatów diagnostycznych zaliczamy dwa powiązane ze sobą Echo-request (Type 8) oraz Echo-replay (Type 0).

Echo-request to żądanie echa, na które powinna zastać odesłana odpowiedź Echo-replay. Najczęściej używaną aplikacją do generowania Echo-request jest ping dostępny chyba w każdym systemie operacyjnym.

Polecenie Ping

Komputer, który otrzyma żądanie echa, powinien na nie odpowiedzieć, wysyłając w treści takie same dane, jakie odebrał w żądaniu. W przypadku systemów Windows w treści żądania przesyłany jest alfabet, natomiast systemy Linux wysyłają najczęściej puste dane. Otrzymanie odpowiedzi oznacza, że host docelowy działa i pomiędzy hostami routowane są pakiety. Dodatkowo na podstawie czasu odpowiedzi można szacować obciążenie sieci a na podstawie utraconych pakietów poziom jej niezawodności.

Zawartość ICMP Echo-request

Ataki sieciowe wykorzystujące Internet Control Message Protocol

  • ICMP flood attack

To atak polegający na zalaniu ofiary olbrzymią ilością pakietów ICMP. Chodzi o to, żeby ilość pakietów lub danych była większa niż przepustowość łącza ofiary. Zazwyczaj wykorzystywany jest komunikat echo-request, na który ofiara ataku powinna odpowiedzieć komunikatem echo-replay zawierającym ten sam payload. Do skutecznego ataku ICMP flood wystarczy dysponować łączami o większej przepustowości niż ofiara ataku.

  • Ping of death

Atak Ping of death ma miejsce, kiedy atakujący wysyła pakiet ping większy niż maksymalny dopuszczalny rozmiar pakietu urządzenia docelowego. W wyniku otrzymania takiego pakietu dochodzi do zawierzenia lub restartu systemu docelowego i działających na nim serwisów. Na szczęście ten atak działa tylko na bardzo stare systemy takie jak Windows 95 i NT, a współczesne systemy są na niego odporne.

  • Smurf attack

Smurf attack jest atakiem typy DDoS (Distributed Denial-of-Service) i polega na wysyłaniu pakietów ze sfałszowanym adresem źródłowym. Atakujący podszywa się pod adres serwera, który jest celem ataku i wysyła pakiet ICMP na adres broadcastowy sieci. W efekcie tego serwer będący celem ataku otrzyma duże ilości danych i pakietów co może doprowadzić do wysycenia jego łącza. Tak jak w przypadku ataku Ping of death, tak i przy Smyrf attack obecne systemy są na niego odporne i nie powinny zalać ofiary ataku odpowiedziami ICMP.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.