Last update Maggio 19, 2018 11:48 AM

 

drmlog  


Personal Website


Articoli / Articles
     

Pagina Iniziale Home Page

Informazioni About Me

Curriculum Vitae Resume
Didattica Teaching
Guide Tutorials
Articoli Articles
Libri Books

Contatti Contacts
     
 
     
 

Penetration Test con Nmap
di Roberto Saia

Tratto dal libro "Reti e sicurezza per sistemi Windows e Linux/Unix" edizioni FAG Milano, collana Pro DigitalLifeStyle

Una delle più importanti attività in ambito sicurezza informatica è senza dubbio quella che in letteratura informatica prende il nome di “Penetration Test“, una denominazione data a tutte quelle attività che hanno lo scopo di verificare, in modo più o meno approfondito, la sicurezza di una infrastruttura informatica, sia quando questa riconduce a un singolo sistema stand-alone, sia quando essa coinvolge un'intera rete composta da numerosi sistemi eterogenei (server, router, firewall, IDS, ecc.).

Come lo stesso nome suggerisce, tale attività viene posta in essere secondo un paradigma alquanto invasivo, in quanto il suo scopo è quello di sondare opportunamente ogni elemento potenzialmente sfruttabile da un aggressore al fine di evidenziarne le vulnerabilità intrinseche oppure semplicemente discendenti da una inadeguata/superficiale configurazione: sulla base di questo obiettivo appare alquanto palese come tale attività debba essere condotta secondo i tipici "modus operandi" degli aggressori, cioè in assenza di precise informazioni sull'obiettivo e adoperando ogni tecnica e/o strumento utile per conseguire i propri fini o, almeno, per ottenere quante più possibili informazioni da impiegare successivamente, magari nell'ambito di altre tecniche meno invasive come, per esempio, quelle afferenti all'ingegneria sociale (social engineering). Una attività di "Penetration Test" ben condotta è in grado di fornire preziosi elementi di valutazione con i quali sarà possibile adeguare efficientemente le proprie politiche di sicurezza, calibrandole in modo aderente ai reali rischi, piuttosto che, come solitamente avviene, sulla base di considerazioni esclusivamente teoriche che, molto spesso, conducono alla realizzazione di contromisure blande o del tutto inefficaci.

Uno dei più apprezzati e potenti software che è possibile impiegare per la scansione di un singolo sistema o di una intera rete di macchine è certamente Nmap (contrazione dei termini inglesi Network e Mapper), un software open-source distribuito secondo licenza GNU-GPL. Il grande apprezzamento riscosso da Nmap deriva principalmente dalla sua capacità di svolgere numerosissime compiti, anche complessi, una capacità che si rivela di cruciale importanza sia nel coadiuvare il lavoro degli amministratori sia, purtroppo, del fornire potenti strumenti di offesa a coloro che operano dall'altra parte della barricata.

Tra le numerose funzionalità di Nmap vi è, in primis, la capacità di ottenere numerosissime informazioni sulle macchine presenti all'interno di un determinato intervallo di indirizzi IP, operazione che esso compie in svariate modalità e con un diverso grado di "rilevabilità", riuscendo in molti casi ad eludere le contromisure implementate dagli amministratori (o nativamente presenti nei software) al fine di mascherare talune informazioni: per esempio, con Nmap è possibile ricavare informazioni circa il sistema operativo in uso, la sua versione e il tipo dei servizi in esecuzione sulla macchina remota, il tutto in tempi di gran lunga minori di quelli ravvisabili in altri software che svolgono funzioni analoghe.

001
Figura 1 - Finestra principale di Zenmap.

La precedente Figura 1 mostra la finestra principale di Zenmap, un front-end grafico per Nmap che permette di compiere ogni operazione in modalità grafica, senza che l'utente sia costretto a ricordare le (tante) opzioni utilizzabili da riga di comando: sebbene l'interfaccia testuale nativa rappresenti probabilmente il modo più efficace per impiegare questo software, sia direttamente sia mediante script, nei primi utilizzi la disponibilità di una interfaccia grafica può rivelarsi estremamente utile. Come è possibile osservare nella precedente figura 1, lo stato delle porte prese in esame durante la scansione vengono classificati secondo alcuni criteri, criteri sinteticamente riepilogati in Tabella 1.

