NMAP
esempi pratici di utilizzo “buono” di uno strumento molto potente
Nmap è uno strumento molto interessante, spesso associato ad attività “da hacker” proprio in virtù delle qualità di “indagatore” all’interno di una rete, in particolare modo quelle aziendali.
In realtà di Hacker non ha proprio nulla, è uno strumento che va a “caccia” di determinate informazioni che di fatto sono liberamente consultabili con un semplice telnet. Tuttavia questo strumento ci può venire in aiuto perché è in grado di effettuare azioni sequenziali su intere subnet e restituirci i risultati.
Nmap è disponibile in tutti i sistemi operativi, diciamo che il meglio si ottiene sui sistemi MacOS e Linux attraverso la bash (per altro recentemente disponibile anche dentro Windows) quindi è un tool a linea di comando. Esistono anche delle interfacce, ma personalmente l’ho sempre usato nel modo testuale. Vediamo quindi alcune modalità di utilizzo classico.
Utilizzo base
L’utilizzo più classico è quello del comando associato ad un host che può essere indicato con un indirizzo IP o una Hostname, ma possiamo anche indicare una subnet e persino un blocco di indirizzi contigui.
# scan di un host via ip
nmap 192.168.1.1
# utilizziamo una hostname
nmap www.nomedominio.com
# scan di una rete da 255 indirizzi
nmap 192.168.1.1/24
# oppure di un set di indirizzi contigui
nmap 192.168.1.1-30
E’ possibile anche indicare un foglio di testo, il classico txt, dove al suo interno abbiamo memorizzato indirizzi ip, subnet a cui far passare in modo sequenziale le informazioni, in questo caso utilizzeremo l’opzione -iL
nmap -iL nomeFileDaPassare.txt
Scansione delle porte
Uno degli utilizzi definiti più “hacker” è sicuramente quello delle porte, già negli esempi sopra, ad esempio il primo della lista, di fatto lo scan va a cercare le porte aperte di quel singolo host. Mettiamo ad esempio che vogliamo indagare se la porta 22, relativa alle sessioni SSH, e solo quella, sia aperta.
# scan porta 22 singolo host
nmap -p 22 192.168.1.1
# scan porta 22 di una subnet
nmap -p 22 192.168.1.1/24
# oppure di un set di indirizzi ip contigui
nmap -p 22 192.168.1.1-35
Però potremo aver necessità di effettuare uno scan di più porte e non solo una, in questo caso:
# scan delle prime 100 porte
nmap -p 1-100 192.168.1.1
# chiaramente possiamo combinare questo esempio con il precedente su una subnet
nmap -p 1-100 192.168.1.1/24
Possiamo ovviamente anche effettuare delle scansioni differenziando il protocollo UDP e TCP e indicando più porte anche non contigue tra loro:
# scan UDP e TCP su set di porte
nmap -p U:53,111,137,T:21-25,80,139,8080 192.168.1.1
Probabilmente una delle cose più ricercate è la scansione di tutte 65535 porte, infatti senza l’opzione -p lo scan effettua una selezione standard di porte. Nel caso le vogliamo testare tutte:
nmap -p- 192.168.1.1
Tecniche di scansione delle porte
Abbiamo visto delle scansioni di porte in modo classico, in parte l’abbiamo visto ma possiamo indicare il tipo di protocollo, di default si tratta del TCP ma possiamo forzare l’UDP
# forzare l'uso di tcp
nmap -sT 192.168.1.1
# oppure usare UDP
namp -sU 192.168.1.1
Nel caso di TCP esistono anche delle scansioni più raffinate, che ad esempio ignorano parte della risposta, specie quelle “rimaneggiate” da un firewall. Inoltre proprio un firewall potrebbe non rispondere alle richieste ICMP (ping) e quindi fingere che determinati host siano inesistenti. Nmap per default verifica se l’host è su, ma è possibile forzare la mano indicandogli che tutti gli host debbano essere considerati come attivi, tendando quindi la scansione delle porte in ogni caso:
# scansione ignorando i vari ack
nmap -sN 192.168.1.1
nmap -sF 192.168.1.1
# scansione delle porte di un host ignorando il suo stato
nmap -Pn 192.168.1.1
L’esempio sopra può essere applicato anche alle subnet.
Scoprire il Sistema Operativo
Un’altra delle funzioni classiche che risponde alla domanda “ok, ho scoperto che l’host che ho individuato è una macchina che risponde a qualche porta, ma di che sistema operativo si tratta?” Si parte con un comando classico per poi “salire” di complessità ed aggressività per carpire questa informazione.
# comando base
nmap -A 192.168.1.1
# utilizziamo le porte attraverso le loro versioni
nmap -sV 192.168.1.1
# modalità aggressiva (0 min - 9 max)
nmap -sV --version-intensity 5 192.168.1.1
# modalità con debug
nmap -sV --version-trace 192.168.1.1
Salvare i risultati
Chiaramente i risultati espressi sino ad ora sono visibili a video, tuttavia è possibile salvare tali informazioni e non solo nel classico formato testo, ma ad esempio in formato XML persino con l’uso di template XSL
# salviamo in formato testo
nmap -oN outputfile.txt 192.168.1.1
# salviamo in formato xml
nmap -oX outputfile.xml 192.168.1.1
Qui un elenco completo delle opzioni di salvataggio:
OUTPUT: -oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3, and Grepable format, respectively, to the given filename. -oA <basename>: Output in the three major formats at once -v: Increase verbosity level (use -vv or more for greater effect) -d: Increase debugging level (use -dd or more for greater effect) --reason: Display the reason a port is in a particular state --open: Only show open (or possibly open) ports --packet-trace: Show all packets sent and received --iflist: Print host interfaces and routes (for debugging) --append-output: Append to rather than clobber specified output files --resume <filename>: Resume an aborted scan --stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML --webxml: Reference stylesheet from Nmap.Org for more portable XML --no-stylesheet: Prevent associating of XSL stylesheet w/XML output
Scan più approfonditi
Se tutto quanto sopra non bastasse si può cercare di andare più a fondo utilizzando le funzioni combinate di service detection e script scan che offre una serie di opzioni interessanti
# utilizzo combinato delle funzioni
nmap -sV -sC 192.168.1.1
# utilizzo di script scan per vulnerabilità in ssl
nmap --script-help=ssl-heartbleed 192.168.1.1
# utilizzando un set di script per "famiglia"
nmap -sV --script=db* 192.168.1.1
# cerchiamo vulnerabilità ssl sulla rete
nmap -sV -p 443 --script=ssl-heartbleed 192.168.1.0/24
In questo caso si dovrebbe conoscere alcuni parametri relativi allo scan, ovvero se questi esistono. Ci possiamo aiutare chiamando nmap senza offrire un host, ma dando il comando –script-help=nomedelloscript*. Vediamo un esempio pratico, ad esempio vogliamo vedere i potenziali scanner per Smb, daremo il comando:
nmap --script-help=smb*
di seguito l’elenco delle opzioni delle due funzioni:
SERVICE/VERSION DETECTION: -sV: Probe open ports to determine service/version info --version-intensity <level>: Set from 0 (light) to 9 (try all probes) --version-light: Limit to most likely probes (intensity 2) --version-all: Try every single probe (intensity 9) --version-trace: Show detailed version scan activity (for debugging) SCRIPT SCAN: -sC: equivalent to --script=default --script=<Lua scripts>: <Lua scripts> is a comma separated list of directories, script-files or script-categories --script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts --script-args-file=filename: provide NSE script args in a file --script-trace: Show all data sent and received --script-updatedb: Update the script database. --script-help=<Lua scripts>: Show help about scripts. <Lua scripts> is a comma-separated list of script-files or script-categories.
Scan DDOS
Completiamo la carrellata di scansioni richiamando quello che può essere uno dei problemi più noti e temuti, ovvero un Distributed Denial of service sulla rete utilizzando il protocollo UDP. Qui possiamo effettuare un test, chiaramente da fare con molta parsimonia e in orari fuori produzione poiché chiaramente potremo far collassare tutta la rete aziendale. Il set di opzioni direi trasversali da fornire sono:
nmap –sU –A –PN –n –pU:19,53,123,161 –script=ntp-monlist,dns-recursion,snmp-sysdescr 192.168.1.0/24
Conclusioni
Nmap non sono soltanto questi esempi di utilizzo, benché possano esserlo quelli più noti. In realtà nelle opzioni c’è ad esempio tutta una sezione, diciamo un po’ più “cattiva” che tenta in modo deliberato di evadere le manovre di blocco dei firewall, magari avvalendosi di specifici proxy. Si tratta comunque di test di intrusione piuttosto raffinati e che molto spesso richiedono più che le conoscenze informatiche quelle della reale situazione di una rete, come quali host ci sono, quali servizi eccetera.