Introduzione
Letteralmente una settimana fa ho scritto un saggio sull'argomento indicato nel titolo e mi sono reso conto che, per così dire, le informazioni utili su Internet sono piuttosto scarne. In gran parte sono solo fatti secchi e istruzioni per la configurazione. Pertanto ho deciso di apportare alcune correzioni al testo e pubblicarlo come articolo.
Che cos'è FTP
FTP (File Transfer Protocol) è un protocollo di trasferimento file su rete. È uno dei protocolli fondamentali di Ethernet. È nato nel 1971 e inizialmente funzionava nelle reti DARPA. Attualmente, come l'HTTP, il trasferimento di file si basa su un modello costituito da una serie di protocolli TCP/IP (Transmission Control Protocol/Internet Protocol). È definito nella RFC 959.
Il protocollo definisce quanto segue:
- Come verrà effettuato il controllo degli errori
- Il metodo di imballaggio dei dati (se viene utilizzato l'imballaggio)
- Come il dispositivo mittente comunica che ha terminato il messaggio
- Come il dispositivo ricevente comunica che ha ricevuto il messaggio
Interazione tra client e server
Esaminiamo più dettagliatamente i processi che si verificano durante il funzionamento di FTP. La connessione viene inizializzata dall'interprete del protocollo dell'utente. La gestione dello scambio avviene tramite un canale di controllo in standard TELNET. I comandi FTP sono generati dall'interprete del protocollo dell'utente e inviati al server. Le risposte del server vengono inviate all'utente sempre tramite il canale di controllo. In generale, l'utente ha la possibilità di stabilire un contatto con l'interprete del protocollo del server attraverso strumenti diversi rispetto a quelli dell'interprete dell'utente.
La caratteristica principale di FTP è che utilizza una doppia connessione. Una di queste è utilizzata per inviare comandi al server e avviene per default attraverso la porta TCP 21, che può essere modificata. La connessione di controllo esiste per tutto il tempo in cui il client comunica con il server. Il canale di controllo deve essere aperto durante il trasferimento dei dati tra le macchine. In caso di chiusura, il trasferimento dei dati si interrompe. Attraverso la seconda avviene il trasferimento diretto dei dati. Viene aperto ogni volta che si effettua un trasferimento di file tra il client e il server. Se più file vengono trasferiti contemporaneamente, viene aperto un canale di trasferimento per ciascuno di essi.
FTP può operare in modalità attiva o passiva, dalla scelta della quale dipende il modo in cui viene stabilita la connessione. In modalità attiva, il client crea una connessione TCP di controllo con il server e invia al server il proprio indirizzo IP e un numero di porta cliente casuale, dopodiché attende che il server stabilisca una connessione TCP con quell'indirizzo e numero di porta. Se il client si trova dietro un firewall e non può ricevere una connessione TCP in ingresso, si può utilizzare la modalità passiva. In questa modalità, il client utilizza il canale di controllo per inviare al server il comando PASV e poi riceve dal server il suo indirizzo IP e numero di porta, che vengono poi utilizzati dal client per aprire un canale dati dalla sua porta casuale.
Può verificarsi una situazione in cui i dati vengono trasmessi a una terza macchina. In questo caso, l'utente crea un canale di controllo con due server e organizza un canale dati diretto tra di essi. I comandi di controllo passano attraverso l'utente, mentre i dati vengono trasferiti direttamente tra i server.
Durante la trasmissione dei dati su una rete possono essere utilizzate quattro rappresentazioni dei dati:
- ASCII – viene utilizzato per il testo. I dati, se necessario, vengono convertiti prima della trasmissione dalla rappresentazione carattere sull'host mittente in "ASCII a otto bit" e (ancora una volta, se necessario) nella rappresentazione carattere dell'host ricevente. In particolare, vengono modificati i caratteri di nuova riga. Di conseguenza, questo modo non è adatto a file che contengono solo testo normale.
- Modalità binaria – l'host mittente invia ogni file byte per byte, mentre il ricevente conserva il flusso di byte al momento della ricezione. Il supporto di questa modalità è stato raccomandato per tutte le implementazioni di FTP.
- EBCDIC – viene utilizzato per la trasmissione di testo normale tra host in codifica EBCDIC. Altrimenti, questa modalità è simile alla modalità ASCII.
- Modalità locale – consente a due computer con impostazioni identiche di inviare dati nel proprio formato senza la conversione in ASCII.
La trasmissione dei dati può avvenire in uno dei tre modi:
- Modalità a flusso – i dati vengono inviati come un flusso continuo, liberando FTP dall'esecuzione di qualsiasi elaborazione. Invece, tutta l'elaborazione viene eseguita da TCP. L'indicatore di fine file non è necessario, tranne per la separazione dei dati in registrazioni.
- La modalità blocco – FTP suddivide i dati in più blocchi (blocco intestazione, numero di byte, campo dati) e poi li trasmette tramite TCP.
- Modalità compressione – i dati vengono compressi utilizzando un unico algoritmo (di solito la codifica delle lunghezze delle sequenze).
FTP server – è un server che consente l'uso del protocollo di trasferimento file. Ha caratteristiche specifiche che lo differenziano dai normali server web:
- È necessaria l'autenticazione degli utenti
- Tutte le operazioni sono eseguite all'interno della sessione corrente
- Possibilità di eseguire varie azioni sul file system
- Viene utilizzato un canale separato per ogni connessione
FTP client – è un programma che permette di connettersi a un server remoto tramite FTP e di eseguire su di esso le azioni necessarie sugli elementi del file system. Il client può essere un browser, a cui inserire l'indirizzo rappresentante il percorso di una determinata cartella o file sul server remoto, in conformità con il diagramma URL generale:
ftp://user:pass@address:port/directory/file
Tuttavia, l'uso di un browser web in questo contesto consente solo di visualizzare o scaricare i file di interesse. Per sfruttare appieno tutti i vantaggi di FTP, è consigliabile utilizzare software specializzato come client.
L'autenticazione FTP utilizza uno schema nome utente/password per fornire accesso. Il nome utente viene inviato al server con il comando USER, mentre la password con il comando PASS. Se le informazioni fornite dal client sono accettate dal server, quest'ultimo invierà al client un invito e inizierà la sessione. Gli utenti possono, se il server supporta questa funzionalità, accedere senza fornire credenziali, ma il server potrebbe fornire solo accesso limitato per tali sessioni.
L'host che offre il servizio FTP può fornire accesso anonimo a FTP. Gli utenti di solito accedono come "anonymous" (può essere case sensitive su alcuni server FTP) come nome utente. Anche se in genere si chiede agli utenti di fornire il proprio indirizzo email invece della password, non viene effettuata alcuna verifica effettiva. Molti host FTP che forniscono aggiornamenti software supportano l'accesso anonimo.
Schema del protocollo
L'interazione «client-server» durante una connessione FTP può essere rappresentata visivamente nel seguente modo:

FTP sicuro
L'FTP non è stato progettato inizialmente come un protocollo sicuro, in quanto doveva servire per la comunicazione tra vari oggetti e istituzioni militari. Tuttavia, con l'evoluzione e la diffusione di Internet, il pericolo di accessi non autorizzati è aumentato notevolmente. È emersa la necessità di proteggere i server da vari tipi di attacchi. Nel maggio del 1999, gli autori del RFC 2577 hanno riassunto le vulnerabilità nel seguente elenco di problemi:
- Attacchi nascosti (bounce attacks)
- Attacchi di spoofing (spoof attacks)
- Attacchi a forza bruta (brute force attacks)
- Intercettazione dei pacchetti, sniffing (packet capture, sniffing)
- Furto di porte (port stealing)
L'FTP normale non ha la capacità di trasmettere dati in forma criptata, il che significa che nomi utente, password, comandi e altre informazioni possono essere facilmente intercettati da malintenzionati. Una soluzione comune a questo problema è l'uso di versioni "sicure" del protocollo vulnerabile, protette da TLS (FTPS), o un altro protocollo più sicuro, come SFTP/SCP, fornito dalla maggior parte delle implementazioni del protocollo Secure Shell.
FTPS
FTPS (FTP + SSL) è un'estensione del protocollo standard per il trasferimento dei file, che aggiunge alla sua funzionalità di base la creazione di sessioni criptate tramite il protocollo SSL (Secure Sockets Layer — livello di protezione dei socket). Attualmente, la protezione è garantita dal suo equivalente più avanzato, TLS (Transport Layer Security — protezione a livello di trasporto).
SSL
Il protocollo SSL è stato proposto dalla Netscape Communications nel 1996 per garantire la sicurezza e la riservatezza delle connessioni Internet. Il protocollo supporta l'autenticazione (verifica dell'identità) del client e del server, è indipendente dalle applicazioni ed è trasparente per i protocolli HTTP, FTP e Telnet.
Il protocollo SSL Handshake è composto da due fasi: autentificazione del server e autenticazione opzionale del client. Nella prima fase, il server, in risposta alla richiesta del client, invia il proprio certificato e i parametri di crittografia. Successivamente, il client genera una chiave master, la cripta con la chiave pubblica del server e la invia al server. Il server decripta la chiave master con la propria chiave privata e conferma la propria autenticità al client restituendo un messaggio firmato con la chiave master del client.
I dati successivi vengono crittografati e firmati con le chiavi ottenute sulla base di questo master key. Nella seconda fase, che non è obbligatoria, il server invia una richiesta al client, e il client conferma la propria autenticità al server restituendo la richiesta con la propria firma digitale e il certificato della chiave pubblica.
SSL supporta diversi algoritmi crittografici. Durante l'instaurazione della connessione viene utilizzato il sistema crittografico a chiave pubblica RSA. Dopo lo scambio delle chiavi, vengono utilizzati vari cifrari come RC2, RC4, IDEA, DES e TripleDES. Viene anche impiegato MD5, l'algoritmo per la creazione di digest delle messaggi. La sintassi dei certificati della chiave pubblica è descritta nell'X.509.
Uno dei vantaggi principali di SSL è la sua completa indipendenza dalla piattaforma software. Il protocollo è stato sviluppato sull principio della portabilità, e la sua ideologia costruttiva non dipende dalle applicazioni in cui è integrato. Inoltre, è importante notare che sopra il protocollo SSL possono essere sovrapposti altri protocolli; sia per aumentare ulteriormente il livello di protezione dei flussi informativi target, sia per adattare le capacità crittografiche di SSL a un compito specifico.
Connessione SSL