Tabella 1 - Possibile stato delle porte rilevate da Nmap.

Stato
Descrizione
Open
Porta in ascolto e in grado di accogliere eventuali richieste
Filtered
L'analisi dello stato della porta viene impedito (per esempio, a causa di una regola impostata nel firewall)
Unfiltered
Pur risultando attiva, Nmap non è in grado di definire lo stato della porta
Close
Porta non attiva
Open/Filtered
Nmap non è in grado di distinguere in quale dei due stati si trova la porta analizzata
Close/Filtered
Nmap non è in grado di distinguere in quale dei due stati si trova la porta analizzata

Per utilizzare Nmap da terminale, occorre farlo invocando il comando con privilegi di amministratore (sudo) e impiegando la seguente sintassi:

sudo nmap [TIPO_SCANSIONE] [OPZIONI] [MACCHINE/RETI]

Nel successivo esempio minimale viene mostrato l'esito del comando eseguito su piattaforma Linux Ubuntu e mirato alla scansione dell'indirizzo IP 10.22.83.6 (quello visto in precedenza nell'esempio relativo a Zenmap):

sudo nmap 192.168.1.6

Starting Nmap 5.00 ( http://nmap.org ) at 2010-09-12 12:34 CEST
Interesting ports on 192.168.1.6:
Not shown: 997 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
MAC Address: 00:E0:18:93:A6:67 (Asustek Computer)
Nmap done: 1 IP address (1 host up) scanned in 14.23 seconds

Senza specificare alcuna opzione particolare, quindi avvalendoci della modalità operativa predefinita, Nmap è stato in grado di identificare tre porte TCP attive (135, 139 e 445) delle quali ha anche indicato i probabili servizi basandosi sulla numerazione standard convenzionalmente assegnata; riguardo all'adattatore di rete remoto esso è riuscito a rilevare sia l'indirizzo fisico MAC che il produttore (si tratta di dati altamente probabili ma non certi, in quanto alterabili dall'utente della macchina in questione); Il tempo totale impiegato per compiere le interrogazioni è riportato nell'ultima riga (14.23 seconds).

Consultando la documentazione ufficiale di Nmap, appaiono subito evidenti le grandi potenzialità rese disponibili da questo software e i numerosissimi compiti che questo è in grado di assolvere: per questa ragione, non potendo esaurire in poche pagine tutti i suoi possibili utilizzi, mi limiterò a fornire alcuni esempi che sarà possibile adoperare come base di partenza per ulteriori applicazioni. Nel prossimo esempio utilizzeremo Nmap per individuare tutte macchine presenti all'interno di una rete di classe C (indirizzo_ip/24) e a tal proposito, analogamente a quanto accade in altri comandi/applicazioni Linux, ricordiamo che è possibile utilizzare la notazione /8, /16 e /24 per specificare, rispettivamente, una rete di classe A, B o C:

sudo nmap -v -sS -O 192.168.1.0/24

La rete di classe C presa di mira è in questo caso quella compresa tra gli indirizzi IP 192.168.1.1 e 192.168.1.254; l'impiego dell'opzione -sS consente di operare una scansione (SYN Scan) di tipo stealth, cioè, una scansione difficilmente rilevabile dalla macchinia di destinazione; oltre alla verifica delle macchine attive, l'opzione -O, tenta di rilevare il sistema operativo in uso sulle macchine, mentre l'opzione -v (verbose) ha lo scopo di fornire ulteriori informazioni durante l'esecuzione del comando. Un ulteriore esempio di utilizzo del software di scansione, leggermente più complesso del precedente, è il seguente:

sudo nmap -v -iR 100 -P0 -p 21

In seguito a tale istruzione, Nmap selezionerà, secondo criteri del tutto casuali, 100 macchine (-iR 100) tra quelle disponibili in rete, verificando su ognuna la presenza del servizio FTP (-p 21); l'opzione -P0 evita che venga preventivamente verificata la raggiungibilità di ciascuna delle macchine selezionate mediante una canonica operazione di ping, in quanto si tratta di un'operazione già implicitamente eseguita durante la verifica della porta numero 21 (quella relativa al servizio FTP); come nella quasi totalità dei comandi Linux, l'utilizzo del parametro -v ha il semplice scopo di richiedere un maggior livello di dettaglio nell'output. L'impiego dell'opzione -S nel prossimo esempio consente di effettuare una vera e propria operazione di spoofing mirata a mascherare l'indirizzo sorgente originario che in questo caso verrà arbitrariamente sostituito con 10.20.30.1:

sudo nmap -S 10.20.30.1 192.168.1.6 -e eth0 -P0

La macchina verso la quale e rivolta l'interrogazione è quella con indirizzo IP 182.168.1.6; l'utilizzo dell'opzione -e ci consente di selezionare l'adattatore di rete da utilizzare in questa operazione (eh0), mentre con -P0 disabilitiamo la verifica della raggiungibilità. Un altro utilizzo di Nmap, molto simile a quello appena visto, che si rivela molto efficace per confondere la paternità della macchina utilizzata per la scansione, è l'utilizzo dei cosiddetti decoys che, in pratica, altro non sono che una serie di indirizzi IP fittizi opportunamente utilizzati per rendere difficile l'individuazione della reale macchina mittente:

sudo nmap -D 10.20.30.1, 10.20.30.2, 10.20.30.3 192.168.1.6

Gli indirizzi 10.20.30.1, 10.20.30.2 e 10.20.30.3 sono quelli fittizi, mentre, 192.168.1.6 è quello della macchina oggetto dell'interrogazione: Nmap opera inviando 3 pacchetti con indirizzo sorgente falso uguale a quello specificato dopo l'opzione -D e, successivamente, inviando un ultimo pacchetto con l'indirizzo mittente reale; un appropriato utilizzo di questa tecnica è in grado di rendere molto difficoltosa l'esatta individuazione della macchina sorgente.

Nmap prevede diverse modalità di indicazione dell'obiettivo delle interrogazioni, il modo più semplice è quello di indicare un indirizzo IP o un nome macchina, eventualmente integrando questa informazione con la maschera di sottorete (subnet mask) come, ad esempio: 10.22.83.1, www.sito.it, 10.22.83.1/16, nome_macchina/24, ecc.

Un altro tipo di notazione che è possibile adoperare permette di indicare degli interi intervalli di indirizzi IP come, ad esempio, 10.22.*.* e 10.22.0-255.0-255 che permettono di interrogare un'intera rete di classe B (le due scritture sono perfettamente equivalenti), oppure, 10.22.83.1-100 che prende in considerazione tutti gli indirizzi da 10.22.83.1 a 10.22.83.100 o, ancora, 10.22.83.1,2,3 che verifica soltanto gli indirizzi IP 10.22.83.1, 10.22.83.2 e 10.22.83.3.

Nota: occorre fare molta attenzione al fatti che in quasi tutti gli ambienti operativi l'utilizzo degli asterischi è solitamente subordinato all'impiego dei singoli apici, quindi, per esempio, 10.10.*.1 dovrà essere scritto in questo modo: '10.10.*.1'.

Un altro modo per specificare come obiettivo un'intera sottorete è quello che prevede l'indicazione della maschera di sottorete (10.22.0.0/16), oppure, per prendere in considerazione soltanto gli indirizzi IP che terminano in un dato modo è possibile utilizzare la scrittura *.*.1.1-3 che farà in modo che Nmap si riferisca soltanto agli indirizzi terminanti con 1.1, 1.2 o 1.3.

Nota: considerando che le opzioni illustrate in questo articolo rappresentano solo una minima parte di quelle disponibili, si consiglia vivamente al lettore la consultazione della documentazione ufficiale di Nmap.

 

Sebbene il contenuto delle guide, seppur in forma sintetica e/o adattata al contesto, sia tratto dai miei libri/eBook, l'occasionalità e i rapidi tempi di stesura che ne caratterizzano la pubblicazione non garantiscono l'assenza di errori e/o omissioni.

Ritorna all'indice dei tutorial Index


 
Roberto Saia  -  All Rights Reserved