Nmap

 

1- Introduzione

 

Nmap (Network security Scanner)  scritto da Fyodor nel 1997 è un portscanner  progettato per sistemi Unix/Linux e permettere agli amministratori di sistema (e ai curiosi ...) di operare scanning al fine di determinare quali host sono attivi e quali servizi offrono.

Utilizza diverse tecniche di scanning quali : UDP, TCP connect(), TCP SYN (half open), ftp proxy (bounce attack), Reverse-ident, ICMP (ping sweep), FIN, ACK sweep, Xmas Tree, SYN sweep e Null scan. il sito di riferimento è: http://www.insecure.org/nmap/.

 Il risultato di eseguire Nmap è di solito una lista di porte attive su una determinata macchina e restituisce a video un elenco di quelle attive, il che rende semplice capire quali siano i punti vulnerabili del sistema, le porte aperte sulla rete.

Nmap dà sempre il nome del servizio delle prime 1024 porte, numero, stato e protocollo. Lo stato è sia 'open' (aperto) che 'filtered' (filtrato) che 'unfiltered' (non filtrato). 'Open' significa che la macchina sottoposta a scanning  accetterà connessioni su quella porta. 'Filtered' significa che un firewall, un filtro o un altro ostacolo di rete copre la porta e previene Nmap dal determinare se la porta è aperta. 'Unfiltered' significa che la porta è conoscita da Nmap come chiusa e nessun firewall o filtro sembra interferire con i tentativi di Nmap di stabilirlo. Le porte 'unfiltered' sono casi comuni e vengono mostrate solo se la maggior parte delle porte sottoposte a scannino  sono in stato di filtering.

Dipendentemente dalle opzioni usate, Nmap può inoltre rilevare il Sistema Operativo (OS) in uso tramite una tecnica chiamata TCP/IP Stack FingerPrinting.

 

 

2- Caratteristiche

 

Nmap è un portscanner realizzato riunendo le funzionalità di diversi portscanner preesistenti e migliorandole. Le principali caratteristiche di Nmap sono:

 

1)      il calcolo dinamico dell’intervallo tra l’invio di due pacchetti successivi, evitando così di doverlo calcolare manualmente con un ping della macchina. Inoltre l’adattamento dinamico dell’intervallo permette di gestire la ritrasmissione dei pacchetti

 

2)      ritrasmissione: alcuni portscanner si limitano ad inviare pacchetti e ad attendere le risposte. Questo può generare false risposte negative o positive, nel caso di perdita dei pacchetti. Questo aspetto è particolarmente importante per le scansioni UDP e FIN, che cercano le porte che non rispondono

 

3)      scansione parallela delle porte: alcuni portscanner interrogano le porte in modo lineare, una alla volta. Questo approccio non è valido sulle connessioni di rete geografiche. Nmap usa l’input-output non bloccante e la scansione parallela. Il numero di scansioni parallele è configurabile

 

4)      specificazione flessibile delle porte: non è sempre necessario interrogare tutte le 65535 porte. Nmap permette di specificare un numero di porte e degli intervalli arbitrari, oppure tutte le porte registrate nel file /etc/services

 

5)      specificazione flessibile dell’host: Nmap permette di interrogare più host specificando il nome o una netmask

 

6)      rilevazione degli host inattivi: Nmap evita di effetture la scansione degli host non collegati, testando la presenza delle macchine con un ping.

 

3 – Come usare Nmap

Vediamo ora come usare Nmap al fine di testare la nostra rete.

Nmap è uno strumento fruibile sia da un amministratore di rete che da un cracker, in entrambi i casi è ovviamente necessario conoscere l'indirizzo ip della macchina obiettivo.

Una volta individuato, il primo passo da compiere consiste nel rilevare quali servizi siano attivi nella rete  presa di mira, in modo da riconoscerne la tipologia

La prima tecnica che analizzo è la classica "connect", la più banale delle tecniche di scanning. Questa operazione può essere effettuata manualmente utilizzando telnet o netcat, sia da Windows, sia da Linux o da qualsiasi altra piattaforma fornita di stack tcp. Questa tecnica non fa altro che tentare di stabilire una connessione con una porta tcp: molto banalmente, se l'operazione riesce significa che la porta è aperta !

Con Nmap basta digitare  questo comando per ottenere uno scanning-connect :

 


 

 

 


dove -p serve per specificare la porta (o il range di porte) che vogliamo testare (in questo casto 1080)

e l'ip dell'host da sondare. Ho eseguito in questo esempio la stessa operazione ma considerando due diversi ip dell'host da sondare il primo 193.205.161.186 che è risultato essere attivo ed il secondo 193.205.161.167 che al contrario è risultato down. Una connessione tcp viene avviata al termine di una negoziazione denominata"three-way-handshake";

 

 

 

 

L’ handshake consiste in un'operazione in tre fasi:

1)      il client invia un pacchetto tcp con il solo flag SYN attivo;

