Protocolli SFTP e FTPS

prefazione

Solo una settimana fa stavo scrivendo un saggio sull'argomento indicato nel titolo e mi sono trovato di fronte al fatto che, diciamo, non ci sono molte informazioni educative su Internet. Per lo più fatti semplici e istruzioni di installazione. Pertanto, ho deciso di correggere leggermente il testo e pubblicarlo come articolo.

Cos'è l'FTP

FTP (File Transfer Protocol) è un protocollo per il trasferimento di file su una rete. È uno dei protocolli Ethernet di base. Apparso nel 1971 e inizialmente ha lavorato nelle reti DARPA. Attualmente, come HTTP, il trasferimento di file si basa su un modello costituito da un insieme 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?
  • Metodo di confezionamento dei dati (se viene utilizzato il confezionamento)
  • In che modo il dispositivo mittente indica che ha terminato un messaggio?
  • In che modo il dispositivo ricevente indica di aver ricevuto un messaggio?

Comunicazione tra client e server

Diamo uno sguardo più da vicino ai processi che si verificano durante l'operazione FTP. La connessione viene inizializzata dall'interprete di protocollo dell'utente. La centrale viene controllata tramite un canale di controllo nello standard TELNET. I comandi FTP vengono generati dall'interprete di protocollo dell'utente e inviati al server. Anche le risposte del server vengono inviate all'utente tramite il canale di controllo. In generale, l'utente ha la possibilità di stabilire un contatto con l'interprete di protocollo del server e con mezzi diversi dall'interprete dell'utente.

La caratteristica principale di FTP è che utilizza doppie connessioni. Uno di questi viene utilizzato per inviare comandi al server e avviene per impostazione predefinita tramite la porta TCP 21, che può essere modificata. La connessione di controllo esiste finché il client comunica con il server. Il canale di controllo deve essere aperto durante il trasferimento di dati tra macchine. Se è chiuso, la trasmissione dei dati si interrompe. Attraverso il secondo avviene il trasferimento diretto dei dati. Si apre ogni volta che si verifica un trasferimento di file tra il client e il server. Se vengono trasferiti più file contemporaneamente, ognuno di essi apre il proprio canale di trasmissione.

L'FTP può funzionare in modalità attiva o passiva, la cui scelta determina il modo in cui viene stabilita la connessione. In modalità attiva, il client crea una connessione di controllo TCP con il server e invia il proprio indirizzo IP e un numero di porta client arbitrario al server, quindi attende che il server avvii una connessione TCP con questo indirizzo e numero di porta. Nel caso in cui il client sia protetto da un firewall e non possa accettare una connessione TCP in entrata, è possibile utilizzare la modalità passiva. In questa modalità, il client utilizza il flusso di controllo per inviare un comando PASV al server, quindi riceve dal server il proprio indirizzo IP e numero di porta, che il client utilizza quindi per aprire un flusso di dati dalla sua porta arbitraria.

È possibile che i dati vengano trasferiti a una terza macchina. In questo caso, l'utente organizza un canale di controllo con due server e organizza un canale dati diretto tra di loro. I comandi di controllo passano attraverso l'utente e i dati passano direttamente tra i server.

Quando si trasmettono dati su una rete, è possibile utilizzare quattro rappresentazioni dei dati:

  • ASCII – utilizzato per il testo. I dati vengono, se necessario, convertiti dalla rappresentazione dei caratteri sull'host mittente in "ASCII a otto bit" prima della trasmissione e (di nuovo, se necessario) nella rappresentazione dei caratteri sull'host ricevente. In particolare, vengono modificati i caratteri di nuova riga. Di conseguenza, questa modalità non è adatta per file contenenti più di semplice testo.
  • Modalità binaria: il dispositivo mittente invia ciascun file byte per byte e il destinatario memorizza il flusso di byte al momento della ricezione. Il supporto per questa modalità è stato consigliato per tutte le implementazioni FTP.
  • EBCDIC: utilizzato per trasferire testo semplice tra host nella codifica EBCDIC. Per il resto, questa modalità è simile alla modalità ASCII.
  • Modalità locale: consente a due computer con impostazioni identiche di inviare dati nel proprio formato senza convertirli in ASCII.

Il trasferimento dei dati può essere effettuato in tre modalità:

  • Modalità flusso: i dati vengono inviati come flusso continuo, liberando FTP dall'esecuzione di qualsiasi elaborazione. Invece, tutta l'elaborazione viene eseguita da TCP. L'indicatore di fine file non è necessario se non per separare i dati in record.
  • Modalità blocco: l'FTP suddivide i dati in più blocchi (blocco di intestazione, numero di byte, campo dati) e quindi li trasmette a TCP.
  • Modalità di compressione: i dati vengono compressi utilizzando un singolo algoritmo (solitamente codificando le lunghezze di esecuzione).

