NMAP – Network Mapping #2 – Port Scanning

Il port scanning è il “core business” di Nmap.

Esso è l’atto di testare da remoto numerose porte per determinarne lo stato in cui sono.

La semplice esecuzione del comando

nmap <target>

fa la scansione di tutte  le prime 1.000 porte TCP classificandole negli stati

open, closed, filtered, unfiltered, open|filtered o closed|filtered

Lo stato più interessante è ovviamente lo stato “open” che vuol dire che su quella porta vi è in ascolto una applicazione pronta ad accettare connessioni.

NMap fa una distinzione differente delle porte rispetto allo IANA (Internet Assigned Numbers Authority) in base al loro numero.

Per lo standard IANA (http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml) abbiamo

  • well-known ports dalla 1 alla porta 1023
  • registered ports dalla 1024 alla 49151 (gli utenti con accesso non privilegiato possono collegare i loro servizi a queste porte)
  • dynamic e/o private ports dalla 49152 alla 65535 (numero massimo di porta: è un campo di 16bit)

Mentre NMap distigue le porte in

  • well-known ports 1-1023
  • ephemeral  ports il cui range dipende dal sistema operativo è su Linux va da 32768 a 61000 ed è configurabile (/proc/sys/net/ipv4/ip_local_port_range)

La porta numero 0 (zero) è invalida. Le API delle socket Berkeley, che definiscono come i programmi devono comportarsi per quanto riguarda le comunicazioni di rete, non permettono l’utilizzo della porta numero zero. Invece, interpretano una richiesta sulla porta zero come una wildcard a indicare che al programmatore non interessa quale porta verrà utilizzata per la comunicazione e sarà il sistema operativo a sceglierne una per lui.

Questo non significa che qualche software malevolo non voglia utilizzare proprio questa porta per comunicare esplicitandola nell’heder TCP/IP. Quindi possiamo con NMap scansionare questa porta esplicitamente (e.g. -p0-65535)

Secondo l’autore di NMap, dopo anni di scansioni, queste sono le liste delle Top-20 porte TCP e UDP

Top-20 TCP ports

  1. 80 (HTTP)
  2. 23 (TELNET)
  3. 443 (HTTPS)
  4. 21 (FTP)
  5. 22 (SSH)
  6. 25 (SMTP)
  7. 3389 (ms-term-server) Microsoft Terminal Services Admin port
  8. 110 (POP3)
  9. 445 (Microsoft-DS) Microsoft SMB file/printer sharing
  10. 139 (NetBIOS-SSN)
  11. 143 (IMAP)
  12. 53 (DNS)
  13. 135 (MSRPC)
  14. 3306 (MySQL)
  15. 8080 (HTTP) di solito per fare del proxying
  16. 1723 (PPTP) per VPN
  17. 111 (RPCBind)
  18. 995 (POP3S) pop3 + ssl
  19. 993 (IMAPS) imap + ssl
  20. 5900 (VNC)

Top-20 UDP ports

  1. 631 (IPP) Internet Printing Protocol
  2. 161 (SNMP)
  3. 137 (NetBIOS-NS)
  4. 123 (NTP)
  5. 138 (NetBIOS-DGM)
  6. 1434 (Microsoft-DS) Microsoft SQL Server
  7. 445 (Microsoft-DS)
  8. 135 (MSRPC)
  9. 67 (DHCPS) dhcp + ssl
  10. 53 (DNS)
  11. 139 (NetBIOS-SSN)
  12. 500 (ISAKMP) Internet Security Association and Key Management Protocol
  13. 68 (DHCP client)
  14. 520 (RIP) Routing Information Protocol
  15. 1900 (UPNP)
  16. 4500 (nat-t-ike)
  17. 514 (syslog)
  18. 49152 (Varies)
  19. 162 (SNMPTrap)
  20. 69 (TFTP)

