En hurtig vejledning i portscanning
Et af mine mål med at udvikle Nmap er at holde den mest almindelige brug enkel, samtidig med at jeg bevarer fleksibiliteten til brugerdefinerede og avancerede scanninger. Dette er opnået med kommandolinjeinterfacet ved at tilbyde snesevis af muligheder, men vælge fornuftige standardindstillinger når de ikke er specificeret. En nybegynder kan starte med en så simpel kommando somnmap <target>
.Imens kan avancerede brugere nogle gange angive så mange muligheder, at deres terminallinje bliver uoverskuelig.
En lignende balance skal opnås med kommandoudgangen. De vigtigste resultater skal stå tydeligt frem, selv for den lejlighedsvise bruger, som ikke engang har læst man-siden. Alligevel skal outputtet være omfattende og præcist nok til at passe til professionelle penetrationstestere, som dagligt kører Nmap mod tusindvis af maskiner. Brugere, der er kloge nok til at læse denne bog eller Nmap-kildekoden, får større kontrol over scanneren og indsigt i, hvad Nmap-uddata virkelig betyder.
Denne vejledning demonstrerer nogle almindelige Nmap-portscanningsscenarier og forklarer output. Snarere end at forsøge at være omfattende, er målet blot at gøre nye brugere godt nok bekendt til at forstå resten af dette kapitel.
Den enkleste Nmap-kommando er bare nmap i sig selv. Dette udskriver et snydeblad med almindelige Nmap-optioner og syntaks. en mere interessant kommando er nmap<target>
, som gør følgende:
-
Konverterer
<target>
fra et værtsnavn til en IPv4-adresse ved hjælp af DNS. Hvis der angives en IP-adresse i stedet for et værtsnavn, springes dette opslag over. -
Søger værten, som standard med en ICMP-echoforespørgselspakke og en TCP ACK-pakke til port 80, for at fastslå, om den er oppe og kører. Hvis ikke, rapporterer Nmap dette faktum og afslutter. Jeg kunne have angivet
-Pn
for at springe denne test over. Se kapitel 3, Host Discovery (“Ping Scanning”). -
Konverterer målets IP-adresse tilbage til navnet ved hjælp af en reverse-DNS-forespørgsel. På grund af den måde, som DNS fungerer på, er det omvendte navn muligvis ikke det samme som det
<target>
, der er angivet på kommandolinjen. Denne forespørgsel kan springes over med indstillingen-n
for at forbedre hastigheden og stealthiness. -
Lancerer en TCP-portscanning af de mest populære 1.000 porte, der er anført i
nmap-services
. Der anvendes normalt en SYN stealth-scanning, men connect-scanning erstattes i stedet af connect-scanning for ikke-root Unix-brugere, der ikke har de nødvendige rettigheder til at sende rå pakker. -
Udskriver resultaterne til standardudgangen i et normalt menneskeligt læsbart format og afsluttes. Der kan angives andre outputformater og placeringer (filer), som beskrevet i Kapitel 13, Nmap outputformater. Eksempel 4.2 viser resultaterne, når scanme.nmap.org bruges som
<target>
.
Eksempel 4.2. Simpel scanning: nmap scanme.nmap.org
# Starting Nmap ( http://nmap.org )Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 994 filtered portsPORT STATE SERVICE22/tcp open ssh25/tcp closed smtp53/tcp open domain70/tcp closed gopher80/tcp open http113/tcp closed authNmap done: 1 IP address (1 host up) scanned in 4.99 seconds
Den første outputlinje iEksempel 4.2 angiver blot URL’en til downloading af Nmap. Tidspunktet, hvor Nmap startede, og versionsnummeret angives normalt også, selv om disse generelt blev fjernet fra denne bog af hensyn til konsistens og for at undgå linjeindpakning.
Den næste linje angiver målets IP-adresse (IPv4 i dette tilfælde) og det omvendte DNS-navn (også kendt som PTR-record), hvis det er tilgængeligt. Nmap lover at vise de “interessante porte”, selv om alle scannede porte er medregnet. De porte, der anses for at være mest interessante, fordi de er åbne eller i en sjældent set tilstand for den pågældendehost, er anført individuelt. Når mange porte er i en enkelt ikke åben tilstand, betragtes de som en standardtilstand og samles på en enkelt linje for at undgå at udvande resultaterne med tusindvis af uinteressante poster. I dette tilfælde noterer Nmap, at 994 porte er filtreret.
Den interessante porttabel kommer derefter, og den giver nøglescan-resultaterne. Kolonnerne varierer afhængigt af de anvendte indstillinger, men giver i dette tilfælde portnummeret og protokol, tilstand og serviceprotokol for hver port. Tjenesten her er blot et gæt, der er lavet ved at slå op på porten i nmap-services
. Tjenesten ville blive opført som unknown
, hvis en af portene ikke havde noget navn registreret i denne fil. Tre af disse porte er åbne, og tre er lukkede.
Til sidst rapporterer Nmap nogle grundlæggende tidsstatistikker, før den afsluttes.Disse statistikker er antallet af angivne mål, antallet af dem, som ping-scanningen fandt, at de var oppe, og den samlede tid, det tog.
Mens denne enkle kommando ofte er alt, hvad der er nødvendigt, går avancerede brugere ofte meget længere. I eksempel 4.3 er scanningen ændret med fire muligheder. -p0-
beder Nmap om at scanne alle muligeTCP-porte, -v
beder Nmap om at være udførlig om det,-A
aktiverer aggressive tests såsom fjern OSdetektion, service/versiondetektion og Nmap Scripting Engine (NSE). Endelig aktiverer -T4
en mere aggressiv timingpolicy for at fremskynde scanningen.
Eksempel 4.3. Mere kompleks: nmap -p0- -v -A -T4 scanme.nmap.org
# Starting Nmap ( http://nmap.org )Completed Ping Scan at 00:03, 0.01s elapsed (1 total hosts)Scanning scanme.nmap.org (64.13.134.52) Discovered open port 22/tcp on 64.13.134.52Discovered open port 53/tcp on 64.13.134.52Discovered open port 80/tcp on 64.13.134.52SYN Stealth Scan Timing: About 6.20% done; ETC: 00:11 (0:07:33 remaining)Completed SYN Stealth Scan at 00:10, 463.55s elapsed (65536 total ports)Completed Service scan at 00:10, 6.03s elapsed (3 services on 1 host)Initiating OS detection (try #1) against scanme.nmap.org (64.13.134.52)Initiating Traceroute at 00:1064.13.134.52: guessing hop distance at 9Completed SCRIPT ENGINE at 00:10, 4.04s elapsedHost scanme.nmap.org (64.13.134.52) appears to be up ... good.Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 65530 filtered portsPORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 4.3 (protocol 2.0)25/tcp closed smtp53/tcp open domain ISC BIND 9.3.470/tcp closed gopher80/tcp open http Apache httpd 2.2.2 ((Fedora))|_HTML title: Go ahead and ScanMe!113/tcp closed authDevice type: general purposeRunning: Linux 2.6.XOS details: Linux 2.6.20-1 (Fedora Core 5)Uptime guess: 2.457 days (since Thu Sep 18 13:13:24 2008)TCP Sequence Prediction: Difficulty=204 (Good luck!)IP ID Sequence Generation: All zerosTRACEROUTE (using port 80/tcp)HOP RTT ADDRESS9 10.36 metro0.sv.svcolo.com (208.185.168.173)10 10.29 scanme.nmap.org (64.13.134.52)Nmap done: 1 IP address (1 host up) scanned in 477.23 seconds Raw packets sent: 131432 (5.783MB) | Rcvd: 359 (14.964KB)
Nmap leverede helt sikkert den ønskede verbositet i eksempel 4.3! Heldigvis er det ekstraoutput let at forstå. De første 13 nye linjer er runtimeinformation, der lader brugeren vide, hvad der sker, mens hun stirrer forventningsfuldt på terminalen og håber på gode nyheder. Hvad der er gode nyheder afhænger af, om hun er en systemadministrator, der skal løse problemer, en pen-tester, der har brug for nogle problemer at rapportere om, eller en black-hat cracker, der forsøger at udnytte dem. Omkring et dusin lignende linjer blev fjernet af hensyn til kortfattetheden. Linjerne med “opdagede åbne porte” giver en meddelelse om åbne porte, så hun kan begynde at slå på dem, før scanningen overhovedet er færdig. Linjen “scan timing” giver et overslag over, hvornår scanningen er afsluttet, så hun ved, om hun skal blive ved med at stirre på skærmen eller spise frokost. Da netværksforholdene (latenstid, overbelastning, båndbredde osv.) og reglerne for pakkefiltrering varierer så meget, kan det tage 30 sekunder at gennemføre de samme scanningsmuligheder mod en vært og 45 minutter mod en anden vært. Hvis du vil have det aktuelle tidsestimat, mens du scanner, skal du blot trykke påenter.
Porttabellen viser ingen nye porte. Alle de ekstra scannede porte er i den filtrerede tilstand, hvilket øger det samlede antal filtrerede porte fra 994til 65.530. Selv om der ikke er nogen nye specificerede porte, har posterne ændret sig. En ny kolonne VERSION
indeholder oplysninger om programnavn og version for den lyttende tjeneste. Dette kommer fra service detection, en af de funktioner, der er aktiveret med -A
-indstillingen.En anden funktion ved service detection er, at alle serviceprotokoller i SERVICE
-kolonnen faktisk er blevet verificeret. I den forrige scanning var de baseret på den relativt svage heuristik med et nmap-services
portnummeropslag.Det tabelopslag var tilfældigvis korrekt denne gang, men det vil det ikke altid være.
En anden funktion tilføjet af -A
er NmapScripting Engine, som diskuteres i dybden i Kapitel 9, Nmap Scripting Engine. Det eneste script, der vises her, er HTMLtitle
. Der findes dusinvis af andre scripts, men ingen af dem har fundet et nyttigt output til denne maskine. Tracerouteresultaterne blev også tilføjet af -A
. Denne indstilling er mere effektiv og mere kraftfuld end de fleste traceroute-programmer, da probes udføres parallelt, og Nmap bruger scanningsresultaterne til at bestemme en gunstig probetype (TCP-pakker til port 80 i dette tilfælde).
De fleste af de resterende nye linjer kommer fra OS-detektion (også aktiveret af -A
), som diskuteres i dybden iKapitel 8, Remote OS Detection (Fjern OS-detektion). Den sidste linje viser, at alle disse ekstra oplysninger havde en pris – scanningen tog næsten 100 gange længere tid endExempel 4.2, “Simple scan: nmap scanme.nmap.org” at gennemføre (477 sekunder i forhold til 5).