Home page logo
/
Intro Reference Guide Book Install Guide
Download Changelog Zenmap GUI Docs
Bug Reports OS Detection Propaganda Related Projects
In the Movies In the News

Sponsors


Nmap Network Scanning

Host Discovering (Ricerca di host)

Uno dei primi passi in qualsiasi approccio di mappatura di una rete e` quello di ridurre un intervallo di indirizzi IP (talvolta di notevoli dimensioni) ad una lista di host attivi o interessanti. Uno scan di ogni porta di ogni singolo indirizzo IP e` lento e generalmente non necessario. Ovviamente cio` che rende un host interessante dipende in larga misura dalle motivazioni della scansione. Amministratori di rete possono essere interessati solo a host sui quali e` in esecuzione uno specifico servizio, mentre chi fa auditing di sicurezza e` piu` interessato a ogni singola periferica dotata di un indirizzo IP. Un sistemista puo` accontentarsi di semplici ping ICMP per trovare gli host sulla propria rete, ma un penetration tester esterno puo` dover usare un insieme di molti differenti probing (tentativi di scansione) per cercare di evitare le restrizioni imposte da un firewall.

Poiche` le necessita` di host discovering sono cosi` diverse, Nmap offre una notevole varieta` di opzioni per la customizzazione delle tecniche usate. Il semplice host discovery e` spesso chiamato "ping scan", anche se va molto oltre il semplice pacchetto ICMP di echo request associato con il famoso strumento di ping. Un utete puo` evitare il passaggio per l'utility "ping" usando una list scan (scansione di tipo lista: (-sL) o disabilitando il ping degli host (-P0), oppure mettendo alla prova la rete usando combinazioni arbitrarie di probe TCP SYN/ACK, UDP e ICMP su differenti porte. Lo scopo di questi approcci e` quello di sollecitare una risposta che dimostri l'esistenza di un host o di un apparecchio di rete con quell'indirizzo IP. In molte reti solo una piccola percentuale di indirizzi IP e` attiva in ogni momento, specialmente negli spazi di indirizzamento privati previsti dall'RFC1918 come ad esempio 10.0.0.0/8. Una rete di questo tipo ha 16 milioni di possibili IP, anche se e` di uso comune in aziende con meno di un migliaio di macchine. L'host discovery puo` trovare queste macchine in un mare di indirizzi IP non consecutivi.

Se non viene fornita alcuna opzione di host discovery, Nmap manda di default un pacchetto TCP ACK alla porta 80 e una richiesta ICMP Echo Request ad ogni macchina obbiettivo. Un'eccezione a questo comportamento consiste nel fatto che uno scan ARP e` usato per tutti gli obbiettivi che sono in una rete ethernet locale. Se Nmap viene lanciato da un utente non privilegiato all'interno di un ambiente UNIX verra` usato un pacchetto SYN al posto dell'ACK mediante la chiamata di sistema connect(). Queste opzioni di default sono equivalenti alle opzioni -PA -PE. Questo tipo di host discovery e` spesso sufficiente quando si deve effettuare una scansione su reti locali, anche se per un security auditing si raccomanda di usare un set di opzioni piu` avanzato.

L'opzione -P* (che permette di scegliere il tipo di ping) puo` essere combinata. Si possono inoltre aumentare le probabilita` di bypassare firewall particolarmente restrittivi mandando molti tipi di probe diversi usando porte o flag TCP differenti e svariati codici ICMP. Inoltre si tenga presente che l'ARP discovery (-PR) viene effettuata di default all'interno di una rete locale, anche se vengono specificate altre opzioni -P*, poiche` e` quasi sempre piu` veloce ed efficiente.

Di default Nmap lancia un host discovery e in seguito un port scan su tutti gli host che sono online. Questo approccio viene tenuto anche quando si specificano metodi non standard per l'host discovery come i probe UDP (-PU). Si consulti la spiegazione per l'opzione -sP per sapere come effettuare solo host discovery; si usi -P0 per evitare l'host discovery e fare un portscan di tutti gli host di destinazione. Le seguenti opzioni controllano il comportamento dell'host discovery:

-sL (List Scan)

