2. Internet

 

In questo paragrafo vengono brevemente descritti i servizi Internet di maggiore interesse, il loro funzionamento e alcuni problemi di sicurezza connessi.

I servizi Internet sono gestiti con meccanismi di tipo client/server: nella maggior parte dei casi un sistema rende disponibile un determinato servizio mandando in esecuzione il processo server corrispondente, cioè un demone che si pone in ascolto di richieste sulla porta logica assegnata a quel particolare servizio; un sistema che vuole richiedere un servizio remoto utilizza un’applicazione client, a cui viene assegnata una porta non utilizzata da altri processi, che invia la richiesta di servizio verificando la disponibilità del demone sul sistema remoto.

Per convenzione i numeri di porta utilizzati dai processi client sono quelli maggiori di 1024, mentre quelli minori o uguali a 1024 sono riservati ai processi server o a processi privilegiati.

Se, ad esempio, una macchina con indirizzo 193.22.204.16 vuole trasferire file mediante il servizio FTP (File Transfer Protocol) dalla macchina con indirizzo 142.220.70.8, attiverà un client FTP che per prima cosa farà richiesta di un numero di porta non utilizzato (ad esempio 4092), ed invierà un messaggio contenente, oltre agli indirizzi sorgente e destinazione, il numero di porta assegnato e il numero di porta convenzionalmente stabilito per il server FTP, in questo caso 21 (Figura 1).

 

Figura 1: Scambio di pacchetti FTP

 

I processi che realizzano servizi Internet possono essere gestiti in due modi diversi: possono essere lanciati all’avvio del sistema e rimanere sempre in esecuzione oppure essere eseguiti al momento della richiesta del servizio.

Il primo tipo di gestitone è indicato per i server che devono eseguire piccole transazioni velocemente e hanno necessità di mantenere informazioni in memoria di lavoro; normalmente tra questi ci sono i server NFS (Network File System), SMTP (Simple Mail Transfer Protocol) e DNS (Domain Name Service). Questi server nei sistemi UNIX vengono avviati da comandi di

shell eseguiti all’avvio della macchina e specificati nei file /etc/rc. Il secondo tipo di gestione è generalmente utilizzato per categorie di servizi che non vengono richiesti frequentemente, che non risentono del ritardo dovuto all’avvio del processo, che richiedono nuove copie del processo per trattare più richieste contemporaneamente (ad esempio per sessioni telnet o FTP). Questi processi vengono chiamati dal demone inetd, un processo che

viene eseguito all’avvio del sistema e si pone in ascolto di richieste su tutte le porte dei servizi specificati nel suo file di configurazione /etc/inetd.conf.

Nel momento in cui si presenta una richiesta ad una porta specifica, inetd manda in esecuzione il processo corrispondente e questo si disattiva dopo avere fornito il servizio.

 

Vengono ora descritti alcuni dei servizi di rete più utilizzati.

 

2.1 Protocolli Internet

 

L’insieme dei protocolli TCP/IP (Transmission Control Protocol / Internet Protocol) è stato sviluppato per creare una rete di reti (Internet). Le singole macchine sono connesse in reti locali, le quali si affacciano sul resto del mondo, costituito da un’unione di analoghe reti locali, tramite opportuni dispositivi di connessione e instradamento.

L’insieme dei protocolli TCP/IP è suddiviso in strati, in base alle funzioni svolte dal singolo protocollo. Gli strati del protocollo TCP/IP sono:

 

 strato di Applicazione (include protocolli applicativi che forniscono servizi direttamente agli utenti o fanno da supporto ad alcune funzioni di sistema);

 

 strato di Trasporto (fornisce servizi di consegna alle applicazioni dello strato superiore);

 

 strato di Rete (organizza i dati in datagrammi e ne gestisce l’instradamento).

 

L’ultimo strato si appoggia sempre su un protocollo di basso livello, come ad esempio Ethernet, Token Ring, X25, ecc. (Figura 2).

 

 

 

Figura 2: I protocolli della famiglia TCP/IP

 

 

