Vad är ICMP? Förstå Internet Control Message Protocol

By rik

Du har med största sannolikhet stött på begreppet ICMP, och om du har en grundläggande teknisk förståelse, vet du troligen att det är relaterat till internet på något sätt.

ICMP är faktiskt ett protokoll, i likhet med IP, TCP och UDP (som vi tidigare har granskat och förklarat). Det spelar en ganska väsentlig roll för att säkerställa att våra internetanslutningar fungerar korrekt.

ICMP är mer inriktat på hur problem med anslutningen identifieras och hanteras. Men låt oss inte avslöja för mycket i förväg. Fortsätt läsa om du är intresserad av att lära dig vad ICMP är och hur det hjälper oss att upprätthålla våra anslutningar på en optimal nivå.

Vad är ICMP?

Internet Control Message Protocol, vanligtvis känt under den mer lättillgängliga förkortningen ICMP, är ett protokoll som är fundamentalt för att diagnostisera diverse problem relaterade till anslutningen.

Detta protokoll används av en mängd nätverksenheter, inklusive routrar, modem och servrar, för att informera andra deltagare i nätverket om möjliga problem med anslutningen.

Vi har tidigare nämnt att ICMP är ett protokoll precis som TCP och UDP, men i motsats till de två senare används ICMP normalt sett inte för att möjliggöra dataöverföring mellan system. Dessutom är det inte vanligt förekommande i nätverksapplikationer för slutanvändare, bortsett från diagnostiska verktyg.

ICMP:s initiala definition skapades av Jon Postel, som bidrog betydligt till utvecklingen av internet, och den första standarden för ICMP publicerades i april 1981 i RFC 777.

Den ursprungliga definitionen genomgick naturligtvis flertalet förändringar för att nå den form som vi känner till idag. Den stabila formen av detta protokoll publicerades fem månader efter den första definitionen, i september 1981, i RFC 792, och skrevs även den av Postel.

Hur fungerar ICMP?

I grund och botten används ICMP för felrapportering genom att avgöra om data når sin avsedda destination relativt snabbt eller inte.

I en grundläggande situation är två enheter uppkopplade via internet och kommunicerar med hjälp av det vi kallar datapaket eller datagram. ICMP:s funktion är att generera felmeddelanden och dela dem med den enhet som skickade ursprungsdatan, om paketen inte når sin destination.

Om du till exempel skickar ett datapaket som är för stort för routern att hantera, kommer routern först att kassera paketet och därefter generera ett felmeddelande för att informera avsändarenheten om att paketet inte nådde sin destination.

Detta är dock vad vi skulle kalla en passiv funktion, eftersom du inte behöver göra något för att dessa felmeddelanden ska genereras (om de behövs). Som du snart kommer att upptäcka har ICMP även ett mer aktivt verktyg som du kan använda för att utföra olika nätverksfelsökningsåtgärder.

I motsats till TCP och UDP kräver ICMP ingen ansluten enhet för att skicka ett meddelande. I en TCP-anslutning måste till exempel de anslutna enheterna genomföra en flerledad handskakning innan data kan överföras.

Med ICMP behöver ingen anslutning upprättas; ett meddelande kan skickas direkt. Ett ICMP-meddelande kräver dessutom ingen port för att dirigera meddelandet, till skillnad från TCP och UDP som båda använder specifika portar för att dirigera information. ICMP varken behöver eller tillåter att meddelanden riktas mot specifika portar.

ICMP-meddelanden transporteras med hjälp av IP-paket, men de är inte en del av dem. Istället samåker de med dessa paket, eftersom de endast genereras om deras bärare (IP-paketen) inte når sin destination. Oftast är de omständigheter som gör att ett ICMP-paket skapas ett resultat av den information som finns tillgänglig i det misslyckade paketets IP-huvud.

Eftersom ICMP innehåller data från det misslyckade paketets IP-huvud kan nätverksanalysverktyg användas för att fastställa exakt vilka IP-paket som inte kunde levereras. IP-huvudet är dock inte den enda informationstypen som bärs av ICMP-paketet.

Ett ICMP-paket innehåller IP-huvudet, följt av ett ICMP-huvud samt de åtta första byten av nyttolasten.

