Cosa sono, a cosa servono, quali sono le porte di comunicazione di un personal computer connesso ad una rete.
Le porte sono il mezzo essenziale che permette ai protocolli TCP e UDP di gestire flussi multipli di dati attraverso una
unica connessione fisica alla rete.
Cosa sono le porte TCP/IP
Per fare un paragone con la vita reale immaginiamo di spedire una lettera ad un amico. Se il destinatario vivesse in una
abitazione indipendente e ne fosse l’unico inquilino, sulla busta sarebbe sufficiente indicare il suo indirizzo. Questa
situazione è però piuttosto inusuale in quanto, più probabilmente, egli vivrà in un palazzo con altri condomini oppure
condividerà l’abitazione con altri parenti. Ognuno di questi può ricevere posta al medesimo indirizzo e quindi per
individuare univocamente il destinatario sarà necessario specificare anche il suo nome completo. Allo stesso modo
indicheremo sulla busta le informazioni riguardanti il mittente per poter ricevere una risposta.
Una cosa analoga avviene per le comunicazioni in rete attraverso il protocollo TCP/IP. Ogni macchina sarà individuata
sulla rete da un indirizzo IP ma poiché molteplici possono essere i servizi offerti dal sistema e molte le connessioni
contemporanee è necessario un metodo per separare i singoli flussi di dati ed indirizzarli verso il corretto programma di
gestione. A chi non è capitato per esempio di navigare e contemporaneamente di scaricare la posta elettronica o usare un
programma peer to peer? Come fa il sistema a riconoscere a chi sono diretti i dati in arrivo? Il problema viene risolto
attraverso le porte che, in un paragone con l’esempio precedente, fanno le veci del nome del mittente e del
destinatario. Flussi di dati distinti all’interno della stessa macchina sono caratterizzati‚ da porte diverse. Una
connessione tra due computer viene quindi univocamente identificata dalla coppia IP:porta del mittente e del
destinatario.
Le porte sono indicate con un numero intero compreso tra 0 e 65.535 e possono essere assegnate al protocollo TCP o
al protocollo UDP. Questo fa si che possano esistere in totale 131.072 porte diverse. In linea di principio i numeri di
porta potrebbero essere scelti arbitrariamente durante la connessione tra due computer ma, come vedremo dall’analisi
che segue, la cosa si rivela decisamente poco pratica.
Ogni comunicazione sulla rete presume che inizialmente una delle due macchine coinvolte nello scambio di dati non
faccia altro che attendere un contatto dall’esterno. Questa macchina viene indicata con il nome di server. Un sistema
che contatta il server viene invece definito client. Sarà sempre il client quindi a fare il primo passo per instaurare una
connessione.
Come detto in precedenza, se un computer collegato ad un rete desidera comunicare con un altro sistema deve
necessariamente sapere l’indirizzo completo della macchina remota. In questo caso quindi il client deve essere a
conoscenza sia dell’ l’IP sia della porta su cui il server si aspetta di ricevere i dati relativi al servizio di interesse. Se il
server scegliesse la porta in modo casuale nessuno saprebbe come raggiungerlo. Per questo motivo nasce l’esigenza di
standardizzare e rendere pubblici i numeri di porta relativi ai più comuni servizi disponibili su internet. In questo
modo un client che volesse accedere ad un qualsiasi server HTTP saprebbe a priori di doversi collegare alla porta TCP
numero 80. Un server di posta SMTP sarà sempre raggiungibile sulla sua porta TCP 25 così come un server FTP
userà la TCP 21 e un DNS la porta UDP 53.
Contrariamente al caso precedente il client non ha mai l’esigenza di rendere pubblico il suo indirizzo completo prima
della connessione perché questo verrà automaticamente comunicato al server nel momento in cui verrà contattato. In
questo caso quindi il numero di porta del client può essere scelto arbitrariamente dal sistema tra quelli al momento
disponibili.
L’Internet Assigned Numbers Authority (IANA) è l’ente che ha tra i suoi scopi la standardizzazione delle porte e
l’aggiornamento costante di un documento, chiamato ports-number, contenente l’elenco dei servizi registrati e delle
relative porte utilizzate.
A questo scopo, nel suddetto documento, lo spazio delle 65536 porte UDP e TCP è stato suddiviso in tre parti:
- Well Known Ports (porte 0 – 1023) Sono porte assegnate univocamente e sono riservate ai servizi server standard di cui si è parlato in precedenza. I client non dovrebbero mai usare queste porte.
- Registered Ports (porte 1024 – 49151) L’utilizzo di questo insieme di porte è generalmente libero nonostante contenga dei servizi registrati. Non esistono vincoli restrittivi a riguardo tanto che tutti i client usano normalmente le porte a partire dalla numero 1024 per collegarsi ad un sistema remoto.
- Dynamic and/or Private Ports (porte 49152 – 65535) Nessun servizio è registrato in quest’area. Il suo utilizzo è assolutamente libero.
Le Well Known Ports sono quindi porte riservate unicamente ai server. Le rimanenti porte (1024-65535), spesso
chiamate porte alte, possono essere usate liberamente sia dai client che dai server senza particolari restrizioni. Di
seguito si indicano alcune delle Well Known Ports più comuni. L’elenco completo può essere reperito nel documento
pubblicato da IANA.
7 | ECHO |
9 | DISCARD |
13 | DAYTIME |
17 | QUOTD (Quote of the day) |
19 | CHARGEN (Character generator) |
20 | FTP-DATA (FTP data transfer) |
21 | FTP (File Transfer Protocol) |
22 | SSH (Secure Shell) |
23 | TELNET |
25 | SMTP (Simple Mail Transfer Protocol) |
42 | WINS (Windows Internet Naming Service) |
53 | DNS (Domain Name Server) |
69 | TFTP (Trivial File Transfer Protocol) |
79 | FINGER |
80 | HTTP (Hyper Text Transfer Protocol) |
110 | POP3 (Post Office Protocol 3) |
113 | IDENT/AUTH |
119 | NNTP (Network News Transfer Protocol) |
135 | EPMAP (DCE Endpoint Mapper) |
137 | NETBIOS-ns (name service) |
138 | NETBIOS-dgm (datagram service) |
139 | NETBIOS-ss (session service) |
143 | IMAP (Internet Message Access Protocol) |
161 | SNMP (Simple Network Management Protocol) |
389 | LDAP (Lightweight Directory Access Protocol) |
443 | HTTPS (Secure HTTP) |
445 | Microsoft-ds (Microsoft Directory Service) |
I link seguenti permettono un ulteriore utile approfondimento sui servizi associati alle principali
porte: http://grc.com/PortDataHelp.htm http://www.iss.net/security_center/advice/Exploits/Ports/default.htm
Un approfondimento particolare sulle porte usate dai sistemi
microsoft: http://www.iss.net/security_center/advice/Exploits/Ports/groups/Microsoft/default.ht
Abbiamo visto che esiste una profonda differenza tra i ruoli dei processi server e dei processi client. I primi si mettono
in ascolto (stato listening) su una determinata porta nota in attesa di servire una macchina che ne faccia richiesta. Il
loro ruolo è quindi essenzialmente passivo. I secondi invece hanno un ruolo attivo essendo i soli a poter
effettivamente dare inizio ad una connessione e ad un vero e proprio trasferimento di dati (stato della
connessione established).
Dal punto di vista della sicurezza riveste grande importanza lo stato di una porta vista dall’esterno della macchina.
Sono possibili tre casi:
- Porta aperta (Open): un processo server è in ascolto sulla porta. È possibile stabilire una connessione dall’esterno.
- Porta chiusa (Closed): nessun processo è in attesa e la porta è quindi inutilizzata. Per comunicare tale situazione ad un client che erroneamente cercasse di connettersi, il sistema operativo manda un segnale di reset della comunicazione.
- Porta filtrata (Stealth o Filtered): nessun processo è in attesa e ad un tentativo di connessione la porta risulta inesistente. In questo caso nessun pacchetto di reset viene inviato al client e il sistema rimane semplicemente muto. Il client abbandona ogni tentativo dopo un certo timeout: dal suo punto di vista la macchina remota non esiste neppure.
Nel caso un servizio debba necessariamente essere disponibile sulla rete è inevitabile che la relativa porta sia aperta.
In questa situazione è essenziale tenere aggiornato il proprio server con tutte le patch di sicurezza per mettersi al
riparo da eventuali falle di programmazione che potrebbero permettere ad un malintenzionato di penetrare nel sistema.
Proprio per ridurre questa eventualità si consiglia di disabilitare tutti i servizi non strettamente necessari. Minore è il
numero di porte aperte e minori sono le possibili vie d’accesso alla macchina.
Una porta chiusa è sicuramente fonte di minori preoccupazioni rispetto ad una aperta ma non è ancora immune da
possibili attacchi a vulnerabilità dello stack TCP/IP. In caso di debolezza dello stack le porte chiuse possono ancora
rendere possibili attacchi di tipo Denial of Service (DoS) o crash di sistema.
Il completo filtraggio delle porte non utilizzate (stealth) è possibile grazie ad un sistema firewall. Questa è la
situazione auspicabile per tutte le porte che non debbano rimanere aperte poiché garantisce la massima sicurezza per il
sistema.
A questo punto non ci rimane che illustrare quali sono gli strumenti che ci permettono di stabilire lo stato di una porta.
Considereremo tre casi frequenti:
- analisi del sistema locale
- analisi di un sistema remoto
- analisi del sistema o della rete locale da parte di un sistema remoto
Analisi del sistema locale
È possibile determinare le porte aperte da connessioni attive o da eventuali server presenti sul nostro PC grazie al
comando Netstat.
Digitando dal prompt dei comandi
netstat -n
possiamo visualizzare tutte connessioni attive (established) o in fase di chiusura. L’opzione -n
serve a visualizzare il
risultato in forma numerica e ad evitare la risoluzione degli indirizzi IP nei rispettivi nomi. Si provi anche ad omettere
tale opzione.
Il comando
netstat -na
aggiunge alle precedenti informazioni anche quelle sulle porte in ascolto (listening) permettendo quindi di individuare
tutti i server in esecuzione sul computer in esame.
Per un help su tale comando si digiti
netstat -?
Per finire si fornisce il link ad un utile programma che mette a disposizione la funzione netstat in modalità grafica
fornendo allo stesso tempo la possibilità di visualizzare ed eventualmente terminare i processi collegati alle porte:
http://www.sysinternals.com/ntw2k/source/tcpview.shtml
Analisi di un sistema remoto
Per quando riguarda l’analisi delle porte su un sistema remoto è indispensabile l’uso di un apposito programma
chiamato portscanner. Un ottimo strumento di facile utilizzo è a tal proposito Superscan, descritto recentemente
nella Miniguida a Superscan 4.0. Per quanto riguarda gli utenti con esigenze più sofisticate invece si consiglia Nmap
un portscanner dalle innumerevoli opzioni e potenzialità, disponibile sia per sistemi Linux che per sistemi Windows.
A causa della sua intrinseca complessità il programma è consigliato a chi abbia discrete conoscenze sulle tecniche di
scansione.
Analisi da parte di un sistema remoto
L’ultima situazione analizzata è quella in cui desideriamo testare la sicurezza del nostro sistema o della nostra rete
dall’esterno per verificare quali porte siano aperte, chiuse oppure stealth. Questo test risulta utile tutte le volte che la
nostra macchina o la nostra rete non è direttamente esposta su internet ma è separata da questa da un firewall
(software o hardware), un router od un generico gateway. In questo caso un’analisi locale avrebbe poco senso. Non
sempre sia ha la possibilità di eseguire personalmente questo test da un computer esterno alla propria rete e per questo
motivo molti siti che si interessano di sicurezza hanno messo a disposizione questo servizio direttamente dal loro sito
web.