La list scan e` una forma banale di host discovery che semplicemente elenca ogni host delle reti specificate, senza inviare alcun pacchetto agli host obbiettivo. Di default Nmap effettua una risoluzione inversa mediante DNS sugli host per ottenerne il nome completo. Spesso e` sorprendente vedere quante informazioni utili possono fornire dei semplici hostname. Ad esempio, fw.chi.playboy.com e` il firewall per l'ufficio di Chicago della Playboy Enterprises. Nmap mostra anche il numero totale di indirizzi IP alla fine della scansione. La lista scan e` un buon controllo per essere sicuri di avere gli indirizzi IP corretti per la propria scansione. Se gli host mostrano nomi di dominio non conosciuti, vale la pena indagare oltre per evitare di scansionare la rete dell'azienda sbagliata.

Poiche` l'idea e` quella di stampare semplicemente una lista di obbiettivi, le opzioni per funzionalita` di livello piu` alto (come ad esempio il port scanning, le indagini sul tipo di sistema operativo in esecuzione o il ping scan non possono essere combinate con questa. Se si vuole disabilitare il ping scan e mantenere allo stesso tempo la possibilita` di utilizzare funzionalita` di alto livello, si legga la sezione sull'opzione -P0.

-sP (Ping Scan)

Questa opzione indica a Nmap di effettuare solo un ping scan (ovvero un host discovery) e di mostrare gli host che hanno risposto. Nessun test aggiuntivo (come ad esempio port scan o OS detection) viene effettuato. Quest'azione e` un gradino piu` invadente della list scan, e puo` essere usata spesso per lo stesso scopo. Essa permette una mappatura di una rete obbiettivo senza attrarre molta attenzione. Sapere quanti host sono attivi e` piu` utile ad un attaccante rispetto ad una semplice list scan di ogni indirizzo IP e nome di host.

>Gli amministratori di sistemi trovano spesso questa opzione utile allo stesso modo. Puo` essere usata facilmente per enumerare le macchine disponibili in una rete o tenere sotto osservazione la disponibilita` di un singolo server. Questo approccio viene anche chiamato "ping sweep", ed e` piu` affidabile di un ping all'indirizzo broadcast poiche` molti host non rispondono alle richieste di questa categoria.

L'opzione -sP invia di default un echo request ICMP e un pacchetto TCP alla porta 80. Quando viene eseguita da un utente non privilegiato, viene inviato un pacchetto SYN (usando la chiamata connect() ) alla porta 80 dell'obbiettivo. Quando invece un utente privilegiato prova ad effettuare una scansione all'interno di una rete locale, vengono usate richieste ARP (-PR) a meno che non venga specificata l'opzione --send_ip. L'opzione -sP puo` essere usata in combinazione con qualsiasi tipo di discovery probe (ovvero la famiglia di opzioni -P*, tranne -P0) per avere una migliore flessibilita`. Se viene usato uno qualsiasi di questi probe con opzioni sul numero di porta, allora i probe di default (ovvero ACK ed echo request) vengono annullati. Si raccomanda di usare queste tecniche evolute se ci sono dei firewall restrittivi tra l'host che lancia Nmap e le reti di destinazione, altrimenti le destinazioni potrebbero non essere raggiunte nel caso in cui il firewall dovesse bloccare i probe o le risposte a questi ultimi.

-P0 (No ping)

Questa opzione evita del tutto il passaggio di ricerca degli host di Nmap. Normalmente Nmap usa questo passaggio per trovare le macchine attive da sottoporre ad una scansione piu` approfondita. Di default, Nmap esegue un probing approfondito (come ad esempio un port scan, una version detection dei servizi o un Operating System detection) solo su quegli host che sono trovati attivi. Disabilitare l'host discovery attraverso l'opzione -P0 obbliga Nmap a tentare la scansione richiesta su tutti gli host destinazione specificati. Quindi se si specifica sulla linea di comando una rete di destinazione di classe B (in CIDR /16) verranno sottoposti a scansione tutti i 65 535 indirizzi IP. Il secondo carattere nell'opzione -P0 e` uno zero, non la lettera O. A differenza del list scan, nel quale l'host discovery viene saltato, anziche` interrompersi e mostrare la lista di destinazioni Nmap continua ad eseguire le funzioni richieste come se ogni IP di destinazione fosse attivo.

-PS [portlist] (TCP SYN Ping)

Questa opzione invia un pacchetto TCP vuoto con il flag SYN attivo. La porta di destinazione di default e` la 80 (configurabile durante la compilzione cambiando il parametro di define DEFAULT_TCP_PROBE_PORT nel file nmap.h), ma in questo caso si puo` specificare un'altra porta come parametro. Si puo` anche specificare una lista di porte separata da virgola (ad esempio -PS22,23,25,80,113,1050,35000), nel cuo caso si tentera` un probe verso ogni porta in parallelo.

Il flag SYN indica al sistema remoto che si sta tentando di stabilire una connessione. Normalmente la porta di destinazione dovrebbe essere chiusa, e un pacchetto di RST (reset) viene mandato indietro. Se la porta fosse aperta, il destinatario effettuera` il secondo passo della connessione TCP a tre vie (3-way-handshake) rispondendo con un pacchetto TCP SYN/ACK. La macchina che sta eseguendo Nmap interrompera` la connessione inviando un pacchetto RST al posto di mandare l'usuale pacchetto RST che completerebbe l'handshake e stabilirebbe una connessione completa. Il paccheto RST viene mandato dal kernel della macchina che sta eseguendo Nmap, non da Nmap stesso.

A Nmap non interessa se la porta e` aperta o chiusa. In ogni caso l'RST o il SYN/ACK ricevuti indicano che l'host e` disponibile e risponde alle connessioni.

Nelle macchine UNIX solo l'utente privilegiato root generalmente e` abilitato all'invio e alla ricezione di pacchetti TCP "raw" (non formattati, grezzi). Per quanto riguarda gli utenti non privilegiati si deve ricorrere alla system call connect(), la quale viene lanciata su ogni porta di destinazione. Questo ha l'effetto di inviare pacchetti SYN all'host di destinazione come per stabilire una connessione. Se la connect() restituisce rapidamente un messaggio di successo o un messaggio di errore ECONNREFUSED significa che lo stack TCP sottostante deve aver ricevuto un SYN/ACK o un RST e l'host viene marcato come disponibile. Se il tentativo di connessione viene lasciato in sospeso fino al raggiungimento di un certo timeout l'host e` marcato come down o non disponibile. Questa scorciatoia si usa anche per le connessioni IPv6, poiche` la costruzione di pacchetti IPv6 raw non e` ancora supportata in Nmap.

-PA [portlist] (TCP ACK Ping)

Il ping TCP ACK e` molto simile al ping SYN appena discusso. La differenza, come si puo` facilmente indovinare, consiste nel fatto che viene sollevato il flag TCP ACK al posto del SYN. Un tale paccketto ACK finge di confermare dei dati inviati in una connessione TCP gia` stabilita, anche se tale connessione non esiste. In questo modo un host remoto rispondera` sempre con un pacchetto RST, svelando cosi` la propria esistenza e il fatto che siano attivi.

L'opzione -PA usa la stessa porta di default del SYN probe (ovvero la porta 80) e puo` ricevere in input un elenco di porte di destinazione nello stesso formato. Se un utente non privilegiato tenta quest'approccio, o se viene specificato un target IPv6, si usa la scorciatoia della connect() spiegata in precedenza. Questa strategia della connect() non e` ottimale perche` in ogni caso la connect() invia un paccketto SYN e non un ACK.

La ragione per offrire entrambi i tipi di probe (SYN e ACK) e` quella di massimizzare le possibilita` di bypassare firewall. Molti amministratori configurano router e semplici firewall per bloccare pacchetti SYN in arrivo tranne quelli destinati a servizi pubblici come il sito web aziendale o il mail server. Questo impedisce ogni altro tipo di connessione in entrata garantendo al tempo stesso agli utenti di effettuare connessioni verso l'esterno senza incontrare ostacoli. Questo approccio "non-stateful" utilizza poche risorse sul firewall/router ed e` largamente supportato da filtri software e hardware. (per "non-stateful" si intende in questo caso la capacita` di un firewall di tenere traccia delle connessioni che lo attraversano, NdT). Il firewall di GNU/Linux conosciuto come Netfilter/iptables offre l'opzione --syn per implementare questo approccio "stateless". Quando un firewall implementa regole di questo tipo, un probe SYN (-PS) viene facilmente bloccato quando viene mandato ad una porta chiusa. In tali casi un probe ACK passa indisturbato come se non vi fossero quelle regole.

Un altro tipo comune di firewall utilizza regole "stateful" che lasciano cadere ("drop") pacchetti non attesi. Questa caratteristica era inizialmente disponibile solo su firewall di fascia alta, anche se e` diventata sempre piu` comune nel corso degli anni. Il sistema Netfilter/iptables supporta questa mediante l'opzione --state, la quale marca pacchetti a seconda dello stato della connessione. Un probe SYN funzionera` piu` facilmente verso un tale sistema, poiche` pacchetti ACK non attesi sono generalmente riconosciuti come non validi e lasciati cadere. Una soluzione a questa situazione poco piacevole e` quella di inviare emtrambe le tipologie di probe specificando le opzioni -PS e -PA.

-PU [portlist] (UDP Ping)

Un'altra opzione di host discovery e` il ping UDP, il quale manda un pacchetto UDP vuoto alle porte indicate(a meno che non venga specificata l'opzione --data_length). L'elenco di porte va specificato nello stesso formato gia` discusso in precedenza nelle opzioni -PS e -PA. Se non si specifica alcuna porta viene usata la 31338 di default. Questo valore puo` essere impostato durante la compilazione cambiando il parametro DEFAULT_UDP_PROBE_PORT nel file nmap.h. Si usa di default una porta poco comune perche` inviare dati ad una porta gia` aperta e` spesso non desiderabile per questo tipo particolare di scansione.

