Prefazione
Solo una settimana fa scrivevo un articolo sull'argomento indicato nel titolo e ho riscontrato che, per dirla in modo chiaro, non c'era molta informazione accattivante disponibile online. Principalmente si trattava di fatti asciutti e istruzioni di configurazione. Pertanto, ho deciso di apportare alcune modifiche al testo e pubblicarlo come articolo.
Che cos'è FTP
FTP (File Transfer Protocol) è un protocollo di trasferimento file tramite rete. È uno dei protocolli di base di Ethernet. È nato nel 1971 e inizialmente operava nelle reti DARPA. Attualmente, proprio come HTTP, il trasferimento dei file si basa su un modello composto da una combinazione di protocolli TCP/IP (Transmission Control Protocol/Internet Protocol). È definito nella RFC 959.
Il protocollo stabilisce quanto segue:
- Come verrà effettuato il controllo degli errori
- Metodo di imballaggio dei dati (se l'imballaggio è utilizzato)
- In che modo il dispositivo mittente segnala che ha finito di inviare il messaggio
- In che modo il dispositivo ricevente segnala che ha ricevuto il messaggio
Interazione tra client e server
Esaminiamo più da vicino i processi che avvengono durante l'uso di FTP. La connessione è inizializzata dall'interprete del protocollo utente. La gestione dello scambio avviene tramite il canale di controllo secondo lo standard TELNET. I comandi FTP sono generati dall'interprete del protocollo utente e inviati al server. Le risposte del server vengono restituite all'utente sempre attraverso il canale di controllo. In generale, l'utente ha la possibilità di stabilire un contatto con l'interprete del protocollo del server utilizzando strumenti diversi da quelli dell'interprete utente.
La caratteristica principale di FTP è che utilizza una connessione doppia. Una di queste viene utilizzata per inviare comandi al server e avviene di default tramite la porta TCP 21, che può essere cambiata. La connessione di controllo esiste finché il client comunica con il server. Il canale di controllo deve rimanere aperto durante il trasferimento di dati tra le macchine. Se viene chiuso, il trasferimento dei dati si interrompe. La seconda connessione si occupa invece del trasferimento diretto dei dati. Viene aperta ogni volta che si effettua il trasferimento di un file tra client e server. Nel caso in cui vengano trasferiti più file contemporaneamente, viene aperto un canale di trasferimento dedito per ciascuno di essi.
FTP può operare in modalità attiva o passiva, e la scelta influisce sul modo in cui viene stabilita la connessione. In modalità attiva, il client crea una connessione TCP di controllo con il server e invia il proprio indirizzo IP e un numero di porta client arbitrario, 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ò accettare la connessione TCP in ingresso, può essere utilizzata la modalità passiva. In questa modalità, il client utilizza il flusso di controllo per inviare al server il comando PASV e poi riceve dall'server il suo indirizzo IP e numero di porta, che vengono poi utilizzati dal client per aprire un flusso di dati da una porta arbitraria.
Ci può essere un caso in cui i dati possono essere trasmessi a una terza macchina. In questo caso, l'utente stabilisce un canale di controllo con due server e organizza un canale dati diretto tra di essi. I comandi di controllo passano tramite l'utente, mentre i dati vengono trasferiti direttamente tra i server.
Nella trasmissione dei dati su rete possono essere utilizzate quattro rappresentazioni dei dati:
- ASCII – utilizzato per il testo. I dati, se necessario, vengono convertiti dalla rappresentazione dei caratteri sull'host mittente in "ASCII a otto bit" e (di nuovo, se necessario) nella rappresentazione dei caratteri dell'host ricevente. In particolare, vengono modificati i caratteri di fine riga. Di conseguenza, questa modalità non è adatta per file che contengono solo testo normale.
- Modalità binaria – l'host mittente invia ogni file byte per byte e il ricevente conserva il flusso di byte al momento della ricezione. Il supporto per questa modalità è stato raccomandato per tutte le implementazioni FTP.
- EBCDIC – utilizzato per la trasmissione di testo normale tra host in codifica EBCDIC. Questo modo è simile alla modalità ASCII in altri aspetti.
- Modalità locale – consente a due computer con impostazioni identiche di inviare dati nel proprio formato senza conversione in ASCII.
La trasmissione dei dati può avvenire in uno dei tre modi:
- Modalità streaming: i dati vengono inviati come un flusso continuo, liberando l'FTP dall'esecuzione di qualsiasi elaborazione. Invece, tutta l'elaborazione viene eseguita tramite TCP. Non è necessario un indicatore di fine file, eccetto per la separazione dei dati in record.
- Modalità a blocchi: l'FTP divide i dati in più blocchi (blocco dell'intestazione, numero di byte, campo dati) e poi li trasmette via TCP.
- Modalità di compressione: i dati vengono compressi utilizzando un unico algoritmo (solitamente codifica delle lunghezze delle serie).
Server FTP: è un server che prevede l'uso del protocollo di trasferimento file. Ha caratteristiche particolari che lo distinguono dai normali server web:
- È necessaria l'autenticazione degli utenti.
- Tutte le operazioni vengono eseguite nell'ambito della sessione corrente.
- È possibile effettuare diverse operazioni con il file system.
- Viene utilizzato un canale separato per ogni connessione.
Un client FTP è un programma che consente di connettersi a un server remoto tramite FTP e di eseguire le operazioni necessarie sugli elementi del file system. Un browser può fungere da client, inserendo nella barra degli indirizzi l'indirizzo che rappresenta il percorso a una specifica cartella o file sul server remoto, in conformità con la comune struttura URL:
ftp://user:pass@address:port/directory/file
Tuttavia, utilizzare un browser web in questo modo consentirà solo di visualizzare o scaricare i file desiderati. Per sfruttare appieno tutti i vantaggi di FTP, è consigliabile utilizzare un software specializzato come client.
L'autenticazione FTP utilizza uno schema di 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à un invito al client e avrà inizio la sessione. Gli utenti possono, se il server supporta questa funzionalità, accedere senza fornire credenziali, ma il server può concedere solo un accesso limitato per tali sessioni.
L'host che fornisce il servizio FTP può offrire accesso anonimo a FTP. Gli utenti di solito accedono come "anonymous" (può essere sensibile al maiuscolo su alcuni server FTP) come nome utente. Anche se solitamente viene richiesto agli utenti di inviare il proprio indirizzo email al posto della password, di fatto non viene effettuata alcuna verifica. Molti host FTP che forniscono aggiornamenti software supportano l'accesso anonimo.
Schema del protocollo
L'interazione "client-server" in una connessione FTP può essere rappresentata graficamente nel seguente modo:

FTP sicuro
L'FTP non è stato originariamente concepito come sicuro, essendo destinato alla comunicazione tra diversi oggetti e istituzioni militari. Tuttavia, con l'evoluzione e la diffusione di Internet, il rischio di accessi non autorizzati è aumentato significativamente. Si è resa necessaria la protezione dei server da vari tipi di attacchi. Nel maggio 1999, gli autori della RFC 2577 hanno elencato le vulnerabilità nel seguente elenco di problemi:
- Attacchi nascosti (bounce attacks)
- Attacchi di spoofing (spoof attacks)
- Attacchi a forza bruta (brute force attacks)
- Cattura di pacchetti, sniffing (packet capture, sniffing)
- Furto di porte (port stealing)
L'FTP standard non offre la possibilità di trasferire dati in forma crittografata, di conseguenza nomi utente, password, comandi e altre informazioni possono essere facilmente intercettati da malintenzionati. Una soluzione comune a questo problema è utilizzare versioni 'sicure', protette da TLS, del protocollo vulnerabile (FTPS) o un altro protocollo più sicuro, come SFTP/SCP, fornito con la maggior parte delle implementazioni del protocollo Secure Shell.
FTPS
FTPS (FTP + SSL) è un'estensione del protocollo standard di trasferimento file, che aggiunge la possibilità di creare sessioni criptate tramite il protocollo SSL (Secure Sockets Layer - livello di socket sicuri). Oggi, la protezione è garantita dal suo analogo più avanzato, TLS (Transport Layer Security - protezione a livello di trasporto).
SSL
Il protocollo SSL è stato proposto dalla società Netscape Communications nel 1996 per garantire la sicurezza e la riservatezza delle connessioni Internet. Il protocollo supporta l'autenticazione (verifica dell'identità) del cliente e del server, non dipende dalle applicazioni ed è trasparente per i protocolli HTTP, FTP e Telnet.
Il protocollo SSL Handshake è costituito da due fasi: l'autenticazione del server e l'autenticazione opzionale del cliente. Nella prima fase, il server, in risposta alla richiesta del cliente, invia il proprio certificato e i parametri di crittografia. Successivamente, il cliente 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 cliente restituendogli un messaggio firmato con la chiave master del cliente.
I dati successivi vengono crittografati e autenticati utilizzando le chiavi ottenute da questo master key. Nella seconda fase, che non è obbligatoria, il server invia una richiesta al cliente, e il cliente conferma la propria autenticità restituendo la richiesta con la propria firma digitale e il certificato della chiave pubblica.
SSL supporta una varietà di algoritmi crittografici. Durante l'instaurazione della connessione viene utilizzato il sistema crittografico a chiave pubblica RSA. Dopo lo scambio delle chiavi, vengono utilizzati molti altri cifrari: RC2, RC4, IDEA, DES e TripleDES. Viene utilizzato anche MD5, un algoritmo per la creazione del digest dei messaggi. La sintassi dei certificati a chiave pubblica è descritta in X.509.
Uno dei vantaggi più significativi di SSL è la sua completa indipendenza dalla piattaforma software. Il protocollo è stato sviluppato secondo principi di portabilità e la sua ideologia non dipende dalle applicazioni in cui è utilizzato. Inoltre, è importante notare che su SSL possono essere sovrapposti trasparentemente altri protocolli, sia per aumentare ulteriormente il livello di protezione dei flussi informativi target, sia per adattare le capacità crittografiche di SSL a specifici compiti definiti.
Connessione SSL