Il canale sicuro fornito da SSL possiede tre caratteristiche principali:
- Il canale è privato. La crittografia è utilizzata per tutti i messaggi dopo un semplice scambio che serve a stabilire la chiave segreta.
- Il canale è autenticato. Il lato server del dialogo viene sempre autenticato, mentre il lato client è autenticato su base facoltativa.
- Il canale è affidabile. Il trasporto dei messaggi include la verifica dell'integrità (con l'ausilio di MAC).
Caratteristiche di FTPS
Esistono due implementazioni di FTPS, che utilizzano diversi metodi per fornire sicurezza:
- Il metodo implicito prevede l'uso del protocollo SSL standard con l'instaurazione di una sessione prima dell'invio dei dati, il che compromette la compatibilità con i normali client e server FTP. Per la retrocompatibilità con i client che non supportano FTPS, per la connessione di controllo viene utilizzata la porta TCP 990 e per il trasferimento dati la porta 989. Ciò consente di mantenere la porta standard 21 per il protocollo FTP. Questo metodo è considerato obsoleto.
- Esplicito – molto più comodo, in quanto utilizza i comandi FTP standard, ma cripta i dati durante la risposta, permettendo di utilizzare lo stesso canale di controllo per FTP e FTPS. Il client deve richiedere esplicitamente il trasferimento sicuro dei dati al server e poi confermare il metodo di crittografia. Se il client non richiede un trasferimento sicuro, il server FTPS ha il diritto di mantenere o chiudere la connessione non sicura. Il meccanismo di negoziazione dell'identificazione e della protezione dei dati è stato aggiunto sotto il RFC 2228, che include un nuovo comando FTP AUTH. Sebbene questo standard non definisca esplicitamente i meccanismi di protezione, stabilisce che la connessione sicura deve essere inizializzata dal client utilizzando l'algoritmo descritto sopra. Se le connessioni protette non sono supportate dal server, deve essere restituito il codice di errore 504. I client FTPS possono ottenere informazioni sui protocolli di protezione supportati dal server tramite il comando FEAT; tuttavia, il server non è obbligato a rivelare quali livelli di sicurezza supporta. I comandi FTPS più comuni sono AUTH TLS e AUTH SSL, che forniscono rispettivamente la protezione TLS e SSL.
SFTP
SFTP (Secure File Transfer Protocol) – protocollo di livello applicativo per il trasferimento di file, che opera su un canale sicuro. Non deve essere confuso con (Simple File Transfer Protocol), che ha la stessa abbreviazione. Se FTPS è semplicemente un'estensione di FTP, SFTP è un protocollo separato e non correlato, che utilizza come base SSH (Secure Shell – shell sicura).
Secure Shell
Lo sviluppo del protocollo è stato curato da uno dei gruppi IETF chiamato Secsh. La documentazione di lavoro per il nuovo protocollo SFTP non è diventata uno standard ufficiale, ma ha iniziato a essere utilizzata attivamente per lo sviluppo di applicazioni. In seguito sono state rilasciate sei versioni del protocollo. Tuttavia, l'aumento graduale delle sue funzionalità ha portato alla decisione, presa il 14 agosto 2006, di interrompere il lavoro sullo sviluppo del protocollo a causa del completamento dell'obiettivo principale del progetto (sviluppo di SSH) e della mancanza di un livello esperto sufficiente per passare allo sviluppo di un protocollo di file system remoto completo.
SSH è un protocollo di rete che consente di gestire in remoto un sistema operativo e di effettuare il tunneling delle connessioni TCP (ad esempio, per il trasferimento di file). È simile per funzionalità ai protocolli Telnet e rlogin, ma, a differenza di questi, cripta tutto il traffico, inclusi le password trasmesse. SSH permette la scelta di diversi algoritmi di crittografia. I client SSH e i server SSH sono disponibili per la maggior parte dei sistemi operativi di rete.
SSH consente di trasmettere in modo sicuro, in un ambiente non protetto, praticamente qualsiasi altro protocollo di rete. In questo modo è possibile non solo lavorare in remoto su un computer tramite una shell di comando, ma anche trasmettere un flusso audio o video (ad esempio, da una webcam) tramite un canale crittografato. Inoltre, SSH può utilizzare la compressione dei dati trasmessi per una successiva crittografia, comodo, ad esempio, per l'avvio remoto dei client X WindowSystem.
La prima versione del protocollo, SSH-1, è stata sviluppata nel 1995 dal ricercatore Tatu Ylönen dell'Università Tecnica di Helsinki (Finlandia). SSH-1 è stato scritto per garantire una maggiore riservatezza rispetto ai protocolli rlogin, telnet e rsh. Nel 1996 è stata sviluppata una versione più sicura del protocollo, SSH-2, incompatibile con SSH-1. Il protocollo ha acquisito ulteriore popolarità, e nel 2000 contava circa due milioni di utenti. Attualmente, con il termine 'SSH' si fa generalmente riferimento a SSH-2, poiché la prima versione del protocollo, a causa di significative carenze, non è praticamente più utilizzata. Nel 2006, il protocollo è stato approvato dal gruppo di lavoro IETF come standard Internet.
Sono diffuse due implementazioni di SSH: quella commerciale privata e quella gratuita. L'implementazione gratuita è chiamata OpenSSH. Fino al 2006, l'80% dei computer della rete Internet utilizzava proprio OpenSSH. L'implementazione privata è sviluppata dall'organizzazione SSH Communications Security, che è una controllata al 100% della società Tectia, ed è gratuita per uso non commerciale. Queste implementazioni contengono praticamente lo stesso insieme di comandi.
Il protocollo SSH-2, a differenza del protocollo telnet, è resistente ad attacchi di ascolto del traffico ("sniffing"), ma non è resistente agli attacchi di "uomo nel mezzo". Il protocollo SSH-2 è anche resistente agli attacchi di collegamento in mezzo (sessionhijacking), in quanto non è possibile inserirsi in una sessione già stabilita o intercettarla.
Per prevenire attacchi di "uomo nel mezzo" durante la connessione a un host il cui chiave è ancora sconosciuta al cliente, il software client mostra all'utente il "fingerprint della chiave". Si raccomanda di controllare attentamente il fingerprint mostrato dal software client con quello del server, preferibilmente ottenuto tramite canali di comunicazione sicuri o di persona.
Il supporto per SSH è implementato in tutti i sistemi UNIX-like, e in molti di essi tra le utility standard sono presenti il client e il server SSH. Esistono molte implementazioni di client SSH anche per sistemi operativi non UNIX. Il protocollo ha guadagnato molta popolarità dopo lo sviluppo diffuso di analizzatori di traffico e metodi di compromissione delle reti locali, come soluzione alternativo poco sicura al protocollo Telnet per la gestione di nodi critici.
Comunicazione utilizzando SSH
Per lavorare con SSH sono necessari un server SSH e un client SSH. Il server ascolta le connessioni dai computer client e, una volta stabilita la connessione, esegue l'autenticazione, dopodiché inizia a servire il cliente. Il client è utilizzato per accedere a una macchina remota ed eseguire comandi.

