Livelli di sicurezza SSH

Il protocollo SSH consente a ogni programma client e server creato in base alle specifiche del protocollo di comunicare in modo sicuro e di essere utilizzato in modo interscambiabile.

Attualmente esistono due diverse varietà di SSH. La versione 1 contiene diversi algoritmi di cifratura brevettati (comunque molti brevetti sono scaduti) e una "falla" nella sicurezza che potenzialmente permette di inserire informazioni nel flusso di dati. È consigliabile utilizzare i server e client compatibili con la versione 2, se possibile.

OpenSSH comprende un supporto per la versione 2 (e chiavi di cifratura DSA disponibili gratutitamente). OpenSSH e le librerie di cifratura OpenSSL forniscono una serie completa di funzionalità per la sicurezza.

Entrambe le versioni del protocollo SSH (1 e 2) utilizzano livelli di sicurezza simili per consolidare l'integrità delle comunicazioni da diversi sistemi. Ogni livello fornisce il proprio tipo di protezione, che, se usato insieme agli altri, rafforza l'intero sistema di sicurezza per le comunicazioni.

Livello di trasporto

Lo scopo principale del livello di trasporto è facilitare una comunicazione sicura tra due host al momento dell'autenticazione e subito dopo. Il livello di trasporto, che utilizza di solito il protocollo TCP/IP, cerca di raggiungere tale scopo cifrando e decifrando i dati, verificando che il server corrisponda alla macchina corretta per l'autenticazione e fornendo la protezione integrale di pacchetti di dati durante la trasmissione e la ricezione. Inoltre il livello di trasporto può fornire la compressione dei dati, aumentando la velocità di trasferimento delle informazioni.

Quando un client contatta un server utilizzando un protocollo SSH, vengono "negoziati" diversi punti importanti, in modo che i due sistemi possano creare correttamente il livello di trasporto:

Durante lo scambio delle chiavi il server si fa riconoscere dal client tramite una chiave host. Naturalmente, se questo client non ha mai comunicato con questo particolare server, non sarà in grado di riconoscere la chiave del server. OpenSSH aggira questo problema autorizzando il client ad accettare la chiave host del server la prima volta che avviene una connessione SSH. Nelle connessioni successive, la chiave host del server può essere verificata con una versione salvata sul client, in modo che il client sia "sicuro" di comunicare con il server corretto.

CautelaAttenzione
 

Il metodo di verifica della chiave host usato da OpenSSH non è perfetto. Un malintenzionato potrebbe "mascherarsi" da server durante il contatto iniziale, poiché il sistema non conosce necessariamente la differenza tra il server corretto e quello "mascherato". Purtroppo, finché non si diffonderà un metodo di distribuzione delle chiavi host migliore, questo metodo insicuro è comunque meglio di niente.

SSH è stato ideato per funzionare con quasi ogni tipo di algoritmo per le chiavi pubbliche o di formato in codice. Lo scambio iniziale delle chiavi genera due valori (un valore hash, usato per gli scambi e un valore segreto condiviso) e i due sistemi iniziano immediatamente a calcolare nuove chiavi e algoritmi per proteggere l'autenticazione e i dati futuri inviati tramite la connessione.

Autenticazione

Dopo aver costruito un tunnel sicuro per inviare le informazioni da un sistema all'altro, il server indica al client i diversi metodi di autenticazione supportati, come per esempio una firma privata codificata o la digitazione di una password. Il client poi tenta di autenticarsi al server tramite uno dei metodi supportati.

Poiché i server possono essere configurati per autorizzare diversi tipi di autenticazione, questo metodo offre un ottimo controllo da entrambe le parti. Il server stabilisce i metodi di cifratura supportati e il client può scegliere l'ordine dei metodi di autenticazione da utilizzare. Grazie alla sicurezza del livello di trasporto SSH, è possibile utilizzare senza problemi perfino metodi di autenticazione apparentemente non sicuri, come l'autenticazione basata sull'host,

La maggior parte degli utenti che richiedono una shell sicura utilizzano una password per l'autenticazione. A differenza di altri schemi di autenticazione per la sicurezza, la password viene trasmessa al server in chiaro. Comunque, dal momento che l'intera password è cifrata quando si sposta sul livello di trasporto, può essere inviata in modo sicuro attraverso qualsiasi rete.

Connessione

Ad autenticazione avvenuta, vengono aperti dei canali multipli selezionando [1] la singola connessione tra i due sistemi. Ognuno di questi canali gestisce la comunicazione per una diversa sessione di terminale, le informazioni di X11 inviate oppure ogni altro servizio che cerca di utilizzare la conessione SSH.

Entrambi i client e i server possono creare un nuovo canale, assegnandogli un numero diverso a ogni estremità. Quando una parte tenta di aprire un nuovo canale, viene inviato insieme alla richiesta il suo numero per il canale. Questa informazione viene memorizzata dall'altra parte e utilizzata per indirizzare una particolare comunicazione di servizio per il canale. In questo modo i diversi tipi di sessione non si disturbano a vicenda e i canali possono essere chiusi senza interrompere la connessione primaria SSH tra i due sistemi.

I canali supportano inoltre il controllo del flusso, che gli consente di inviare e ricevere i dati ordinatamente. In questo modo i dati non sono inviati attraverso il canale finché l'host non riceve il messaggio che il canale è in grado di ricevere.

I canali sono particolarmente utili con X11 forwarding e TCP/IP port forwarding (SSH). È possibile configurare in modo diverso canali separati, forse per usare una dimensione del pacchetto massima differente oppure per trasferire un tipo particolare di dati. Ciò consente a SSH una gestione flessibile dei diversi tipi di connessioni remote, come per esempio tramite reti pubbliche o collegamenti LAN ad alta velocità, senza dover modificare l'infrastruttura fondamentale del protocollo. Il client e il server stabiliscono la configurazione di ogni canale entro la connessione SSH in modo automatico.

Note

[1]

Una connessione "multiplata" è costituita da diversi segnali inviati tramite un supporto condiviso. Con SSH, canali differenti vengono inviati tramite una connessione comune sicura.