2)      il server risponde. La risposta può essere di due tipi: porta aperta oppure porta chiusa. Se la porta è chiusa il server risponde con un pacchetto con i flag ACK RST; altrimenti il server invia un pacchetto tcp con i flag  SYN e ACK.

      3)  il client, che invia a sua volta un pacchetto ACK al server .

 

la negoziazione è terminata: può iniziare la trasmissione di dati.

Il metodo che abbiamo appena visto ha un problema fondamentale: è facilmente rilevabile. Basta un programma stupidissimo scritto in Visual Basic per intercettare un tentativo di connessione e rilevare l'ip dell'host remoto.

Ovviamente questa tecnica di scanning è applicabile se i router o firewall della rete presa di mira permettono il passaggio di messaggi icmp .In caso contrario c'è una seconda possibilità che prevedere come presupposto il fatto che le macchine presenti dietro al firewall possano erogare un servizio interno.

 

3.1 - Scansione diretta delle porte

 

Diventa una delle prime tecniche per stabilire se vi siano dei sistemi funzionanti dietro un firewall, dato che difficilmente questi ultimi si prendono l'onere di bloccare pacchetti destinati alle porte dedicate a servizi di uso comune, come smtp(25), imap(143), pop(110), etc.

Grazie a Nmap siamo in grado di capire attraverso il cosiddetto tcp ping scan se un sistema è attivo, anche se questo si trova dietro un firewall.

 

3.2 - Ping Scanning

 

Viene utilizzato per sapere quali host in una rete sono online e realizzato  con l’uso della opzione –sP spedendo richieste ICMP echo a ciascun IP nella rete specificata.Gli host che rispondono sono attivi.

Sfortunatamente molti siti come http://www.microsoft.com bloccano i pacchetti di richiesta di echo.

Quindi Nmap usa il ping TCP con l’ulteriore opzione -PT in modo che invece che mandare pacchetti ICMP echo request ed aspettare per la risposta, spediamo pacchetti TCP ACK alla  porta di default 80 il cui servizio è l’HTTP, visto che non è quasi mai filtrata attraverso il network bersaglio (o verso una singola macchina) e poi aspettiamo per la risposta che torni indietro.

Gli host che sono attivi dovrebbero rispondere con un RST.

 


 

 

 


Abbiamo determinato quali sistemi sono attivi dietro un firewall in grado di bloccare dei pacchetti icp.

Avremo potuto usare anche l’opzione -P0 la quale non cerca di pingare gli host del tutto prima di sottoporli a scanning. Questo permette di effettuare lo scanning di reti che non permettono le richieste ICMP echo (o le risposte) attraverso i loro firewall. Il sito della Microsoft è un esempio di questo tipo di rete e noi possiamo quindi usare -P0 o-PT80 quando facciamo portscan a http://www.microsoft.com.

 

 


 

 


L’opzione -PI usa un vero pacchetto di ping (ICMP echo request). Se trova host che sono attivi cerca anche nella vostra rete per indirizzi di broadcast diretti alla subnet. Questi sono IP raggiungibili dall'esterno e traducono i pacchetti IP in arrivo ad una subnet di computers.

 


 


3.3 - User non root

Per gli user non root, usiamo -sT   Tcp connect() scan: questo è il più semplice modo di TCP scanning. La chiamata di sistema connect() fornito dal vostro Sistema Operativo è usata per aprire una connessione a tutte le porte interessanti nella macchina. Se la porta è in ascolto, connect() avrà successo, altrimenti la porta non è raggiungibile.

Un gran vantaggio di questa tecnica è che non ha bisogno di nessun privilegio speciale. Ogni utente su gran parte dei box Unix è libero di usare questa chiamata.

Di solito (per gli user non-root), Nmap usa entrambi i metodi ICMP e ACK in parallelo.

 


 

 

 

 


Un ulteriore tecnica che usa pacchetti SYN (richiesta di connessione) invece di pacchetti ACK per gli utenti root è realizzata con l’opzione -PS.

Gli host che sono attivi risponderanno con un RST (o raramente con un SYN/ACK).

 

 

 


 

 

 


Si può notare che Nmap da lo stesso tipo di output per ogni diverso tipo di scanning che usiamo,questo ci da la conferma ulteriore che li supporta comunque tutti.

 

 

 

3.4 - Come realizzare il portscanning

Dopo aver recuperato le informazioni di base, diamo il via alla seconda operazione, ovvero al port scanning.

Prendiamo ad esempio un'ipotetica macchina 193.205.161.167, nascosta dietro a un firewall e controlliamo i servizi attivi:

 

 

 

 

 


 

 

 


