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.
Modello Client-Server
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.
Porta di rete informatica 80
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.
Porta TCP e UDP
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.htm
Stato delle porte e sicurezza
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.
Come rilevare lo stato di una porta di rete
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.