Introduzione
Nmap è nato come scanner di rete ed è diventato un
tool molto ricco, utilizzabile sia allo scopo di prevenire
attacchi che di effettuarli.
Come spesso avviene, l'attaccante e il difensore, hanno esigenze analoghe,
per cui anche l'amministratore di rete che deve difendersi ha bisogno
di scoprire le sue falle. Si dirà che dovrebbe conoscerle, ma in realtà
nulla può sostituire uno sguardo obiettivo dall'esterno, con tanto
di report scritto.
Nmap è scritto per sistemi Linux ed è possibile utilizzarlo sia da linea di comando, sia tramite interfaccia
grafica.
ATTENZIONE !!! Nmap non può danneggiare l'hardware, ma può
bloccare, in alcune condizioni, un sistema, fino a rendere necessario
il riavvio. Per cui non deve essere usato contro sistemi che
gestiscono servizi necessari.
Questo primo articolo darà una panoramica sull'uso di Nmap e presenterà
le funzioni essenziali, rimandando ad un prossimo lavoro per gli approfondimenti.
Installazione
Scaricare i files da http://www.insecure.org.
Si possono scegliere i pacchetti .tar.bz2 da compilare
oppure i binari precompilati e gestiti tramite RPM. Esiste anche la
versione per Windows.
Installazione da sorgenti
L'installazione da sorgenti è estremamente semplice. Se non si hanno
esigenze particolari è sufficiente un semplice:
> cd <directory dove è il pacchetto compresso>
> tar -xjf nmap-3.70.tar.bz2
> cd nmap-3.70
> ./configure
> make
> su <password di root>
> make install
Installazione binari
Sul sito insecure.org sono disponibili solo i binari per Windows e
quelli per Linux in formato .rpm, che una volta scaricati si installeranno
con:
> rpm -ivh nmap-3.70-1.i386.rpm nmap-frontend-3.70-1.i386.rpm
Uso da linea di comando
Questo è il modo più efficiente e veloce di usare Nmap, ed è solo
apparentemente più difficile che usare l'interfaccia grafica. In realtà
basterà avere a portata di mano l'elenco delle opzioni possibili.
Si tenga inoltre presente che non tutte le opzioni sono utilizzabili
tramite interfaccia grafica.
Bisogna premettere che per usare al pieno delle possibilità Nmap si
deve essere loggati come root, poichè in alcuni casi il programma
ha bisogno di usare direttamente alcuni moduli del kernel allo scopo,
ad esempio, di modificare gli header dei frame IP o accedere a porte
privilegiate.
Il prototipo di utilizzo è il seguente:
> nmap -[tipi di scan] -[opzioni] <host o segmenti di rete>
Ad esempio se io voglio verificare la mia rete dall'interno
posso fare:
> nmap -sT -PI 10.0.0.0/24
che significa: effettua lo scanning della rete 10.0.0.0 con subnetmask
255.255.255.0 (quindi di tipo C con 256 host possibili 10.0.0.0/24),
pingando gli IP con pacchetti icmp echo (-PI)
e analizza le porte tramite connessioni complete (-sT), ovviamente
bisogna inserire i dati identificativi della propria rete.
L'output prodotto potrebbe essere:
Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2004-08-10 21:29 CEST
Host 10.0.0.0 seems to be a subnet broadcast address (returned 2 extra pings). Skipping host.
qui Nmap ci dice che ha capito che deve analizzare il segmento di
rete identificato tramite l'indirizzo di broadcast e la netmask, e
che ha identificato, tramite i ping, 2 host attivi.
Interesting ports on 10.0.0.2:
(The 1658 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
80/tcp open http
255/tcp open unknown
qui Nmap ha analizzato il primo host 10.0.0.2 e ci dice che risultano
aperte solo 2 porte, la 80 tipicamente dedicata hai servizi http e
la 255 sconosciuta.
Interesting ports on marco (10.0.0.7):
(The 1652 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
443/tcp open https
3306/tcp open mysql
6000/tcp open X11
6346/tcp open gnutella
10000/tcp open snet-sensor-mgmt
qui analizza il secondo host con l'elenco delle porte trovate aperte.
ATTENZIONE !!! il servizio che vediamo abbinato alla porta
e al protocollo (tcp/udp) non indica direttamente l'applicativo che
lo sta usando, ma solo il servizio ufficialmente abbinato alla stessa
dalle norme IANA.
Come si vede la forma descrittiva dell'analisi delle porte è la seguente:
PORT/Protocol STATE SERVICE
numero/ Tcp open = aperta nome servizio
Udp close = chiusa sconosciuto
filtered = filtrata da un firewall
Ovviamente è possibile avere molte più informazioni da Nmap, ad esempio
se faccio lo stesso scanning usando il seguente comando:
> nmap -sT -sR -sV -I -O -PI -PT -vv 10.0.0.0/24
otterremo come output:
PORT STATE SERVICE OWNER VERSION
80/tcp open http WindWeb embedded webserver 2.0 (As on
NetComm DSL modems; Realm: Home Gateway; Calls itself Hasbani Web Server)
Qui Nmap ha fatto un eccellente lavoro. Ha individuato con precisione
in ascolto sulla porta 10.0.0.2:80 un web server piuttosto raro, che
in genere viene usato su dispositivi embedded, del tipo router, modem,
ecc.
255/tcp open unknown
MAC Address: 00:30:0A:0B:5A:D2 (Aztech Systems)
Ottimo!!! qui indica addirittura modello e numero di MAC della scheda
di rete.
Device type: PBX
Running: 3Com embedded
OS details: 3Com NBX PBX
Ci dice che si tratta di un apparecchio dedicato alle comunicazioni (PBX) con un sistema operativo 3com embedded:
TCP Sequence Prediction: Class=64K rule
Difficulty=1 (Trivial joke)
TCP ISN Seq. Numbers: 81E6F5BD 81E9E3BD 81EADDBD 81EBD7BD 81ECD1BD
81EFBFBD
IPID Sequence Generation: Incremental
Qua ci dice una cosa che potrebbe essere piuttosto grave, e cioè che
il sistema in funzione ha un metodo di determinazione dei codici di
identificazione delle connessioni TCP (IPID o ISN) altamente prevedibile,
per cui sarebbe esposto ad attacchi di spoofing cieco.
Host marco (10.0.0.7) appears to be up ... good.
Passa all'altro host attivo.
Initiating Connect() Scan against marco (10.0.0.7) at 00:30
Interesting ports on marco (10.0.0.7):
(The 1653 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE OWNER VERSION
22/tcp open ssh OpenSSH 3.5p1 (protocol 1.99)
80/tcp open http Apache httpd 2.0.47
111/tcp open rpcbind (rpcbind V2) 2 (rpc #100000)
443/tcp open http Apache httpd 2.0.47
3306/tcp open mysql MySQL 3.23.56-log
6000/tcp open X11 (access denied)
10000/tcp open http Webmin httpd
Anche qui ha individuato con esattezza gli applicativi che utilizzano
le porte aperte, con tanto di numero di versione.
Device type: general purpose
Running: Linux 2.4.X|2.5.X
OS details: Linux 2.4.0 - 2.5.20
Individuazione del sistema in uso piuttosto generica, ma si spiega...
infatti in realtà non credo che esistano due macchine su cui è stato
installato linux che si possano dire eguali.
TCP Sequence Prediction: Class=random positive increments
Difficulty=3357505 (Good luck!)
Questa volta il sistema è molto più solido, ed ha un meccanismo di
determinazione dei numeri identificativi delle connessioni TCP molto
più sicuro.
Come abbiamo potuto vedere si tratta di una vera miniera di informazioni.
Comunque la vera forza dell'uso di Nmap da linea di comando è nell'uso
in combinazione con la shell o o qualche script. Ad esempio si può
filtrare l'output tramite una pipe e il comando grep:
> nmap -sT -sR -sV -I -O -PI -PT -vv 10.0.0.7 | grep http
ci consegnerà la lista delle porte su cui è attivo un servizio http.
Ancora meglio se vogliamo tenere sotto controllo un certo host nel
tempo si può fare un script, ad esempio in Perl, che venga azionato
tramite crontab, che usi Nmap per scansionare un certo obiettivo ad
intervalli periodici e che addirittura modifichi i parametri a seconda
delle risposte che riceve.
Comunque per chi vuole è disponibile una comoda interfaccia grafica, che analizzeremo nel prossimo articolo.
Uso tramite interfaccia grafica
Ingresso - Scan
Quello che vedete sotto è il pannello che si presenta al momento del lancio dell'applicazione. È semplice, ma molto funzionale.
Dall'alto in basso troviamo:
5.1.1 La barra dei menu
Non è molto utile in quanto il 99% delle opzioni si settano in altro modo, comunque è composta da 3 menu:
File:
con all'interno 3 opzioni. OPEN LOG: che consente di aprire un file di log già presente. SAVE LOG: che consente di salvare in un file un log presente nella finestra sottostante. QUIT: per uscire dal programma.
View:
con all'interno 3 opzioni. Black & White: selezionandolo avremo i report scritti solo in
bianco e nero. Coloured: i report avranno una colorazione in base agli elementi. Append Log: se si seleziona questa opzione e si fanno più scansioni i report successivi verranno "appesi" ai precedenti altrimenti li sovrascriveranno.
Help:
Qui non c'è nulla di utile.
5.1.2 La barra dell'indirizzo
Abbiamo 3 elementi, un form e due pulsanti.
Target(s):Un form in cui inserire l'indirizzo o gli indirizzi da esaminare. Possono essere inseriti sia come: nomi: www.shishii.com; IP singoli: 10.0.0.1; segmento di rete:: 10.0.0.0/24; liste:: 10.0.0.1,2,3,4,5,6 oppure 10.0.0,1,2,3.0; intervalli: 10.0.0.1-100; caratteri jolly: 10.0.0.* oppure 10.0.*.*;
Scan:: un pulsante per iniziare la scansione.
Exit:: un pulsante per chiudere il programma.
5.1.3 Schede (Tabs)
Qui c'è la parte più importante dei impostazioni, divisa in 5 Tabs. Tramite
i vari menu e form vengono selezionati i TIPI DI SCAN e le
OPZIONI. In questa sezione verranno solo presentate le funzioni
generali dei vari pannelli, mentre la descrizione dettagliata è rinviata
a più avanti.
5.1.4 Scan Type
menu a tendina che consente di scegliere la "politica di
attacco" ai vari host individuati. Bisogna infatti dire che le
possibilità sono molte e con notevole impatto sui risultati, sia nel
senso di aumentare le possibilità di ottenere informazioni, che quelle
di restare nascosti.
5.1.5 Scanned Ports
Tramite questo form è possibile decidere quale intervallo di porte
saggiare. Si può spaziare da una sola a tutte, con la possibilità
di stabilire delle liste.
5.1.6 Scan Extensions
In questa sezione si possono richiedere a Nmap di fornire ulteriori
informazioni, alcune veramente preziose. Infatti molto spesso si può
riuscire ad identificare il tipo di applicativo che usa una porta
e la versione.
5.2 Discover
Questo è il pannello che si presenta selezionando il tab DISCOVER.
Tramite questo pannello è possibile selezionare il tipo di sondaggio
da fare per identificare gli host attivi, in pratica il tipo di "ping"
che si preferisce. Questo set di opzioni è molto importante quando
si vuole analizzare un segmento di rete, o comunque una lista consistente
di host. Lo è molto meno quando si ha un indirizzo preciso. La scelta
fondamentale è tra NON effettuare alcun ping, o effettuarlo con varie
modalità.
5.3 Timing
Questo pannello consente di regolare l'atteggiamento di Nmap, nel
senso di impegno della rete, e i time out. È fondamentale sia allo
scopo di non farsi scoprire che di preservare la rete da malfunzionamenti.
Se non si sa cosa si sta facendo è meglio lasciare i impostazioni di default.
5.4 Files
In questo tab si possono indicare gli indirizzi di files per l'input
in cui stoccare i nomi o gli IP degli host da verificare, e gli indirizzi
di files di output in cui conservare i risultati degli scan in vari
formati.
5.5 Options
In questo tab si possono impostare varie opzioni relative alla risoluzione
inversa dei nomi (da IP a nome), alla quantità di informazioni fornite
in output, all'identificazione della fonte dello scan, e altre più
complesse.
5.6 Pannello dell'output
In questo grosso pannello centrale compare l'output e messaggi vari che possono essere salvati o tramite il menu "file", o tramite copia - incolla.
5.7 Command
In questo utile quadro monolinea compaiono i flag realtivi alle opzioni
selezionate. Non si può scrivere nello stesso, ma è utile per imparare
quali sono i vari flag e a che opzioni corrispondono.
6 Tipi di scan
Veniamo ora all'illustrazione dei vari modi d'uso di Nmap tramite
i suoi flag. Come detto gli stessi possono essere usati tramite la
linea di comando o attivati tramite i vari form dell'interfaccia grafica.
-sT
CONNECT SCAN. Tramite questo flag, per determinare
lo stato delle porte di un host verrà utilizzata una connessione completa
TCP. Se la stessa avviene vorrà dire che la porta è aperta. Ha lo
svantaggio che verrà immediatamente individuato da qualunque software
di analisi dei log o Introduction Detection System.
-sS
SYN SCAN. In questa maniera lo scan avverrà tramite
una richiesta di connessione, se la porta da controllare è aperta
risponderà e Nmap chiuderà la connessione, altrimenti se la porta
è chiusa ad Nmap giungerà un pacchetto che chiuderà la connessione
immediatamente. In altre parole, pur ricevendo tutte le informazioni
che servono, la connessione non verrà mai completata per cui molto
raramente comparirà nei file di log, ma verrà registrata dai migliori
I.D.S.. Questo tipo di scan è utilizzabile solo da root.
-sF -sX -sN
FIN SCAN, XMAS SCAN, NULL SCAN. Questi tipi
di scan sono particolarmente difficili da rilevare da parte dei vari
sistemi di logging o I.D.S., inoltre penetrano facilmente i firewall,
per cui sono molto efficaci, ma possono portare a risultati dubbi
nei confronti di alcuni sistemi operativi che non rispettano gli standard
RFC.
-sP
PING SWEEP. Questo non è un vero e proprio scan, ma
serve solo per scoprire quali host sono attivi su un segmento di rete.
Quindi usarlo solo se non si vuole effettuare uno scan delle porte.
-sU
UDP SCAN. Questo tipo di analisi è molto raffinato
e serve ad individuare delle porte sulle quali opera un servizio UDP
che ci interessa. Ricordiamo che UDP è un protocollo che non stabilisce
una connessione (ConnectionLess) , per cui non risponde alle
richieste in maniera automatica, ma solo se la richiesta è significativa
per l'applicazione che è in ascolto. Con questo scan le porte aperte
non risponderanno e le chiuse manderanno un pacchetto "icmp
port unreachable". Lo scan UDP non è utile solo all'attaccante,
ma soprattutto al difensore (bisogna ricordarsi di effettuarlo sempre
dall'esterno), in quanto alcuni trojan, tipo "back orifice",
si mettono in ascolto su una porta arbitraria UDP, e per scoprirlo
potrebbero non essere sufficienti strumenti quali "netstat",
essendo possibile che siano stati alterati dall'attaccante che ha
installato il trojan. Si tenga però presente che questo scan è molto
lento.
-sA
ACK SCAN: Anche questo è un tipo di scan molto raffinato
e utile. Consente di stabilire se il firewall interposto è di tipo
"statefull" o è un semplice filtro di pacchetti TCP con
il flag SYN attivo. Con questo tipo di scan è possibile analizzare
reti protette da semplici filtri, cosa che non è possibile con gli
scan di tipo -sT e -sS.
-sW
WINDOW SCAN: Questo tipo di scan è simile al precedente,
e oltre a ciò è in alcuni casi in grado di rilevare delle porte aperte
anche se filtrate da un firewall statefull, a causa di un'anomalia
dello stack TCP presente su parecchi sistemi operativi.
-sR
RPC SCAN: Funziona in combinazione con gli altri tipi
di scan e opera sulle porte trovate aperte cercando di stabilire se
vi è in ascolto un servizio RPC (Remote Control Protocol) e la versione.
Siccome usa un flooding (invio massiccio e continuo di pacchetti)
può creare problemi alla rete e all'host bersaglio.
-sV
VERSION SCAN: Tramite questo scan è possibile determinare
il nome e la versione degli applicativi che sono in ascolto su una
porta. Viene usato un database di "impronte digitali".
7 Opzioni
I seguenti flag costituiscono delle opzioni che possono essere molto
importanti nell'uso di Nmap.
-P0
Tramite questo flag diciamo a Nmap di non pingare l'host
bersaglio, ciò è utile quando siamo sicuri che è in linea poichè ci
fa risparmiare tempo.
-PT
Qui possiamo richiedere che il bersaglio venga pingato, invece
che con pacchetti ICMP echo-request, tramite pacchetti TCP
con flag ACK attivo. Ciò consente di superare i firewall che respingono
i primi. Se non si indica alcuna porta il ping avviene sulla 80 (http)
che in genere è quella più frequentemente aperta. Sintassi:
> nmap -PT<numero porta - opzionale>
-O
Tramite questa opzione è possibile cercare di identificare il
sistema operativo dell'host bersaglio. È da usare con l'opzione -v
(verbose). Sintassi:
> nmap -sS -O -v <host bersaglio>
-f
Se si setta questa opzione i scan di tipo SYN -sS, FIN
-sF, XMAS -sX, o NULL -sN vengono effettuati
con frammenti di pacchetti, cioè con header non completi, questo molte
volte confonde e rende inefficaci firewall e IDS, ma... ATTENZIONE...
in alcuni casi può provocare il crash dell'applicazione in ascolto
o del sistema.
-v
Si tratta del "verbose mode", che consente di avere più
informazioni del normale.
-vv
Come sopra, ma con maggiore quantità di informazioni.
-d e -dd
Modalità di debug, da usare solo se si hanno problemi
e si sta cercando di risolverli.
-oN
Consente di indicare un file in cui salvare l'output in forma
"human readable", cioè così come lo vedremmo sulla console.
Sintassi:
> nmap -sS -v -oN </path/file.txt> <host bersaglio>
-oX
In questo caso l'output viene salvato nel file indicato in formato
XML, ciò ne consente una grandissima esportabilità e lavorabilità,
anche allo scopo di inserire i dati in un eventuale database. Sintassi:
> nmap -sS -v -oX </path/file.xml> <host bersaglio>
-oG
Con questa opzione i report vengono salvati in formato cosidetto
"grepable", cioè facilmente utilizzabile dal programma
grep, che, in ambiente UNIX, serve per trovare i file che contengono
certe stringhe. In pratica non fa altro che mettere tutto l'output
su una sola riga. Sintassi:
> nmap -sS -v -oG </path/file> <host bersaglio>
-oA
Con questa opzione Nmap produce tre files di output aventi estensione
rispettivamente .nmap, .gnmap, .xml che corrispondono a tre
file ottenibili effettuando tre volte la stessa scansione con le opzioni
-oN -oX -oG. Sintassi:
> nmap -sS -v -oA </path/file> <host bersaglio>
--resume
Questa opzione consente di proseguire uno scan iniziato
ed interrotto, ma è utilizzabile solo se si è stava effettuando lo
scan con l'opzione -oN o -oG. Sintassi:
> nmap -sS -v --resume </path/file> <host bersaglio>
--append_output
In questo modo non sovrascriveremo un file precedente,
ma aggiungeremo i report alla fine. Sintassi:
> nmap -sS -v --append_output <host>
-iL
Questo consente di utilizzare un file che contiene una lista
di host da controllare, i vari host devono essere separati o con uno
spazio, una tabulazione o un ritorno a capo. Sintassi:
> nmap -sS -v -iL </path/file_di_Input> <host bersaglio>
-p
Tramite questa opzione si può indicare un intervallo di porte
da analizzare. l'elenco deve essere separato da virgole.
-T
Tramite questa opzione si settano una serie di parametri temporali
che influscono moltissimo sulla velocità di esecuzione, l'occupazione
di banda di rete e la segretezza dello scan. Nmap ha la capacità di
autoregolarsi in base alle caratteristiche della rete e alle risposte
degli host, ma a volte si hanno esigenze particolari su cui si può
intervenire come segue.
-T0 o -T Paranoid
È la modalità più prudente, che ha ottime
possibilità di sfuggire agli IDS e simili. Effettua lo scan in maniera
seriale e non parallela, cioè analizza gli host e le porte uno dopo
l'altro e non contemporaneamente. Inoltre interpone almeno 5 minuti
tra un pacchetto ed un altro.
-T1 o -T Sneaky
Come sopra tranne che interpone 15 secondi tra
un pacchetto ed un altro.
-T2 o -T Polite
Come sopra tranne che interpone 0,4 secondi tra
un pacchetto ed un altro.
-T3 o -T Normal
Come dice il nome è la modalità di default. Effettua
lo scan parallelo e alla velocità resa possibile dalle caratteristiche
della rete, rallentando se avverte che si possono creare sovraccarichi
o perdite di dati.
-T4 o -T Aggressive
Questa opzione spinge lo scan ad alta velocità,
per cui è raccomandabile usarla solo se si dispone di una connessione
veloce.
-T5 o -T Insane
Spinge tutto alla massima velocità. È necessaria
una connessione veloce. C'è il rischio di mandare in crash l'host
bersaglio. È possibile una perdita di informazioni a causa dei timeout
molto brevi.