back to top

Nmap: cos’è e come funziona il port scanning

Oggigiorno ognuno di noi gestisce, consciamente o meno, una rete di computer. Sia che si tratti della piccola LAN domestica formata da uno o due computer, sia che si parli di vaste LAN aziendali, รจ fondamentale prendere coscienza di cosa significhi esporre una macchina in Rete.

Quasi sempre questo obbliga, come primo passo, a prendere confidenza con la suite di protocolli TCP/IP e, secondariamente, a verificare operativamente la propria rete mediante una scansione. Approcciando questa seconda fase difficilmente non udiremo parlare di Nmap.

Pubblicitร 

Cos’รจ NMAP?

NmapNetwork mapper – รจ uno dei piรน noti ed usati security scanner al mondo; la prima versione, sviluppata da Gordon – Fyodor – Lyon, fu pubblicata il 1 Settembre 1997 su Phrack.org, il notissimo magazine dell’underground hacker. Rilasciato sotto licenza GPL per tutte le maggiori piattaforme, nel tempo ha subito svariate riscritture evolvendosi sino a rappresentare un vero riferimento nel campo della sicurezza IT.

Nmap effettua il discovery di hosts e servizi, presenti su una rete informatica, inviando pacchetti TCP/UDP manipolati in modo opportuno: tale capacitร  permette non solo, come vedremo, un mero riconoscimento delle porte aperte sui vari hosts ma abilita ad una serie di funzionalitร  quali il riconoscimento dell’O.S. del sistema target, il nome e la versione dei suoi servizi attivi, la presenza di meccanismi di sicurezza interposti (quali IDS e firewall).

Prima di continuare รจ opportuno ricordare che scansionare host senza previa autorizzazione del proprietario, a prescindere dallo scopo “didattico” dell’attivitร , รจ generalmente un comportamento mal visto dagli amministratori di rete e, a seconda della legislazione in vigore nei vari stati, operazione passibile di reato.

A chi รจ rivolta quest’articolo

Sebbene si tratti di un articolo rivolto a neofiti del network scanning, la comprensione di questo articolo richiede una discreta conoscenza della suite di protocolli TCP/IP: concetti quali IP, pacchetto o porta TCP/UDP saranno dati per assodati; qualora non lo fossero si consiglia di leggere prima qualche guida di base.

Per le medesime motivazioni, questo testo non ha ha la pretesa di coprire interamente un software complesso quale Nmap in tutte le sue sfacettature ma di illustrarne le principali funzionalitร  lasciando ai piรน volenterosi ulteriori approfondimenti.

Ottenere Nmap

Come brevemente accennato, sebbene nasca come software per GNU/Linux, oggigiorno Nmap รจ disponibile per tutte le maggiori piattaforme incluso Microsoft Windows (in tutte le sue incarnazioni), Mac OSX, BSD, Solaris e molte altre; qualunque sia il sistema, sottolineiamo fin d’ora che la maggior parte delle funzionalitร  di Nmap richiedono privilegi amministrativi.

Ottenere una copia di Nmap รจ molto semplice; oltre che attraverso il sito ufficiale, praticamente ogni distribuzione GNU/Linux ne include una copia nei suoi repository. Come in ogni realtร  GPL, gli utenti piรน smaliziati potranno inoltre compilare e/o modificare il codice sorgente del software, ottimizzandolo per le prorie necessitร .

In questo articolo prenderemo come riferimento la versione 5.21, pre-compilata per Debian GNU/Linux a 64-bit; salvo diversamente indicato, resta inteso che ogni raccomandazione รจ indipendente da questo particolare setup. Per semplificarne l’uso si raccomanda, se non avenisse in automatico, di aggiugere la directory contenente l’eseguibile di Nmap alla variabile di sistema $PATH (o equivalente).

Il primo scan

Sospendiamo momentaneamente la teoria e rilassiamo le meningi approcciando un pรฒ la pratica. Il primo scan, che esamineremo in dettaglio, ha un target tradizionalmente standard: scanme.nmap.org. Lungi da tradire questo rito iniziatorio, apriamo una console o un prompt dei comandi ed eseguiamo:

nmap -T5 -v -A -sS -oA first_scan scanme.nmap.org

Prima di esaminare i vari parametri, commentiamone l’output qui sintetizzato:

Starting Nmap 5.21 ( http://nmap.org ) at ...
NSE: Loaded 36 scripts for scanning.
Initiating Ping Scan at ...
Scanning scanme.nmap.org (64.13.134.52) [4 ports]
Completed Ping Scan at ... 
Initiating Parallel DNS resolution of 1 host. at ...
Completed Parallel DNS resolution of 1 host. at ...
Initiating SYN Stealth Scan at ... 
Scanning scanme.nmap.org (64.13.134.52) [1000 ports]
Discovered open port 53/tcp on 64.13.134.52
Discovered open port 80/tcp on 64.13.134.52
Discovered open port 22/tcp on 64.13.134.52
Completed SYN Stealth Scan at ...
Initiating Service scan at ...
Scanning 3 services on scanme.nmap.org (64.13.134.52)
Completed Service scan at ...
Initiating OS detection ...
...
Nmap scan report for scanme.nmap.org (64.13.134.52)
Host is up (0.15s latency).
Not shown: 994 filtered ports
PORT      STATE  SERVICE VERSION
22/tcp    open   ssh     OpenSSH 4.3 (protocol 2.0)
| ssh-hostkey: 1024 ... (DSA)
|_2048 ... (RSA)
25/tcp    closed smtp
53/tcp    open   domain
70/tcp    closed gopher
80/tcp    open   http    Apache httpd 2.2.3 ((CentOS))
|_html-title: Go ahead and ScanMe!
31337/tcp closed Elite

Device type: WAP|general purpose|media device|...
Running (JUST GUESSING) : ..., Linux 2.6.X (91%), ...
Network Distance: 19 hops

TRACEROUTE (using port 25/tcp)
...

Osserviamo come una singola esecuzione si componga di piรน scansioni.

  • Il ping scan permette a Nmap di determinare, con un certo grado di precisione, se l’host รจ attivo; nonostante il nome, questa prima scansione non ha molto in comune con il comando ping normalmente utilizzato per verificare la connettivitร  di rete: di default, Nmap interpreta un ping scan come una successione di un echo request ICMP, un pacchetto TCP SYN alla porta 443, un TCP ACK alla porta 80 e un timestamp request ICMP.
  • Un lookup DNS.
  • Il port scanning vero e proprio, in questo caso un SYN stealth scan che discuteremo piรน in dettaglio nella prossima sezione.
  • Ulteriori scansioni per determinare versione dei servizi in ascolto sulla macchina, il suo sistema operativo e il traceroute.

In questo esempio notiamo che sono state riconosciute tre porte aperte e tre chiuse, รจ stato identificato il sistema operativo come un GNU/Linux CentOS e per i servizi attivi sono state recuperate una serie di informazioni quali nome dell’applicativo e versione.

I parametri utilizzati influenzano drammaticamente le performance e i risultati ottenibili da Nmap; tra quelle utilizzate riconosciamo -A per abilitare il riconoscimento del sistema operativo, dei servizi e il traceroute (effetto componibile anche tramite la combinazione -O -sV –traceroute), -T(0-5) per specificare la velocitร  di scansione, -oA per loggare i risultati nei tre formati principali supportati e, infine, -v per aumentare il dettaglio dell’output su console.

A questo punto รจ probabile che, nel caos di informazioni fornite, si sia persa un minimo la visione globale e ci si stia ponendo alcune domande: su quali e quante porte, e per quali protocolli รจ stata effettuata la scansione? Come puรฒ un programma identificare il mio sistema operativo o la versione dei mie applicativi? In ultima analisi, quale utilizzo faccio di questi dati?

Tutte domande legittime alle quali tenteremo di dare risposta; Nmap, se non diversamente specificato, effettua una scansione su 1000 porte tra quelle piรน usate dai vari applicativi: web server (80, 443, 8080, 8443), mail server (25, 110, 143), ftp server (21) sono solo alcuni degli esempi a cui siamo maggiormente abituati. Ovviamente nulla vieta a qualcuno di impostare il proprio web server sulla porta 21 piuttosto che sulla porta 5920. Nmap interpreta le risposte (o la mancata risposta) da parte dell’host target, stabilendo se una porta sia aperta, chiusa o filtrata, cioรจ se l’host non risponde nรจ positivamente nรจ negativamente alla richiesta.

Nonostante sia uno standard รจ fondamentale capire che ogni produttore ha implementato la suite TCP/IP inserendogli alcune peculiaritร . Sono proprio queste piccole differenze note che permettono a Nmap, utilizzando i dati ricevuti dall’host target, di identificarne il probabile sistema operativo: il riconoscimento รจ eseguito tramite pattern noti ed รจ pertanto un risultato puramente statistico e il cui valore non รจ certificabile; ciononostante l’ampio database interno di Nmap garantisce, almeno verso i sistemi piรน diffusi, un’accuratezza sufficientemente elevata. Diverso discorso riguarda il riconoscimento dei servizi in ascolto sulle porte attive: in questo caso Nmap si limita ad utilizzare il cosidetto banner dell’applicazione, quell’insieme di informazioni rivelate ad un tentativo di accesso; ad esempio, un web server Apache tipicamente mostrerร  non solo il suo nome ma anche la sua versione, le estensioni attive e il sistema operativo ospitante.

Infine soffermiamoci sull’ultima domanda, quale utilitร  abbiano le informazioni ricavate. Qualunque adetto al settore riconosce l’importanza che questo prima fase di raccolta d’informazioni, detta information gathering, ricopre. Tanto piรน precise e vaste sono le nostre conoscenze su un host tanto piรน semplice sarร  scoprire una qualche maniera per comprometterlo: ad esempio, potremmo trovare un host con un ftp server e ricavarne che la versione non รจ aggiornata; una rapida consultazione su siti specializzati potrebbe poi indicarci che quella particolare versione รจ affetta da una o piรน vulnerabilitร  che permettono di accedere in modo non autorizzato all’host: l’informazione รจ potere non รจ solo una frase per suggerire ai bambini di prendere la scuola seriamente!

Tecniche di port scanning

Il protocollo TCP, cosรฌ come definito nell’originale RFC 793, non lascia molte possibilitร  di interpretazione sul comportamento da tenere in presenza di pacchetti malformati o inaspettati. Ciononostante ogni vendor, spesso ogni implementazione, specifica comportamenti differenti in risposta a trasmissioni che non rispettino lo standard. Questa consapevolezza ha spinto gli sviluppatori di Nmap a includere diverse tipologie di port scanning che abilitino gli utenti a sfruttare di volta in volta le lacune delle varie implementazioni; in questa sezione ne presenteremo i principali.

SYN stealth scan (-sS)

Il TCP SYN scan รจ il piรน noto metodo di scansione presente in Nmap, tanto da essere stato eletto a scan di default. Se riprendiamo l’output della nostra prima scansione noteremo che รจ stato posto esplicitamente: rilanciando il programma senza tale parametro non noteremo comunque differenze. Il SYN scan รจ volutamente incongruente con le specifiche dello standard TCP; vista la sua importanza rivediamo rapidamente come il protocollo TCP negozia una connessione (schematizzato nell’immagine qui di seguito).

Schematica rappresentazione della negoziazione di una connessione TCP

Una connessione TCP inizia tramite l’invio di un pacchetto di SYN a cui l’host contattato risponde mediante un SYN/ACK, se accetta la connessione, o con un pacchetto RST (reset) se la rifiuta. Nel primo caso, l’host che ha iniziato la connessione trasmette un ulteriore ACK. Questo strategia per instaurare la connessione, detta three-way handshake รจ stata appositamente studiata per garantire che, in reti senza garanzia di consegna quali Internet, entrambi gli host abbiano modo di comprendere se la connessione รจ instaurata o meno. Tuttavia, in questo tipo di scanning, Nmap invia il solo pacchetto di SYN iniziale, lasciando l’host target in uno stato “inconsistente”: molti sistemi non tracciano questo tipo di attivitร  anomala sebbene un buon firewall o un IDS degno di questo nome non si lascieranno sfuggire l’anomalia. In ogni caso ciรฒ รจ sufficiente a determinare lo stato della porta: se si riceve un SYN o un SYN/ACK la porta รจ considerata aperta mentre un RST รจ indicativo di una porta chiusa; se dopo alcune ritrasmissioni non si รจ ricevuta alcuna risposta la porta รจ considerata filtrata.

Connect() scan (-sT)

Il connect() scan รจ di allarmante semplicitร  in quanto si limita ad aprire normali connessioni TCP sulle porte dell’host target; rispetto al SYN scan รจ piรน lento e facilmente genererร  logs nella macchina target. Il solo motivo per cui ha senso utilizzarlo รจ qualora non si posseggano privilegi amministrativi sulla macchina dal quale eseguiamo Nmap: mentre una connect(), essendo una system-call usata a livello applicativo รจ disponibile per qualunque utente, il controllo del flusso TCP cosรฌ come lo abbiamo presentato poc’anzi richiede interventi a livello kernel.

UDP scan (nmap -sU)

Ai piรน passa inosservato ma molti dei servizi che utilizziamo quotidianamente utilizzano il protocollo UDP e non il TCP: DNS, DHCP e SNMP, ad esempio, sono tra quelli con cui sicuramente ci scontriamo, coscienti o meno, tutti i giorni. Nmap permette di scansione anche queste porte, sebbene per motivi tecnologici le performance siano nettamente minori: si ricorda, infatti, che UDP รจ un protocollo connection-less senza riscontro di avvenuta e corretta comunicazione; questo provoca ripetute ritrasmissioni al fine di accertarsi, stasticamente, che i pacchetti siano giunti a destinazione e l’eventuale risposta sia stata inviata.

NULL, FIN e Xmas scan (nmap -sN, -sF, -sX)

Questi tipi di scansione manipolano i campi dell’header TCP, sfruttando alcune particolari poco noti del protocollo per differenziare le porte aperte da quelle chiuse. Citando l’RFC “if the destination port state is CLOSED … an incoming segment not containing a RST causes a RST to be sent in response“. Pertanto un’implementazione rispettosa dello standard risponderร  con un RST a pacchetti SYN, RST e ACK se la porta รจ chiusa e non risponderร  se la porta รจ aperta; riportando alla mente come il TCP differenzi i pacchetti utilizzando un set di bits nell’header, Nmap forgia pacchetti TCP che utilizzino una combinazione dei tre bits rimanenti (FIN, PSH e URG) dando origine ai suddetti scan: il Null scan pone tutti i bit a zero, il FIN scan utilizza unicamente il bit di FIN mentre il Xmas scan li setta tutti a uno “illuminando il pacchetto come un albero di Natale“, per citare Fyodor.

TCP Maimon scan (nmap -sM)

Il Maimon scan deve il nome al suo ideatore, Uriel Maimon, che lo presentรฒ sul numero 49 di Phrack nel Novembre 1996. Questa tipo di scanning รจ uguale ad un NULL, FIN, o Xmas scans ma utilizza un pacchetto di FIN/ACK. Secondo le specifiche, un target deve rispondere con un pacchetto RST sia che la porta sia aperta sia che sia chiusa. Ciononostante, come giร  ricordato, non tutti i sistemi rispettano il contenuto del RFC.

Idle scan (nmap -sI <zombie host>[:<probeport>])

Questo tipo di scansione rasenta la perfezione e, se correttamente implementata, permette di verificare la presenza di porte aperte/chiuse senza esporre il proprio indirizzo IP. Utilizzando particolari caratteristiche di alcune implementazioni del protocollo IP (un predicibile fragmentation ID), รจ possibile dedurre lo stato di una porta interrogando una terza macchina, detta host zombie. Per ogni porta, Nmap invia tre pacchetti: il primo รจ รจ diretto alla macchina zombie allo scopo di determinare l’IP ID corrente; a seguire, รจ forgiato un pacchetto avente come IP sorgente l’indirizzo della macchina zombie ed รจ inviato al target. Se la porta non รจ filtrata (aperta o chiusa), il target risponderร  allo zombie che tipicamente replicherร  con un RST, modificando in tal modo il proprio IP ID; se questa modifica รจ predicibile, ad esempio se l’ID รจ incrementato tipo un contatore, una successiva interrogazione allo zombie permetterร  di determinare se la porta รจ aperta/chiusa o filtrata.

Oltre alle tipologie presentate, Nmap offre diverse altre alternative per scansionare un host. Sebbene talune volte possano risultare piรน efficaci, quelle descritte sono da preferire in quanto tipicamente piรน performanti, efficaci e discreti.

Zenmap: un’interfaccia grafica per Nmap

Una delle critiche che spesso accompagnano gli strumenti di sicurezza รจ la mancanza di interfacce grafiche user-friendly; se sino a qualche tempo fa Nmap non era estraneo a questo problema, con l’uscita di Zenmap possiamo finalmente considerarlo superato. Zenmap รจ l’interfaccia grafica ufficiale di Nmap e, al pari dell’illustre collega, รจ un software multi-piattaforma e open-source. La sua progettazione si รจ concentrata nello sviluppare uno strumento che da un lato facilitasse l’uso di Nmap ai novizi, senza per questo impedirne un uso avanzato ad utenti piรน esperti. Il risultato, visionabile in figura, รจ un’interfaccia pulita e di immediato utilizzo.

Zenmap: la nuova interfaccia grafica di Nmap

Ovviamente nessuna interfaccia puรฒ sostituire le centinaia di opzioni di cui Nmap dispone. Ciononostante, normalmente Zenmap permette di ottenere buoni risultati con il valore aggiunto di presentarli in modo efficace ed intuitivo.

Aspetti avanzati: NSE

Introdotto relativamente di recente, il Nmap Script Engine รจ un versatile motore di scripting per estendere le capacitร  di Nmap senza forzare gli sviluppatori ad approcciare un compito impegnativo quale la modifica dei sorgenti C del programma.

NSE รจ un motore per script in linguaggio LUA e permette agli utenti di automatizzare una serie di procedure e test verso gli host target. Seppure inconsapevolmente, abbiamo giร  adoperato questa funzionalitร ; se ritorniamo alla nostra prima scansione e ne esaminiamo la seconda riga noteremo la seguente frase:

NSE: Loaded 36 scripts for scanning.

Avendo specificato l’opzione -A, la nostra scansione ha abilitato una serie di scripts di uso comune per recuperare alcune informazioni aggiuntive quali le chiavi SSH remote e il titolo della pagina root del web server, “Go ahead and ScanMe!”.

NSE รจ attivabile esplicitamente mediante l’opzione

--script="<categories>"

sostituendo a categories una lista separata da virgole di nomi identificativi le categorie in cui Nmap riunisce gli scripts:

  • auth, riunisce gli script che tentano di determinare le credenziali di accesso ai servizi dell’host target;
  • default, un set di script di generica utilitร , attivati automaticamente con -A;
  • discovery, include gli scripts che tentano attivamente di raccogliere ulteriori informazioni sui servizi attivi;
  • dos, racchiude gli scripts che possono causare dei denial-of-service;
  • exploit, include gli scripts che tentano di sfruttare eventuali vulnerabilitร ;
  • intrusive, comprende gli scripts potenzialmente intrusivi e nocivi al sistema, potenzialmente capaci di mandare in crash il sistema;
  • version, riunisce gli scripts per identificare le versioni dei vari servizi ed automaticamente inclusi con l’opzione -sV o -A;
  • safe, un set di scripts testati e il cui uso non dovrebbe causare problemi o impensierire gli amministratori di sistema del target;
  • malware, include gli scripts che tentano di determinare se l’host target รจ infetto da qualche tipo di malware noto;
  • vuln, racchiude gli scripts che tentano di determinare se l’host target รจ affetto da qualche vulnerabilitร  nota;
  • fuzzer, riunisce gli script che inviano al target dati casuali (fuzzy) nel tentativo di identificare qualche bug non noto;
  • external, comprende gli scripts realizzati dall’utente.

Conclusioni

Concludendo, Nmap รจ un potente strumento per ricavare informazioni da una rete informatica, identificandone i potenziali problemi. Il suo utilizzo, sebbene inizialmente ostico, permette un’analisi estremamente approfondita di ciรฒ che un host esponene alle altre macchine. Tramite l’interfaccia grafica Zenmap possiamo approcciare lo strumento con maggior facilitร  rispetto al passato, sebbene niente possa sopperire la consapevolezza data da una continuata esperienza sul campo.

Riferimenti e Approfondimenti

Altri contenuti interessanti

Pubblicitร 

Leggi anche...

Dominio scaduto da rinnovare subito? No, รจ una truffa!

Negli ultimi anni si รจ assistito a un aumento...

Aggiornamento sito web: perchรฉ รจ importante e deve essere fatto con regolaritร 

Lโ€™aggiornamento di un sito web รจ unโ€™attivitร  fondamentale che...

Autenticazione a due fattori (2FA): cos’è e come funziona

L'autenticazione a due fattori (in inglese Two Factor Authentication...

Authcode: cos’è e come funziona

Con il termine Authcode (o Auth-code) si fa riferimento...

HTTP Security Headers: aumentare la sicurezza del sito con .htaccess

Esistono diverse tecniche per innalzare il livello di sicurezza...

Criptare (e decriptare) file su Linux con OpenSSL

OpenSSL è un'implementazione rilasciata sotto licenza Open Source dei...
Pubblicitร