Il server FTP è un server che offre la possibilità di utilizzare il protocollo di trasferimento file. Ha alcune caratteristiche che lo distinguono dai server web convenzionali:

  • È richiesta l'autenticazione dell'utente
  • Tutte le operazioni vengono eseguite all'interno della sessione corrente
  • Capacità di eseguire varie azioni con il file system
  • Per ogni connessione viene utilizzato un canale separato

Il client FTP è un programma che ti consente di connetterti a un server remoto tramite FTP ed eseguire anche le azioni necessarie su di esso con elementi del file system. Il client potrebbe essere un browser, nella barra degli indirizzi del quale è necessario inserire l'indirizzo, che è il percorso di una directory o file specifico sul server remoto, secondo lo schema a blocchi URL generale:

ftp://user:pass@address:port/directory/file

Tuttavia, l'utilizzo di un browser Web in questo contesto consentirà solo di visualizzare o scaricare i file di interesse. Per sfruttare appieno tutti i vantaggi dell'FTP, è necessario utilizzare un software specializzato come client.

L'autenticazione FTP utilizza uno schema nome utente/password per garantire l'accesso. Il nome utente viene inviato al server con il comando USER e la password viene inviata con il comando PASS. Se le informazioni fornite dal client vengono accettate dal server, il server invierà un invito al client e la sessione inizierà. Se il server supporta questa funzionalità, gli utenti possono accedere senza fornire credenziali, ma il server può concedere solo un accesso limitato per tali sessioni.

L'host che fornisce il servizio FTP può fornire un accesso FTP anonimo. Gli utenti in genere accedono con "anonimo" (su alcuni server FTP potrebbe fare distinzione tra maiuscole e minuscole) come nome utente. Sebbene agli utenti venga generalmente chiesto di fornire il proprio indirizzo e-mail anziché una password, in realtà non viene eseguita alcuna verifica. Molti host FTP che forniscono aggiornamenti software supportano l'accesso anonimo.

Diagramma del protocollo

L'interazione client-server durante una connessione FTP può essere visualizzata come segue:

Protocolli SFTP e FTPS

FTP sicuro

L'FTP non era originariamente concepito per essere sicuro, poiché era destinato alle comunicazioni tra più installazioni e agenzie militari. Ma con lo sviluppo e la diffusione di Internet, il pericolo di accessi non autorizzati è aumentato molte volte. Era necessario proteggere i server da vari tipi di attacchi. Nel maggio 1999, gli autori della RFC 2577 hanno riassunto le vulnerabilità nel seguente elenco di problemi:

  • Attacchi nascosti (attacchi di rimbalzo)
  • Attacchi di spoofing
  • Attacchi di forza bruta
  • Cattura di pacchetti, sniffing
  • Furto del porto

L'FTP normale non ha la capacità di trasferire dati in forma crittografata, per cui nomi utente, password, comandi e altre informazioni possono essere facilmente e facilmente intercettati dagli aggressori. La soluzione abituale a questo problema è utilizzare versioni "sicure" e 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 alle sue funzionalità di base la creazione di sessioni crittografate utilizzando il protocollo SSL (Secure Sockets Layer). Oggi la protezione è fornita dal suo analogo più avanzato TLS (Transport Layer Security).

SSL

Il protocollo SSL è stato proposto da Netscape Communications nel 1996 per garantire la sicurezza e la privacy delle connessioni Internet. Il protocollo supporta l'autenticazione client e server, è indipendente dall'applicazione ed è trasparente ai protocolli HTTP, FTP e Telnet.

Il protocollo SSL Handshake è costituito da due fasi: autenticazione del server e autenticazione client opzionale. Nella prima fase, il server risponde alla richiesta del client inviando il proprio certificato e i parametri di crittografia. Il client genera quindi una chiave master, la crittografa con la chiave pubblica del server e la invia al server. Il server decodifica la chiave master con la sua chiave privata e si autentica presso il client restituendo un messaggio autenticato dalla chiave master del client.

I dati successivi vengono crittografati e autenticati con chiavi derivate da questa chiave master. Nella seconda fase, facoltativa, il server invia una richiesta al client e il client si autentica presso il server restituendo la richiesta con la propria firma digitale e un certificato a chiave pubblica.

SSL supporta una varietà di algoritmi crittografici. Durante l'instaurazione della comunicazione viene utilizzato il sistema crittografico a chiave pubblica RSA. Dopo lo scambio delle chiavi vengono utilizzati molti cifrari diversi: RC2, RC4, IDEA, DES e TripleDES. Viene utilizzato anche MD5, un algoritmo per creare un digest del messaggio. La sintassi per i certificati a chiave pubblica è descritta in X.509.