IP-huvud – inkluderar information om IP-version, käll- och destinations-IP-adresser, antalet skickade paket, det protokoll som används, paketlängd, time to live (TTL), synkroniseringsdata, samt ID-nummer för specifika datapaket
ICMP-huvud – innehåller en kod som hjälper till att kategorisera felet, en underkod som förenklar felidentifiering med hjälp av en beskrivning och en kontrollsumma
Transportlagerhuvud – de åtta första byten av nyttolasten (överförd via TCP eller UDP)

ICMP-kontrollmeddelanden

Som vi har konstaterat tidigare, när ett fel uppstår kan värdena i det första fältet i ICMP-huvudet användas för att identifiera felet. Dessa feltyper, tillsammans med deras identifierare, är följande:

0 – Echo Reply – används för ping-syften
3 – Destinationen kan inte nås
5 – Omdirigeringsmeddelande – används för att indikera val av en alternativ rutt
8 – Echo Request – används för ping-syften
9 – Routerannonsering – används av routrar för att meddela att deras IP-adresser är tillgängliga för routning
10 – Router Solicitation – routerupptäckt, begäran eller val
11 – Tiden har överskridits – TTL har löpt ut eller tiden för återmontering har överskridits
12 – Parameterproblem: Felaktigt IP-huvud – felaktig längd, ett obligatoriskt alternativ saknas eller ett fel som pekats ut av pekaren
13 – Tidsstämpel
14 – Tidsstämpelsvar
41 – används för experimentella mobilitetsprotokoll
42 – Utökad Echo Request – begär utökad Echo
43 – Utökad Echo Reply – svar på 42 utökad Echo-förfrågan
253 och 254 – experimentell

TTL-fältet (Time to Live)

TTL-fältet är ett av IP-huvudfälten som kan (och ofta gör) generera ett ICMP-fel. Det innehåller ett värde som motsvarar det maximala antalet routrar som ett skickat paket kan passera innan det når sin slutdestination.

Efter att paketet har behandlats av en router minskar detta värde med ett, och processen fortsätter tills antingen paketet når sin destination eller värdet når noll. I det senare fallet kommer routern normalt att kassera paketet och skicka ett ICMP-meddelande till den ursprungliga avsändaren.

Så om ett paket kasseras på grund av att dess TTL når noll, beror det inte på korrupt data i rubriken eller på routerspecifika problem. TTL var faktiskt designat för att hindra felaktiga paket från att störa anslutningar och har resulterat i skapandet av ett verktyg som är avgörande för felsökning av nätverk: Traceroute.

ICMP-användning i nätverksdiagnostik

Som tidigare nämnts kan ICMP användas med diagnostikverktyg för att fastställa hur väl en nätverksanslutning fungerar. Du kanske inte visste vad ICMP är innan du läste den här guiden, men vi är övertygade om att du åtminstone har hört talas om ping, det välkända nätverksverktyget som låter dig veta om en värd kan nås eller inte.

Ping är faktiskt ett viktigt verktyg som använder ICMP som sin grund. Traceroute är ett annat bra exempel på ett verktyg som hjälper oss att diagnostisera och felsöka anslutningsproblem i våra nätverk. Pathping, som är en kombination av ping och traceroute, är ytterligare ett användbart ICMP-baserat verktyg.

Ping

Ping är ett inbyggt Windows-verktyg som är tillgängligt via CMD och är ett av de viktigaste verktygen som använder ICMP för att felsöka potentiella nätverksfel. Ping använder två av koderna i listan ovan, 8 (ekoförfrågan) och 0 (ekosvar).

Här är två exempel på ping-kommandon:

ping 168.10.26.7
ping wdzwdz.com

När du kör ping kommer det att skicka ett ICMP-paket med kod 8 i typfältet och tålmodigt vänta på ett svar av typ 0. När svaret kommer kommer ping att beräkna tiden mellan begäran (8) och dess svar (0) och returnera värdet på tur- och returresan, uttryckt i millisekunder.

Vi har tidigare fastställt att ICMP-paket vanligtvis genereras och skickas som resultat av ett fel. Dock behöver paketet för begäran (typ 8) inget fel för att skickas. Därför kan ping även få svaret (0) utan att det utlöser ett fel.

Som du troligen har förstått av våra exempel ovan kan du pinga en IP-adress eller en värd. Dessutom har ping ett antal ytterligare alternativ som du kan använda för mer avancerad felsökning genom att helt enkelt lägga till dem i kommandot.

