Reading Time: 4 minutes

FTP (File Transfer Protocol)

Un’altra categoria di servizi che, fin dai primi passi di internet, ha incontrato subito grande successo è quella relativa al trasferimento di file.

Per ottenere una copia di un file remoto o per inviare al server una copia di un file locale sono oggi disponibili diverse soluzioni, alcune delle quali orientate proprio alla sicurezza.

In origine però riservatezza e integrità delle informazioni trasmesse non erano requisito essenziale nello scambio di file.

Questo approccio ottimistico ha prodotto alcuni protocolli per lo scambio di file di estrema semplicità ed efficacia, ma totalmente privi di meccanismi atti ad assicurare adeguata protezione ai dati in transito.

Il primo protocollo standard per lo scambio di file risale al 1980 ed è noto come FTP (File Transfer Protocol).

Tramite questo protocollo tutti gli utenti autorizzati possono accedere a un server FTP e trasferire file in entrambe le direzioni.

Il trasferimento da client a server viene generalmente indicato come uploading, mentre il trasferimento inverso viene indicato come downloading.

Per stabilire l’identità del richiedente, FTP prevede il trasferimento delle credenziali utente tramite il paradigma username/password.

Le credenziali dell’utente vengono generalmente memorizzate in un file della stazione remota, in modo che possano essere controllate dal server FTP al momento della richiesta di servizio.

Normalmente si tratta dello stesso file utilizzato per le credenziali usate dal Telnet.

Una volta superata la fase di autenticazione, l’utente può digitare sul terminale locale tutti i comandi riconosciuti dal protocollo FTP.

L’accesso ai file e alle directory (come la possibilità di leggere, scrivere o sovrascrivere file) è regolato dalle proprietà del file system locale del server e dal profilo di autorizzazione che possiede lo username con il quale l’utente si è connesso al servizio.

Il processo FTP per il trasferimento file richiede l’uso di due connessioni TCP separate.

La prima viene utilizzata per l’invio di una serie di comandi di controllo, che permettono di stabilire la presenza e la natura delle informazioni disponibili sul server e di indicare quali file si intendono trasferire.

La seconda è invece dedicata alla trasmissione dati vera e propria.

La connessione di controllo è la prima a essere aperta dal client, contattando il server FTP sulla porta servizio riservata 21/tcp.

Tutti i dati e i comandi trasferiti attraverso questa connessione sono in formato standard NVT.

La connessione per il trasferimento dati viene aperta solo al momento in cui è effettivamente richiesto un File Transfer.

Il protocollo FTP permette di trasferire sia dati binari sia in formato ASCII.

I principali comandi FTP sono:

  • USER, per inviare al server l’username dell’utente;
  • PASS, per inviare al server la password associata al precedente username;
  • LIST, per ottenere le informazioni generali su file e directory;
  • RETR, per comandare il trasferimento di un file da server a client;
  • STOR, per comandare il trasferimento di un file da client a server;
  • PORT, per indicare la necessità di aprire una nuova connessione per il trasferimento dati;
  • PASV, stesso ruolo del comando PORT;
  • QUIT, per terminare la sessione FTP.

L’apertura della nuova connessione TCP per il trasferimento dati può essere avviata sia dal server sia dal client.

Nel primo caso si parla di apertura attiva (che generalmente rappresenta l’opzione standard implementata nei client FTP), nel secondo caso si parla di apertura passiva.

L’apertura attiva prevede che il client FTP, interessato a iniziare un trasferimento dati, indichi al server la porta che intende utilizzare, attraverso il comando PORT.

La porta selezionata dal client deve essere maggiore di 1024 (molto spesso il client elegge la stessa porta utilizzata per la connessione di controllo).

Il server, ricevuto il comanto PORT, avvia l’apertura di una nuova connessione TCP con il client utilizzando la porta riservata 20/tcp come porta locale e la porta indicata nel comando PORT come porta lato client.

I parametri del comando PORT sono sei.

I primi quatro indicano l’indirizzo IP della stazione client, i restanti due parametri indicano la porta eletta dal client per gestire la nuova connessione TCP.

Se la porta eletta dal client è la 5112 e la stazione client possiede indirizzo IP = 192.168.1.0, il comando PORT è il seguente:

PORT 192,168,1,10,19,248 (dove 5112 è stato scomposto in 19 * [256] + 248).

L’inserimento dell’indirizzo IP della stazione client all’interno di un comando a livello applicativo può rappresentare un serio problema per i client di una rete locale connessa a una rete pubblica.

Se la rete locale che ospita la stazione client prevede un sistema per la traduzione degli indirizzi IP locali in indirizzi globali prima dell’inoltro dei pacchetti IP sulla rete pubblica (traslazione NAT dinamica), è indispensabile che il dispositivo che implementa il NAT effettui, oltre alla modifica delle intestazioni dei datagrammi IP, anche la manipolazione dei parametri inseriti nel comando PORT.

Questo può comportare il cambiamento della lunghezza totale del segmento TCP trasferito.

L’apertura attiva non può comunque essere utilizzata quando si vuole implementare, per la stazione che agisce da client, una politica di accesso restrittiva che proibisce l’apertura di nuove connessioni TCP locali in seguito a richieste esterne.

In tal caso, bisogna ricorrere alla procedura di apertura passiva.

L’apertura passiva prevede che il client avvii il processo inviando al server un comando PASV.

Il server, ricevuto il comando, risponde con un’indicazione riguardante il numero di porta su cui ha attivato un processo figlio, pronto a gestire la prossima connessione TCP.

Il numero di porta del processo figlio, generalmente maggiore di 1024, viene restituito al client.

A questo punto, il client avvia la richiesta per una nuova connessione TCP per mezzo della quale riceverà/trasferirà il file desiderato.

La procedura per l’apertura passiva non è sempre implementata da client e server FTP.

Inoltre anche questo schema non è esente da vulnerabilità.

La principale conseguenza derivante dall’adozione di FTP in modalita PASV è che non è possibile determinare la natura del servizio dalle porte utilizzate da client e server (in quanto entrambe sono arbitrarie e maggiori di 1024).

Ciò complica l’implementazione di regole statiche restrittive, per filtrare in maniera selettiva il protocollo FTP tramite ACL sui dispositivi di interconnessione.

error: Content is protected !!

La maggior parte dei contenuti del blog ComputerSec vengono pubblicati a beneficio di tutti e in modo completamente gratuito.
Tuttavia per supportare il blog, e per avere ulteriori vantaggi, puoi decidere di abbonarti e sfruttare al 100% tutti i contenuti!
Abbonati Ora!

Complimenti! Ti sei iscritto alla nostra Newsletter

C'è stato un errore durante l'invio della richiesta. Per favore riprova.

Computer Security will use the information you provide on this form to be in touch with you and to provide updates and marketing.