Uno degli importanti vantaggi di SSL è la sua completa indipendenza dalla piattaforma software. Il protocollo è sviluppato secondo i principi della portabilità e l'ideologia della sua costruzione non dipende dalle applicazioni in cui viene utilizzato. Inoltre, è anche importante che altri protocolli possano essere sovrapposti in modo trasparente al protocollo SSL; sia per aumentare ulteriormente il grado di protezione dei flussi di informazioni target, sia per adattare le capacità crittografiche di SSL per qualche altro compito ben definito.

Connessione SSL

Protocolli SFTP e FTPS

Il canale sicuro fornito da SSL ha tre proprietà principali:

  • Il canale è privato. La crittografia viene utilizzata per tutti i messaggi dopo un semplice dialogo che serve a determinare la chiave segreta.
  • Il canale è autenticato. Il lato server della conversazione è sempre autenticato, mentre il lato client è facoltativamente autenticato.
  • Il canale è affidabile. Il trasporto dei messaggi include il controllo dell'integrità (utilizzando il MAC).

Caratteristiche dell'FTPS

Esistono due implementazioni di FTPS, che utilizzano metodi diversi per fornire sicurezza:

  • Il metodo implicito prevede l'utilizzo del protocollo SSL standard per stabilire una sessione prima dell'invio dei dati, il che, a sua volta, interrompe la compatibilità con i normali client e server FTP. Per compatibilità con i client che non supportano FTPS, per la connessione di controllo viene utilizzata la porta TCP 990 e per il trasferimento dei dati la porta 989. Questa mantiene la porta standard 21 per il protocollo FTP. Questo metodo è considerato obsoleto.
  • Explicit è molto più conveniente, poiché utilizza comandi FTP standard, ma crittografa i dati durante la risposta, il che consente di utilizzare la stessa connessione di controllo sia per FTP che per FTPS. Il client deve richiedere esplicitamente il trasferimento sicuro dei dati dal server e quindi 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 protetta. Un meccanismo di autenticazione e negoziazione della sicurezza dei dati è stato aggiunto nella RFC 2228 che include il nuovo comando FTP AUTH. Sebbene questo standard non definisca esplicitamente i meccanismi di sicurezza, specifica che una connessione sicura deve essere avviata dal client utilizzando l'algoritmo sopra descritto. Se le connessioni sicure non sono supportate dal server, dovrebbe essere restituito un codice di errore 504. I client FTPS possono ottenere informazioni sui protocolli di sicurezza supportati dal server utilizzando il comando FEAT, tuttavia, il server non è tenuto a rivelare quali livelli di sicurezza ha supporta. I comandi FTPS più comuni sono AUTH TLS e AUTH SSL, che forniscono rispettivamente la sicurezza TLS e SSL.

SFTP

SFTP (Secure File Transfer Protocol) è un protocollo di trasferimento file a livello di applicazione che viene eseguito su un canale sicuro. Da non confondere con (Simple File Transfer Protocol), che ha la stessa abbreviazione. Se FTPS è semplicemente un'estensione di FTP, allora SFTP è un protocollo separato e non correlato che utilizza SSH (Secure Shell) come base.

Secure Shell

Il protocollo è stato sviluppato da uno dei gruppi IETF chiamato Secsh. La documentazione di lavoro per il nuovo protocollo SFTP non è diventata uno standard ufficiale, ma ha iniziato ad essere utilizzata attivamente per lo sviluppo di applicazioni. Successivamente sono state rilasciate sei versioni del protocollo. Tuttavia, il graduale aumento delle funzionalità in esso contenute ha portato al fatto che il 14 agosto 2006 è stato deciso di interrompere il lavoro sullo sviluppo del protocollo a causa del completamento del compito principale del progetto (sviluppo SSH) e della mancanza di un livello esperto sufficiente per passare allo sviluppo di un protocollo completo di file system remoto.

SSH è un protocollo di rete che consente il controllo remoto del sistema operativo e il tunneling delle connessioni TCP (ad esempio per il trasferimento di file). Simile nella funzionalità ai protocolli Telnet e rlogin, ma, a differenza di questi, crittografa tutto il traffico, comprese le password trasmesse. SSH consente di scegliere tra diversi algoritmi di crittografia. Client SSH e server SSH sono disponibili per la maggior parte dei sistemi operativi di rete.

SSH ti consente di trasferire in modo sicuro quasi tutti gli altri protocolli di rete in un ambiente non protetto. Pertanto, non solo puoi lavorare in remoto sul tuo computer tramite la shell dei comandi, ma anche trasmettere un flusso audio o video (ad esempio da una webcam) su un canale crittografato. SSH può anche utilizzare la compressione dei dati trasmessi per la successiva crittografia, il che è utile, ad esempio, per l'avvio remoto dei client X WindowSystem.