Ad inizio capitolo abbiamo detto che una porta si può trovare in 6 stati differenti

  1. open
    una applicazione è in ascolto e pronta ad accettare connessioni TCP o pacchetti UDP. Qui si può fare breccia.
  2. close
    la porta è accessibile (riceve e risponde alle sonde di NMap) ma non vi è nessuna applicazione in ascolto su di essa. Utile per host discovery o OS detection.
  3. filtered
    non sappiamo se la porta è aperta perché c’è una sorta di packet filtering che non ci permette di raggiungerla (firewall, regole di routing). Queste porte rallentano lo scan perché NMap cerca di ripetere lo scan in caso non abbia ricevuto risposte dovuto al fatto che si ha una rete congestionata. Ma di solito non è così.
  4. unfiltered
    la porta è raggiungibile ma non si riesce a distinguere se è aperta o chiusa. Solo l’ACK scan classifica le porta in questo stato.
  5. open|filtered
    NMap non riesce a capire se la porta è aperta o filtrata. Di solito succede per porte aperte che non danno risposte. La mancanza di risposta potrebbe dipendere anche da un filtro di pacchetto.
  6. closed|filtered
    NMap non riesce a capire se la porta è chiusa o filtrata. Stato impostato solo se si utilizza l’IP ID Idle scan (-sI).

Fare un port scanning della rete non è solo un modo per avere la lista di tutti i servizi aperti per motivi di sicurezza. Alcuni utilizzano il port scanning anche per fare un inventario delle macchine e dei dispositivi di rete e dei loro servizi, per scoprire la topologia della loro rete o per controlli di verifica di politiche di vario genere.

NMAP – Network Mapping #2 – Port Scanning

NMAP – Network Mapping #1.1 – Ping Scanning Host Discovery Controls

-sL

Se vogliamo solamente enumerare, senza far partire alcun controllo, gli host target che abbiamo selezionato, utilizziamo l’opzione -sL

Per esempio:

Fabios-MacBook-Air:~ shadowsheep$ nmap 192.168.1.0/30 -sL

