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
- 80 (HTTP)
- 23 (TELNET)
- 443 (HTTPS)
- 21 (FTP)
- 22 (SSH)
- 25 (SMTP)
- 3389 (ms-term-server) Microsoft Terminal Services Admin port
- 110 (POP3)
- 445 (Microsoft-DS) Microsoft SMB file/printer sharing
- 139 (NetBIOS-SSN)
- 143 (IMAP)
- 53 (DNS)
- 135 (MSRPC)
- 3306 (MySQL)
- 8080 (HTTP) di solito per fare del proxying
- 1723 (PPTP) per VPN
- 111 (RPCBind)
- 995 (POP3S) pop3 + ssl
- 993 (IMAPS) imap + ssl
- 5900 (VNC)
Top-20 UDP ports
- 631 (IPP) Internet Printing Protocol
- 161 (SNMP)
- 137 (NetBIOS-NS)
- 123 (NTP)
- 138 (NetBIOS-DGM)
- 1434 (Microsoft-DS) Microsoft SQL Server
- 445 (Microsoft-DS)
- 135 (MSRPC)
- 67 (DHCPS) dhcp + ssl
- 53 (DNS)
- 139 (NetBIOS-SSN)
- 500 (ISAKMP) Internet Security Association and Key Management Protocol
- 68 (DHCP client)
- 520 (RIP) Routing Information Protocol
- 1900 (UPNP)
- 4500 (nat-t-ike)
- 514 (syslog)
- 49152 (Varies)
- 162 (SNMPTrap)
- 69 (TFTP)
Ad inizio capitolo abbiamo detto che una porta si può trovare in 6 stati differenti
- open
una applicazione è in ascolto e pronta ad accettare connessioni TCP o pacchetti UDP. Qui si può fare breccia. - 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. - 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ì. - unfiltered
la porta è raggiungibile ma non si riesce a distinguere se è aperta o chiusa. Solo l’ACK scan classifica le porta in questo stato. - 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. - 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.