Una volta raggiunta una porta UDP chiusa sulla macchina di destinazione, il probe UDP dovrebbe provocare un pacchetto ICMP di "port unreachable" (porta irraggiungibile). Questo indica a Nmap che l'host e` funzionante e disponibile. Altri tipi di pacchetti ICMP di errore, come ad esempio host o rete "unreachable" (non disponibile) o "TTL exceeded" (superato il tempo di vita del pacchetto) indicano un host non funzionante o irraggiungibile. Una mancanza di risposta viene interpretata alla stessa maniera. Se si raggiunge una porta aperta la maggior parte dei servizi semplicemente ignorano il pacchetto vuoto e non rimandano alcuna risposta. Questo spiega perche` il probe di default e` la porta 31338, la quale si usa molto raramente. Pochi servizi, tra i quali "chargen", rispondono a un pacchetto UDP vuoto, rivelando cosi` a Nmap la disponibilita` della macchina in questione.

Il vantaggio primario di questo tipo di scansione e` che riesce a bypassare firewall e filtri che controllano solo pacchetti TCP. Ad esempio, una volta avevo un router a banda larga wireless Linksys BEFW11S4. L'interfaccia esterna di questa periferica filtrava tutte le porte TCP di default, ma i probee UDP provocavano messaggi di "port unreachable" rivelando cosi` l'esistenza della device.

