ICMP

Protokół warstwy sieciowej, który przenosi komunikaty o błędach i informacje kontrolne o pakietach IP; stoi za narzędziami ping i traceroute.

ICMP (Internet Control Message Protocol) to protokół warstwy sieciowej, który przenosi komunikaty o błędach i informacje kontrolne dotyczące pakietów IP. Inaczej niż TCP i UDP nie przesyła danych aplikacji ani nie nawiązuje połączeń. Jest kanałem sygnalizacyjnym: dzięki niemu routery i komputery informują nadawcę, że pakiet nie dotarł, trasa się zmieniła, upłynął czas życia pakietu (TTL, Time To Live) albo host jest nieosiągalny. ICMP dla IPv4 opisuje dokument RFC 792, a jego komunikaty są pakowane w pakiety IP z numerem protokołu 1.

Jak działa ICMP?

ICMP nie utrzymuje połączeń. Gdy urządzenie sieciowe — router, zapora czy host docelowy — napotka problem z obsługą pakietu IP, tworzy komunikat ICMP i odsyła go do nadawcy. Tak dzieje się na przykład wtedy, gdy router nie zna trasy do sieci docelowej albo gdy pakiet trzeba podzielić na mniejsze, ale jest to zabronione.

Taki komunikat zawiera nagłówek oraz kawałek pakietu, który wywołał błąd (zwykle nagłówek IP i kilka pierwszych bajtów danych). Dzięki temu nadawca wie, której konkretnie wysyłki dotyczy błąd.

Każdy komunikat ICMP zaczyna się od trzech pól nagłówka:

  • Type (8 bitów) — ogólny rodzaj komunikatu, np. Echo Request albo Destination Unreachable.
  • Code (8 bitów) — uściśla typ, np. podaje, dlaczego host jest nieosiągalny.
  • Checksum (16 bitów) — suma kontrolna całego komunikatu.

Dalej znajdują się pola zależne od typu (np. identyfikator i numer kolejny w komunikatach echo) oraz dane.

Jakie są typy i kody ICMP?

Para Type i Code jednoznacznie określa, co dany komunikat oznacza. Najważniejsze typy w IPv4 to:

  • Type 0 — Echo Reply i Type 8 — Echo Request: para używana przez polecenie ping do sprawdzania, czy host odpowiada.
  • Type 3 — Destination Unreachable: pakietu nie udało się dostarczyć. Kody podają powód, m.in. Code 0 (sieć nieosiągalna), Code 1 (host nieosiągalny), Code 2 (protokół nieosiągalny), Code 3 (port nieosiągalny) oraz Code 4 (pakiet trzeba podzielić, ale ustawiono bit DF, zakazujący dzielenia). Ten ostatni jest kluczowy dla mechanizmu Path MTU Discovery, który wykrywa największy dopuszczalny rozmiar pakietu na trasie.
  • Type 5 — Redirect: router podpowiada hostowi lepszą trasę do celu.
  • Type 11 — Time Exceeded: czas życia pakietu (TTL) spadł do zera (Code 0) albo upłynął czas składania fragmentów (Code 1). Na tym komunikacie opiera się działanie traceroute.
  • Type 12 — Parameter Problem: błąd w nagłówku pakietu IP.

Historyczny Type 4 — Source Quench (prośba o zwolnienie tempa nadawania) został wycofany. Pełny rejestr typów i kodów prowadzi organizacja IANA.

Do czego służy ICMP w praktyce?

ICMP stoi za dwoma podstawowymi narzędziami diagnostycznymi:

  • ping — wysyła Echo Request (Type 8) i czeka na Echo Reply (Type 0). Sprawdza, czy host odpowiada, mierzy czas odpowiedzi (RTT, Round-Trip Time) i wykrywa zgubione pakiety.
  • traceroute / tracert — wysyła pakiety ze stopniowo rosnącym TTL i odczytuje komunikaty Time Exceeded (Type 11) zwracane przez kolejne routery. W ten sposób odtwarza trasę pakietu do celu. W systemach uniksowych traceroute domyślnie wysyła sondy UDP, w Windows (tracert) — pakiety ICMP Echo, ale w obu odpowiedzi pośrednich routerów opierają się na ICMP.