Abbiamo appena eseguito una scansione tcp syn della macchina, usando l'opzione –sS  (SYN, half-open) , il che da luogo a connessioni non complete ovvero connessioni che interrompono il "three-way-handshake" a meta' (half-open). ma in grado di rilevare il servizio attivo su una determinata porta. Così facendo l'host remoto non si accorgerà del nostro tentativo di collegamento o comunque non registrerà il nostro ip. Con l’ulteriore opzione -P0 si evita di pingare l'host target.

 

 

Se avessimo usato l'opzione -l saremmo riusciti a sapere, quando possibile il proprietario del processo ma solamente utilizzando una scansione tcp tramite l'opzione -sT.

L’utilità di conoscere il proprietario del processo sta nel fatto che se venissimo a sapere che il proprietario del processo che gestisce il web server è l'utente root, potremmo tentare di manomettere il server web stesso in modo da ottenere la shell utilizzata dall'utente proprietario, ovvero la shell di root.
Anche il SYN scan che abbiamo appena visto può essere rilevato, e il nostro ip reale può essere così svelato. Non c' è molto di più da fare per nascondere l'ip sorgente reale, ma si può ricorrere a uno stratagemma: effettuare lo scanning da più indirizzi ip contemporaneamente, utilizzando pacchetti "decoy" (pacchetti-esca).

Nmap permette di specificare uno o più indirizzi "falsi" come ip sorgente: oltre a quello reale (necessario per ottenere i risultati dello scanning!), verranno inviati pacchetti "devoy" con l'ip sorgente opportunamente ritoccato.

Il seguente comando lancia uno scanning half-open contro 192.168.0.2, sonda la porta 1080; inoltre invia altri pacchetti SYN dall'indirizzo 1.2.3.4:

 

nmap -p 1080 192.168.0.2 -sS -D1.2.3.4

 

qui c'e' il solito ping...

 

Source IP: 192.168.0.1  Target IP: 192.168.0.2

ICMP  Length: 0  ChkSum: BE68  Code: Echo Message

 

ecco il ping proveniente dall'ip falso !

 

Source IP: 1.2.3.4  Target IP: 192.168.0.2

ICMP  Length: 0  ChkSum: BE68  Code: Echo Message

 

Source IP: 192.168.0.2  Target IP: 192.168.0.1

ICMP  Length: 0  ChkSum: C668  Code: Echo Reply

 

La sequenza e' uguale al SYN scan (E' un SYN scan !), in piu' c'e' il

pacchetto decoy:

 

Source IP: 192.168.0.1  Target IP: 192.168.0.2

TCP  Length: 0  Source Port: 33754  Target Port: 1080  Seq: 95EDA54C  Ack: 00000000

Flags: S  Window: 4096  TCP ChkSum: 23362  UrgPtr: 0

 

Source IP: 1.2.3.4  Target IP: 192.168.0.2

TCP  Length: 0  Source Port: 33754  Target Port: 1080  Seq: 95EDA54C  Ack: 00000000

Flags: S  Window: 4096  TCP ChkSum: 6118  UrgPtr: 0

 

Source IP: 192.168.0.2  Target IP: 192.168.0.1

TCP  Length: 0  Source Port: 1080  Target Port: 33754  Seq: 0018D246  Ack: 95EDA54D

Flags: SA  Window: 8576  TCP ChkSum: 24470  UrgPtr: 0

 

Source IP: 192.168.0.1  Target IP: 192.168.0.2

TCP  Length: 0  Source Port: 33754  Target Port: 1080  Seq: 95EDA54D  Ack: 00000000

Flags: R  Window: 0  TCP ChkSum: 27455  UrgPtr: 0

 

3.5 - Tecnica del Fingerprinting dello stack

Questo tecnica viene utilizzata da Nmap per avere informazioni relative al tipo di sistema operativo di cui dispone il nostro bersaglio. Probabilmente anche un indicazione sul Kernel utilizzato.

 

 


 

 

 

 

 


Secondo Nmap si tratta di Linux con un possibile Kernel 2.2.

 

 

4 - Conclusioni

Avrei preferito la possibilità di poter lavorare su una shell grafica ed Nmap ,uno dei più celebri programmi di portscanning, non la fornisce infatti per eseguire una o più operazioni bisogna inserirle come linee di comando. Esso da la possibilità di testare la presenza di uno o più host attivi sulla rete non necessariamente testandoli tutti ma semplicemente quelli di cui siamo interessati. Inoltre individuate le porte aperte non ha bisogno di effettuare lo scanning su tutte prima di attaccare ma bensì può scegliere una porta specifica come bersaglio per un eventuale attacco.Questo comporta all’amministratore di sistema o a chiunque usi questo programma di rendere più veloce la computazione delle operazioni che esegue.

Il codice di Nmap è scritto in C un linguaggio comunque evoluto ed anche  facilmente modificabile. 

Esistono diverse versioni di Nmap, per Linux/Unix, Windows NT, ottimo sniffer per Windows 95/98. Non si può inoltre escludere la possibilità che Nmap sia portabile ovvero ci sia una sola versione che giri sotto un qualunque sistema operativo.