I dati viaggiano sulla rete sotto forma di pacchetti. Quando un’entità di rete invia dati, questi attraversano la pila degli strati TCP/IP dall’alto verso il basso. Ogni strato nella pila aggiunge informazioni di controllo allo scopo di assicurare una corretta consegna del pacchetto. Queste informazioni di controllo sono chiamate intestazioni, poiché vengono poste all’inizio dei dati che devono essere trasmessi. Ogni strato tratta tutte le informazioni che riceve dallo strato superiore come dati e aggiunge la sua intestazione all’inizio di tali informazioni. L’aggiunta di informazioni di controllo viene chiamato incapsulamento.

Quando un’entità riceve dati il processo si inverte: man mano che il pacchetto attraversa la pila degli strati dal basso verso l’alto, ogni strato rimuove l’intestazione relativa e passa il pacchetto ad uno dei protocolli del livello superiore in base alle informazioni di controllo contenute nell’intestazione (Figura 3).

Al livello applicativo il pacchetto consiste semplicemente dei dati che devono essere trasferiti (ad esempio una parte di una sessione telnet); scendendo, gli strati intermedi di trasporto e di rete preservano i dati aggiungendo le rispettive intestazioni, e lo strato inferiore aggiunge l’intestazione del particolare canale utilizzato (ad esempio Ethernet). I protocolli di questo strato forniscono il mezzo per spedire dati da una macchina ad un’altra fisicamente collegata alla stessa rete e, a differenza dei protocolli degli strati superiori, devono conoscere tutti i dettagli della rete sottostante per una corretta trasmissione dei dati.

Se i pacchetti sono trasportati su una rete Ethernet, l’intestazione Ethernet contiene l’indirizzo a 8 byte della macchina che ha introdotto il messaggio sulla rete, l’indirizzo destinazione (un router sulla stessa rete se la destinazione non appartiene alla rete locale) e un numero che identifica il protocollo dello strato superiore (in questo caso IP). [2]

 

 

DATI

 
Strato Applicativo (FTP)

 


Intestazione

 

DATI

 
Strato di Trasporto (TCP)

 


Intestazione

 

Intestazione

 

 

DATI

 
Strato di Rete (IP)

 


Checksum

 

 

Intestazione

 

Intestazione

 

 

Intestazione

 

DATI

 
Strati Inferiori

(Ethernet)

 

Figura 3: Esempio di incapsulamento dei dati

 

 

2.2 Posta elettronica

 

Questo servizio, probabilmente il più conosciuto, è impiegato per scambiare messaggi attraverso la rete utilizzando come protocollo SMTP. Il numero di porta stabilito per i server SMTP è il 25 e il server SMTP più diffuso tra i sistemi UNIX è il programma Sendmail.

I server di posta elettronica sono particolarmente vulnerabili, poiché accettano qualunque tipo di dati da tutti i sistemi presenti sulla rete. Inoltre, essendo programmi piuttosto complessi, sono soggetti a errori software che possono essere sfruttati per attaccare il sistema su cui girano.

 

2.3 FTP

 

E’ un protocollo che permette il trasferimento di file da e verso una macchina remota. A differenza della posta elettronica, mediante la quale è possibile trasferire solo file ASCII (American Standard Code for Information Interchange), FTP consente di trasferire ogni tipo di file binario. I server FTP utilizzano due porte prestabilite, la porta 21 per pacchetti che contengono comandi, la porta 20 per lo scambio dei dati.

Per accedere ai file messi a disposizione da un nodo della rete l’utente deve fornire un nome di login. In molti sistemi il server FTP è configurato in maniera tale da accettare richieste da un utente "anonymous", che è obbligato ad inserire una qualsiasi stringa come password, ma di solito è invitato ad inserire il proprio indirizzo di posta elettronica.

I principali problemi connessi alla gestione di un server FTP che preveda collegamenti di tipo anonymous sono:

 

 la possibilità che gli utenti possano accedere ad altre aree del sistema oltre a quella contenente i file pubblici;

 

 la possibilità che gli utenti esterni possano introdurre file nell’area pubblica,

compromettendo la sicurezza dell’intero sistema. Accesso tramite terminale remoto.

 

2.4 Telnet

 

