Zapewne słyszałeś o ICMP i jeśli jesteś tylko niewielkim znawcą technologii, prawdopodobnie wiesz (przynajmniej), że ma to coś wspólnego z Internetem.
ICMP jest w rzeczywistości protokołem, podobnie jak IP, TCP i UDP (o którym wcześniej dyskutowaliśmy i wyjaśnialiśmy), więc odgrywa dość ważną rolę w dobrym funkcjonowaniu naszych połączeń internetowych.
ICMP ma więcej wspólnego ze sposobem wykrywania i obsługi problemów z łącznością, ale nie psujmy zbytnio naszego wykładu. Czytaj dalej, jeśli chcesz wiedzieć, co to jest ICMP i jak pomaga nam utrzymać nasze połączenia działające na optymalnym poziomie.
Co to jest ICMP?
Internet Control Message Protocol, który większość ludzi zna pod bardziej przyjaznym akronimem ICMP, jest protokołem, który ma fundamentalne znaczenie w rozwiązywaniu różnych problemów związanych z łącznością.
Protokół ten jest używany przez wiele różnych urządzeń sieciowych, w tym między innymi routery, modemy i serwery, aby informować innych uczestników sieci o potencjalnych problemach z łącznością.
Wspomnieliśmy powyżej, że ICMP jest protokołem podobnym do TCP i UDP, ale w przeciwieństwie do tych dwóch, ICMP nie jest ogólnie używany do ułatwiania wymiany danych między systemami. Co więcej, nie jest często używany w aplikacjach sieciowych użytkownika końcowego, chyba że są to narzędzia diagnostyczne.
Oryginalna definicja ICMP została naszkicowana przez Jona Postela , który wniósł ogromny wkład w rozwój Internetu, a pierwszy standard ICMP został opublikowany w kwietniu 1981 roku w RFC 777 .
Oczywiście początkowa definicja przeszła wiele zmian, aby osiągnąć formę, którą znamy dzisiaj. Stabilna forma tego protokołu została opublikowana 5 miesięcy później niż jego początkowa definicja, we wrześniu 1981 r. w RFC 792 i została również napisana przez Postela.
Jak działa ICMP?
Krótko mówiąc, ICMP służy do raportowania błędów, określając, czy dane stosunkowo szybko docierają do zamierzonego miejsca docelowego.
W podstawowym scenariuszu dwa urządzenia są połączone przez Internet i wymieniają informacje za pomocą tak zwanych pakietów danych lub datagramów. To, co robi ICMP, to generowanie błędów i udostępnianie ich urządzeniu, które wysłało oryginalne dane, na wypadek gdyby pakiety nigdy nie dotarły do miejsca docelowego.
Na przykład, jeśli wyślesz pakiet danych, który jest po prostu zbyt duży, aby router mógł go obsłużyć, router najpierw odrzuci pakiet, a następnie wygeneruje komunikat o błędzie, informujący urządzenie nadawcy, że jego pakiet nigdy nie dotarł do miejsca docelowego, do którego zmierzał.
Jednak to właśnie nazwalibyśmy umiejętnością pasywną, ponieważ nie musisz nic robić, aby otrzymywać te komunikaty o błędach (jeśli zajdzie taka potrzeba). Jak wkrótce się przekonasz, ICMP ma również bardziej aktywne narzędzie, na którym możesz polegać przy wykonywaniu różnych operacji rozwiązywania problemów z siecią.
W przeciwieństwie do TCP i UDP, ICMP nie wymaga podłączenia urządzenia w celu wysłania wiadomości. Na przykład w połączeniu TCP podłączone urządzenia muszą wykonać wieloetapowe uzgadnianie, po którym dane mogą zostać przesłane.
Dzięki ICMP nie ma potrzeby nawiązywania połączenia; wiadomość może być po prostu wysłana zamiast połączenia. Co więcej, wiadomość ICMP nie wymaga portu, do którego ma skierować wiadomość, w porównaniu z protokołami TCP i UDP, które wykorzystują określone porty do przesyłania informacji. ICMP nie tylko nie wymaga portu, ale w rzeczywistości nie pozwala na kierowanie na określone porty.
Komunikaty ICMP są przenoszone przez pakiety IP, ale nie są przez nie zawarte. Zamiast tego wykorzystują te pakiety, ponieważ są generowane tylko wtedy, gdy ich nośnik (tj. pakiety IP) nigdy nie dotrą do miejsca przeznaczenia. Najczęściej okoliczności, które pozwoliły na pojawienie się pakietu ICMP, wynikają z danych dostępnych w nagłówku IP nieudanego pakietu.
Ponieważ protokół ICMP zawiera dane z nagłówka IP uszkodzonego pakietu, narzędzia analizy sieci mogą być użyte do dokładnego określenia, które pakiety IP nie zostały dostarczone. Jednak nagłówek IP nie jest jedynym rodzajem informacji przenoszonych przez pakiet ICMP.
Pakiet ICMP zawiera nagłówek IP, po którym następuje nagłówek ICMP i pierwsze osiem bajtów ładunku.
- Nagłówek IP – zawiera szczegółowe informacje o wersji IP, źródłowym i docelowym adresie IP, liczbie wysłanych pakietów, użytym protokole, długości pakietu, czasie życia (TTL), danych synchronizacji, a także numerach ID dla poszczególnych pakietów danych
- Nagłówek ICMP – zawiera kod, który pomaga kategoryzować błąd, podkod ułatwiający identyfikację błędu, oferując opis i sumę kontrolną
- Nagłówek warstwy transportowej – pierwsze osiem bajtów ładunku (przesyłane przez TCP lub UDP)
Komunikaty kontrolne ICMP
Jak wspomnieliśmy powyżej, gdy wystąpi błąd, do jego identyfikacji można użyć wartości z pierwszego pola nagłówka ICMP. Te typy błędów wraz z ich identyfikatorami są następujące:
- 0 – Echo Reply – używane do celów ping
- 3 – Cel nieosiągalny
- 5 – Redirect Message – służy do wskazania wyboru innej trasy
- 8 – Echo Request – używane do celów ping
- 9 – Reklama routera – używana przez routery do ogłaszania, że ich adresy IP są dostępne do routingu
- 10 – Router Solicitation – wykrywanie routera, żądanie lub wybór
- 11 – Przekroczono czas – wygasł czas TTL lub przekroczono czas ponownego montażu
- 12 – Problem z parametrem: Zły nagłówek IP – zła długość, brak wymaganej opcji lub błąd wskazywany przez wskaźnik
- 13 – Znacznik czasu
- 14 – Odpowiedź ze znacznikiem czasu
- 41 – używany do eksperymentalnych protokołów mobilności
- 42 – Extended Echo Request – prosi o rozszerzone Echo
- 43 – Extended Echo Reply – odpowiedzi na 42 żądanie rozszerzonego echa
- 253 i 254 – eksperymentalne
Pole TTL (czas życia)
Pole TTL jest jednym z pól nagłówka IP, które może (i często generuje) generować błąd ICMP. Zawiera wartość, która jest maksymalną liczbą routerów, przez które może przejść wysłany pakiet, zanim dotrze do miejsca docelowego.
Po przetworzeniu pakietu przez router wartość ta zmniejsza się o jeden, a proces trwa, dopóki nie wydarzy się jedna z dwóch rzeczy: pakiet dotrze do miejsca docelowego lub wartość osiągnie zero, po czym router zwykle odrzuca pakiet i wysłanie wiadomości ICMP do pierwotnego nadawcy.
Jest więc rzeczą oczywistą, że jeśli pakiet zostanie odrzucony, ponieważ jego TTL osiągnął zero, nie jest to spowodowane uszkodzeniem danych w nagłówku lub problemami specyficznymi dla routera. TTL został zaprojektowany w celu blokowania nieuczciwych pakietów przed blokowaniem połączeń i zaowocował stworzeniem narzędzia, które ma kluczowe znaczenie w rozwiązywaniu problemów z siecią: Traceroute.
Wykorzystanie ICMP w diagnostyce sieci
Jak wspomniano powyżej, ICMP może być używany z narzędziami diagnostycznymi w celu określenia prawidłowego funkcjonowania połączenia sieciowego. Być może nie wiedziałeś, czym jest ICMP, zanim przeczytałeś nasz przewodnik, ale jesteśmy pewni, że przynajmniej słyszałeś o ping, słynnym narzędziu sieciowym, które informuje Cię, czy host jest osiągalny, czy nie.
Cóż, ping jest w rzeczywistości jednym z ważnych narzędzi, które wykorzystuje ICMP jako swój szkielet. Traceroute to kolejny dobry przykład narzędzi, które pomagają nam diagnozować i rozwiązywać problemy z łącznością w naszych sieciach. Pathping, który jest kombinacją ping i traceroute, to kolejne świetne narzędzie oparte na ICMP.
Świst
Ping to wbudowane narzędzie systemu Windows, do którego można uzyskać dostęp za pośrednictwem CMD i jest jednym z najważniejszych narzędzi wykorzystujących protokół ICMP do rozwiązywania potencjalnych błędów sieciowych. Ping używa dwóch kodów z powyższej listy, 8 (żądanie echa) i 0 (odpowiedź echa), aby być bardziej szczegółowym.
Oto jak wyglądają dwa przykłady poleceń ping :
ping 168.10.26.7
ping TipsWebTech360.com
Po uruchomieniu ping wyśle pakiet ICMP z kodem 8 w polu typu i będzie cierpliwie czekał na odpowiedź typu 0. Po nadejściu odpowiedzi ping określi czas między żądaniem (8) a odpowiedzią (0) i zwróci wartość podróży w obie strony wyrażoną w milisekundach.
Ustaliliśmy już, że pakiety ICMP są zwykle generowane i wysyłane w wyniku błędu. Jednak pakiet żądania (typ 8) nie wymaga błędu, aby zostać wysłany, dlatego ping może również odebrać odpowiedź (0) bez wywoływania błędu.
Jak prawdopodobnie zorientowałeś się z naszych przykładów powyżej, możesz pingować adres IP lub hosta. Co więcej, ping ma mnóstwo dodatkowych opcji, których można użyć do bardziej zaawansowanego rozwiązywania problemów, po prostu dołączając opcję do polecenia.
Na przykład użycie opcji -4 zmusi ping do używania wyłącznie IPv4 , podczas gdy -6 będzie używać tylko adresów IPv6 . Sprawdź poniższy zrzut ekranu, aby zobaczyć pełną listę opcji, które możesz dołączyć do polecenia ping .
Powszechnym błędnym przekonaniem na temat ping jest to, że można go używać do testowania dostępności niektórych portów w docelowych systemach. Krótko mówiąc, nie możesz tego zrobić, ponieważ ICMP nie wykonuje żadnej prawdziwej wymiany komunikatów między hostami, w przeciwieństwie do TCP lub UDP, i nie wymaga użycia portu.
Aplikacje do skanowania portów wykorzystują pakiety TCP lub UDP w celu określenia, czy określone porty są otwarte i dostępne. Narzędzia wysyłają pakiety TCP lub UDP do określonego portu i generują komunikat ICMP typu 3 (host nieosiągalny) podtypu 3 (port docelowy nieosiągalny), jeśli ten port nie jest aktywny.
Traceroute
Podobnie jak ping, traceroute jest kolejnym narzędziem do rozwiązywania problemów z siecią, które każdy administrator sieci powinien mieć nie tylko w swoim pasku narzędzi, ale także opanować. To, co robi traceroute , to pomoc w mapowaniu trasy wszystkich urządzeń, przez które wpada twoje połączenie, aż dotrze do określonego miejsca docelowego.
Jeśli więc interesuje Cię znalezienie całej trasy między Tobą a inną maszyną, traceroute może podać dokładnie te informacje. To narzędzie może być również użyte do określenia, czy coś jest nie tak na trasie, którą podąża Twoje połączenie.
Jeśli na przykład na ścieżce połączenia znajduje się urządzenie, które ma trudności z przekazywaniem pakietów do zamierzonego miejsca docelowego, traceroute poinformuje Cię, który router daje opóźnioną odpowiedź (lub wcale).
Sposób działania traceroute polega na wysłaniu pakietu z wartością TTL ( Time To Live ) równą 0, która zostanie automatycznie odrzucona przez pierwszy napotkany router, jak wyjaśniliśmy powyżej w sekcji TTL. Po odrzuceniu pakietu router generuje pakiet ICMP i odsyła go z powrotem do traceroute.
Program wyodrębnia adres źródłowy pakietu, a także czas potrzebny na powrót pakietu, a następnie wysyła kolejny pakiet z wartością TTL 1 . Po przejściu drugiego pakietu przez bramę jego TTL zmniejsza się o 1 (staje się 0 ) i kieruje do drugiego routera, który po wykryciu zerowej wartości TTL odrzuca pakiet i wysyła pakiet ICMP z powrotem do traceroute.
Za każdym razem, gdy traceroute odbiera pakiet ICMP, zwiększa TTL o jeden i wysyła go z powrotem na swoją ścieżkę, a ta operacja trwa i trwa, aż do osiągnięcia określonego miejsca docelowego lub zabraknie przeskoków w traceroute. Domyślnie system Windows przydziela maksymalną liczbę 30 przeskoków, ale można ją zwiększyć, określając ją w składni polecenia.
Oto przykład, jak uruchomić traceroute w CMD:
tracert TipsWebTech360.com
Podobnie jak ping, traceroute ma szereg opcji, które możesz dodać do składni, jeśli chcesz być bardziej szczegółowy. Możesz wymusić IPv4 lub IPv6, ale możesz także pominąć rozwiązywanie adresów na nazwy hostów i zwiększyć maksymalną liczbę przeskoków do wyszukiwania celu. Sprawdź nasz zrzut ekranu poniżej, aby zobaczyć przykład użycia traceroute i listę wszystkich opcji, z których możesz skorzystać.
Warto jednak wspomnieć, że traceroute może dostarczać tylko informacje w czasie rzeczywistym. Dlatego jeśli napotkasz spowolnienie połączenia i chcesz to sprawdzić za pomocą tego narzędzia, możesz otrzymać mylące wyniki, ponieważ w międzyczasie trasa mogła się zmienić.
Chociaż możliwe jest zmuszenie traceroute do podążania określoną ścieżką za pomocą opcji -j i ręczne dodanie adresów routerów, oznacza to, że już wiesz o błędnej ścieżce. Jest to trochę paradoksalne, ponieważ odkrycie ścieżki w pierwszej kolejności wymaga użycia traceroute bez opcji -j .
Jeśli nie jesteś fanem używania narzędzi CLI ( interfejs wiersza poleceń) i wolisz podejście GUI (graficzny interfejs użytkownika), istnieje wiele rozwiązań programowych innych firm do traceroute. Traceroute NG firmy SolarWinds jest jednym z najlepszych przykładów, jakie moglibyśmy sobie wyobrazić. Czy wspominaliśmy, że jest całkowicie darmowy ?
Ścieżka
Jak pokrótce wspomnieliśmy powyżej, pathping uzupełnia trifectę niezbędnych narzędzi do rozwiązywania problemów z siecią. Z punktu widzenia funkcjonalności patphing jest kombinacją ping i traceroute, ponieważ wykorzystuje wszystkie trzy typy wiadomości, które wykorzystuje wspomniany duet: żądanie echa (8), odpowiedź echa (0), a także przekroczony czas (11).
Najczęściej ścieżka jest używana do identyfikowania węzłów połączeń, na które mają wpływ duże opóźnienia i utrata pakietów. Oczywiście, możesz użyć traceroute, a następnie ping, aby uzyskać te szczegóły, ale posiadanie funkcjonalności obu narzędzi w jednym poleceniu jest znacznie wygodniejsze dla administratorów sieci.
Jedną z wad używania ścieżki jest to, że zakończenie zapytania może zająć trochę czasu (25 sekund na przeskok, aby uzyskać statystyki pingów). Pathping pokaże Ci zarówno trasę do określonego miejsca docelowego, jak i czasy podróży w obie strony do niego.
W przeciwieństwie do poleceń ping i traceroute, pathping będzie wielokrotnie pingował każdy router na swojej ścieżce, co zwiększa jego ogólną efektywność. Jeśli jednak napotka router, który wyłączył jego funkcje ICMP, funkcja pathping zatrzyma żądanie informacji, podczas gdy ping może nadal dotrzeć do routera bez funkcji ICMP, a traceroute przeskoczy do następnego routera na swojej ścieżce i wyświetli ciąg gwiazdek dla wszystkich routerów innych niż ICMP.
Pathping jest narzędziem wbudowanym w Windows i działa w ten sposób od Windows NT, więc można go używać tak, jak ping lub tracert: za pomocą wiersza poleceń.
Oto przykład wykorzystania ścieżki:
pathping TipsWebTech360.com -h 40 -w 2 -4
Powyższe polecenie pokaże Ci trasę do naszej witryny, a także czasy podróży w obie strony do każdego routera na ścieżce połączenia. Dodatkowo opcje, których użyliśmy w naszym przykładzie, zwiększą domyślną maksymalną wartość przeskoków z 30 do 40, dodają wartość limitu czasu wynoszącą 2 milisekundy dla każdej odpowiedzi i wymuszą IPv4.
Sprawdź nasz zrzut ekranu poniżej, aby zapoznać się z krótkim przewodnikiem użytkowania ścieżek i listą opcji, które możesz dodać do składni poleceń.
Zastosowanie ICMP w cyberatakach
Chociaż zakres ICMP ułatwia wiele operacji rozwiązywania problemów z łącznością, protokół ten może być również wykorzystywany do przeprowadzania różnych cyberataków. Jeśli jesteś wystarczająco długo w Internecie, prawdopodobnie słyszałeś o ping flooding, DDoS, Ping of Death, Smurf Attacks lub tunelach ICMP.
Podczas gdy niektóre z tych ataków służą obecnie jako PoC (Proof of Concept), inne są nadal wykorzystywane przez złośliwych agentów do uszkadzania systemów obsługujących Internet lub przez ekspertów ds. bezpieczeństwa do testowania luk w zabezpieczeniach.
Zaczniemy od najpopularniejszego, jakim jest ping flood (nawiasem mówiąc, wciąż szeroko stosowany) i wyjaśnimy, w jaki sposób używa ICMP do zła.
Powódź ping
Używanie polecenia ping do wysyłania żądań echa i oczekiwania na odpowiedzi echa wydaje się całkiem nieszkodliwe. Ale co by było, gdyby zamiast czekać na odpowiedź, ping wysłał po prostu ogromną liczbę żądań echa ICMP? W tym klasycznym scenariuszu ataku DoS (Denial of Service) urządzenie docelowe doświadczy poważnych opóźnień, a nawet zerwania połączenia, jeśli atak się powiedzie.
Ten atak jest najskuteczniejszy, jeśli atakujący ma większą przepustowość niż ofiara i jeśli ofiara wysyła odpowiedzi ICMP echo na wiele otrzymanych żądań, zużywając w ten sposób zarówno przychodzące, jak i wychodzące pasmo.
Atakujący może określić opcję „flood” w poleceniu ping, ale ta opcja jest dość rzadka i nie jest osadzona we wbudowanych narzędziach systemów operacyjnych. Na przykład ping systemu Windows nie ma opcji „flood” , ale istnieją narzędzia innych firm, które integrują tę funkcję.
Atak typu ping flood może naprawdę stać się katastrofą, jeśli zmieni się w atak DDoS (Distributed Denial of Service) . Atak DDoS wykorzystuje wiele systemów do wycelowania w jeden, tym samym przytłaczając go pakietami z kilku lokalizacji jednocześnie.
Pewnym sposobem ochrony przed pingami jest wyłączenie funkcji ICMP na routerze. Możesz także zainstalować zaporę sieciową aplikacji internetowej, jeśli chcesz chronić serwer sieciowy przed takimi atakami.
Ping śmierci
Atak ten polega na wysłaniu zniekształconego polecenia ping do komputera docelowego. W przypadku tego typu ataku wysłany pakiet będzie zawierał ilość wypełniacza w ładunku, która jest zbyt duża, aby można ją było przetworzyć za jednym razem.
Jednak przed wysłaniem ten złośliwy ping zostanie podzielony na mniejsze części, ponieważ przesłanie go w jego oryginalnej, złożonej formie byłoby niemożliwe dla procesora protokołu internetowego .
Komputer, który jest celem polecenia Ping of Death, odbierze fragmenty i spróbuje je ponownie złożyć, zanim wyśle złośliwy pakiet do docelowej aplikacji. Oto, gdzie dochodzi do uszkodzenia: jeśli zmontowany pakiet jest dłuższy niż ilość dostępnej pamięci w komputerze docelowym, ponowne złożenie może spowodować przepełnienie bufora , awarię systemu, a nawet może pozwolić na wstrzyknięcie złośliwego kodu do maszyny, której dotyczy problem.
Z drugiej strony Ping of Death nie jest już nowością, ponieważ wiele systemów bezpieczeństwa rozpoznaje go bez problemu i skutecznie blokuje.
Atak smerfów
W przeciwieństwie do poprzednich dwóch typów ataków, atak Smurf nie atakuje urządzenia bezpośrednio, ale wykorzystuje inne urządzenia w tej samej sieci do koordynowania rozproszonego ataku DoS ( DDoS ) na pojedynczą maszynę.
Atakujący potrzebuje adresu IP celu i adresu rozgłoszeniowego IP sieci docelowej. Atakujący dodaje adres IP ofiary do pakietów ICMP (podrabia go), a następnie rozgłasza je do sieci celu, używając adresu rozgłoszeniowego IP .
W odpowiedzi większość urządzeń podłączonych do tej samej sieci wyśle odpowiedź na źródłowy adres IP (zastąpiony tak, aby odzwierciedlał komputer docelowy), który może zostać przeciążony ruchem, jeśli sieć jest wystarczająco duża (ma ogromną liczbę podłączonych urządzeń).
W rezultacie komputer celu może zostać spowolniony, a nawet przez pewien czas stać się bezużyteczny, jeśli atak jest wystarczająco silny.
Tak jak poprzednio, możesz uniknąć ataku Smurf, po prostu wyłączając funkcje ICMP routera bramy. Innym sposobem uzyskania ochrony jest umieszczanie na czarnej liście żądań pochodzących z adresu IP emisji sieci.
Atak ukłucia
Atak Twinge jest prowadzony przez program, który wysyła powódź sfałszowanych pakietów ICMP w celu uszkodzenia systemu. Pakiety ICMP są fałszywe, ponieważ wszystkie używają losowych fałszywych adresów IP, ale w rzeczywistości pakiety pochodzą z jednego źródła (maszyny atakującego).
Podobno pakiety ICMP zawierają sygnaturę, która może zdradzić fakt, że atak nie pochodził z wielu źródeł, ale został skoordynowany przy pomocy Twinge.
Chociaż ten atak może być katastrofalny, jeśli jest dobrze zaplanowany, wyłączenie protokołu ICMP na routerze bramy i zainstalowanie zapory lub systemu wykrywania włamań może pomóc w ochronie się przed nim.
Tunel ICMP
Domyślnie routery skanują tylko nagłówki pakietów ICMP, dzięki czemu pakiety, które faktycznie zawierają dużo dodatkowych danych, mogą łatwo ominąć wykrywanie, o ile zawierają sekcję ICMP. Ten typ ataku nazywa się tunelem ping lub ICMP. Na szczęście standardowe narzędzia ping nie są w stanie tunelować przez zapory i bramy, ponieważ tunele ICMP muszą być starannie dostosowane do sieci, do których są przeznaczone.
Z drugiej strony istnieje wiele zasobów online, które atakujący mogą wykorzystać i emulować taki tunel, zapewniając sobie swobodne przejście przez prywatne sieci i podłączone do niego maszyny. Tak jak poprzednio, wyłączenie funkcji ICMP na routerze bramy, używanie zapór sieciowych i egzekwowanie ścisłych reguł czarnej listy może mieć kluczowe znaczenie dla uniknięcia tego typu ataku.
ICMP – Wniosek
Biorąc to wszystko pod uwagę, chociaż ICMP nie jest używany do wymiany informacji między podłączonymi urządzeniami w danej sieci, jak robią to TCP i UDP, nadal ma ogromny zakres zastosowań. W rzeczywistości ICMP jest jednym z najbardziej elastycznych protokołów podstawowych, które pomagają utrzymać Internet w takim stanie, w jakim go znamy.
Oprócz podstawowego celu informowania jednego systemu o dławieniu w połączeniu z innym systemem, ICMP jest podstawą wielu narzędzi do rozwiązywania problemów, takich jak ping, pathping i traceroute. Niestety, pomaga również złośliwym agentom w dostarczaniu szerokiej gamy ataków DoS i infiltracji na podatne na ataki maszyny.