Om du till exempel använder alternativet -4, tvingar du ping att använda IPv4 exklusivt, medan -6 endast kommer att använda IPv6-adresser. Se skärmdumpen nedan för en komplett lista över alternativ som du kan lägga till i ditt pingkommando.

En vanlig missuppfattning om ping är att du kan använda den för att testa tillgängligheten för specifika portar på riktade system. Kort sagt, du kan inte göra det eftersom ICMP inte skapar något direkt meddelandeutbyte mellan värdar, till skillnad från TCP eller UDP, och inte kräver någon portanvändning.

Portskanningsappar använder TCP- eller UDP-paket för att avgöra om specifika portar är öppna och tillgängliga eller inte. Dessa verktyg skickar TCP- eller UDP-paket till en specifik port och genererar ett ICMP-meddelande av typ 3 (värd ej nåbar) undertyp 3 (destinationsport ej nåbar) om den porten inte är aktiv.

Traceroute

Precis som ping är traceroute ett annat nätverksfelsökningsverktyg som varje nätverksadministratör bör ha till sitt förfogande och behärska. Traceroute hjälper dig att kartlägga rutten för alla enheter som din anslutning passerar genom tills den når sin angivna destination.

Om du är intresserad av att ta reda på hela rutten mellan dig och en annan maskin kan traceroute ge dig exakt den informationen. Det här verktyget kan också användas för att avgöra om det finns något fel längs den väg din anslutning följer.

Om det till exempel finns en enhet på anslutningsvägen som har svårt att vidarebefordra dina paket till sin avsedda destination, kommer traceroute att informera dig om vilken router som ger ett försenat svar (eller inget alls).

Traceroute fungerar genom att skicka ett paket med ett TTL-värde (Time To Live) på 0, vilket automatiskt kommer att släppas av den första routern det stöter på, som vi har förklarat tidigare i TTL-avsnittet. Efter att routern har kassera paketet genererar den ett ICMP-paket och skickar tillbaka det till traceroute.

Programmet extraherar paketets källadress, samt den tid det tog för paketet att returneras, och skickar sedan ett annat paket med ett TTL-värde på 1. Efter att det andra paketet har passerat genom gatewayen minskar dess TTL med 1 (blir 0) och går till den andra routern, som, när TTL-värdet noll upptäcks, kasserar paketet och skickar ett ICMP-paket tillbaka till traceroute.

Varje gång traceroute tar emot ett ICMP-paket ökar det TTL med ett och skickar tillbaka det, och den här operationen fortsätter tills den angivna destinationen nås, eller tills traceroute tar slut på hopp. Som standard allokerar Windows ett maximalt antal av 30 hopp, men du kan öka det genom att ange det i kommandosyntaxen.

Här är ett exempel på hur du kan köra traceroute i CMD:

tracert wdzwdz.com

Precis som ping har traceroute en rad alternativ som du kan lägga till i syntaxen om du vill vara mer specifik. Du kan tvinga fram IPv4 eller IPv6, men du kan också hoppa över att matcha adresser till värdnamn och öka det maximala antalet hopp för att hitta målet. Se vår skärmdump nedan för ett exempel på hur traceroute kan användas, och en lista över alla alternativ du kan använda med det.

Det är dock värt att påpeka att traceroute endast kan ge realtidsinformation. Därför, om du har upplevt en avmattning i din anslutning och vill använda det här verktyget för att undersöka det, kan du få missvisande resultat, eftersom rutten kan ha ändrats under tiden.

Även om det är möjligt att tvinga traceroute att följa en specifik väg genom att använda alternativet -j och lägga till routeradresser manuellt, innebär det att du redan är medveten om den felaktiga vägen. Det är lite av en paradox eftersom du behöver använda traceroute utan alternativet -j för att hitta den felaktiga vägen i första hand.

Om du inte är förtjust i att använda CLI-verktyg (Command Line Interface) och föredrar ett GUI-tillvägagångssätt (Graphical User Interface), finns det många programvarulösningar från tredje part för traceroute. SolarWinds Traceroute NG är ett av de bästa exemplen vi kan komma på. Har vi förresten sagt att det är helt gratis?

Pathping