Fornisce accesso tramite terminale virtuale a sistemi remoti. La porta assegnata al server telnet è la numero 23. Nel momento in cui ci si collega ad un sistema remoto viene richiesto all’utente di identificarsi e di autenticarsi inserendo il proprio nome di login e la propria password. Questo meccanismo di identificazione e autenticazione presenta una vulnerabilità nota: tutte le informazioni scambiate, e quindi anche le password, viaggiano in chiaro sulla rete.

Telnet, inoltre, è parte integrante di un gran numero di tecniche di attacco: viene utilizzato sia per eseguire comandi di sistema, nel caso si riesca a ottenere l’accesso al sistema obiettivo, sia per interagire direttamente con i server, nel caso si usi il client telnet per connettersi ad altre porte.

Telnet quindi dovrebbe essere utilizzato solo all’interno di una rete che si possa considerare fidata.

 

2.5 World Wide Web

 

Il World Wide Web (WWW) è un servizio informativo costituito da una collezione di server HTTP (Hyper Text Transfer Protocol). La porta assegnata al server HTTP è la numero 80.

Questo servizio non prevede in generale meccanismi di identificazione e autenticazione e utilizza una tecnologia ipertestuale per collegare tra loro i documenti della rete WWW.

Il World Wide Web è la maniera più semplice, per un utente che possa utilizzare un browser (un client HTTP), per accedere alle informazioni in rete. Offrire questo servizio può sottoporre il sistema ad alcune minacce alla sicurezza:

 

 un attaccante può sfruttare eventuali errori software del server HTTP o degli script CGI (Common Gateway Interface) per ottenere accesso non autorizzato ad altri file presenti sul file system del server o anche per ottenere il controllo della macchina server;

 

 un server mal configurato può involontariamente mettere a disposizione informazioni confidenziali.

 

D’altra parte anche il lato client può essere minacciato: un server può nascondere dei cavalli di Troia all’interno dei dati che trasferisce (ad esempio sotto forma di file compressi) o inserire dei comandi maliziosi all’interno di programmi Java.

 

2.6 Informazioni sugli utenti

 

Il servizio finger (porta 79) permette di ricavare informazioni sugli utenti che hanno un account su un sistema. Se si interroga un server finger su una macchina remota si ottiene come risposta l’elenco degli utenti collegati al momento. Specificando il nome di un utente del sistema, finger fornisce alcune informazioni sull’utente ricavate dall’archivio degli account del sistema, la data e l’ora dell’ultimo collegamento, lo stato della posta elettronica e, se presente, un messaggio personalizzato dall’utente. Questo genere di informazioni è molto prezioso per gli attaccanti i quali possono, ad esempio, individuare facilmente degli account raramente utilizzati.

Anche dal lato client il servizio può essere pericoloso: il messaggio dell’utente può contenere dei caratteri di controllo che possono provocare dei danni al sistema.

 

2.7 Condivisione di file system in rete

 

NFS è un protocollo che permette ai sistemi in rete di importare file system remoti. Un server NFS mette a disposizione alcune directory per l’esportazione e queste vengono aggiunte al file system dei client in maniera trasparente. NFS fornisce dei metodi per controllare quali macchine possano accedere ai file esportabili.

Nei sistemi UNIX il file /etc/exports specifica quali file system possano essere esportati e quali macchine siano autorizzate a farlo.

Il servizio è particolarmente pericoloso soprattutto perché non richiede autenticazione di utente, ma soltanto l’identificazione del nodo. Di conseguenza è facile per un attaccante indurre il server NFS a credere che una richiesta di esportazione file parta da un client autorizzato, anche se questo non è vero.

 

2.8 Name Service

 

DNS non è un servizio utilizzato a livello utente, ma viene richiesto dai principali servizi di rete, quali telnet, FTP, SMTP, per effettuare la traduzione da indirizzi simbolici a indirizzi numerici. Fornire ed utilizzare questo servizio è quindi indispensabile per potere essere effettivamente collegati ad Internet. DNS utilizza la porta 53.

Oltre che per la traduzione di indirizzi, DNS può essere anche interrogato sulla composizione di tutta la rete che serve. Queste informazioni, che non sono necessarie al funzionamento degli altri servizi, forniscono ad un attaccante l’elenco dettagliato delle macchine e quindi di tutti i possibili punti di attacco.