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.