Il canale sicuro fornito da SSL presenta tre caratteristiche principali:
- Il canale è privato. La crittografia è utilizzata per tutti i messaggi dopo un semplice dialogo che serve a determinare la chiave segreta.
- Il canale è autenticato. Il lato server del dialogo è sempre autenticato, mentre quello del cliente è autenticato opzionalmente.
- Il canale è affidabile. Il trasporto dei messaggi include un controllo dell'integrità (utilizzando 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, a sua volta, compromette la compatibilità con i normali client e server FTP. Per garantire la retrocompatibilità con i client che non supportano FTPS, la connessione di controllo utilizza la porta TCP 990 e per il trasferimento dei dati la porta 989. Questo consente di mantenere la porta standard 21 per il protocollo FTP. Questo metodo è considerato obsoleto.
- L'esplicito è notevolmente più conveniente, poiché utilizza comandi FTP standard, ma cifra i dati in risposta, permettendo così di utilizzare la stessa connessione di controllo sia per FTP che per FTPS. Il client deve richiedere esplicitamente il trasferimento sicuro dei dati al server e successivamente approvare 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 tramite RFC 2228, il quale include un nuovo comando FTP AUTH. Anche se questo standard non specifica chiaramente i meccanismi di protezione, stabilisce che la connessione sicura deve essere avviata dal client utilizzando l'algoritmo descritto sopra. Se le connessioni sicure non sono supportate dal server, deve essere restituito un codice di errore 504. I clienti FTPS possono ottenere informazioni sui protocolli di protezione supportati dal server utilizzando 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 protezione TLS e SSL.
SFTP
SFTP (Protocollo di Trasferimento File Sicuro) è un protocollo di livello applicativo per la trasmissione di file che funziona su un canale sicuro. Non deve essere confuso con il (Protocollo di Trasferimento File Semplice), che ha la stessa abbreviazione. Se FTPS è semplicemente un'estensione di FTP, SFTP è un protocollo separato e non correlato, che utilizza SSH (Secure Shell – shell sicura) come base.
Secure Shell
Lo sviluppo del protocollo è stato gestito da uno dei gruppi IETF chiamato Secsh. La documentazione di lavoro per il nuovo protocollo SFTP non è diventata uno standard ufficiale, ma è stata attivamente utilizzata 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 per lo sviluppo del protocollo a causa del completamento dell'obiettivo principale del progetto (sviluppo di SSH) e della mancanza di un livello di competenza sufficiente per passare alla creazione di un protocollo completo per un sistema di file remoto.
SSH è un protocollo di rete che consente la gestione remota del sistema operativo e 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 ultimi, cripta tutto il traffico, inclusi le password trasmesse. SSH consente 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 permette di trasmettere in modo sicuro, in un ambiente non protetto, praticamente qualsiasi altro protocollo di rete. In questo modo, è possibile non solo lavorare remotamente su un computer attraverso la shell di comando, ma anche trasmettere in un canale crittografato un flusso audio o video (ad esempio, da una webcam). Inoltre, SSH può utilizzare la compressione dei dati trasmessi per la successiva crittografia, il che è utile, ad esempio, per l'avvio remoto di client X Window System.
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 progettato per garantire maggiore riservatezza rispetto ai protocolli rlogin, telnet e rsh. Nel 1996 è stata creata una versione più sicura del protocollo, SSH-2, non compatibile con SSH-1. Il protocollo ha guadagnato ulteriore popolarità e nel 2000 contava circa due milioni di utenti. Oggi il termine "SSH" si riferisce generalmente a SSH-2, poiché la prima versione del protocollo, a causa di gravi difetti, non è praticamente più utilizzata. Nel 2006, il protocollo è stato approvato dal gruppo di lavoro IETF come standard Internet.
Esistono due implementazioni di SSH: una commerciale privata e una libera e gratuita. L'implementazione libera è conosciuta come OpenSSH. Fino al 2006, l'80% dei computer nella rete Internet utilizzava OpenSSH. L'implementazione privata è sviluppata da SSH Communications Security, che è una sussidiaria completamente controllata da Tectia e disponibile gratuitamente per uso non commerciale. Queste implementazioni contengono praticamente lo stesso insieme di comandi.
Il protocollo SSH-2, a differenza del protocollo telnet, è resistente agli attacchi di sniffing del traffico, ma non è immune agli attacchi di "uomo in mezzo". Il protocollo SSH-2 è anche resistente agli attacchi di hijacking della sessione, poiché non è possibile collegarsi a una sessione già stabilita o intercettarla.
Per prevenire gli attacchi di "uomo in mezzo" quando ci si connette a un host il cui chiave non è ancora nota al cliente, il software client mostra all'utente un "impronta del chiave". Si raccomanda di controllare attentamente l'impronta del chiave mostrata dal software client con quella del server, preferibilmente ottenuta attraverso canali di comunicazione affidabili o di persona.
Il supporto SSH è implementato in tutti i sistemi simili a UNIX, e nella maggior parte di essi ci sono un client e un server SSH tra le utility standard. Esistono molte implementazioni di client SSH anche per sistemi operativi non UNIX. Il protocollo ha guadagnato molta popolarità dopo il diffondersi di analizzatori di traffico e mezzi per compromettere le reti locali, come soluzione alternativa a Telnet, un protocollo non sicuro, per la gestione di nodi critici.
Comunicazione tramite SSH
Per lavorare tramite SSH è necessario un server SSH e un client SSH. Il server ascolta le connessioni dalle macchine client e, una volta stabilita la connessione, esegue l'autenticazione, dopodiché inizia a servire il client. Il client viene utilizzato per accedere a una macchina remota ed eseguire comandi.