La prima versione del protocollo, SSH-1, è stata sviluppata nel 1995 dal ricercatore Tatu Ulönen dell'Università di Tecnologia di Helsinki (Finlandia). SSH-1 è stato scritto per garantire una maggiore privacy rispetto ai protocolli rlogin, telnet e rsh. Nel 1996 è stata sviluppata una versione più sicura del protocollo, SSH-2, che è incompatibile con SSH-1. Il protocollo guadagnò ancora più popolarità e nel 2000 contava circa due milioni di utenti. Attualmente, il termine “SSH” di solito significa SSH-2, perché La prima versione del protocollo ormai non viene praticamente utilizzata a causa di notevoli carenze. Nel 2006 il protocollo è stato approvato dal gruppo di lavoro IETF come standard Internet.

Esistono due implementazioni comuni di SSH: commerciale privata e open source gratuita. L'implementazione gratuita si chiama OpenSSH. Nel 2006, l'80% dei computer su Internet utilizzava OpenSSH. L'implementazione proprietaria è sviluppata da SSH Communications Security, una consociata interamente controllata da Tectia Corporation, ed è gratuita per uso non commerciale. Queste implementazioni contengono quasi lo stesso insieme di comandi.

Il protocollo SSH-2, a differenza del protocollo telnet, è resistente agli attacchi di intercettazione del traffico (“sniffing”), ma non è resistente agli attacchi man-in-the-middle. Il protocollo SSH-2 è inoltre resistente agli attacchi di dirottamento della sessione, poiché è impossibile unirsi o dirottare una sessione già stabilita.

Per evitare attacchi man-in-the-middle durante la connessione a un host la cui chiave non è ancora nota al client, il software client mostra all'utente una "impronta digitale della chiave". Si consiglia di verificare attentamente la "istantanea della chiave" mostrata dal software client con l'istantanea della chiave del server, preferibilmente ottenuta tramite canali di comunicazione affidabili o di persona.

Il supporto SSH è disponibile su tutti i sistemi simili a UNIX e la maggior parte dispone di un client e un server ssh come utilità standard. Esistono molte implementazioni di client SSH per sistemi operativi non UNIX. Il protocollo ha guadagnato grande popolarità dopo lo sviluppo diffuso di analizzatori di traffico e metodi per interrompere il funzionamento delle reti locali, come soluzione alternativa al protocollo non sicuro Telnet per la gestione di nodi importanti.

Comunicazione tramite SSH

Per lavorare tramite SSH sono necessari un server SSH e un client SSH. Il server ascolta le connessioni dalle macchine client e, quando viene stabilita una connessione, esegue l'autenticazione, dopodiché inizia a servire il client. Il client viene utilizzato per accedere a una macchina remota ed eseguire comandi.

Protocolli SFTP e FTPS

Confronto con FTPS

La cosa principale che distingue SFTP da FTP e FTPS standard è che SFTP crittografa 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.), nonché un algoritmo di scambio di chiavi. Per l'autenticazione, FTPS (o per essere più precisi, SSL/TLS su FTP) utilizza i certificati X.509, mentre SFTP (protocollo SSH) utilizza le chiavi SSH.

I certificati X.509 includono una chiave pubblica e alcune informazioni sul certificato del proprietario. Queste informazioni permettono, invece, di verificare l'integrità del certificato stesso, l'autenticità e il titolare del certificato. I certificati X.509 hanno una chiave privata corrispondente, che di solito viene archiviata separatamente dal certificato per motivi di sicurezza.

La chiave SSH contiene solo la chiave pubblica (la chiave privata corrispondente viene archiviata separatamente). Non contiene alcuna informazione sul proprietario della chiave. Alcune implementazioni SSH utilizzano i 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 autenticazione incompleta).

conclusione

Senza dubbio, nonostante la sua veneranda età, il protocollo FTP svolge ancora un ruolo importante nella memorizzazione e distribuzione delle informazioni in rete. È un protocollo conveniente, multifunzionale e standardizzato. Sulla sua base sono stati costruiti molti archivi di file, senza i quali il lavoro tecnico non sarebbe così efficace. Inoltre, è facile da configurare ed esistono programmi server e client per quasi tutte le piattaforme attuali e meno attuali.

A loro volta, le sue versioni protette risolvono il problema della riservatezza dei dati archiviati e trasmessi nel mondo moderno. Entrambi i nuovi protocolli hanno i loro pro e contro e svolgono ruoli leggermente diversi. Nei settori in cui è necessario un archivio di file è preferibile utilizzare FTPS, soprattutto se in precedenza è già stato utilizzato il classico FTP. SFTP è meno diffuso a causa della sua incompatibilità con il vecchio protocollo, ma è più sicuro e ha più funzionalità poiché fa parte del sistema di gestione remota.

Elenco delle fonti

Fonte: habr.com

Aggiungi un commento