Service e Version Detection

Utilizzando Nmap e dirigendo la scansione su una macchina remota è possibile scoprire che le porte 25/tcp, 80/tcp e 53/udp sono aperte. Utilizzando il suo database di circa 2.200 servizi noti, contenuto nel file nmap-services, Nmap probabilmente sarà in grado di indicare che ti tratta rispettivamente di un mail server (SMTP), di un web server (HTTP) e di un name server (DNS). Tale riconoscimento è solitamente accurato - la maggior parte dei demoni in ascolto sulla porta 25 sono, in effetti, mail server. Non è comunque opportuno fidarsi ciecamente di tali indicazioni! È infatti possibile erogare servizi su porte non convenzionali.

Anche se le indicazioni di Nmap sono corrette, e gli ipotetici server sopracitati sono effettivamente SMTP, HTTP e DNS, queste informazioni non sono esaustive. Quando si eseguono dei "vulnerability assessments" (o anche semplicemente un inventario della rete) della vostra società o di clienti, è interessante sapere esattamente di che mail e DNS server si tratta e quale versione è in uso. Conoscere accuratamente la versione del software è di fondamentale importanza per determinare a quali exploits è vulnerabile il server. Version detection è di grande aiuto nel ricercare queste informazioni.

Al momento dell'identificazione delle porte TCP e/o UDP da parte di uno dei vari metodi di scansione, il version detection interroga queste porte per rilevare ulteriori dati sui servizi erogati. Il database contenuto nel file nmap-service-probes contiene istruzioni per interrogare i vari servizi e per interpretarne le risposte. Nmap cerca quindi di determinare di che servizio si tratta (ad esempio FTP, SSH, Telnet, HTTP), il nome dell'applicazione (ad esempio ISC BIND, Apache httpd, Solaris telnetd), la versione, l'hostname, il tipo di device (ad esempio stampante, router), la famiglia del sistema operativo (ad esempio Windows, Linux). Quando possibile Nmap restituisce anche la rappresentazione CPE ("Common Platform Enumeration") di questa informazione. Alle volte sono disponibili altri dettagli come l'apertura di un X server alle connessioni, la versione del protocollo SSH o l'utenza utilizzata da KaZaA. Ovviamente la maggior parte dei servizi non rilasciano tutte queste informazioni. Se Nmap viene compilato con il supporto per OpenSSL, sarà in grado di connettersi ai server SSL per dedurre quale tipo di servizio viene offerto dietro al suo "encryption layer". Alcune delle porte UDP vengono indicate come open|filtered se un UDP port scan non è in grado di determinare con precisione se la porta è open o filtered. Il version detection cercherà di ottenere una risposta da queste porte (esattamente come per le porte aperte), e modificherà lo stato in open se ci riuscirà. Le porte TCP open|filtered vengono trattate nello stesso modo. Bisogna tener presente che l'opzione -A abilita, fra le varie cose, il version detection. Il version detection viene descritto nel dettaglio in Chapter 7, Service and Application Version Detection.

Quando i servizi RPC vengono identificati, Nmap è in grado di raffinare quanto rilevato così da riconoscere versione e nome del servizio RPC. Inonda tutta le porte TCP/UDP rilevate come RPC con dei comandi NULL del programma SunRPC con lo scopo di determinare se sono effettivamente porte RPC e, nel caso, il programma e la versione che sono in esecuzione. Quindi si possono effettivamente ottenere le stesse informazioni del comando rpcinfo -p anche se il portmapper dell'obiettivo e dietro un firewall (o protetto da TCP wrappers). I decoy attualmente non funzionano con l'RPC scan.

Quando Nmap riceve delle risposte da un servizio ma non è in grado di trovarne un'interpretazione nel suo database, visualizza una particolare "fingerprint" e una URL per permettere di inviare quanto rilevato nel caso si conosca a priori che cosa sta effettivamente girando su quella porta. È importante perdere qualche minuto per effettuare l'invio di questi dati quando possibile perché così facendo chiunque in futuro potrà beneficiare dei dati raccolti e riconoscere anche questo servizio. Grazie a questo sistema Nmap è in grado di identificare circa 6.500 differenti varianti per più di 650 protocolli come SMTP, FTP, HTTP, ecc.

Version detection viene attivato e controllato dalle seguenti opzioni:

-sV (Version detection)

Abilita il version detection, come precedentemente illustrato. In alternativa, è possibile utilizzare l'opzione -A che attiva il version detection, tra le altre cose.

-sR è un alias -sV. Fino a Marzo 2011 era usata per attivare l'RPC separatamente dal version detection, ma ora queste opzioni sono sempre combinate.

--allports (Don't exclude any ports from version detection)

Normalmente, il version detection di Nmap non invia pacchetti alla porta TCP 9100 poiché alcune stampanti accettano e stampano direttamente qualunque dato ricevuto su questa porta. Se tale porta fosse sottoposta a scansione, verrebbero stampate decine di pagine contenenti richieste HTTP GET puri, dati binari di sessioni SSL e via discorrendo. È possibile cambiare il comportamento del version detection di Nmap con la modifica o la rimozione della direttiva Exclude nel file nmap-service-probes oppure specificando l'opzione --allports, così da effettuare la scansione di tutte le porte, indipendentemente da quanto indicato nella direttiva Exclude.

--version-intensity <intensity> (Set version scan intensity)

Quando si effettua un version scan (-sV), Nmap invia una serie di probe, ognuno dei quali ha assegnato un valore compreso tra 1 e 9. I pacchetti con valore più basso sono in grado di riconoscere i servizi comunemente diffusi, mentre quelli con valori più alti sono raramente necessari. Il livello di accuratezza specifica quali probe devono essere impiegati; più alto è il livello, più è probabile che il servizio venga correttamente identificato. D'altro canto, più una scansione è accurata e più tempo sarà necessario. I valori devono essere compresi tra 0 e 9; il valore di default è 7. Quando viene assegnato direttamente un probe ad una porta utilizzando la direttiva ports nel file nmap-service-probes, esso viene utilizzato indipendentemente dal valore indicato per l'accuratezza del version scan. Questo garantisce, per esempio, che ogni volta che viene trovata la porta 53 aperta vengano effettuati i controlli specifici per il DNS; così come in caso di porta 443 vengano invece utilizzati quelli per l'SSL e così via.

--version-light (Enable light mode)

Questa opzione è un alias di --version-intensity 2. Questa modalità rende il version scanning drasticamente più veloce, riducendone però la capacità di identificare accuratamente i servizi.

--version-all (Try every single probe)

Questa opzione è equivalente a --version-intensity 9, assicurando che ogni singolo probe venga utilizzato su ogni singola porta.

--version-trace (Trace version scan activity)

Indica a Nmap di visualizzare informazioni di debug estese relative all'attività del version scanning. È un subset di quanto si ottiene con l'opzione --packet-trace.