Confronto con FTPS
La principale differenza tra SFTP e gli standard FTP e FTPS è che SFTP cripta assolutamente tutti i comandi, i nomi utente, le password e altre informazioni confidenziali.
Entrambi i protocolli FTPS e SFTP utilizzano una combinazione di algoritmi asimmetrici (RSA, DSA), algoritmi simmetrici (DES/3DES, AES, Twofish, ecc.) e algoritmi di scambio di chiavi. Per l'autenticazione, FTPS (o, per essere più precisi, SSL/TLS su protocollo FTP) utilizza certificati X.509, mentre SFTP (protocollo SSH) utilizza chiavi SSH.
I certificati X.509 includono una chiave pubblica e alcune informazioni sul certificato del proprietario. Queste informazioni consentono, dall'altro lato, di verificare l'integrità del certificato stesso, l'autenticità e il proprietario del certato. I certificati X.509 sono associati a una chiave privata, di solito mantenuta separata 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 (il che rende tale verifica dell'autenticità incompleta).
Conclusione
Il protocollo FTP continua a svolgere un ruolo cruciale nell'archiviazione e nella distribuzione delle informazioni in rete, nonostante la sua età veneranda. È un protocollo conveniente, multifunzionale e standardizzato. Alla sua base sono stati costruiti numerosi archivi di file, senza i quali il lavoro tecnico sarebbe notevolmente meno efficace. Inoltre, è facile da configurare, e i programmi server e client esistono praticamente per tutte le piattaforme attuali e non.
Le sue versioni sicure, a loro volta, affrontano il problema della riservatezza dei dati archiviati e trasmessi nel mondo moderno. Entrambi i nuovi protocolli hanno i loro vantaggi e svantaggi e svolgono ruoli leggermente diversi. Nelle aree in cui è richiesto specificamente un archivio di file, è preferibile utilizzare FTPS, soprattutto se in precedenza era stato utilizzato il tradizionale FTP. SFTP è meno diffuso a causa della sua incompatibilità con il vecchio protocollo, ma è più sicuro e offre maggiori funzionalità, poiché fa parte di un sistema di gestione remota.
Elenco delle fonti
Fonte: habr.com