Confronto con FTPS
La principale differenza tra SFTP e il normale FTP e FTPS è che SFTP cripta assolutamente tutti i comandi, nomi utente, password e altre informazioni riservate.
Entrambi i protocolli FTPS e SFTP utilizzano una combinazione di algoritmi asimmetrici (RSA, DSA), algoritmi simmetrici (DES/3DES, AES, Twhofish, ecc.), oltre a un algoritmo di scambio di chiavi. Per l'autenticazione, FTPS (o, per essere più precisi, SSL/TLS nel protocollo FTP) utilizza certificati X.509, mentre SFTP (protocollo SSH) utilizza chiavi SSH.
I certificati X.509 includono la chiave pubblica e alcune informazioni sul certificato del proprietario. Queste informazioni consentono, d'altra parte, di verificare l'integrità dello stesso certificato, la sua autenticità e il proprietario del certificato. I certificati X.509 hanno una chiave privata corrispondente, che di solito è conservata separatamente dal certificato per motivi di sicurezza.
La chiave SSH contiene solo la chiave pubblica (la chiave privata corrispondente è conservata separatamente). Non contiene alcuna informazione sul proprietario della chiave. Alcune implementazioni SSH utilizzano certificati X.509 per l'autenticazione, ma in realtà non verificano l'intera catena di certificati: viene utilizzata solo la chiave pubblica (cosa che rende tale verifica incompleta).
Conclusione
Il protocollo FTP gioca sicuramente ancora un ruolo importante nella conservazione e distribuzione delle informazioni online nonostante la sua età veneranda. È un protocollo comodo, multifunzionale e standardizzato. Su di esso sono costruiti molti archivi di file, senza i quali il lavoro tecnico sarebbe meno efficace. Inoltre, è facile da configurare, e i programmi server e client esistono praticamente per tutte le piattaforme rilevanti e non.
Le sue versioni sicure risolvono il problema della riservatezza dei dati archiviati e trasmessi nel mondo moderno. Entrambi i nuovi protocolli hanno i propri vantaggi e svantaggi e svolgono ruoli leggermente diversi. Nelle aree in cui è necessario un archivio di file, è preferibile utilizzare FTPS, soprattutto se in precedenza si utilizzava FTP classico. SFTP è meno diffuso a causa della sua incompatibilità con il vecchio protocollo, ma è più sicuro e ha maggiore funzionalità, poiché fa parte del sistema di gestione remota.
Elenco delle fonti
Fonte: habr.com
