-sS
(TCP SYN-scanning)
SYN-scanning er standard og den mest populære scanningsmulighed af gode grunde. Den kan udføres hurtigt og scanne tusindvis af porte i sekundet på et hurtigt netværk, der ikke er hæmmet af restriktive firewalls. Den er også forholdsvis diskret og snigende, da den aldrig afslutter TCP-forbindelser. SYN-scanning virker mod enhver kompatibel TCP-stack i stedet for at være afhængig af idiosynkrasier på specifikke platforme, som NmapsFIN/NULL/Xmas-, Maimon- og idle-scanninger gør. Den giver også mulighed for en klar og pålidelig differentiering mellem open
,closed
og filtered
tilstande.
Denne teknik kaldes ofte for halvt åben scanning, fordi du ikke åbner en fuld TCP-forbindelse. Du sender en SYN-pakke,som om du vil åbne en rigtig forbindelse og venter derefter på et svar. En SYN/ACK angiver, at porten lytter (åben), mens enRST (reset) angiver, at den ikke lytter. Hvis der ikke modtages noget svar efter flere genudsendelser, markeres porten som filtreret. Porten markeres også som filtreret, hvis der modtages en ICMP unreachable-fejl (type 3, kode 0, 1, 2, 3, 9, 10 eller 13). Porten betragtes også som åben, hvis der modtages en SYN-pakke (uden ACK-flag) som svar. Dette kan skyldes en yderst sjælden TCP-funktion, der er kendt som en samtidig åben eller split handshake-forbindelse (se https://nmap.org/misc/split-handshake.pdf).
-sT
(TCP connect scan)
TCP connect scan er standard TCP-scanningstypen, når SYN scan ikke er en mulighed. Dette er tilfældet, når en bruger ikke har raw packetprivilegier. I stedet for at skrive råpakker, som de fleste andre scanningstyper gør, beder Nmap det underliggende operativsystem om at etablere en forbindelse med målmaskinen og -porten ved at udsende systemkaldet connect
. Dette er det samme systemopkald på højt niveau, som webbrowsere, P2P-klienter og de fleste andre netværksaktiverede programmer bruger til at oprette en forbindelse, og det er en del af en programmeringsgrænseflade, der kaldes Berkeley SocketsAPI. I stedet for at læse rå pakkesvar fra ledningen bruger Nmap denne API til at indhente statusoplysninger om hvert forbindelsesforsøg.
Når SYN-scanning er tilgængelig, er det normalt et bedre valg. Nmaphar mindre kontrol over opkaldet på højt niveau connect
end med råpakker, hvilket gør det mindre effektivt. Systemopkaldet afslutter forbindelser til åbne målporte i stedet for at udføre den halvåbne nulstilling, som SYN-scanning gør. Ikke alene tager dette længere tid og kræver flere pakker for at få de samme oplysninger, men der er større sandsynlighed for, at målmaskinerne logger forbindelsen. Et ordentligt IDS vil fange begge dele, men de fleste maskiner har ikke et sådant alarmsystem. Mange tjenester på et gennemsnitligt Unix-system vil tilføje en note til syslog, og nogle gange en kryptisk fejlmeddelelse, når Nmap opretter forbindelse og derefter lukker forbindelsen uden at sende data. Virkelig patetiske tjenester går ned, når dette sker, men det er ualmindeligt. En administrator, der ser en masse forbindelsesforsøg i sine logfiler fra et enkelt system, bør vide, at hun er blevet scannet for at oprette forbindelse.
-sU
(UDP-scanninger)
Mens de fleste populære tjenester på internettet kører over TCP-protokollen, er UDP-tjenester meget udbredt. DNS, SNMP og DHCP (registrerede porte 53, 161/162 og 67/68) er tre af de mest almindelige. Da UDP-scanning generelt er langsommere og vanskeligere end TCP, ignorerer nogle sikkerhedsrevisorer disse porte. Dette er en fejl, da UDP-tjenester, der kan udnyttes, er ret almindelige, og angribere ignorerer bestemt ikke hele protokollen. Heldigvis kan Nmap hjælpe med at opgøreUDP-porte.
UDP-scanning er aktiveret med indstillingen -sU
. Den kan kombineres med en TCP-scanningstype som f.eks. SYN-scanning (-sS
) for at kontrollere begge protokoller under den samme kørsel.
UDP-scanning fungerer ved at sende en UDP-pakke til hver målrettet port. For nogle almindelige porte, f.eks. 53 og 161, sendes en protokolspecifik nyttelast for at øge svarhastigheden, men for de fleste porte er pakken tom, medmindre --data
, --data-string
eller --data-length
-indstillingerne er angivet.Hvis der returneres en ICMP-port unreachable-fejl (type 3, kode 3), er porten closed
. Andre ICMP-fejl, der ikke kan nås (type 3, kode 0, 1, 2, 9, 10 eller 13), markerer porten som filtered
. Lejlighedsvis vil aservice svare med en UDP-pakke, der beviser, at den er open
. Hvis der ikke modtages noget svar efter gentransmissioner, klassificeres porten som open|filtered
. Det betyder, at porten kan være åben, eller måske blokerer pakkefiltre kommunikationen. Versionsdetektion (-sV
) kan bruges til at hjælpe med at skelne de virkelig åbne porte fra de filtrerede.
En stor udfordring ved UDP-scanning er at gøre det hurtigt.Åbne og filtrerede porte sender sjældent noget svar, hvilket får Nmap til at timeout og derefter foretage genudsendelser, hvis sonden eller svaret skulle være gået tabt. Lukkede porte er ofte et endnu større problem. de sender normalt en ICMP-port unreachable-fejl tilbage. Men i modsætning til deRST -pakker, der sendes af lukkede TCP-porte som svar på en SYN- eller connectscan, begrænser mange værter som standardICMP-port unreachable-meddelelser.Linux og Solaris er særligt strenge med hensyn til dette. F.eks. begrænserLinux 2.4.20-kernen destination unreachable-meddelelser til én pr. sekund (i net/ipv4/icmp.c
).
Nmap registrerer hastighedsbegrænsning og sænker hastigheden tilsvarende for at undgå at oversvømme netværket med ubrugelige pakker, som målmaskinen vildrop. Desværre gør en Linux-lignende begrænsning på én pakke pr. sekund, at en scanning med 65.536 porte tager mere end 18 timer. Ideer til at fremskynde dine UDP-scanninger omfatter scanning af flere værter parallelt, hurtig scanning af kun de populære porte først, scanning bag en firewall og brug af --host-timeout
til at springe langsomme værter over.
-sY
(SCTP INIT scan)
SCTP er et relativt nyt alternativ til TCP- og UDP-protokollerne, der kombinerer de fleste egenskaber ved TCP og UDP og også tilføjer nye funktioner som multi-homing og multi-streaming. Den anvendes hovedsagelig til SS7/SIGTRAN-relaterede tjenester, men har potentiale til også at blive anvendt til andre applikationer.SCTP INIT scan er SCTP-ækvivalenten til en TCP SYN-scanning.Den kan udføres hurtigt og scanne tusindvis af porte i sekundet på et hurtigt netværk, der ikke er hæmmet af restriktive firewalls.Ligesom SYN scan er INIT scan relativt diskret og hemmelig, da den aldrig afslutter SCTP-associationer. Det giver også mulighed for en klar og pålidelig differentiering mellem open
,closed
og filtered
tilstande.
Denne teknik kaldes ofte for halvt åben scanning,fordi du ikke åbner en fuld SCTP-forbindelse. Du sender et INITchunk, som om du vil åbne en rigtig association, og venter derefter på et svar. En INIT-ACK-chunk angiver, at porten lytter (er åben), mens en ABORT-chunk angiver, at den ikke lytter. Hvis der ikke modtages noget svar efter flere genudsendelser, markeres porten som filtreret. Porten markeres også som filtreret, hvis der modtages en ICMPunreachable-fejl (type 3, kode 0, 1, 2, 3, 9, 10 eller 13).
-sN
;-sF
;-sX
(TCP NULL-, FIN- og Xmas-scanninger)
Disse tre scanningstyper (endnu flere er mulige med indstillingen--scanflags
, der beskrives i næste afsnit) udnytter et subtilt smuthul i TCP-RFC’en til at skelne mellem open
– og closed
-porte. Side 65 i RFC 793 siger, at “hvis porttilstanden er CLOSED …. et indgående segment, der ikke indeholder en RST, medfører, at der sendes en RST som svar”. På næste side diskuteres pakker, der sendes til åbne porte uden SYN-, RST- eller ACK-bits indstillet, og der står følgende “
Når du scanner systemer, der er i overensstemmelse med denne RFC-tekst, vil enhver pakke, der ikke indeholder SYN-, RST- eller ACK-bits, resultere i en returneret RST, hvis porten er lukket, og intet svar overhovedet, hvis porten er åben. Så længe ingen af disse tre bits er inkluderet, er enhver kombination af de tre andre (FIN, PSH og URG) OK. Nmap udnytter dette med tre scanningstyper:
-sN
)
Sætter ikke nogen bits (TCP flag header er 0)
FIN scan (-sF
)
Sætter kun TCP FIN-bitten.
Xmas scan (-sX
)
Sætter FIN-, PSH- og URG-flagene, så pakken lyser op som et juletræ.
Disse tre scanningstyper har nøjagtig samme adfærd bortset fra de TCP-flag, der sættes i probe-pakker. Hvis der modtages en RST-pakke, betragtes porten som closed
, mens intet svar betyder, at den er open|filtered
. Porten markeres som filtered
, hvis der modtages en ICMP unreachable-fejl (type 3, code0, 1, 2, 3, 9, 10 eller 13).
Den vigtigste fordel ved disse scanningstyper er, at de kan snige sig igennem visse ikke-stateful firewalls og pakkefiltreringsroutere. En anden fordel er, at disse scanningstyper er lidt mere diskrete end selv en SYN-scanning. Du skal dog ikke regne med dette – de fleste moderne IDS-produkter kan konfigureres til at registrere dem. Den store ulempe er, at ikke alle systemer følger RFC 793 til punkt og prikke. En række systemer sender RST-svar til probes, uanset om porten er åben eller ej. Dette medfører, at alle porte får betegnelsen closed
. De vigtigste operativsystemer, der gør dette, er Microsoft Windows, mange Cisco-enheder, BSDI og IBM OS/400. Denne scanning virker dog mod de fleste Unix-baserede systemer. En anden ulempe ved disse scanninger er, at de ikke kan skelne open
-porte fra visse filtered
-porte, hvilket giver dig svaret open|filtered
.
-sA
(TCP ACK-scanning)
Denne scanning adskiller sig fra de andre hidtil omtalte, idet den aldrig bestemmer open
-porte (eller endda open|filtered
-porte). Den bruges til at kortlægge firewall-regelsæt, bestemme om de er stateful eller ej, og hvilke porte der filtreres.
ACK scan probe-pakken har kun ACK-flaget sat (medmindre du bruger --scanflags
). Ved scanning af ufiltrerede systemer vil open
og closed
-portene begge returnere en RST-pakke. Nmap mærker dem derefter somunfiltered
, hvilket betyder, at de kan nås afACK-pakken, men om de er open
ellerclosed
er ubestemt. Porte, der ikke svarer eller sender visse ICMP-fejlmeddelelser tilbage (type 3, kode 0, 1, 2, 3, 9, 10 eller 13), mærkes filtered
.
-sW
(TCP Window scan)
Window scan er nøjagtig det samme som ACK scan, bortset fra at det udnytter en implementeringsdetalje i visse systemer til at skelne åbne porte fra lukkede porte, i stedet for altid at udskriveunfiltered
, når der returneres en RST. Den gør dette ved at undersøge TCP Window-feltet i de returnerede RST-pakker. På nogle systemer bruger åbne porte en positiv vinduesstørrelse (selv for RST-pakker), mens lukkede porte har et vindue på nul. Så i stedet for altid at angive en port som unfiltered
, når den modtager en RST tilbage, angiver Window scan porten som open
eller closed
, hvis TCP Window-værdien i denne nulstilling er henholdsvis positiv eller nul.
Denne scanning er afhængig af en implementeringsdetalje i et mindretal af systemer ude på internettet, så du kan ikke altid stole på den. Systemer, der ikke understøtter den, vil normalt returnere alle porteclosed
. Det er selvfølgelig muligt, at maskinen i virkeligheden ikke har nogen åbne porte. Hvis de fleste scannede porte er closed
, men nogle få almindelige portnumre (f.eks. 22,25, 53) er filtered
, er systemet sandsynligvis modtageligt. Undertiden vil systemer endda vise den stik modsatte adfærd. Hvis din scanning viser 1.000 åbne porte og tre lukkede eller filtrerede porte, kan disse tre meget vel være de virkelig åbne.
-sM
(TCP Maimon-scanning)
Maimon-scanningen er opkaldt efter dens opdager, Uriel Maimon.Han beskrev teknikken iPhrack Magazine nummer 49 (november 1996).Nmap, som indeholdt denne teknik, blev udgivet to numre senere.Denne teknik er nøjagtig den samme som NULL-, FIN- og Xmas-scanninger, bortset fra, at sonden er FIN/ACK. I henhold til RFC 793 (TCP) skal der genereres en RST-pakke som svar på en sådan probe, uanset om porten er åben eller lukket. Uriel bemærkede dog, at mange BSD-afledte systemer simpelthen dropper pakken, hvis porten er åben.
--scanflags
(Custom TCP scan)
Virkeligt avancerede Nmap-brugere behøver ikke at begrænse sig til de tilbudte scannings-typer. Indstillingen --scanflags
giver dig mulighed for at designe din egen scanning ved at angive vilkårligeTCP-flag.Lad dine kreative safter flyde, mens du undgår indtrængningsdetektionssystemer, hvis leverandører blot bladrer i Nmap-manualsiden og tilføjer specifikke regler!
--scanflags
argumentet --scanflags
kan være en numerisk flagværdi som f.eks. 9 (PSH og FIN), men det er nemmere at bruge symbolske navne. Du skal blot sammensætte en hvilken som helst kombination af URG
,ACK
, PSH
,RST
, SYN
ogFIN
. F.eks. sætter --scanflagsURGACKPSHRSTSYNFIN
alt, selv om det ikke er særlig nyttigt til scanning. Rækkefølgen, som de angives i, er irrelevant.
Ud over at angive de ønskede flag kan du angive enTCP-scanningstype (f.eks. -sA
eller -sF
).Denne basistype fortæller Nmap, hvordan svarene skal fortolkes. F.eks. betragter en SYN-scanning no-response som et tegn på enfiltered
-port, mens en FIN-scanning behandler det samme somopen|filtered
. Nmap vil opføre sig på samme måde som for basisscanningstypen, bortset fra at den i stedet bruger de TCP-flag, du angiver. Hvis du ikke angiver en basistype, anvendes SYN-scanning.
-sZ
(SCTP COOKIE ECHO-scanning)
SCTP COOKIE ECHO-scanning er en mere avanceret SCTP-scanning. Den udnytter det faktum, at SCTP-implementationer stille og roligt skal droppe pakker, der indeholder COOKIE ECHO chunks på åbne porte, men sende en ABORT, hvis porten er lukket.Fordelen ved denne scanningstype er, at den ikke er så åbenlys en portscanning som en INIT-scanning. Der kan også være ikke-statefulfirewall-regelsæt, der blokerer INIT-chunks, men ikke COOKIE ECHOchunks. Lad dig ikke narre til at tro, at dette vil gøre en portscanning usynlig; et godt IDS vil også kunne registrere SCTPCOOKIE ECHO-scanninger.Ulempen er, at SCTP COOKIE ECHO-scanninger ikke kan skelne mellem open
og filtered
porte, så du står tilbage med tilstanden open|filtered
i begge tilfælde.
-sI
(idle scan)<zombie host>
Denne avancerede scanningsmetode giver mulighed for en virkelig blind TCP-portscanning af målet (hvilket betyder, at der ikke sendes nogen pakker til målet fra din rigtige IP-adresse). I stedet udnytter et unikt sidekanalangreb forudsigelig IP-fragmenterings-id-sekvensgenerering på zombieværten til at indsamle oplysninger om de åbne porte på målet. IDS-systemer vil vise, at scanningen kommer fra den zombie-maskine, du angiver (som skal være oppe og opfylde visse kriterier). Alle detaljer om denne fascinerende scanningstype findes i afsnittet “TCP Idle Scan (-sI
)”.
Udover at være ekstraordinært snigende (på grund af sin blinde natur), gør denne scanningstype det muligt at kortlægge IP-baserede tillidsrelationer mellem maskiner. Portlisten viser åbne porte fra zombieværtens perspektiv. Så du kan prøve at scanne et mål ved hjælp af forskellige zombier, som du mener kan have tillid til (via router-/pakkefilterregler).
Du kan tilføje et kolon efterfulgt af et portnummer til zombieværten, hvis du ønsker at undersøge en bestemt port på zombien for IP ID-ændringer. Ellers vil Nmap bruge den port, den bruger som standard til TCP-pings (80).
-sO
(IP-protokolscanning)
IP-protokolscanning giver dig mulighed for at bestemme, hvilke IP-protokoller (TCP, ICMP, IGMP osv.) der understøttes af målmaskinerne. Dette er teknisk set ikke en portscanning, da den gennemløber IP-protokolnumre i stedet for TCP- eller UDP-portnumre. Alligevel bruger den stadig indstillingen -p
til at vælge scannede protokolnumre, rapporterer sine resultater i det normale porttabelformat og bruger endda den samme underliggende scanningsmotor som de rigtige portscanningsmetoder. Så den er tæt nok på en portscanning til, at den hører til her.
Udover at være nyttig i sig selv, demonstrerer protokolscanning kraften i open-source software. Selv om den grundlæggende idé er ret enkel, havde jeg ikke tænkt på at tilføje den, og jeg har heller ikke modtaget nogen forespørgsler om en sådan funktionalitet. I sommeren 2000 fik Gerhard Rieger idéen, skrev en glimrende patch, der implementerede den, og sendte den til postlisten Announce (dengang kaldet nmap-hackers).Jeg indarbejdede patchen i Nmap-træet og frigav en ny version dagen efter. Kun få stykker kommerciel software har brugere, der er entusiastiske nok til at designe og bidrage med deres egne forbedringer!
Protocol scan fungerer på samme måde som UDP scan. I stedet for at iterere gennem portnummerfeltet i en UDP-pakke sender den IP-pakkehovedet og itererer gennem otte-bit IP-protokolfeltet.Hovedet er normalt tomt og indeholder ingen data og ikke engang den korrekte header for den påståede protokol. Undtagelserne er TCP,UDP, ICMP, SCTP og IGMP. En korrekt protokolheader for disse er inkluderet, da nogle systemer ellers ikke vil sende dem, og fordi Nmap allerede har funktioner til at oprette dem. I stedet for at holde øje med ICMP portunreachable-meddelelser er protocol scan på udkig efter ICMPprotocol unreachable-meddelelser. Hvis Nmap modtager et svar i en hvilken som helst protokol fra målværten, markerer Nmap denne protokol som open
. En ICMP-protokol uopnåelig-fejl (type 3, kode 2) medfører, at protokollen markeres som closed
, mens port uopnåelig (type 3, kode 3)markerer protokollen open
. Andre ICMP unreachable-fejl (type 3, kode0, 1, 9, 10 eller 13) får protokollen til at blive markeretfiltered
(selv om de samtidig beviser, at ICMP eropen
). Hvis der ikke modtages noget svar efter genudsendelser, bliver protokollen markeretopen|filtered
-b
(FTP bounce scan)<FTP relay host>
En interessant funktion i FTP-protokollen (RFC 959) issupport for såkaldte proxy FTP-forbindelser. Dette giver en bruger mulighed for at oprette forbindelse til en FTP-server og derefter bede om at få sendt filer til en tredjepartsserver. En sådan funktion er moden til misbrug på mange niveauer, så de fleste servere er ophørt med at understøtte den. En af de misbrugsmuligheder, som denne funktion giver mulighed for, er at få FTP-serveren til at portscanne andre værter.Du skal blot bede FTP-serveren om at sende en fil til hver interessant port på målværten på skift. Fejlmeddelelsen vil beskrive, om porten er åben eller ej. Dette er en god måde at omgå firewalls på, fordi organisatoriske FTP-servere ofte er placeret på steder, hvor de har mere adgang til andre interne værter end en almindelig internetvært. Nmap understøtter FTPbounce-scanning med indstillingen -b
. Den tager et argument af formen<username>
:<password>
@<server>
:<port>
.<Server>
er navnet eller IP-adressen på en sårbar FTP-server. Som med en normal URL kan du udelade<username>
:<password>
,i hvilket tilfælde anonyme loginoplysninger (user:anonymous
password:-wwwuser@
)anvendes. Portnummeret (og det forudgående kolon) kan også udelades, i hvilket tilfælde standard FTP-porten (21) på<server>
anvendes.
Denne sårbarhed var udbredt i 1997, da Nmap blev udgivet, men er stort set blevet rettet. Sårbare servere findes stadig rundt omkring, så det er værd at prøve, når alt andet fejler. Hvis det er dit mål at omgå en firewall, skal du scanne målnetværket for port 21 (eller endda for alle FTP-tjenester, hvis du scanner alle porte med versionsdetektion) og bruge scriptet ftp-bounce
NSE. Nmap vil fortælle dig, om værten er sårbar eller ej. Hvis du blot forsøger at dække dine spor, behøver du ikke at begrænse dig til værter på målnetværket (og bør faktisk ikke begrænse dig til værter på målnetværket). Før du scanner tilfældige internetadresser efter sårbare FTP-servere, skal du tænke på, at systemadministratorerne måske ikke bryder sig om, at du misbruger deres servere på denne måde.