TCP/IP in pillole: FTP
FTP (file transfer protocol) è lo standard per il trasferimento di files tra computer con sistemi operativi diversi. E’ definito nella RFC959, che risale a 1985, ma questo protocollo ha una lunga storia che parte nel 1971, con le prime proposte di uno standard.
Funziona al livello applicazione del modello a strati del TCP/IP, ed usa il solo TCP, mai UDP. Altra caratteristica peculiare è quella di usare due porte TCP, la TCP/20 e la TCP/21, invece di una sola. Le modalità di funzionamento sono due: attiva e passiva.
- Modalità attiva: Il client FTP si connette al server verso a porta di destinazione TCP/21, con porta sorgente casuale (N), di solito maggiore di 1024. Sulla TCP/21 il server ascolta in attesa di comandi, e risponde con messaggi di stato. Una volta stabilita la connessione su questo canale, su cui passeranno solo i comandi di controllo, il client si mette in ascolto sulla porta N+1, e manda al server (usando il canale TCP/21) il comando
PORT N+1. A questo punto il server inizierà una connessione dalla sua porta TCP/20 verso la porta TCP/N+1 del client, ed invierà i dati richiesti.
Quindi una sessione FTP è formata da due processi distinti:
Protocol Interpreter (PI) sulla porta TCP/21, che viene usato per trasmettere i comandi fra client e server FTP. Il PI da inizio al processo.
Data Transfer Process (DTP) che viene usato per la trasmissione vera e propria dei dati tra i due host, il DTP del client rileva la connessione DTP iniziata dal server.
E’ chiaro a questo punto che questo schema ha grossi problemi a funzionare in presenza di un firewall di tipo packet filtering, che ispeziona i pacchetti in transito. Esso rileva una connessione in ingresso che non è apparentemente originata da una corrispondente richiesta interna sulla stessa porta, e scarta il pacchetto, impedendo di fatto il trasferimento dei dati.
Per ovviare a questo problema è stata descritta una modalità alternativa di funzionamento, definita nella RFC1579, detta modalità à passiva. - Modalità passiva: la fase iniziale è identica alla precedente, ma invece di mandare il comando
PORTe mettersi in ascolto, il client manda un comandoPASV. A questo punto è il server che si mette in ascolto su una porta N (maggiore di 1024) e risponde con il comandoPORT N. Al client non resta che aprire una connessione verso la porta di destinazione N, per iniziare a ricevere i dati. In questo modo il firewall vede entrare pacchetti che sono stati richiesti da una connessione originata dall’interno e lascia passare il flusso di dati.
Nel corso della trasmissione dei dati, la connessione di controllo deve restare attiva, in modo che sia possibile scambiare comandi e risposte tra i processi client e server. Sia la connessione di controllo che la connessione dati permettono di instaurare un flusso di dati bidirezionale tra client e server.
In realtà è possibile configurare un packet firewall in modo che permetta il passaggio di connessioni FTP attive, ma per farlo si è costretti ad aprire molte più porte per il traffico, quindi è molto meglio usare la modalità passiva.
Dal punto di vista della sicurezza FTP è un incubo, anche se usato in modalità passiva per il solo download dei file.
Le sue falle principali sono:
- Password in chiaro: le password viaggiano in chiaro attraverso la rete e sono facilmente intercettabili sniffando il traffico tra client e server.
- I dati viaggiano in chiaro: anche i dati vengono trasferiti senza essere crittografati, anch’essi sono intercettabili.
- Sessione in due processi: due processi necessari alla connessione rendono più semplici manovre truffaldine o malevole da parte di malintenzionati.
- Permessi utente: i permessi di accesso FTP vanno incrociati con i permessi utente sul server in modo da limitare lo spazio su disco e le operazioni sui files.
Per una maggiore sicurezza è fortemente consigliato SFTP, che appoggia tutto il traffico sul protocollo SSH.
Riferimenti:
- Wikipedia
- Brian Komar: “TCP/IP – Guida Completa” – Apogeo 2001
- WindowsNetworking.com: Understanding FTP protocol