A Quick Port Scanning Tutorial
Uno dei miei obiettivi nello sviluppo di Nmap è quello di mantenere semplici gli usi più comuni, pur mantenendo la flessibilità per scansioni personalizzate e avanzate. Questo viene realizzato con l’interfaccia a riga di comando, offrendo dozzine di opzioni, ma scegliendo i valori predefiniti sani quando non sono specificati. Un principiante può iniziare con un comando semplice comenmap <target>
.Nel frattempo, gli utenti avanzati a volte specificano così tante opzioni che la loro linea terminale si avvolge.
Un equilibrio simile deve essere raggiunto con l’output del comando. I risultati più importanti dovrebbero risaltare anche all’utente occasionale che non ha nemmeno letto la pagina man. Eppure l’output dovrebbe essere abbastanza completo e preciso da soddisfare i penetration tester professionisti che eseguono Nmap contro migliaia di macchine ogni giorno. Gli utenti abbastanza intelligenti da leggere questo libro o il codice sorgente di Nmap beneficiano di un maggiore controllo dello scanner e di intuizioni su ciò che l’output di Nmap significa veramente.
Questo tutorial dimostra alcuni comuni scenari di scansione delle porte di Nmap e spiega l’output. Piuttosto che tentare di diventare esaustivo, l’obiettivo è semplicemente quello di far conoscere ai nuovi utenti abbastanza bene da capire il resto di questo capitolo.
Il comando Nmap più semplice è semplicemente nmap da solo. Un comando più interessante è nmap<target>
, che fa quanto segue:
-
Converte
<target>
da un nome host in un indirizzo IPv4 usando il DNS. Se viene specificato un indirizzo IP invece di un hostname, questa ricerca viene saltata. -
Punta l’host, di default con un pacchetto ICMP echo request e un pacchetto TCP ACK alla porta 80, per determinare se è attivo e funzionante. Se non lo è, Nmap lo segnala ed esce. Avrei potuto specificare
-Pn
per saltare questo test. Vedi Capitolo 3, Host Discovery (“Ping Scanning”). -
Converte l’indirizzo IP di destinazione nel nome usando una query DNS inversa. A causa del modo in cui funziona il DNS, il nome inverso potrebbe non essere lo stesso del
<target>
specificato sulla riga di comando. Questa interrogazione può essere saltata con l’opzione-n
per migliorare la velocità e la furtività. -
Lancia un port scan TCP delle 1.000 porte più popolari elencate in
nmap-services
. Di solito viene usato un SYN stealth scan, ma il connect scan viene sostituito invece per gli utenti Unix non root che non hanno i privilegi necessari per inviare pacchetti grezzi. -
Stampa i risultati sullo standard output in normale formato leggibile dall’uomo, ed esce. Possono essere specificati altri formati e posizioni di output (file), come descritto nel Capitolo 13, Formati di output di Nmap. L’esempio 4.2 mostra i risultati quando scanme.nmap.org è usato come
<target>
.
Esempio 4.2. Scansione semplice: 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
La prima linea di output inExample 4.2 dà semplicemente l’URL per scaricare Nmap. L’ora in cui Nmap è partito e il numero di versione sono normalmente forniti, sebbene questi siano stati generalmente rimossi da questo libro per coerenza e per evitare il linewrapping.
La linea successiva fornisce l’indirizzo IP di destinazione (IPv4 in questo caso), e il nome DNS inverso (noto anche come record PTR) se è disponibile. Nmap promette di mostrare le “porte interessanti”, anche se tutte le porte scansionate sono prese in considerazione. Le porte considerate più interessanti perché sono aperte o in uno stato raramente visto per quell’host sono elencate individualmente. Quando molte porte sono in un unico stato non aperto, sono considerate uno stato predefinito, e aggregate su un’unica linea per evitare di diluire i risultati con migliaia di voci non interessanti. In questo caso, Nmap nota che 994 porte sono filtrate.
La tabella delle porte interessanti viene dopo, e fornisce i risultati della scansione delle chiavi. Le colonne variano a seconda delle opzioni utilizzate, ma in questo caso forniscono il numero di porta e il protocollo, lo stato e il protocollo di servizio per ogni porta. Il servizio qui è solo una supposizione fatta cercando la porta in nmap-services
. Il servizio sarebbe elencato come unknown
se una delle porte non avesse un nome registrato in quel file. Tre di queste porte sono aperte e tre sono chiuse.
Infine, Nmap riporta alcune statistiche di base sui tempi prima di uscire.Queste statistiche sono il numero di obiettivi specificati, il numero di quelli che la scansione ping ha trovato attivi, e il tempo totale impiegato.
Mentre questo semplice comando è spesso tutto ciò che serve, gli utenti avanzati spesso vanno molto oltre. Nell’esempio 4.3, la scansione è modificata con quattro opzioni. -p0-
chiede a Nmap di scansionare ogni possibile portaTCP, -v
chiede a Nmap di essere prolisso, -A
abilita test aggressivi come il rilevamento del sistema operativo remoto, il rilevamento di servizi/versioni e il Nmap Scripting Engine (NSE). Infine, -T4
abilita una politica di temporizzazione più aggressiva per accelerare la scansione.
Esempio 4.3. Più complesso: 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 ha certamente fornito la verbosità richiesta nell’esempio 4.3! Fortunatamente l’extraoutput è facile da capire. Le prime 13 nuove linee sono informazioni di runtime che permettono all’utente di sapere cosa sta succedendo mentre fissa il terminale, sperando in buone notizie. Ciò che costituisce una buona notizia dipende dal fatto che l’utente sia un amministratore di sistema che deve risolvere i problemi, un pen-tester che ha bisogno di alcuni problemi da segnalare, o un black-hat cracker che cerca di sfruttarli. Circa una dozzina di righe simili sono state rimosse per brevità. Le linee “porta aperta scoperta” forniscono una notifica immediata delle porte aperte, in modo che lei possa iniziare a sbatterci sopra prima ancora che la scansione finisca. La linea “tempi di scansione” fornisce una stima del tempo di completamento, in modo da sapere se continuare a fissare lo schermo o pranzare. Poiché le condizioni di rete (latenza, congestione, larghezza di banda, ecc.) e le regole di filtraggio dei pacchetti variano così tanto, le stesse opzioni di scansione possono richiedere 30 secondi per essere completate contro un host e 45 minuti contro un altro. Se volete la stima del tempo corrente durante la scansione, premete semplicementeenter.
La tabella delle porte non mostra nuove porte. Tutte le porte extra scansionate sono nello stato filtrato, portando il totale delle porte filtrate da 994 a 65.530. Anche se non ci sono nuove porte elencate, le voci sono cambiate. Una nuova colonna VERSION
fornisce il nome dell’applicazione e i dettagli della versione per il servizio in ascolto. Questo proviene dal rilevamento dei servizi, una delle caratteristiche abilitate dall’opzione -A
. Un’altra caratteristica del rilevamento dei servizi è che tutti i protocolli di servizio nella colonna SERVICE
sono stati effettivamente verificati. Nella scansione precedente, erano basati sull’euristica relativamente debole di una ricerca del numero di porta nmap-services
.Quella tabella è stata corretta questa volta, ma non lo sarà sempre.
Un’altra caratteristica aggiunta da -A
è l’NmapScripting Engine, che è discusso in profondità nel capitolo 9, Nmap Scripting Engine. L’unico script mostrato qui è HTMLtitle
. Esistono dozzine di altri script, ma nessuno ha trovato risultati utili per questa macchina. I risultati del tracerouter sono stati aggiunti anche da -A
. Questa opzione è più efficiente e potente della maggior parte dei programmi traceroute poiché le sonde sono eseguite in parallelo e Nmap usa i risultati della scansione per determinare un tipo di prova favorevole (pacchetti TCP sulla porta 80 in questo caso).
La maggior parte delle nuove linee rimanenti provengono dal rilevamento del sistema operativo (anch’esso attivato da -A
), che è discusso in profondità nel Capitolo 8, Rilevamento del sistema operativo remoto. La linea finale mostra che tutte queste informazioni aggiuntive hanno un prezzo: la scansione ha richiesto quasi 100 volte più tempo dell’esempio 4.2, “Scansione semplice: nmap scanme.nmap.org” per essere completata (477 secondi rispetto a 5).