Poza diagnostyką ICMP obsługuje Path MTU Discovery (wykrywanie największego rozmiaru pakietu na trasie) oraz przekazuje routerom i hostom informacje o błędach trasowania.

Czym różni się ICMPv6 od ICMP dla IPv4?

W sieciach IPv6 odpowiednikiem jest ICMPv6, opisany w RFC 4443 i przenoszony jako protokół o numerze 58. Pełni te same zadania sygnalizacji błędów, ale dla samego IPv6 jest dużo ważniejszy — przejmuje funkcje, które w IPv4 obsługiwały osobne protokoły:

  • Neighbor Discovery (ND) — zastępuje protokół ARP; odwzorowuje adresy IPv6 na adresy warstwy łącza (Neighbor Solicitation / Advertisement).
  • Router Discovery — komunikaty Router Solicitation / Advertisement pozwalają na automatyczne ustawienie adresów (SLAAC).
  • Multicast Listener Discovery (MLD) — zarządzanie grupami multicast.

Dlatego zbyt agresywne blokowanie całego ICMPv6 na zaporach może popsuć podstawowe funkcje sieci IPv6. W IPv4 można filtrować ICMP ostrzej, bo pełni tam mniej krytycznych zadań.

Dlaczego ICMP jest istotny dla bezpieczeństwa?

ICMP to protokół pomocniczy, ale jego prostota i obecność niemal w każdej sieci czynią go atrakcyjnym celem nadużyć. Dla obrońcy bywa jednocześnie narzędziem rozpoznania w rękach atakującego, kanałem ataku i cennym źródłem danych do monitoringu.

Rozpoznanie (reconnaissance)

Atakujący używają Echo Request, żeby wykryć aktywne hosty (tzw. ping sweep). Z komunikatów Destination Unreachable i Time Exceeded wnioskują o budowie sieci, regułach zapory i obecności filtrów. To, co odpowie (albo czego brakuje), pokazuje, które adresy i porty są dostępne.

Ataki wolumetryczne (DoS/DDoS)

  • ICMP flood (ping flood) — zalewanie celu pakietami Echo Request szybciej, niż jest on w stanie odpowiadać, co wysyca pasmo i obciąża procesor.
  • Smurf attack — wysyłanie Echo Request na adres rozgłoszeniowy sieci z podszytym (spoofed) adresem ofiary. Wszystkie hosty odpowiadają ofierze, co wielokrotnie zwiększa ruch (amplifikacja).
  • Ping of Death — wysyłanie zniekształconych lub nadmiernie podzielonych pakietów ICMP, które po złożeniu przekraczają dopuszczalny rozmiar i wieszają podatny stos sieciowy. Dziś zagrożenie głównie historyczne.

Tunelowanie i wykradanie danych

ICMP tunneling polega na ukrywaniu dowolnych danych w polu danych pakietów Echo Request/Reply. Ponieważ ICMP bywa przepuszczany przez zapory na potrzeby diagnostyki, taki kanał służy do ukrytego sterowania zainfekowanymi maszynami (command and control) oraz do wykradania danych w sposób trudny do zauważenia bez zaglądania w zawartość pakietów. Typowe sygnały ostrzegawcze to nietypowo duże pakiety ICMP, wysoki i stały ruch echo do jednego zewnętrznego hosta oraz ICMP kierowany tam, gdzie zwykle nikt nie wysyła ping.

Znaczenie dla monitoringu i SOC

Dla zespołów SOC oraz systemów NDR ICMP jest zarazem ruchem do filtrowania i źródłem wartościowych danych. Typowe praktyki obronne to:

  • ograniczanie tempa (rate limiting) komunikatów ICMP zamiast ich pełnego blokowania — całkowita blokada psuje Path MTU Discovery i diagnostykę;
  • filtrowanie ICMP na brzegu sieci według typów (np. wybiórcze dopuszczanie Time Exceeded i Fragmentation Needed);
  • analiza rozmiaru i częstotliwości danych ICMP pod kątem tunelowania;
  • łączenie nietypowych zdarzeń ICMP (nagłe ping sweepy, skoki liczby Destination Unreachable) z innymi sygnałami w sieci.

Dowiedz się więcej