-PE; -PP; -PM (ICMP Ping Types)

In aggiunta ai meno comuni tipi di host discovery TCP e UDP discussi in precedenza, Nmap puo` anche mandare i pacchetti standard come il famoso programma ping. Nmap manda un pacchetto ICMP type 8 ("echo request") all'indirizzo IP di destinazione, aspettandosi un type 0 ("echo reply") di ritorno dagli host disponibili. Sfortunatamente per chi deve scoprire la topologia di una rete, molti host e firewall ora bloccano questo tipo di pacchetti anziche` rispondere come richiesto dall'RFC 1122. Per questa ragione le scansione basate solo su ICMP sono raramente abbastanza affidabili nei riguardi di destinzioni sconosciute su Internet. Tuttavia per i sistemisti di rete che devono tenere sotto controllo una rete interna, esse possono essere un approccio pratico ed efficiente. Si usi l'opzione -PE per abilitare questo comportamento di echo request.

Mentre la "echo request" e` la richiesta standard del ping ICMP, Nmap non si ferma qui. Lo standard ICMP (RFC 792) specifica inoltre i pacchetti "timestamp request", "information request" e "address mask request" (rispettivamente "richiesta di timestamp", ovvero data e ora, "richiesta di informazioni" e "richiesta della maschera di rete") mediante i codici ICMP 13, 15 e 17. Mentre lo scopo dichiarato di questo tipo di richieste e` quello di sapere informazioni quali la maschera di rete e l'ora corrente, essi possono facilmente essere usati per l'host discovery. Un sistema che risponde e` funzionante e disponibile. Nmap non implementa allo stato attuale pacchetti di information request, poiche` in genere non sono supportati comunemente. L'RFC 1122 specifica che un host NON DOVREBBE implementare questi messaggi. (il maiuscolo negli RFC indica comportamenti precisi). Il timestamp (data e ora) e le richieste di maschera di rete possono essere inviate rispettivamente mediante le opzioni -PP e -PM. Una risposta di tipo timestamp (codice ICMP 14) o di tipo address mask (codice 18) rivela che un host e` disponibile. Queste due richieste possono essere utili qualora un amministratore dovesse bloccare i pacchetti di "echo request" ma dimenticarsi che altre query ICMP possono essere usate per lo stesso scopo.