Starting Nmap 7.12 ( https://nmap.org ) at 2016-12-03 09:52 CET
Nmap scan report for 192.168.1.0
Nmap scan report for 192.168.1.1
Nmap scan report for 192.168.1.2
Nmap scan report for 192.168.1.3
Nmap done: 4 IP addresses (0 hosts up) scanned in 0.04 seconds

di default il reverse-DNS viene eseguito:

Fabios-MacBook-Air:~ shadowsheep$ ping versionestabile.it
PING www.versionestabile.it (62.149.142.224): 56 data bytes

Fabios-MacBook-Air:~ shadowsheep$ nmap 62.149.142.224 -sL

Starting Nmap 7.12 ( https://nmap.org ) at 2016-12-03 09:54 CET
Nmap scan report for webx458.aruba.it (62.149.142.224)
Nmap done: 1 IP address (0 hosts up) scanned in 0.06 seconds

Per vedere i 16 IP a partire dall’IP del mio sito scegliendo per il reverse-DNS il server DNS di Google, possiamo eseguire quindi:

Fabios-MacBook-Air:~ shadowsheep$ nmap www.versionestabile.it/28 -sL --dns-server 8.8.8.8

Starting Nmap 7.12 ( https://nmap.org ) at 2016-12-03 10:01 CET
Nmap scan report for www.versionestabile.it (62.149.142.224)
rDNS record for 62.149.142.224: webx458.aruba.it
Nmap scan report for webx459.aruba.it (62.149.142.225)
Nmap scan report for webx460.aruba.it (62.149.142.226)
Nmap scan report for webx461.aruba.it (62.149.142.227)
Nmap scan report for webx462.aruba.it (62.149.142.228)
Nmap scan report for webx463.aruba.it (62.149.142.229)
Nmap scan report for webx464.aruba.it (62.149.142.230)
Nmap scan report for webx465.aruba.it (62.149.142.231)
Nmap scan report for webx466.aruba.it (62.149.142.232)
Nmap scan report for webx467.aruba.it (62.149.142.233)
Nmap scan report for webx468.aruba.it (62.149.142.234)
Nmap scan report for webx469.aruba.it (62.149.142.235)
Nmap scan report for webx470.aruba.it (62.149.142.236)
Nmap scan report for webx471.aruba.it (62.149.142.237)
Nmap scan report for webx472.aruba.it (62.149.142.238)
Nmap scan report for webx473.aruba.it (62.149.142.239)
Nmap done: 16 IP addresses (0 hosts up) scanned in 0.10 seconds

-sn (o -sP nelle versioni precedenti)

Questa opzione fa eseguire solamente un ping scan (aka ping sweep) viene inviata una richiesta ICMP echo e un pacchetto TCP ACK alla porta 80 di default.

Se un utente non ha i diritti per inviare un RAW TCP ACK, viene inviato al suo posto un TCP SYN.

Se un utente con i diritti fa una scansion su rete locale viene inviata anche una richiesta ARP (-PR) a meno che non venga impostata l’opzione –send-ip.

Non vengono abilitati i controlli come il port scan e l’OS detection anche se specificati.

Solamente l’ NSE (Nmap Script Engine) –script e il trace route –traceroute se specificati vengono eseguiti.

Fabios-MacBook-Air:~ shadowsheep$ nmap -sn -T4 www.versionestabile.it/30

Starting Nmap 7.12 ( https://nmap.org ) at 2016-12-03 10:09 CET
Nmap scan report for www.versionestabile.it (62.149.142.224)
Host is up (0.033s latency).
rDNS record for 62.149.142.224: webx458.aruba.it
Nmap scan report for webx459.aruba.it (62.149.142.225)
Host is up (0.029s latency).
Nmap scan report for webx460.aruba.it (62.149.142.226)
Host is up (0.026s latency).
Nmap scan report for webx461.aruba.it (62.149.142.227)
Host is up (0.032s latency).
Nmap done: 4 IP addresses (4 hosts up) scanned in 0.10 seconds

-Pn (o -PN)

Disabilita il ping scan e tratta tutti gli host come attivi, applicando le fasi successive a tutti gli host specificati invece che solo a quelli che sono risultati attivi dal ping scan.

Questa funzione è utile nel caso alcuni host non rispondano alle sonde oppure siano ben coperti da firewall.

-PS<port list>

Invia un pacchetto TCP vuoto con il flag SYN attivo.

La porta di destinazione di default è la porta 80, ma è possibile sceglierne una alternativa passandola come parametro -PS<port list>.
E’ anche possible passare un range di porte, per es:

-PS22-25,80,53,113

In questo caso le sonde verranno inviate in parallelo ad ogni porta specificata.

Questo pacchetto interroga una porta dicendole che si vuole stabilire una connessione. Normalmente la porta è chiusa e quindi riceveremo indietro un pacchetto TCP con il flag RST (reset).

Se la porta invece è aperta riceveremo il secondo step del three-way-handshake, ovvero un pacchetto TCP con attivi i flash synch e acknowledge SYN/ACK.

Entrambe le situazioni ci dicono che l’host target è vivo.

-PA<port list>

Come prima ma invia un pacchetto TCP vuoto con il flag ACK attivo.

In questo caso se l’host è vivo invierà sempre un pacchetto di risposta TCP RST perché non ha ricevuto precedentemente nessun pacchetto TCP SYN, ne tantomeno inviato un TCP SYN/ACK.

Ci rivelerà comunque la sua presenza.

Perché usare -PA piuttosto che -PS? Perché alcuni firewall bloccano su alcune porte volontariamente i pacchetti TCP SYN (e.g. iptables –syn)

Se invece il firewall se invece il firewall è di tipo stateful, categorizzerà il pacchetto con lo stat o INVALID perché non è associato a nessuna connessione (e.g. iptables –state). In questo caso l’opzione -PS invece riuscirebbe a fornirci l’esistenza dell’host.

-PU<port list>

UDP Ping, è un’altra tecnica per scoprire se un host è presente o meno.

Viene inviato un pacchetto UDP vuoto (a meno di non usare –data-length) alle porte specificate (default a 31,338).

Se l’host è presente e la porta è chiusa otterremo come risposta un pacchetto ICMP port unreachable.

Se la porta è aperta invece il pacchetto verrà ignorato e la sonda fallirà.

Questa sonda evita i firewall che sono configurati solamente per il protocollo TCP.

-PE, -PP, e -PM

ICMP Ping non fa altro che inviare i pacchetti standard che fa il nostro ben conosciuto comando ping.

-PE invia una richiesta ICMP di tipo 8 (echo request) e si aspetta come risposta un ICMP di tipo 0 (echo reply).

-PP invia una richiesta ICMP di tipo 15 (timestamp request) e si aspetta una risposta ICMP di tipo 14 (timestamp reply)

-PM invia una richiesta ICMP di tipo 17 (mask request) e si aspetta una risposta ICMP di tipo 18 (mask reply)

-PP e -PM possono essere utili quando questi tipi di pacchetti ICMP non sono filtrati.

-PO<protcol list>

IP Protocol Ping invia pacchetti IP con il numero di protocollo specificato nell’header.

Il default sono ICMP (protocol 1), IGMP (protocol 2), IP-in-IP (protocol 4).

Quello che ci aspettiamo di ricevere se un host è presente è un messaggio ICMP protocol unreacheable che significa che la porta non parla quel protocollo oppure una risposta dello stesso tipo di protocollo.

-PR

ARP Scan, che viene fatto di default in ogni range di reti LAN, è in questi casi (reti LAN) molto più veloce e molto più sicuro in quanto molti host hanno l’echo reply disabilitato (ping) ma non possono non rispondere ad una richiesta ARP!

Nelle LAN inoltre il ping scan è problematico perché

  1. Il PC per rispondere ad un ICMP echo request deve prima fare una richiesta ARP per sapere a chi appartiene l’indirizzo IP della richiesta.
  2. Richiesta ARP incomplete vengono salvate nella tabella ARP dell’host, tabella che è limitata. Alcuni OS si comportano in maniera strana quando riempiono tale tabella.

Ad esempio possiamo inviare un ping ARP con un frame ethernet (layer 2) invece che un pacchetto IP (layer 3) in questo modo.

Fabios-MacBook-Air:~ shadowsheep$ sudo nmap -n -sP -PR --send-eth --packet-trace 192.168.1.24

Starting Nmap 7.12 ( https://nmap.org ) at 2016-12-03 15:11 CET
SENT (0.0100s) ARP who-has 192.168.1.24 tell 192.168.1.2
SENT (0.2171s) ARP who-has 192.168.1.24 tell 192.168.1.2
RCVD (0.2337s) ARP reply 192.168.1.24 is-at B0:C5:54:[...]
Nmap scan report for 192.168.1.24
Host is up (0.017s latency).
MAC Address: B0:C5:54:[...] (D-Link)
Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds

In questo caso -PR e –send-eth sarebbero stati fatti di default perché siamo in LAN.

Mentre –packet-trace ci permette di visualizzare i pacchetti inviati e ricevuti.

Se non si vuole assolutamente che venga fatta uno scan ARP occorre dirlo esplicitamente con l’opzione –send-ip.

Puoi cambiare il MAC address da cui fai la richiesta ( 🙂 ) con l’opzione –spoof-mac.

Combinazione di default

Se lanciamo nmap senza specificare nulla, il default è:  -PA -PE.

Altre opzioni di rilievo

-v (–verbose): nmap non stampa solo gli host attivi ma molte altre informazioni su di essi.

–source-port <portnum> (-g): setta come costante la porta sorgente del ping scanning.

–data-length <lenght>: aggiunge byte random di dati ad ogni pacchetto e funziona con gli scan TCP, UDP e ICMP. Questo permette di evadere alcuni firewall che hanno regole per droppare i pacchetti vuoti.

-T<timing>: velocizza l’esecuzione del ping scan. Valori più alti corrispondono a minor tempo. -T4 è raccomandato.

Ce ne sono altri e potete leggerli a pag 67 del manuale di nmap o nelle pagine man.

Lista delle 14 porte con maggior successo di accessibilità

  1. 80/http
  2. 25/smtp
  3. 22/ssh
  4. 443/https
  5. 21/ftp
  6. 113/auth
  7. 23/telnet
  8. 53/domain
  9. 554/rtsp
  10. 3389/ms-trem-server
  11. 1723/pptp
  12. 389/ldap
  13. 636/ldapssl
  14. 256/FW1-seruremote

Una combinazione “ideale”

nmap -PE -PA PS21,22,23,25,80,113,31339 -PA80,113,443,10042 -T4 –source-port 53 -iL <file with hosts> -oA <output file>

Man Section

HOST DISCOVERY:
             -sL: List Scan - simply list targets to scan
             -sn: Ping Scan - disable port scan
             -Pn: Treat all hosts as online -- skip host discovery
             -PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
             -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
             -PO[protocol list]: IP Protocol Ping
             -n/-R: Never do DNS resolution/Always resolve [default: sometimes]
             --dns-servers <serv1[,serv2],...>: Specify custom DNS servers
             --system-dns: Use OS's DNS resolver
             --traceroute: Trace hop path to each host
NMAP – Network Mapping #1.1 – Ping Scanning Host Discovery Controls

NMAP – Network Mapping #1 – Ping Scanning Hosts Definition

Nella seconda fase di NMap abbiamo la cosiddetta “host discovery”.

Ci sono molte tecniche di host discovery che possiamo fare con NMap.

Vediamo alcuni esempi.

Possiamo specificare l’host o gli host nei seguenti modi:

  • IP Address: 192.168.1.1
  • Hostname: gateway.example.com
  • CIDR (Classless Inter-Domain Routing): 192.168.1.0/24
  • Octets: 192.168.1.0-255
  • Random: -iR <#numero host da geneare> (!!0 per tutto internet!!)
    Come dice la documentazione, se vi trovate molto annoiati in una giornata di pioggia, potete provare a lanciare il seguente comando:
    nmap -sS -PS80 -iR 0 -p 80
    per cercare a caso i web server nella rete.
  • Da file: -iL <filename> oppure “-” (hyphen) per input da standard input.
    ad esempio per cercare tutti gli host attualmente “vivi” a cui avete dato un lease:
    egrep ‘^lease’ /var/lib/dhcp/dhcp.leases | awk ‘{print $2}’ | name -iL –

Dalla vostra lista di host potete escludere dei valori con le seguenti opzioni:

–exclude e valori separati da virgola (niente spazi!!!)
–excludefile <filename> (il file contiene gli host da escludere nei formati accettati da nmap).

DNS resolution

Di default, nmap esegue il reverse-DNS sugli IP che rispondono alle sonde del Ping Scanning (ovvero solo per gli host attivi).

E’ possibile fare il reverse-DNS su tutti gli host con l’opzione -R.

Per non eseguire il reverse-DNS invece l’opzione è -n.

Per utilizzare uno o più server DNS (diversi da quello di sistema) utilizzare
–dns-server <server1>[,<server2>…]

Man Section

TARGET SPECIFICATION:
             Can pass hostnames, IP addresses, networks, etc.
             Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
             -iL <inputfilename>: Input from list of hosts/networks
             -iR <num hosts>: Choose random targets
             --exclude <host1[,host2][,host3],...>: Exclude hosts/networks
             --excludefile <exclude_file>: Exclude list from fil
NMAP – Network Mapping #1 – Ping Scanning Hosts Definition

NMAP – Network Mapping

Voi lo sapevate che anche Trinity per salvare il mondo ha usato Nmap?!!

Io no! Ma l’ho scoperto leggendo la documentazione sul sito http://www.nmap.org

trinity-nmapscreen-hd-crop-1200x728

La foto è presa da http://www.nmap.org/movies.html

Questo è il primo degli appuntamenti che vedranno NMap come protagonista.

In questo articolo parleremo delle FASI di NMap.

Cosa succede quando lanciamo NMap? Se non disabilitiamo volontariamente alcuna fase, questa è la sequenza di esecuzione (mettiamo tra parentesi quadre “[]” l’opzione che disabilita la fase eseguita di default).

  1. Target Enumeration [questa fase non è disabilitabile]: se però diamo -sL -n (list scan senza risoluzione reverse-DNS avremo una semplice lista di indirizzi IP.
  2. Host discovering (ping scanning) [-PN]: per uscire dopo questa fase usare -sP (-sn) -n.
  3. Reverse-DNS resolution [-n]: può essere esteso a tutti gli IP con -R.
  4. Port Scanning [-sn (-sP)]
  5. Version Detection: abilitato con -sV.
  6. OS Detection: abilitato con -O.
  7. Traceroute: abilitato con –traceroute.
  8. Script Scanning: anche conosciuto come NSE (Nmap Script Engine). Abilitato con –script (o -sC).
  9. Output: output su file in vari formati -oN/-oX/-oS/-oG –> Normal / XML / S|<rIpt kIddi3 / Grepable.

Mi sto leggendo la documentazione, perché credo che ci sia sempre qualcosa che non si à visto nella pratica e che possa tornare utile.

Di solito sia perché mi rimanga memorizzato più rapidamente e sia per revisioni successive mi scrivo degli appunti che trasformo in articoli!

Nei prossimi articoli approfondiremo quindi più in dettaglio le varie fasi, in modo da evidenziarne le varie caratteristiche e potenzialità.

A presto!

 

 

NMAP – Network Mapping