Cos’è SSH (Secure SHell) e a cosa serve?
L’SSH è un protocollo di rete crittografico per gli accessi remoti.
Più nello specifico consente a due computer di stabilire una connessione sicura e diretta all’interno di una rete potenzialmente non sicura, come Internet.
Questo è necessario per garantire che persone terze o malintenzionati non possano accedere ad eventuali dati sensibili.
Anche prima di Secure SHell c’era la possibilità di stabilire connessioni dirette tra due computer, ma le applicazioni corrispondenti, come Telnet, Remot Shell o rlogin erano del tutto insicure.
SSH invece, cripta la connessione tra due macchine, consentendo ad un pc di essere servito da un secondo computer.
SSH però, non solo fornisce una connessione cifrata, ma garantisce anche che tra queste macchine vengano stabilite solo connessioni (in modo che non sia possibile alcun attacco di tipo man-in-the-middle) e che i dati corrispondenti non possano essere manipolati durante il tragitto verso il destinatario.
L’SSH ha molte applicazioni diverse:
- Gestione di server a cui non è possibile accedere localmente
- Trasferimento sicuro dei file
- Creazione sicura di backup
- Connessione tra due computer tramite crittografia end-to-end
- Manutenzione a distanza di altri computer
Lo sviluppo di questo protocollo ha tuttavia influenzato anche altri protocolli.
Ad esempio, il poco sicuro FTP, che consente di caricare e scaricare file da un server, è stato ulteriormente sviluppato nell’SSH File Transfer Protocol (SFTP).
Tra gli ulteriori vantaggi offerti da SSH, possiamo sicuramente includere il fatto di poter funzionare su tutti i sistemi operativi più diffusi.
Originariamente nacque come applicazione Unix, quindi venne implementata di default su tutte le distribuzioni Linux e su macOS, ma nel corso del tempo il suo utilizzo è stato reso possibile anche su Windows, mediante un applicativo appropriato.
Come funziona l’SSH? Una spiegazione semplice!
Secure SHell utilizza molteplici tecniche di crittografia e autenticazione; in questo modo si garantisce che i flussi di dati non possano essere né letti né manipolati.
D’altra parte, solo i partecipanti autorizzati possono mettersi in contatto tra di loro.
1. Autenticazione
Inizialmente, il server SSH e il client si autenticano a vicenda.
Il server invia un certificato al client per verificare che sia effettivamente il server giusto.
Attenzione, solo al primo contatto c’è il rischio che un terzo si frapponga tra i due partecipanti e intercetti la connessione!
Tuttavia, il certificato stesso è criptato, quindi non può essere imitato.
Difatti, una volta che il client viene a conoscenza del certificato corretto, nessun altro può fingere di contattare il server corrispondente.
Dopo l’autenticazione del server, il client deve anche identificarsi al server come utente autorizzato.
Questo, o il suo valore hash criptato, viene memorizzato sul server.
Tuttavia, questo significa anche che gli utenti devono inserire la password ogni volta che si collegano a un server diverso durante la stessa sessione.
Questo è il motivo per cui esiste un’opzione alternativa per l’autenticazione lato client: l’uso della coppia di chiavi Public Key e Private Key (chiave pubblica e chiave privata).
La Private Key viene creata individualmente per il proprio pc e viene protetta con una passphrase che dovrebbe essere più lunga di una tipica password.
Tale chiave, viene memorizzata esclusivamente sul proprio computer e rimane sempre segreta.
Se si desidera stabilire una connessione SSH, occorre pertanto dapprima inserire la passphrase e quindi aprire l’accesso alla Private Key.
Sul server (così come sul client stesso) ci sono anche chiavi pubbliche.
Il server, infatti, crea un problema di crittografia con la sua chiave pubblica e lo invia al client.
Il client a propria volta decripta il problema con la propria chiave privata, invia la soluzione e informa il server che è consentito stabilire una connessione legittima.
Durante una sessione è necessario inserire la passphrase solo una volta per connettersi a qualsiasi numero di server.
Al termine della sessione, gli utenti si scollegano dal proprio computer locale per garantire che nessun utente terzo che abbia accesso alla macchina locale possa connettersi al server.
2. Crittografia
Dopo la reciproca autenticazione, i due partecipanti alla comunicazione stabiliscono una connessione criptata.
A questo scopo, viene generata una chiave per la sessione, che scade al termine della stessa.
Tuttavia, questo non deve essere confuso con le coppie Public Key e Private Key, le quali vengono utilizzate solo per lo scambio di chiavi.
La chiave utilizzata per la crittografia simmetrica è valida solo per questa unica sessione.
Sia il client che il server hanno la stessa chiave, quindi qualsiasi messaggio scambiato può essere criptato e decriptato.
Client e server creano la chiave contemporaneamente ma in modo indipendente.
Con il cosiddetto algoritmo di scambio di chiavi, entrambe le parti utilizzano determinate informazioni pubbliche e segrete per creare la chiave.
Un’altra forma di crittografia avviene in SSH tramite hashing.
Un hash è una forma di firma dei dati trasmessi.
Un algoritmo genera un hash univoco dai dati; se i dati vengono manipolati, anche il valore hash cambia automaticamente: in questo modo il destinatario può vedere se i dati sono stati modificati da terzi durante il tragitto.
I valori di hash sono progettati in modo tale da non poter essere semplicemente simulati; idealmente non è mai possibile generare due trasmissioni diverse con lo stesso hash, il che significa prevenire le collisioni.
3. Porte SSH
Le porte TCP sono endpoint che aprono i server e i client per consentire la comunicazione.
Le parti in comunicazione ricevono e inviano i pacchetti di dati attraverso questo protocollo.
TCP ha uno spazio di indirizzo di 16 bit e quindi sono disponibili 65535 porte.
Tuttavia, la Internet Assigned Numbers Authority (IAA) ha assegnato alcune porte (esattamente 1024) per alcune applicazioni: fra queste, è disponibile anche la porta SSH.
Per impostazione predefinita, tutte le connessioni SSH funzionano sulla porta 22.
SSH permette anche il port forwarding: la porta SSH di un client o server viene utilizzata da un altro utente all’interno di una rete locale per stabilire una connessione sicura su Internet; a questo scopo, i partecipanti creano un tunnel: i dati vengono ricevuti tramite la porta 22 e quindi inoltrati al client nella rete locale.
4. Client SSH
Il client SSH è solitamente il proprio computer, con il quale si desidera stabilire una connessione al server.
Per fare questo, è possibile o necessario (a seconda del sistema operativo) installare un software separato che stabilisce una connessione SSH.
Questi programmi sono di solito chiamati client SSH.
5. Server SSH
Il server SSH è la controparte del client: anche in questo caso il termine viene usato per indicare il software.
Gran parte dei software per i client funziona anche sui server.
C’è anche un software progettato esclusivamente per i server SSH.
È di uso comune avviare SSH sui server già dall’avvio, garantendo in questo modo la possibilità di accedere al server dall’esterno tramite SSH in qualsiasi momento.
Non è necessario tra l’altro che il server SSH sia in realtà un server in senso stretto, situato in un centro dati remoto.
Gli utenti possono anche installare un server SSH sul proprio PC di casa, ad esempio per beneficiare dei vantaggi del port forwarding.