Som vi kort har nämnt ovan fullbordar pathping trion av oumbärliga verktyg för felsökning av nätverk. Ur funktionssynpunkt är pathping en kombination av ping och traceroute, eftersom det använder sig av alla tre meddelandetyperna som dessa verktyg utnyttjar: ekoförfrågan (8), ekosvar (0) och tiden överskriden (11).

Oftast används pathping för att identifiera anslutningsnoder som påverkas av hög latens och paketförlust. Visst kan du använda traceroute och sedan pinga för att få samma information, men att ha funktionaliteten för båda verktygen under ett enda kommando är mycket bekvämare för nätverksadministratörer.

En av nackdelarna med att använda pathping är att det kan ta ganska lång tid att slutföra sin begäran (25 sekunder per hopp för att ge pingstatistik). Pathping visar dig både rutten till den angivna destinationen och tiderna för tur och retur.

I motsats till ping och traceroute kommer pathping att pinga varje router i sin väg flera gånger, vilket ökar den totala effektiviteten. Men om det stöter på en router som har inaktiverat sina ICMP-funktioner kommer pathping att stoppa sin begäran om information. Ping kan fortfarande nå en router utan ICMP-funktioner, och traceroute kommer att hoppa till nästa router i dess väg och visa en rad asterisker för alla routrar utan ICMP.

Pathping är ett inbyggt Windows-verktyg och har varit det sedan Windows NT, så du kan använda det på samma sätt som ping och tracert: via en kommandorad.

Här är ett exempel på hur du kan använda pathping:

pathping wdzwdz.com -h 40 -w 2 -4

Kommandot ovan visar dig rutten till vår webbplats, samt tur-returtiderna för varje router i anslutningsvägen. De alternativ vi använde i vårt exempel kommer dessutom att öka standardvärdet för maximalt antal hopp från 30 till 40, lägga till en timeout på 2 millisekunder för varje svar och tvinga fram användning av IPv4.

Se vår skärmdump nedan för en snabbguide om hur man använder pathping samt en lista över alternativ som du kan lägga till i kommandosyntaxen.

ICMP:s tillämpning vid cyberattacker

Även om ICMP:s tillämpningsområde underlättar många felsökningsåtgärder för anslutningar, kan det här protokollet också utnyttjas för att utföra olika cyberattacker. Om du har varit aktiv på internet tillräckligt länge har du troligen hört talas om ping-översvämningar, DDoS, Ping of Death, Smurf-attacker eller ICMP-tunnlar.

Medan vissa av dessa attacker numera ses som PoC (Proof of Concept), används andra fortfarande av skadliga aktörer för att skada internetaktiverade system, eller av säkerhetsexperter för att testa systemens sårbarhet.

Vi börjar med den mest populära, som är ping-översvämningen (som fortfarande är vanligt förekommande), och förklarar hur den använder ICMP för onda syften.

Ping-översvämning

Att använda ping för att skicka ekoförfrågningar och vänta på ekosvar verkar ganska ofarligt. Men vad händer om ping bara skulle skicka en enorm mängd ICMP-ekoförfrågningar istället för att vänta på svar? I det här klassiska scenariot för en DoS-attack (Denial of Service) skulle målenheten drabbas av kraftig fördröjning, och till och med förlora sin anslutning om attacken lyckas.

Den här attacken är mest effektiv om angriparen har mer bandbredd än offret, och om offret skickar ICMP-ekosvar på de många förfrågningarna det tar emot, vilket förbrukar både inkommande och utgående bandbredd.

Angriparen kan ange ett ”flood”-alternativ för pingkommandot, men det här alternativet är ganska ovanligt och är inte inbyggt i operativsystemets interna verktyg. Till exempel har Windows ping inget ”flood”-alternativ, men det finns vissa verktyg från tredje part som har integrerat den funktionen.

En ping-översvämningsattack kan bli katastrofal om den förvandlas till en DDoS-attack (Distributed Denial of Service). En DDoS-attack använder flera system för att rikta in sig på ett enskilt system, vilket överväldigar det med paket från flera platser samtidigt.

Ett säkert sätt att skydda sig mot en ping-översvämning är att inaktivera ICMP-funktionerna på din router. Du kan också installera en brandvägg för webbapplikationer om du behöver skydda en webbserver mot sådana attacker.

Ping of Death

