Du har sikkert hørt om ICMP, og hvis du bare er en liten teknisk kunnskapsrik, vil du sannsynligvis vite (i det minste) at det har noe med Internett å gjøre.
ICMP er faktisk en protokoll, omtrent som IP, TCP og UDP (som vi tidligere diskuterte og forklarte), så den spiller en ganske viktig rolle i velfungerende Internett-tilkoblinger.
ICMP har mer å gjøre med måten tilkoblingsproblemer oppdages og håndteres på, men la oss ikke ødelegge for mye av forelesningen vår. Fortsett å lese hvis du vil vite hva ICMP er og hvordan det hjelper oss å opprettholde tilkoblingene våre på optimale nivåer.
Innholdsfortegnelse
Hva er ICMP?
Internet Control Message Protocol, som de fleste kjenner under sitt vennligere akronym ICMP, er en protokoll som er grunnleggende for feilsøking av ulike tilkoblingsrelaterte problemer.
Denne protokollen brukes av en lang rekke nettverksenheter, inkludert men ikke begrenset til rutere, modemer og servere for å informere andre nettverksdeltakere om potensielle tilkoblingsproblemer.
Vi har nevnt ovenfor at ICMP er en protokoll akkurat som TCP og UDP, men i motsetning til disse to, brukes ikke ICMP vanligvis for å lette utveksling av data mellom systemer. Videre er det ikke ofte brukt i sluttbrukernettverksapper, med mindre de er diagnostiske verktøy.
ICMPs opprinnelige definisjon ble skissert av Jon Postel, som bidro massivt og mange ganger til utviklingen av Internett, og den første standarden til ICMP ble publisert i april 1981 i RFC 777.
Åpenbart gikk den første definisjonen gjennom mange endringer for å nå den formen vi er kjent med i dag. Den stabile formen for denne protokollen ble publisert 5 måneder senere enn dens opprinnelige definisjon, september 1981, i RFC 792, og ble også skrevet av Postel.
Hvordan fungerer ICMP?
For å si det kort, ICMP brukes til feilrapportering ved å avgjøre om data når sin tiltenkte destinasjon relativt raskt eller ikke.
I et grunnleggende scenario er to enheter koblet sammen via Internett og utveksler informasjon gjennom det vi kaller datapakker eller datagrammer. Det ICMP gjør er å generere feil og dele dem med enheten som sendte de originale dataene i tilfelle pakkene aldri når destinasjonen.
For eksempel, hvis du sender en pakke med data som rett og slett er for stor for ruteren å håndtere, vil ruteren først slippe pakken og deretter generere en feilmelding som lar avsenderenheten at pakken aldri nådde målet den var på vei til.
Det er imidlertid det vi vil kalle en passiv ferdighet siden det absolutt ikke er noe du trenger å gjøre for å motta disse feilmeldingene (hvis behovet oppstår). Som du snart vil oppdage, har ICMP også et mer aktivt verktøy, som du kan stole på for å utføre forskjellige nettverksfeilsøkingsoperasjoner.
I motsetning til TCP og UDP, trenger ikke ICMP at en enhet kobles til for å sende en melding. I en TCP-tilkobling, for eksempel, må de tilkoblede enhetene utføre et flertrinns håndtrykk, hvoretter dataene kan overføres.
Med ICMP er det ikke nødvendig å opprette en forbindelse; en melding kan ganske enkelt sendes i stedet for en tilkobling. Videre krever ikke en ICMP-melding en port å sende meldingen til, sammenlignet med TCP og UDP, som begge bruker spesifikke porter for å rute informasjon gjennom. Ikke bare krever ikke ICMP en port, men den tillater faktisk ikke målretting mot spesifikke porter.
ICMP-meldinger bæres av IP-pakker, men er ikke inneholdt av dem. I stedet piggyback på disse pakkene, siden de bare genereres hvis operatøren deres (dvs. IP-pakkene) aldri når destinasjonen. Oftere enn ikke, er omstendighetene som tillot en ICMP-pakke å spawn resultatet av dataene som er tilgjengelige i den mislykkede pakkens IP-header.
Siden ICMP inkluderer data fra den mislykkede pakkens IP-header, kan nettverksanalyseverktøy brukes til å bestemme nøyaktig hvilke IP-pakker som ikke ble levert. IP-headeren er imidlertid ikke den eneste typen informasjon som bæres av ICMP-pakken.
En ICMP-pakke inneholder IP-headeren, etterfulgt av en ICMP-header, og nyttelastens første åtte byte.
IP-header – inneholder detaljer om IP-versjon, kilde- og destinasjons-IP-adresser, antall sendte pakker, protokollen som brukes, pakkelengde, time to live (TTL), synkroniseringsdata, samt ID-numre for bestemte datapakker
ICMP header – inneholder en kode som hjelper med å kategorisere feilen, en underkode som letter feilidentifikasjon ved å tilby en beskrivelse og en kontrollsum
Transportlagsoverskrift – første åtte byte av nyttelasten (overført gjennom TCP eller UDP)
ICMP-kontrollmeldinger
Som vi har nevnt ovenfor, når en feil oppstår, kan verdiene i det første feltet i ICMP-overskriften brukes til å identifisere den. Disse feiltypene, sammen med deres identifikator, er som følger:
0 – Echo Reply – brukes til ping-formål
3 – Destinasjon uoppnåelig
5 – Omdirigeringsmelding – brukes til å indikere valg av en annen rute
8 – Ekkoforespørsel – brukes til pingformål
9 – Ruterannonse – brukes av rutere for å kunngjøre at deres IP-adresser er tilgjengelige for ruting
10 – Ruteroppfordring – ruteroppdagelse, oppfordring eller valg
11 – Tid overskredet – TTL utløpt eller gjenmonteringstid overskredet
12 – Parameterproblem: Dårlig IP-header – dårlig lengde, nødvendig alternativ mangler eller peker-indisert feil
13 – Tidsstempel
14 – Tidsstempelsvar
41 – brukes for eksperimentelle mobilitetsprotokoller
42 – Extended Echo Request – ber om utvidet ekko
43 – Utvidet ekkosvar – svar på 42 utvidet ekkoforespørsel
253 og 254 – eksperimentell
TTL-feltet (Time to Live).
TTL-feltet er et av IP-hodefeltene som kan (og ofte gjør) generere en ICMP-feil. Den inneholder en verdi, som er det maksimale antallet rutere som en sendt pakke kan passere før den når sin endelige destinasjon.
Etter at pakken er behandlet av en ruter, reduseres denne verdien med én, og prosessen fortsetter til én av to ting skjer: enten når pakken sin destinasjon, eller verdien når null, som vanligvis følges av at ruteren slipper pakke og sende en ICMP-melding til den opprinnelige avsenderen.
Så det sier seg selv at hvis en pakke blir droppet fordi dens TTL nådde null, er det ikke på grunn av ødelagte data i overskriften eller ruterspesifikke problemer. TTL ble faktisk designet for å blokkere useriøse pakker fra å hindre tilkoblinger og har resultert i opprettelsen av et verktøy som er avgjørende for nettverksfeilsøking: Traceroute.
ICMP-bruk i nettverksdiagnostikk
Som nevnt ovenfor kan ICMP brukes sammen med diagnostiske verktøy for å fastslå om en nettverksforbindelse fungerer. Du har kanskje ikke visst hva ICMP er før du leste guiden vår, men vi er sikre på at du i det minste har hørt om ping, det berømte nettverksverktøyet som lar deg vite om en vert er tilgjengelig eller ikke.
Vel, ping er faktisk et viktig verktøy som bruker ICMP som ryggrad. Traceroute er et annet godt eksempel på verktøy som hjelper oss med å diagnostisere og feilsøke tilkoblingsproblemer på nettverkene våre. Pathping, som er en kombinasjon av ping og traceroute, er nok et flott ICMP-basert verktøy.
Ping
Ping er et innebygd Windows-verktøy som kan nås gjennom CMD og er et av de viktigste verktøyene som bruker ICMP til å feilsøke potensielle nettverksfeil. Ping bruker to av kodene i listen ovenfor, 8 (ekkoforespørsel) og 0 (ekkosvar), for å være mer spesifikk.
Slik ser to ping-kommandoer ut:
ping 168.10.26.7
ping wdzwdz.com
Når du kjører det, vil ping sende en ICMP-pakke med en kode 8 i typefeltet, og vil tålmodig vente på type 0-svar. Etter at svaret kommer, vil ping bestemme tiden mellom forespørselen (8) og svaret (0) og returnere verdien av rundturen uttrykt i millisekunder.
Vi har allerede etablert at ICMP-pakker vanligvis genereres og sendes som et resultat av en feil. Forespørselspakken (type 8) trenger imidlertid ikke en feil for å sendes, derfor kan ping også motta svaret (0) tilbake uten å utløse en feil.
Som du sikkert skjønte fra eksemplene ovenfor, kan du pinge en IP-adresse eller en vert. Dessuten har ping en mengde tilleggsalternativer du kan bruke for mer avansert feilsøking ved ganske enkelt å legge til alternativet til kommandoen.
For eksempel vil bruk av -4-alternativet tvinge ping til å bruke IPv4 eksklusivt, mens -6 bare vil bruke IPv6-adresser. Sjekk ut skjermbildet nedenfor for en komplett liste over alternativer du kan legge til ping-kommandoen din.
En vanlig misforståelse om ping er at du kan bruke den til å teste tilgjengeligheten til visse porter på målrettede systemer. Lang historie kort, du kan ikke gjøre det, siden ICMP ikke gjør noen reell meldingsutveksling mellom verter, i motsetning til TCP eller UDP, og ikke krever portbruk.
Portskannerapper bruker TCP- eller UDP-pakker for å avgjøre om spesifikke porter er åpne og tilgjengelige. Verktøyene sender TCP- eller UDP-pakker til en spesifikk port og genererer en type 3 (utilgjengelig vert) undertype 3 (destinasjonsport uoppnåelig) ICMP-melding hvis den porten ikke er aktiv.
Traceroute
På samme måte som ping, er traceroute et annet nettverksfeilsøkingsverktøy som hver nettverksadministrator ikke bare bør ha i verktøybeltet, men også mestre. Det traceroute gjør er å hjelpe deg med å kartlegge en rute for alle enhetene tilkoblingen din går gjennom til den når den angitte destinasjonen.
Så hvis du er interessert i å finne hele ruten mellom deg og en annen maskin, kan traceroute gi deg akkurat den informasjonen. Dette verktøyet kan også brukes til å finne ut om det er noe galt langs ruten tilkoblingen din følger.
Hvis det for eksempel er en enhet på tilkoblingsbanen som har vanskelig for å videresende pakkene dine mot den tiltenkte destinasjonen, vil traceroute fortelle deg hvilken ruter som gir deg et forsinket svar (eller ingen i det hele tatt).
Måten traceroute fungerer på er ved å sende en pakke med en TTL-verdi (Time To Live) på 0, som automatisk vil bli droppet av den første ruteren den støter på, som vi har forklart ovenfor i TTL-delen. Etter å ha droppet pakken, genererer ruteren en ICMP-pakke og sender den tilbake til traceroute.
Programmet trekker ut pakkens kildeadresse, samt tiden det tok pakken å komme tilbake, og sender deretter en annen pakke med en TTL-verdi på 1. Etter at den andre pakken går gjennom gatewayen, reduseres dens TTL med 1 (blir 0 ) og går til den andre ruteren, som, etter å ha oppdaget null TTL-verdi, slipper pakken og sender en ICMP-pakke tilbake til traceroute.
Hver gang traceroute mottar en ICMP-pakke, øker den TTL med én og sender den tilbake på sporet, og denne operasjonen fortsetter og fortsetter til den angitte destinasjonen er nådd, eller traceroute går tom for hopp. Som standard tildeler Windows en maksimal mengde på 30 hopp, men du kan øke det ved å spesifisere det i kommandosyntaksen.
Her er et eksempel på hvordan du kan kjøre traceroute i CMD:
tracert wdzwdz.com
På samme måte som ping, har traceroute en rekke alternativer du kan legge til syntaksen hvis du vil være mer spesifikk. Du kan tvinge IPv4 eller IPv6, men du kan også hoppe over å løse adresser til vertsnavn og øke det maksimale antallet hopp for å søke etter målet. Ta en titt på skjermbildet vårt nedenfor for et eksempel på traceroute-bruk og en liste over alle alternativene du kan bruke med det.
Det er imidlertid verdt å nevne at traceroute bare kan gi deg sanntidsinformasjon. Derfor, hvis du har støtt på en nedgang i forbindelsen og ønsker å bruke dette verktøyet til å undersøke det, kan du få misvisende resultater ettersom ruten kan ha endret seg i mellomtiden.
Selv om det er mulig å tvinge traceroute til å følge en bestemt sti ved å bruke -j-alternativet og legge til ruteradresser manuelt, betyr dette at du allerede er klar over den feilaktige banen. Dette er noe paradoksalt, siden det å oppdage banen i utgangspunktet krever at du bruker traceroute uten -j-alternativet.
Hvis du ikke akkurat er en fan av å bruke CLI (Command Line Interface)-verktøy og mye heller vil foretrekke en GUI (Graphical User Interface)-tilnærming, finnes det mange tredjeparts programvareløsninger for traceroute. SolarWinds» Traceroute NG er et av de beste eksemplene vi kunne tenke oss. Nevnte vi at det er helt gratis?
Pathping
Som vi kort har nevnt ovenfor, fullfører pathping trifectaen av uunnværlige nettverksfeilsøkingsverktøy. Fra et funksjonssynspunkt er patphing en kombinasjon av ping og traceroute, da den benytter seg av alle tre meldingstypene som den nevnte duoen utnytter: ekkoforespørsel (8), ekkosvar (0), samt overskredet tid (11).
Oftest brukes pathping for å identifisere tilkoblingsnoder som er påvirket av høy latenstid og pakketap. Klart du kan bruke traceroute og deretter ping for å få disse detaljene, men å ha funksjonaliteten til begge verktøyene under en enkelt kommando er langt mer praktisk for nettverksadministratorer.
En av ulempene med å bruke pathping er at det kan ta lang tid å fullføre forespørselen (25 sekunder per hopp for å gi ping-statistikk). Pathping vil vise deg både ruten til den angitte destinasjonen og tur-retur-tider til den.
I motsetning til ping og traceroute, vil pathping pinge hver ruter i sin vei gjentatte ganger, noe som øker dens generelle effektivitet. Imidlertid, hvis den støter på en ruter som har deaktivert ICMP-funksjonene, vil pathping stoppe forespørselen om informasjon, mens ping fortsatt kan nå en ruter uten ICMP-funksjoner, og traceroute vil hoppe til neste ruter i banen og vise en rekke stjerner for alle ikke-ICMP-rutere.
Pathping er et innebygd Windows-verktøy og har vært slik siden Windows NT, så du kan bruke det som du ville ping eller tracert: gjennom en kommandolinje.
Her er et eksempel på hvordan du kan bruke pathping:
pathping wdzwdz.com -h 40 -w 2 -4
Kommandoen ovenfor vil vise deg ruten til nettstedet vårt, samt tur-retur-tidene til hver ruter i tilkoblingsbanen. I tillegg vil alternativene vi brukte i vårt eksempel øke standard maksimal hoppverdi fra 30 til 40, legge til en tidsavbruddsverdi på 2 millisekunder for hvert svar og tvinge frem IPv4.
Ta en titt på skjermbildet vårt nedenfor for en hurtigveiledning for banebruk og en liste over alternativer du kan legge til kommandosyntaksen.
ICMP-anvendbarhet i cyberangrep
Selv om ICMPs rekkevidde forenkler mange feilsøkingsoperasjoner for tilkobling, kan denne protokollen også utnyttes til å utføre ulike cyberangrep. Hvis du har vært lenge nok på Internett, har du sannsynligvis hørt om ping-flom, DDoS, Ping of Death, Smurf Attacks eller ICMP-tunneler.
Mens noen av disse angrepene i dag fungerer som PoC (Proof of Concept), brukes andre fortsatt av ondsinnede agenter for å skade Internett-aktiverte systemer eller av sikkerhetseksperter for å teste for sårbarheter.
Vi starter med den mest populære, som er pingflommen (fortsatt mye brukt, forresten), og forklarer hvordan den bruker ICMP for ondskap.
Pingflom
Å bruke ping for å sende ekkoforespørsler og vente på ekkosvar virker ganske ufarlig. Men hva om, i stedet for å vente på svaret, ville ping bare sende en enorm mengde ICMP-ekkoforespørsler? I dette klassiske DoS-angrepsscenarioet (Denial of Service) vil målenheten oppleve alvorlig etterslep, og til og med tilkoblingen faller hvis angrepet er vellykket.
Dette angrepet er mest effektivt hvis angriperen har mer båndbredde enn offeret, og hvis offeret sender ICMP-ekkosvar på mangfoldet av forespørsler den mottar, og dermed forbruker både innkommende og utgående båndbredde.
Angriperen kan spesifisere et «flood»-alternativ til ping-kommandoen, men dette alternativet er ganske sjeldent og ikke innebygd i operativsystemets innebygde verktøy. For eksempel har ikke Windows» ping et «flom»-alternativ, men det er noen tredjepartsverktøy som integrerer denne funksjonen.
Et pingflommenangrep kan virkelig bli katastrofalt hvis det blir til et DDoS-angrep (Distributed Denial of Service). Et DDoS-angrep bruker flere systemer for å målrette ett enkelt, og overvelder det med pakker fra flere steder samtidig.
En sikker måte å beskytte deg mot en ping-flom er å deaktivere ICMP-funksjoner på ruteren. Du kan også installere en nettapp-brannmur hvis du trenger å beskytte en webserver mot slike angrep.
Ping of Death
Dette angrepet innebærer å sende en feilformet ping til en måldatamaskin. I denne typen angrep vil den sendte pakken inneholde en mengde fyllstoff i nyttelasten som er for stor til å kunne behandles på en gang.
Men før den sendes, vil denne ondsinnede pingen bli fragmentert i mindre deler, siden overføring av den i sin originale, sammensatte form ville være umulig for Internett-protokollprosessoren.
Datamaskinen som er målrettet av Ping of Death vil motta bitene og forsøke å sette dem sammen før den sender den ondsinnede pakken til destinasjonsapplikasjonen. Det er her skaden skjer: hvis den sammensatte pakken er lengre enn tilgjengelig minne i måldatamaskinen, kan gjenmontering resultere i bufferoverløp, systemkrasj og til og med tillate at skadelig kode injiseres i den rammede maskinen.
På den lyse siden er Ping of Death ikke lenger en nyhet, ettersom mange sikkerhetssystemer gjenkjenner den uten hikke og blokkerer den.
Smurfeangrep
I motsetning til de to foregående angrepstypene, angriper ikke et Smurf-angrep en enhet direkte, men bruker andre enheter på samme nettverk for å koordinere et distribuert DoS-angrep (en DDoS) mot en enkelt maskin.
Angriperen trenger målets IP-adresse og målnettverkets IP-kringkastingsadresse. Angriperen legger til offerets IP-adresse til ICMP-pakker (spoofer den) og sender dem deretter til målets nettverk ved å bruke en IP-kringkastingsadresse.
Som svar vil de fleste enheter koblet til det samme nettverket sende et svar til kildens IP-adresse (erstattet for å gjenspeile målets maskin), som kan bli overveldet med trafikk hvis nettverket er stort nok (har et stort antall tilkoblede enheter).
Som et resultat kan målets datamaskin bremses og til og med gjøres ubrukelig i en gitt tidsperiode, hvis angrepet er alvorlig nok.
Som før kan du unngå et Smurf-angrep ved ganske enkelt å slå av gateway-ruterens ICMP-funksjoner. En annen måte du kan oppnå beskyttelse på er ved å svarteliste forespørsler som kommer fra nettverkets kringkastings-IP-adresse.
Twinge angrep
Et Twinge-angrep ledes av et program som sender en flom av falske ICMP-pakker for å skade et system. ICMP-pakkene er falske siden de alle bruker tilfeldige falske IP-adresser, men i virkeligheten kommer pakkene fra en enkelt kilde (angriperens maskin).
Angivelig inneholder ICMP-pakkene en signatur som kan gi bort det faktum at angrepet ikke kom fra flere kilder, men ble koordinert ved hjelp av Twinge i stedet.
Selv om dette angrepet kan være katastrofalt hvis det planlegges riktig, kan det å slå av ICMP på gateway-ruteren og installere en brannmur eller et inntrengningsdeteksjonssystem hjelpe deg med å beskytte deg mot det.
ICMP-tunnel
Som standard skanner rutere kun etter ICMP-pakkeoverskrifter, noe som gjør det mulig at pakker som faktisk inneholder mye ekstra data enkelt kan omgå deteksjon bare så lenge de inneholder en ICMP-seksjon. Denne typen angrep kalles en ping- eller ICMP-tunnel. Heldigvis er ikke standard ping-verktøy i stand til å tunnelere gjennom brannmurer og gatewayer, da ICMP-tunneler må tilpasses nøye til nettverkene de er ment for.
På den annen side er det mange nettressurser som angripere kan bruke og etterligne en slik tunnel, og gi seg selv fri passasje gjennom private nettverk og maskiner koblet til den. Som før kan det å slå av ICMP-funksjoner på gateway-ruteren, bruke brannmurer og håndheve strenge svartelisteregler være avgjørende for å unngå denne typen angrep.
ICMP – Konklusjon
Alt tatt i betraktning, selv om ICMP ikke brukes til å utveksle informasjon mellom tilkoblede enheter på et gitt nettverk slik TCP og UDP gjør, har det fortsatt et stort bruksområde. Faktisk er ICMP en av de mest fleksible grunnleggende protokollene som bidrar til å holde Internett slik vi kjenner det.
Bortsett fra det grunnleggende formålet med å la ett system få vite når det er en choke i forbindelsen til et annet system, er ICMP ryggraden i en rekke feilsøkingsverktøy som ping, pathping og traceroute. Dessverre hjelper det også ondsinnede agenter med å levere et bredt spekter av DoS- og infiltrasjonsangrep til sårbare maskiner.