-PR (ARP Ping)

Una delle situazioni piu` comuni di utilizzo di Nmap e` la scansione di una LAN ethernet. Nella maggior parte delle LAN, specialmente quelle in cui viene usato il benedetto intervallo di indirizzi privati specificato dall'RFC1918, la maggior parte degli indirizzi IP e` inutilizzato. Quando Nmap prova ad inviare pacchetti IP raw come le "echo request" ICMP, il sistema operativo deve determinare l'indirizzo hardware (ARP) corrispodente all'indirizzo IP di destinzione, in modo da poter indirizzare correttamente il frame Ethernet. Questo e` spesso lento e problematico, in quanto i sistemi operativi non sono stati scritti prevedendo di dover fare milioni di richieste ARP verso host inesistenti in un breve lasso di tempo.

L'ARP scan lascia a Nmap e ai suoi algoritmi ottimizzati l'incarico delle richieste ARP. Nel caso in cui si riceva una risposta, Nmap non si deve neanche preoccupare dei ping basati su ICMP perche` a questo punto sa gia` che l'host e` raggiungibile. Questo rende l'ARP scan molto veloce e molto piu` affidabile delle normali scansioni basate su IP. Questo e` il comportamento di default quando si deve effettuare uno scan su host che Nmap riconosce come presenti nella rete locale. Anche se vengono specificati differenti tipi di ping (come -PI o -PS), Nmap usa comunque ARP per ogni target che e` sulla stessa LAN. Se non si vuole assolutamente un ARP scan, specificare l'opzione --send_ip.

-n (No DNS resolution)

Indica a Nmap di non effettuare mai una risoluzione inversa del nome mediante DNS sull'indirizzo IP rilevato. Poiche` il DNS e` spesso lento, questo rende l'intero processo di scansione piu` veloce.

-R (DNS resolution for all targets)

Indica a Nmap di effettuare sempre la risoluzione inversa dei nomi mediante DNS. Generalmente questo viene effettuato solo quando un host viene rilevato come attivo.

--system-dns (Use system DNS resolver)

Di default Nmap risolve gli indirizzi IP mandando richieste direttamente ai name servers (server dei nomi) configurati sulla macchina su cui e` in esecuzione Nmap. Molte richieste (spesso dell'ordine delle dozzine) sono effettuate in parallelo per migliorare le performance. Si specifichi quest'opzione se si vuole usare il proprio DNS (richiedendo un indirizzo IP alla volta usando la system call getnameinfo() ). Questo e` piu` lento e raramente utile a meno che non ci sia un bug nel codice di risoluzione dei nomi di Nmap -- per favore si contattino gli sviluppatori se questo e` il caso. Il resolver di sistema e` sempre usato per le scansioni su IPv6.

--dns-servers <server1[,server2],...> (Server da usare per le reverse DNS query)

Di default Nmap cerchera` di determinare i server DNS da usare per le reverse query usando il file resolv.conf (UNIX) o il registro (Win32). In alternativa si puo` usare quest'opzione per indicare server alternativi. Tuttavia quest'opzione viene ignorata nel caso si specifichi anche --system-dns o una scansione IPv6. L'uso di piu` server DNS e` spesso piu` veloce e meno visibile rispetto all'uso di un unico server DNS. Le performance migliori si ottengono spesso specificando tutti i server DNS authoritative per lo spazio IP di destinazione.

[ Nmap | Sec Tools | Mailing Lists | Site News | About/Contact | Advertising | Privacy ]