Den här attacken innebär att en felaktig ping skickas till en måldator. I den här typen av attack kommer det skickade paketet att innehålla en mängd utfyllnadsdata i nyttolasten som är för stor för att kunna bearbetas på en gång.

Men innan det skickas kommer denna skadliga ping att fragmenteras i mindre delar, eftersom det är omöjligt för internetprotokollprocessorn att överföra det i sin ursprungliga, sammansatta form.

Datorn som attackeras av Ping of Death kommer att ta emot bitarna och försöka sätta ihop dem innan det skadliga paketet skickas till sin målapplikation. Det är här skadan uppstår: om det sammansatta paketet är längre än det tillgängliga minnet i måldatorn kan återmonteringen resultera i ett buffertspill, systemkrascher och till och med göra det möjligt att injicera skadlig kod i den berörda datorn.

På den ljusa sidan är Ping of Death inte längre en nyhet, eftersom många säkerhetssystem känner igen det utan problem och blockerar det.

Smurf-attack

I motsats till de två föregående attacktyperna attackerar en Smurf-attack inte en enhet direkt, utan använder sig av andra enheter på samma nätverk för att samordna en distribuerad DoS-attack (DDoS) mot en enda maskin.

Angriparen behöver offrets IP-adress och målnätverkets IP-sändningsadress. Angriparen lägger till offrets IP-adress i ICMP-paket (förfalskar det) och sänder dem sedan till målnätverket med hjälp av en IP-sändningsadress.

Som svar kommer de flesta enheter som är anslutna till samma nätverk att skicka ett svar till källans IP-adress (som har förfalskats för att reflektera offrets dator), vilket kan överbelasta måldatorn med trafik om nätverket är tillräckligt stort (har ett stort antal anslutna enheter).

Som ett resultat kan offrets dator saktas ner och till och med göras oanvändbar under en viss tid, om attacken är tillräckligt allvarlig.

Som tidigare kan du undvika en Smurf-attack genom att helt enkelt stänga av din gateway-routers ICMP-funktioner. Ett annat sätt du kan uppnå skydd är genom att svartlista förfrågningar som kommer från ditt nätverks sändnings-IP-adress.

Twinge-attack

En Twinge-attack leds av ett program som skickar en flod av falska ICMP-paket för att skada ett system. ICMP-paketen är falska eftersom de alla använder slumpmässiga falska IP-adresser, men i själva verket kommer paketen från en enda källa (angriparens dator).

ICMP-paketen påstås innehålla en signatur som kan avslöja det faktum att attacken inte kom från flera källor, utan samordnades med hjälp av Twinge istället.

Även om den här attacken kan vara katastrofal om den planeras rätt, kan du skydda dig mot den genom att stänga av ICMP på din gateway-router och installera en brandvägg eller ett intrångsdetekteringssystem.

ICMP-tunnel

Som standard söker routrar endast efter ICMP-paketets rubriker, vilket innebär att paket som faktiskt innehåller en stor mängd extra data enkelt kan kringgå upptäckt, så länge de innehåller en ICMP-sektion. Den här typen av attack kallas en ping- eller ICMP-tunnel. Lyckligtvis kan inte vanliga pingverktyg tunnla genom brandväggar och gateways, eftersom ICMP-tunnlar måste anpassas noga till de nätverk de är avsedda för.

Å andra sidan finns det många online-resurser som angripare kan använda för att efterlikna en sådan tunnel, vilket ger dem fri passage genom privata nätverk och datorer som är anslutna till dem. Som tidigare kan det vara avgörande att stänga av ICMP-funktioner på din gateway-router, använda brandväggar och upprätthålla strikta regler för svartlistning för att undvika den här typen av attack.

ICMP – Slutsats

Sammantaget, även om ICMP inte används för att utbyta information mellan anslutna enheter i ett givet nätverk på samma sätt som TCP och UDP, har det fortfarande ett stort användningsområde. ICMP är faktiskt ett av de mest flexibla grundläggande protokollen som hjälper till att underhålla internet som vi känner det.

Bortsett från dess grundläggande syfte att informera ett system när det finns ett avbrott i anslutningen till ett annat system, är ICMP grunden för många felsökningsverktyg som ping, pathping och traceroute. Tyvärr hjälper det även skadliga aktörer att genomföra en mängd olika DoS- och infiltrationsattacker mot sårbara system.