-sS
(TCP SYN scan)
SYN scan is om goede redenen de standaard en meest populaire scanoptie. Deze kan snel worden uitgevoerd, waarbij duizenden poorten per seconde worden gescand op een snel netwerk dat niet wordt gehinderd door beperkende firewalls. Het is ook relatief onopvallend en heimelijk omdat het nooit TCP-connecties afrondt. SYN scan werkt tegen elke compatibele TCP stack in plaats van afhankelijk te zijn van de eigenaardigheden van specifieke platformen zoals Nmap’sFIN/NULL/Xmas, Maimon en idle scans doen. Het maakt ook duidelijk, betrouwbaar onderscheid tussen de open
, closed
, en filtered
toestanden.
Deze techniek wordt vaak aangeduid als half-open scanning, omdat je geen volledige TCP verbinding opent. Je stuurt een SYN pakket, alsof je een echte verbinding gaat openen en wacht dan op antwoord. Een SYN/ACK geeft aan dat de poort luistert (open is), terwijl een RST (reset) aangeeft dat er niet geluisterd wordt. Als na een aantal retransmissies geen antwoord wordt ontvangen, wordt de poort gemarkeerd als gefilterd. De poort wordt ook gemarkeerd als gefilterd als een ICMP unreachable error (type 3, code 0, 1, 2, 3, 9, 10, of 13) wordt ontvangen. De poort wordt ook als open beschouwd als een SYN pakket (zonder de ACK vlag) als antwoord wordt ontvangen. Dit kan het gevolg zijn van een uiterst zeldzame TCP-functie die bekend staat als een gelijktijdige open of gesplitste handshake-verbinding (zie https://nmap.org/misc/split-handshake.pdf).
-sT
(TCP connect scan)
TCP connect scan is het standaard TCP-scantype wanneer SYN scan geen optie is. Dit is het geval wanneer een gebruiker geen raw packetprivileges heeft. In plaats van rawpackets te schrijven zoals de meeste andere scantypes doen, vraagt Nmap het onderliggende besturingssysteem om een verbinding op te zetten met de doelmachine en de poort door de connect
system call uit te voeren. Dit is dezelfde high-level system call die web browsers, P2P clients, en de meeste andere netwerk-geschikte applicaties gebruiken om een verbinding op te zetten. Het is onderdeel van een programmeer interface die bekend staat als de Berkeley SocketsAPI. In plaats van ruwe pakketreacties van de draad te lezen, gebruikt Nmap deze API om statusinformatie over elke verbindingspoging te verkrijgen.
Wanneer SYN scan beschikbaar is, is het meestal een betere keuze. Nmaph heeft minder controle over de aanroep op hoog niveau connect
dan bij ruwe pakketten, waardoor deze minder efficiënt is. De systeemaanroep voltooit verbindingen naar open doelpoorten in plaats van de half-open reset uit te voeren die SYN-scan doet. Niet alleen duurt dit langer en zijn er meer pakketten nodig om dezelfde informatie te verkrijgen, maar doelmachines zullen de verbinding waarschijnlijk ook loggen. Een fatsoenlijke IDS zal beide detecteren, maar de meeste machines hebben zo’n alarmsysteem niet. Veel diensten op een doorsnee Unix systeem zullen een notitie toevoegen aan syslog, en soms een cryptische foutmelding, wanneer Nmap verbinding maakt en vervolgens de verbinding verbreekt zonder gegevens te verzenden. Echt zielige diensten crashen wanneer dit gebeurt, maar dat is niet gebruikelijk. Een beheerder die een heleboel verbindingspogingen ziet in haar logs van een enkel systeem zou moeten weten dat er een connectie is gescand.
-sU
(UDP scans)
De meeste populaire diensten op het Internet lopen over het TCP-protocol, maar UDP diensten worden veel gebruikt. DNS, SNMP, en DHCP (geregistreerd op poorten 53, 161/162, en 67/68) zijn drie van de meest voorkomende. Omdat het scannen van UDP over het algemeen langzamer en moeilijker is dan TCP, negeren sommige beveiligingscontroleurs deze poorten. Dit is een vergissing, aangezien exploiteerbare UDP diensten vrij algemeen zijn en aanvallers zeker niet het hele protocol negeren. Gelukkig kan Nmap helpen bij het inventariseren van UDP poorten.
UDP scan wordt geactiveerd met de -sU
optie. Het kan worden gecombineerd met een TCP scantype zoals SYN scan(-sS
) om beide protocollen te controleren tijdens dezelfde run.
UDP scan werkt door het verzenden van een UDP-pakket naar elke beoogde poort. Voor sommige veel voorkomende poorten, zoals 53 en 161, wordt een protocol-specifieke payload verzonden om de respons te verhogen, maar voor de meeste poorten is het pakket leeg tenzij de --data
,--data-string
, of --data-length
opties zijn gespecificeerd. Als een ICMP port unreachable error (type 3, code 3) wordt geretourneerd, is de poort closed
. Andere ICMP onbereikbare fouten (type 3, codes 0, 1, 2, 9, 10, of 13) markeren de poort als filtered
. Af en toe zal de dienst antwoorden met een UDP pakket, dat bewijst dat het open
is. Als na heruitzending geen antwoord wordt ontvangen, wordt de poort aangemerkt als open|filtered
. Dit betekent dat de poort open kan zijn, of dat er misschien pakketfilters zijn die de communicatie blokkeren. Versiedetectie (-sV
) kan worden gebruikt om de echt open poorten te onderscheiden van de gefilterde.
Een grote uitdaging met UDP scannen is om het snel te doen.Open en gefilterde poorten sturen zelden een reactie, waardoor Nmap een time-out moet nemen en dan hertransmissies moet uitvoeren voor het geval de probe of het antwoord verloren is gegaan. Gesloten poorten zijn vaak een nog groter probleem. Ze sturen meestal een ICMP port unreachable error terug. Maar in tegenstelling tot de RST pakketten die door gesloten TCP poorten worden verstuurd als antwoord op een SYN of connectscan, beperken veel hosts standaardICMP port unreachable berichten. Linux en Solaris zijn hier bijzonder strikt in. Bijvoorbeeld, de Linux 2.4.20 kernel beperkt destination unreachable berichten tot één per seconde (in net/ipv4/icmp.c
).
Nmap detecteert rate limiting en vertraagt dienovereenkomstig om te voorkomen dat het netwerk overspoeld wordt met nutteloze pakketten die de doelmachine zal laten vallen. Helaas zorgt een Linux-achtige limiet van één pakket per seconde ervoor dat een scan van 65.536 poorten meer dan 18 uur duurt. Ideeën om uw UDP scans te versnellen zijn onder andere meer hosts parallel scannen, eerst een snelle scan doen van alleen de populaire poorten, scannen van achter de firewall, en --host-timeout
gebruiken om trage hosts over te slaan.
-sY
(SCTP INIT scan)
SCTP is een relatief nieuw alternatief voor de TCP en UDP protocollen, waarbij de meeste karakteristieken van TCP en UDP worden gecombineerd, en ook nieuwe mogelijkheden zoals multi-homing en multi-streaming worden toegevoegd. SCTP INIT scan is het SCTP equivalent van een TCP SYN scan. Het kan snel worden uitgevoerd, door duizenden poorten per seconde te scannen op een snel netwerk dat niet wordt gehinderd door restrictieve firewalls. Net als SYN scan is INIT scan relatief onopvallend en heimelijk, omdat het nooit SCTP associaties voltooit. Het maakt ook duidelijk, betrouwbaar onderscheid tussen de open
, closed
, en filtered
-states.
Deze techniek wordt vaak aangeduid als half-open scanning, omdat je geen volledige SCTP associatie opent. Je stuurt een INITchunk, alsof je een echte associatie gaat openen en wacht dan op een antwoord. Een INIT-ACK chunk geeft aan dat de poort luistert (open is), terwijl een ABORT chunk aangeeft dat er niet geluisterd wordt. Als na een aantal retransmissies geen antwoord wordt ontvangen, wordt de poort gemarkeerd als gefilterd. De poort wordt ook gemarkeerd als gefilterd als een ICMPunreachable error (type 3, code 0, 1, 2, 3, 9, 10, of 13) wordt ontvangen.
-sN
;-sF
;-sX
(TCP NULL, FIN, en Xmas scans)
Deze drie scantypes (er zijn er nog meer mogelijk met de--scanflags
optie die in de volgende sectie wordt beschreven) maken gebruik van een subtiele maas in de TCP RFC om onderscheid te maken tussen open
enclosed
poorten. Pagina 65 van RFC 793 zegt dat “als de port state is CLOSED …. een inkomend segment dat geen RST bevat, een RST als antwoord veroorzaakt.” Dan bespreekt de volgende pagina pakketten die naar open poorten worden gestuurd zonder dat de SYN, RST, of ACKbits zijn ingesteld, waarbij wordt gesteld dat: “het is onwaarschijnlijk dat u hier komt, maar als u hier komt, laat dit segment dan vallen en keer terug.”
Wanneer systemen worden gescand die voldoen aan deze RFC tekst, zal elk pakket dat geen SYN, RST, of ACK bits bevat resulteren in een geretourneerde RST als de poort gesloten is en helemaal geen antwoord als de poort open is. Zolang geen van deze drie bits aanwezig is, is elke combinatie van de andere drie (FIN, PSH, en URG) OK. Nmap maakt hier gebruik van met drie soorten scans:
-sN
)
Stelt geen bits in (TCP flag header is 0)
FIN scan (-sF
)
Stelt alleen de TCP FIN bit in.
Xmas scan (-sX
)
Stelt de FIN, PSH, en URG vlaggen in, en verlicht het pakket als een kerstboom.
Deze drie scan types zijn precies hetzelfde in gedrag, behalve de TCP vlaggen die in probe pakketten worden gezet. Als een RST pakket wordt ontvangen, wordt de poort beschouwd als closed
, terwijl geen reactie betekent dat het open|filtered
is. De poort wordt gemarkeerd als filtered
als een ICMP unreachable error (type 3, code0, 1, 2, 3, 9, 10, of 13) wordt ontvangen.
Het belangrijkste voordeel van deze scantypes is dat ze door bepaalde non-stateful firewalls en packet filteringrouters heen kunnen sluipen. Een ander voordeel is dat deze scantypes een beetje heimelijker zijn dan zelfs een SYN scan. Reken hier echter niet op-meeste moderne IDS producten kunnen geconfigureerd worden om ze te detecteren. Het grote nadeel is dat niet alle systemen RFC 793 naar de letter volgen. Een aantal systemen stuurt RST antwoorden naar de probes ongeacht of de poort open is of niet. Dit zorgt ervoor dat alle poorten worden gelabeld als closed
. De belangrijkste besturingssystemen die dit doen zijn Microsoft Windows, veel Cisco apparaten, BSDI, en IBM OS/400. Deze scan werkt echter wel tegen de meeste Unix-gebaseerde systemen. Een ander nadeel van deze scans is dat ze geen onderscheid kunnen maken tussen open
poorten en bepaalde filtered
poorten, waardoor u het antwoordopen|filtered
krijgt.
-sA
(TCP ACK scan)
Deze scan verschilt van de andere die tot nu toe zijn besproken in die zin dat hij nooit open
(of zelfsopen|filtered
) poorten bepaalt. Het wordt gebruikt om firewall regelsets in kaart te brengen, door te bepalen of ze stateful zijn of niet en welke poorten gefilterd zijn.
Het ACK scan probe pakket heeft alleen de ACK vlag ingesteld (tenzij u --scanflags
gebruikt). Bij het scannen van ongefilterde systemen zullen de open
en closed
poorten beide een RST pakket terugsturen. Nmap labelt ze dan alsunfiltered
, wat betekent dat ze bereikbaar zijn met hetACK pakket, maar of ze open
ofclosed
zijn wordt niet bepaald. Poorten die niet reageren, of bepaalde ICMP foutmeldingen terugsturen (type 3, code 0, 1, 2, 3, 9, 10, of 13), worden gelabeld als filtered
.
-sW
(TCP Window scan)
Window scan is precies hetzelfde als ACK scan, behalve dat het gebruik maakt van een implementatie detail van bepaalde systemen om open poorten van gesloten poorten te onderscheiden, in plaats van altijdunfiltered
af te drukken wanneer een RST wordt geretourneerd. Het doet dit door het TCP Window veld van de geretourneerde RST pakketten te onderzoeken. Op sommige systemen gebruiken open poorten een positieve window grootte (zelfs voor RST pakketten) terwijl gesloten poorten een window van nul hebben. Dus in plaats van een poort altijd te vermelden als unfiltered
wanneer het een RST terugkrijgt, vermeldt Window scan de poort als open
ofclosed
als de TCP Window waarde in die reset respectievelijk positief of nul is.
Deze scan vertrouwt op een implementatiedetail van een minderheid van de systemen op het Internet, dus je kunt er niet altijd op vertrouwen. Systemen die het niet ondersteunen zullen meestal alle poortenclosed
teruggeven. Het is natuurlijk mogelijk dat de machine echt geen open poorten heeft. Als de meeste gescande poortenclosed
zijn, maar een paar veel voorkomende poortnummers (zoals 22,25, 53) zijn filtered
, dan is het systeem hoogstwaarschijnlijk vatbaar. Soms vertonen systemen zelfs precies het tegenovergestelde gedrag. Als je scan 1000 open poorten laat zien en drie gesloten of gefilterde poorten, dan kunnen die drie heel goed de echt open poorten zijn.
-sM
(TCP Maimon scan)
De Maimon scan is genoemd naar de ontdekker ervan, Uriel Maimon. Hij beschreef de techniek in Phrack Magazine issue #49 (November 1996).Nmap, die deze techniek bevatte, werd twee nummers later uitgebracht.Deze techniek is precies hetzelfde als NULL, FIN, en Xmas scans, behalve dan dat de probe FIN/ACK is. Volgens RFC 793 (TCP), zou een RST pakket gegenereerd moeten worden als antwoord op zo’n probe, of de poort nu open of gesloten is. Uriel merkte echter op dat veel BSD-afgeleide systemen het pakket gewoon laten vallen als de poort open is.
--scanflags
(Custom TCP scan)
De echt geavanceerde Nmap gebruikers hoeven zich niet te beperken tot de aangeboden scantypes. Met de optie --scanflags
kunt u uw eigen scan ontwerpen door willekeurige TCP-vlaggen op te geven. Laat uw creatieve sappen de vrije loop, terwijl u inbraakdetectiesystemen ontwijkt waarvan de verkopers gewoon de Nmap man page doorbladeren om specifieke regels toe te voegen!
Het --scanflags
argument kan een numerieke vlagwaarde zijn, zoals 9 (PSH en FIN), maar het gebruik van symbolische namen is eenvoudiger. Gewoon een willekeurige combinatie van URG
,ACK
, PSH
,RST
, SYN
, enFIN
door elkaar prakken. Bijvoorbeeld, --scanflagsURGACKPSHRSTSYNFIN
stelt alles in, hoewel het niet erg bruikbaar is voor scannen. De volgorde waarin deze worden gespecificeerd is niet relevant.
Naast het specificeren van de gewenste vlaggen, kunt u eenTCP scantype specificeren (zoals -sA
of -sF
).Dat basistype vertelt Nmap hoe de antwoorden moeten worden geïnterpreteerd. Bijvoorbeeld, een SYN scan beschouwt geen antwoord als eenfiltered
poort, terwijl een FIN scan hetzelfde behandelt alsopen|filtered
. Nmap zal zich op dezelfde manier gedragen als het basisscantype, behalve dat het in plaats daarvan de TCP-vlaggen zal gebruiken die u specificeert. Als u geen basistype opgeeft, wordt SYN-scan gebruikt.
-sZ
(SCTP COOKIE ECHO-scan)
SCTP COOKIE ECHO-scan is een meer geavanceerde SCTP-scan. Het maakt gebruik van het feit dat SCTP-implementaties pakketten met COOKIE ECHO chunks op open poorten stil moeten laten vallen, maar een ABORT moeten sturen als de poort gesloten is. Het voordeel van dit scantype is dat het niet zo’n voor de hand liggende poortscan is als een INIT scan. Ook kunnen er niet-statulfirewall regelsets zijn die INIT chunks blokkeren, maar niet COOKIE ECHOchunks. Laat u niet misleiden door te denken dat dit een poortscan onzichtbaar maakt; een goede IDS zal ook SCTPCOOKIE ECHO scans kunnen detecteren. Het nadeel is dat SCTP COOKIE ECHO scans geen onderscheid kunnen maken tussen open
en filtered
ports, waardoor u in beide gevallen de toestand open|filtered
overhoudt.
-sI
(idle scan)<zombie host>
Deze geavanceerde scanmethode maakt een echte blinde TCP poortscan van het doel mogelijk (wat betekent dat er geen pakketten naar het doel worden verzonden vanaf uw echte IP-adres). In plaats daarvan maakt een unieke side-channel aanval gebruik van voorspelbare IP fragmentatie ID sequentie generatie op de zombie host om informatie te verzamelen over de open poorten op het doelwit. IDS-systemen zullen de scan weergeven als afkomstig van de zombiemachine die u opgeeft (en die actief moet zijn en aan bepaalde criteria moet voldoen). Volledige details over dit fascinerende scantype staan in het gedeelte “TCP Idle Scan (-sI
)”.
Naast dat het buitengewoon stealthy is (vanwege zijn blinde karakter), maakt dit scantype het mogelijk om IP-gebaseerde vertrouwensrelaties tussen machines in kaart te brengen. De poortlijst toont open poorten vanuit het perspectief van de zombiehost. Je kunt dus proberen een doelwit te scannen met verschillende zombies waarvan je denkt dat ze te vertrouwen zijn (via router/pakketfilter regels).
Je kunt een dubbele punt gevolgd door een poortnummer aan de zombiehost toevoegen als je een bepaalde poort op de zombie wilt peilen op IP ID veranderingen. Anders zal Nmap de poort gebruiken die standaard gebruikt wordt voor TCP pings (80).
-sO
(IP protocol scan)
IP protocol scan staat je toe om te bepalen welke IP protocollen (TCP, ICMP, IGMP, etc.) ondersteund worden door doelmachines. Dit is technisch gezien geen poortscan, omdat het door IP-protocolnummers loopt in plaats van TCP- of UDP-poortnummers. Toch gebruikt het nog steeds de-p
optie om gescande protocol nummers te selecteren, rapporteert het zijn resultaten in het normale poort tabel formaat, en gebruikt het zelfs dezelfde onderliggende scan engine als de echte poort scan methoden. Het komt dus dicht genoeg in de buurt van een poortscan dat het hier thuishoort.
Het protocol scannen is niet alleen nuttig op zichzelf, het toont ook de kracht van open-source software aan. Hoewel het basisidee vrij eenvoudig is, had ik er niet aan gedacht om het toe te voegen en had ik ook geen verzoeken voor een dergelijke functionaliteit ontvangen. In de zomer van 2000 bedacht Gerhard Rieger het idee, schreef een uitstekende patch om het te implementeren en stuurde het naar de Nmap mailing list (toen nmap-hackers genaamd). Ik nam die patch op in de Nmap tree en bracht de volgende dag een nieuwe versie uit. Weinig commerciële software heeft gebruikers die enthousiast genoeg zijn om hun eigen verbeteringen te ontwerpen en bij te dragen!
Protocol scan werkt op een vergelijkbare manier als UDP scan. In plaats van het poortnummerveld van een UDP-pakket te doorlopen, wordt de header van een IP-pakket doorlopen en wordt het acht-bits IP-protocolveld doorlopen. De headers zijn meestal leeg, bevatten geen gegevens en zelfs niet de juiste header voor het geclaimde protocol. De uitzonderingen zijn TCP, UDP, ICMP, SCTP, en IGMP. Een correcte protocol header voor deze is inbegrepen, omdat sommige systemen ze anders niet zullen sturen en omdat Nmap al functies heeft om ze te maken. In plaats van te kijken naar ICMP portunreachable berichten, kijkt protocol scan uit naar ICMPprotocol unreachable berichten. Als Nmap een antwoord in een willekeurig protocol ontvangt van de doelhost, markeert Nmap dat protocol als open
. Een ICMP protocol onbereikbaar-fout (type 3, code 2) zorgt ervoor dat het protocol wordt gemarkeerd alsclosed
, terwijl poort onbereikbaar (type 3, code 3) het protocol markeert als open
. Andere ICMP unreachable errors (type 3, code0, 1, 9, 10, of 13) zorgen ervoor dat het protocol wordt gemarkeerd alsfiltered
(hoewel ze tegelijkertijd bewijzen dat ICMPopen
is). Als na heruitzendingen geen antwoord wordt ontvangen, wordt het protocol gemarkeerdopen|filtered
-b
(FTP bounce scan)<FTP relay host>
Een interessante eigenschap van het FTP-protocol (RFC 959) biedt ondersteuning voor zogenaamde proxy FTP-verbindingen. Hiermee kan een gebruiker verbinding maken met een FTP-server en vervolgens vragen om bestanden naar een server van een derde partij te sturen. Een dergelijke mogelijkheid is rijp voor misbruik op vele niveaus, dus de meeste servers hebben de ondersteuning ervan gestaakt. Een van de vormen van misbruik die deze feature mogelijk maakt is het laten scannen van poorten van andere hosts door de FTP server. Vraag de FTP server simpelweg om een bestand te sturen naar elke interessante poort van de doelhost. De foutmelding zal aangeven of de poort open is of niet. Dit is een goede manier om firewalls te omzeilen omdat organisatorische FTP servers vaak geplaatst worden waar ze meer toegang hebben tot andere interne hosts dan eender welke oude Internet host zou doen. Nmap ondersteunt FTP-bounce scan met de -b
optie. Deze neemt een argument van de vorm<username>
:<password>
@<server>
:<port>
.<Server>
is de naam of het IP adres van een kwetsbare FTP server. Net als bij een normale URL kunt u<username>
:<password>
weglaten, in welk geval anonieme inloggegevens (user:anonymous
wachtwoord:-wwwuser@
) worden gebruikt. Het poortnummer (en de voorafgaande dubbele punt) mag ook worden weggelaten, in welk geval de standaard FTP poort (21) op<server>
wordt gebruikt.
Deze kwetsbaarheid was wijdverbreid in 1997 toen Nmap werd uitgebracht, maar is grotendeels verholpen. Kwetsbare servers zijn nog steeds in omloop, dus het is het proberen waard als al het andere faalt. Als het omzeilen van een firewall uw doel is, scan dan het doelnetwerk op poort 21 (of ook op FTP diensten als u alle poorten scant met versie-detectie) en gebruik hetftp-bounce
NSE script. Nmap zal u vertellen of de host kwetsbaar is of niet. Als u alleen uw sporen probeert uit te wissen, hoeft u zich niet te beperken (en zou u zich in feite niet moeten beperken) tot hosts op het doelnetwerk. Voordat je willekeurige Internet adressen gaat scannen voor kwetsbare FTP servers, bedenk dat systeembeheerders het niet op prijs stellen dat je hun servers op deze manier misbruikt.