-sS
(TCP SYN-sökning)
SYN-sökning är standardalternativet och det mest populära alternativet av goda skäl. Den kan utföras snabbt och skanna tusentals portar per sekund i ett snabbt nätverk som inte hindras av restriktiva brandväggar. Det är också relativt diskret och smygande eftersom det aldrig avslutar TCP-anslutningar. SYN-scanning fungerar mot alla kompatibla TCP-stackar snarare än att vara beroende av idiosynkrasier hos specifika plattformar som Nmaps FIN/NULL/Xmas-, Maimon- och idle-scanningar gör. Den möjliggör också en tydlig och tillförlitlig differentiering mellan open
, closed
och filtered
tillstånden.
Denna teknik kallas ofta för halvöppen skanning, eftersom du inte öppnar en fullständig TCP-anslutning. Du skickar ett SYN-paket, som om du skulle öppna en riktig anslutning och väntar sedan på svar. En SYN/ACK indikerar att porten lyssnar (öppen), medan enRST (återställning) indikerar att porten inte lyssnar. Om inget svar erhålls efter flera återutsändningar markeras porten som filtrerad. Porten markeras också som filtrerad om ett ICMP-fel som inte går att nå (typ 3, kod 0, 1, 2, 3, 9, 10 eller 13) tas emot. Porten betraktas också som öppen om ett SYN-paket (utan ACK-flaggan) tas emot som svar. Detta kan bero på en extremt sällsynt TCP-funktion som kallas en samtidig öppen eller delad handshake-anslutning (se https://nmap.org/misc/split-handshake.pdf).
-sT
(TCP connect scan)
TCP connect scan är standardtypen för TCP-scanning när SYN scan inte är ett alternativ. Detta är fallet när en användare inte har raw packetprivilegier. Istället för att skriva råa paket som de flesta andra skanningstyper gör, ber Nmap det underliggande operativsystemet att upprätta en anslutning med målmaskinen och port genom att utfärda systemanropet connect
. Detta är samma systemanrop på hög nivå som webbläsare, P2P-klienter och de flesta andra nätverksbaserade program använder för att upprätta en anslutning och är en del av ett programmeringsgränssnitt som kallas Berkeley SocketsAPI. Istället för att läsa råa paketsvar från tråden använder Nmap detta API för att få statusinformation om varje anslutningsförsök.
När SYN-scanning är tillgänglig är det vanligtvis ett bättre val. Nma har mindre kontroll över högnivå connect
samtalet än med råa paket, vilket gör det mindre effektivt. Systemet kallar till slut anslutningar till öppna målportar i stället för att utföra den halvöppna nollställning som SYN-sökning gör. Detta tar inte bara längre tid och kräver fler paket för att få samma information, utan det är också mer sannolikt att målmaskinerna loggar anslutningen. Ett anständigt IDS kommer att fånga upp båda, men de flesta maskiner har inget sådant larmsystem. Många tjänster på ett genomsnittligt Unix-system lägger till en notering till syslog, och ibland ett kryptiskt felmeddelande, när Nmap ansluter och sedan stänger anslutningen utan att skicka data. Riktigt patetiska tjänster kraschar när detta händer, men det är ovanligt. En administratör som ser en massa anslutningsförsök i sina loggar från ett enda system bör veta att hon har blivit anslutningsskannad.
-sU
(UDP-skanningar)
Men medan de flesta populära tjänsterna på Internet körs över TCP-protokollet, är UDP-tjänsterna vanligt förekommande. DNS, SNMP och DHCP (registrerade portar 53, 161/162 och 67/68) är tre av de vanligaste. Eftersom UDP-skanning i allmänhet är långsammare och svårare än TCP ignorerar vissa säkerhetsgranskare dessa portar. Detta är ett misstag, eftersom exploaterbara UDP-tjänster är ganska vanliga och angripare inte ignorerar hela protokollet. Lyckligtvis kan Nmap hjälpa till att inventeraUDP-portar.
UDP-skanning aktiveras med alternativet -sU
. Den kan kombineras med en TCP-skanningstyp som SYN-skanning (-sS
) för att kontrollera båda protokollen under samma körning.
UDP-skanning fungerar genom att skicka ett UDP-paket till varje målport. För vissa vanliga portar, t.ex. 53 och 161, skickas en protokollspecifik nyttolast för att öka svarsfrekvensen, men för de flesta portar är paketet tomt om inte alternativen --data
, --data-string
eller --data-length
har angetts.Om ett ICMP-fel för oåtkomlig port (typ 3, kod 3) returneras, är porten closed
. Andra ICMP-fel som inte går att nå (typ 3, kod 0, 1, 2, 9, 10 eller 13) markerar porten som filtered
. Ibland svarar en tjänst med ett UDP-paket som visar att det är open
. Om inget svar tas emot efter återutsändningar klassificeras porten som open|filtered
. Detta innebär att porten kan vara öppen eller att paketfilter blockerar kommunikationen. Versionsdetektering (-sV
) kan användas för att skilja de verkligt öppna portarna från de filtrerade.
En stor utmaning med UDP-scanning är att göra det snabbt.Öppna och filtrerade portar skickar sällan något svar, vilket gör att Nmap måste ta timeout och sedan göra omöverföringar ifall sonden eller svaret skulle ha gått förlorat. Stängda portar är ofta ett ännu större problem. de skickar vanligtvis tillbaka ett ICMP port unreachable fel. Men till skillnad från deRST-paket som skickas av stängda TCP-portar som svar på en SYN- eller connectscan begränsar många värdar som standardICMP-port unreachable-meddelanden.Linux och Solaris är särskilt strikta när det gäller detta. Linux 2.4.20-kärnan begränsar till exempel destination unreachable-meddelanden till ett per sekund (i net/ipv4/icmp.c
).
Nmap upptäcker hastighetsbegränsning och saktar ner i enlighet med detta för att undvika att nätverket översvämmas av onödiga paket som målmaskinen kommer att släppa. Tyvärr gör en Linux-liknande begränsning på ett paket per sekund att en genomsökning av 65 536 portar tar mer än 18 timmar. Idéer för att snabba upp dina UDP-skanningar är att skanna fler värdar parallellt, göra en snabb skanning av bara de populära portarna först, skanna bakom en brandvägg och använda --host-timeout
för att hoppa över långsamma värdar.
-sY
(SCTP INIT scan)
SCTP är ett relativt nytt alternativ till TCP- och UDP-protokollen, som kombinerar de flesta egenskaperna hos TCP och UDP, och som även lägger till nya funktioner som multi-homing och multi-streaming. Det används främst för SS7/SIGTRAN-relaterade tjänster, men har potential att även användas för andra tillämpningar.SCTP INIT scan är SCTP:s motsvarighet till en TCP SYN scan.Den kan utföras snabbt och skanna tusentals portar per sekund i ett snabbt nätverk som inte hindras av restriktiva brandväggar.Liksom SYN scan är INIT scan relativt diskret och smygande, eftersom den aldrig slutför SCTP-associationer. Den möjliggör också en tydlig och tillförlitlig differentiering mellan open
, closed
och filtered
tillstånden.
Denna teknik kallas ofta för halvöppen skanning,eftersom du inte öppnar en fullständig SCTP-association. Du skickar en INITchunk, som om du skulle öppna en riktig association och väntar sedan på ett svar. En INIT-ACK-chunk indikerar att porten lyssnar (öppen), medan en ABORT-chunk indikerar att porten inte lyssnar. Om inget svar tas emot efter flera omöverföringar markeras porten som filtrerad. Porten markeras också som filtrerad om ett ICMPunreachable-fel (typ 3, kod 0, 1, 2, 3, 9, 10 eller 13) tas emot.
-sN
;-sF
;-sX
(TCP NULL-, FIN- och Xmas-avläsningar)
Dessa tre avläsningstyper (ännu fler är möjliga med alternativet--scanflags
som beskrivs i nästa avsnitt) utnyttjar ett subtilt kryphål i TCP RFC för att skilja mellan portarna open
och closed
. På sidan 65 i RFC 793 står det att ”om portstatusen är CLOSED …. ett inkommande segment som inte innehåller en RST leder till att en RST skickas som svar”. På nästa sida diskuteras paket som skickas till öppna portar utan SYN-, RST- eller ACK-bitarna inställda: ”
När du skannar system som följer denna RFC-text kommer varje paket som inte innehåller SYN-, RST- eller ACK-bitar att resultera i ett returnerat RST om porten är stängd och inget svar alls om porten är öppen. Så länge ingen av dessa tre bitar ingår är alla kombinationer av de tre andra (FIN, PSH och URG) OK. Nmap utnyttjar detta med tre skanningstyper:
-sN
)
Sätter inga bitar (TCP flag header är 0)
FIN scan (-sF
)
Sätter bara TCP FIN-biten.
Xmas scan (-sX
)
Sätter FIN-, PSH- och URG-flaggorna och lyser upp paketet som en julgran.
De här tre skanningstyperna har exakt samma beteende med undantag för TCP-flaggorna som sätts i probe-paket. Om ett RST-paket tas emot betraktas porten som closed
, medan inget svar innebär att den är open|filtered
. Porten markerasfiltered
om ett ICMP unreachable error (typ 3, code0, 1, 2, 3, 9, 10 eller 13) tas emot.
Den viktigaste fördelen med dessa skanningstyper är att de kan smyga sig igenom vissa icke-stateful brandväggar och paketfilterroutrar. En annan fördel är att dessa skanningstyper är lite mer hemlighetsfulla än t.o.m. en SYN-skanning. Räkna dock inte med detta – de flesta moderna IDS-produkter kan konfigureras för att upptäcka dem. Den stora nackdelen är att alla system inte följer RFC 793 till punkt och pricka. Ett antal system skickar RST-svar på probes oavsett om porten är öppen eller inte. Detta leder till att alla portar märks med closed
. Viktiga operativsystem som gör detta är Microsoft Windows, många Cisco-enheter, BSDI och IBM OS/400. Den här skanningen fungerar dock mot de flesta Unix-baserade system. En annan nackdel med dessa skanningar är att de inte kan skilja open
-portar från vissa filtered
-portar, vilket gör att du får svaret open|filtered
.
-sA
(TCP ACK scan)
Denna skanning skiljer sig från de andra som diskuterats hittills genom att den aldrig bestämmer open
-portar (eller ens open|filtered
). Den används för att kartlägga regeluppsättningar för brandväggar, bestämma om de är stateful eller inte och vilka portar som filtreras.
Sonden för ACK-scanning har bara ACK-flaggan inställd (om du inte använder --scanflags
). Vid skanning av ofiltrerade system kommer portarna open
och closed
båda att returnera ett RST-paket. Nmap märker dem då som unfiltered
, vilket innebär att de är nåbara medACK-paketet, men om de är open
eller closed
är obestämt. Portar som inte svarar eller skickar tillbaka vissa ICMP-felmeddelanden (typ 3, kod 0, 1, 2, 3, 9, 10 eller 13) märks filtered
.
-sW
(TCP Window scan)
Window scan är exakt samma sak som ACK scan förutom att den utnyttjar en implementeringsdetalj i vissa system för att skilja öppna portar från stängda portar i stället för att alltid skriva ut unfiltered
när ett RST-meddelande returneras. Den gör detta genom att undersöka TCP Window-fältet i de returnerade RST-paketen. I vissa system använder öppna portar en positiv fönsterstorlek (även för RST-paket) medan stängda portar har ett nollfönster. Så istället för att alltid lista en port som unfiltered
när den får en RST tillbaka, listar Window scan porten som open
eller closed
om TCP Window-värdet i den återställningen är positivt respektive noll.
Den här skanningen förlitar sig på en implementeringsdetalj i en minoritet av system ute på Internet, så du kan inte alltid lita på den. System som inte har stöd för den kommer vanligtvis att returnera alla portarclosed
. Det är naturligtvis möjligt att maskinen verkligen inte har några öppna portar. Om de flesta scannade portar är closed
men några vanliga portnummer (t.ex. 22, 25, 53) är filtered
, är systemet troligen känsligt. Ibland uppvisar systemen till och med det rakt motsatta beteendet. Om din skanning visar 1 000 öppna portar och tre stängda eller filtrerade portar kan dessa tre mycket väl vara de verkligt öppna.
-sM
(TCP Maimon scan)
Maimon scan är uppkallad efter sin upptäckare, Uriel Maimon.Han beskrev tekniken iPhrack Magazine nummer 49 (november 1996).Nmap, som inkluderade tekniken, släpptes två nummer senare.Tekniken är exakt densamma som NULL-, FIN- och Xmas-scanningar, förutom att sonden är FIN/ACK. Enligt RFC 793 (TCP) ska ett RST-paket genereras som svar på en sådan sond oavsett om porten är öppen eller stängd. Uriel noterade dock att många BSD-baserade system helt enkelt släpper paketet om porten är öppen.
--scanflags
(Custom TCP scan)
Verkligen avancerade Nmap-användare behöver inte begränsa sig till de scan-typer som erbjuds. Alternativet --scanflags
gör det möjligt för dig att utforma din egen skanning genom att ange godtyckligaTCP-flaggor.Låt dina kreativa krafter flöda, samtidigt som du undviker intrångsdetekteringssystem vars leverantörer helt enkelt bläddrar igenom Nmap-manualsidan och lägger till specifika regler!
Argumentet --scanflags
kan vara ett numeriskt flaggvärde, t.ex. 9 (PSH och FIN), men det är enklare att använda symboliska namn. Det är bara att slå ihop en kombination av URG
,ACK
, PSH
,RST
, SYN
ochFIN
. Till exempel --scanflagsURGACKPSHRSTSYNFIN
ställer in allt, även om det inte är särskilt användbart för skanning. Ordningen i vilken dessa anges är irrelevant.
Förutom att ange de önskade flaggorna kan du ange enTCP-scanningstyp (t.ex. -sA
eller -sF
).Denna bastyp talar om för Nmap hur svaren ska tolkas. Exempelvis anser en SYN-skanning att inget svar indikerar en filtered
-port, medan en FIN-skanning behandlar samma sak som open|filtered
. Nmap kommer att bete sig på samma sätt som för basskanningstypen, förutom att den kommer att använda de TCP-flaggor som du anger i stället. Om du inte anger någon bastyp används SYN-scanning.
-sZ
(SCTP COOKIE ECHO-scanning)
SCTP COOKIE ECHO-scanning är en mer avancerad SCTP-scanning. Den drar nytta av det faktum att SCTP-implementationer tyst ska släppa paket som innehåller COOKIE ECHO-bitar på öppna portar, men skicka ett ABORT om porten är stängd.Fördelen med den här skanningstypen är att den inte är lika uppenbart en portskanning som en INIT-skanning. Det kan också finnas icke-stateful brandväggsregler som blockerar INIT-chunks, men inte COOKIE ECHOchunks. Låt dig inte luras att tro att detta kommer att göra en portscanning osynlig; ett bra IDS kommer att kunna upptäcka SCTPCOOKIE ECHO-scanningar också.Nackdelen är att SCTP COOKIE ECHO-scanningar inte kan skilja mellan open
och filtered
portar, vilket gör att du får statusen open|filtered
i båda fallen.
-sI
(idle scan)<zombie host>
Denna avancerade skanningsmetod gör det möjligt att göra en verkligt blind TCP-portskanning av målet (vilket innebär att inga paket skickas till målet från din riktiga IP-adress). Istället utnyttjar en unik sidokanalsattack förutsägbar generering av ID-sekvenser för IP-fragmentering på zombievärden för att samla information om öppna portar på målet. IDS-system visar att skanningen kommer från den zombiemaskin du anger (som måste vara igång och uppfylla vissa kriterier). Fullständiga uppgifter om denna fascinerande skanningstyp finns i avsnittet ”TCP Idle Scan (-sI
)”.
Förutom att den här skanningstypen är utomordentligt smygande (på grund av sin blinda natur), gör den det möjligt att kartlägga IP-baserade förtroenderelationer mellan maskiner. Portförteckningen visar öppna portar ur zombievärdens perspektiv. Du kan alltså prova att skanna ett mål med hjälp av olika zombies som du tror kan vara betrodda (via router/paketfilterregler).
Du kan lägga till ett kolon följt av ett portnummer till zombievärden om du vill undersöka en viss port på zombien för ändringar av IP-ID. Annars kommer Nmap att använda den port som används som standard för TCP-pings (80).
-sO
(IP-protokollsökning)
IP-protokollsökning gör det möjligt att fastställa vilka IP-protokoll (TCP, ICMP, IGMP etc.) som stöds av målmaskinerna. Detta är tekniskt sett inte en portskanning, eftersom den går igenom IP-protokollnummer snarare än TCP- eller UDP-portnummer. Ändå använder den fortfarande alternativet -p
för att välja skannade protokollnummer, rapporterar sina resultat i det normala porttabellformatet och använder till och med samma underliggande skanningsmotor som de riktiga portskannningsmetoderna. Så den är tillräckligt nära en portskanning för att höra hemma här.
Förutom att den är användbar i sin egen rätt, visar protokollskanning kraften hos programvara med öppen källkod. Även om den grundläggande idén är ganska enkel hade jag inte tänkt på att lägga till den och jag har inte heller fått några förfrågningar om sådan funktionalitet. Sommaren 2000 kom Gerhard Rieger på idén, skrev en utmärkt patch som implementerade den och skickade den till sändlistan Announce (som då hette nmap-hackers).Jag införlivade patchen i Nmap-trädet och släppte en ny version nästa dag. Få kommersiella programvaror har användare som är tillräckligt entusiastiska för att utforma och bidra med egna förbättringar!
Protocol scan fungerar på samma sätt som UDP scan. Istället för att iterera genom portnummerfältet i ett UDP-paket skickas IP-paketets rubriker och itereras genom det åttabitariga IP-protokollfältet.Rubrikerna är vanligtvis tomma och innehåller inga data och inte ens den korrekta rubriken för det påstådda protokollet. Undantagen är TCP,UDP, ICMP, SCTP och IGMP. Ett korrekt protokollhuvud för dessa ingår eftersom vissa system inte skickar dem annars och eftersom Nmap redan har funktioner för att skapa dem. Istället för att leta efter ICMP portunreachable-meddelanden letar protocol scan efter ICMPprotocol unreachable-meddelanden. Om Nmap får något svar i något protokoll från målvärden markerar Nmap det protokollet som open
. Ett ICMP-protokollfel som inte går att nå (typ 3, kod 2) gör att protokollet markeras som closed
medan port unreachable (typ 3, kod 3) markerar protokollet som open
. Andra ICMP unreachable-fel (typ 3, kod0, 1, 9, 10 eller 13) gör att protokollet markerasfiltered
(även om de samtidigt bevisar att ICMP äropen
). Om inget svar tas emot efter återutsändningar markeras protokolletopen|filtered
-b
(FTP bounce scan)<FTP relay host>
En intressant funktion i FTP-protokollet (RFC 959) issupport för så kallade proxy FTP-anslutningar. Detta gör det möjligt för en användare att ansluta sig till en FTP-server och sedan begära att filer skickas till en tredjepartsserver. En sådan funktion är mogen för missbruk på många nivåer, så de flesta servrar har slutat stödja den. Ett av de missbruk som denna funktion möjliggör är att få FTP-servern att portscanna andra värdar.Be FTP-servern att skicka en fil till varje intressant port på målvärden i tur och ordning. Felmeddelandet kommer att beskriva om porten är öppen eller inte. Detta är ett bra sätt att kringgå brandväggar eftersom organisationers FTP-servrar ofta är placerade så att de har större tillgång till andra interna värdar än vad vilken vanlig Internetvärd som helst skulle ha. Nmap stöder FTPbounce-sökning med alternativet -b
. Det tar emot ett argument av formen <username>
:<password>
@<server>
:<port>
.<Server>
är namnet eller IP-adressen på en sårbar FTP-server. Precis som med en vanlig URL kan du utelämna<username>
:<password>
, i vilket fall anonyma inloggningsuppgifter (user:anonymous
password:-wwwuser@
) används. Portnumret (och det föregående kolonet) kan också utelämnas, i så fall används standard FTP-porten (21) på<server>
.
Denna sårbarhet var utbredd 1997 när Nmap släpptes, men har till stor del rättats till. Sårbara servrar finns fortfarande kvar, så det är värt att försöka när allt annat misslyckas. Om du vill kringgå en afirewall kan du skanna målnätverket för port 21 (eller till och med för FTP-tjänster om du skannar alla portar med versiondetektering) och använda skriptet ftp-bounce
NSE. Nmap talar om för dig om värddatorn är sårbar eller inte. Om du bara försöker att täcka dina spår behöver du inte (och bör faktiskt inte) begränsa dig till värdar i målnätverket. Innan du börjar söka igenom slumpmässiga Internetadresser efter sårbara FTP-servrar, tänk på att systemadministratörerna kanske inte uppskattar att du missbrukar deras servrar på detta sätt.