In questa guida presenteremo uno dei protocolli di rete più importanti, denominato SSH (Secure SHell, shell sicura). L'SSH è un protocollo che mette in sicurezza il collegamento tra un client e un server, mediante la creazione di una sessione remota cifrata, adoperando una semplice e comoda interfaccia a riga di comando.
Storia dell'SSH
Questo protocollo nasce nel 1995 da un ricercatore finlandese (un tale Tatu Ylönen) che ispirato da un attacco di sniffing di password nella sua università ha deciso di dare vita a un protocollo capace di rendere sicura la connessione tra due dispositivi.
L'SSH1 (con questo termine ci si riferisce al nome dell'applicativo e non del protocollo. Da notare la mancanza del trattino nel nome) e il protocollo SSH-1 sono stati entrambi sviluppati da Ylönen e quando le sue versioni beta hanno cominciato ad attirare l'attenzione della comunità, si è reso conto che il suo prodotto doveva essere diffuso in maniera più capillare.
Per tale motivo, nel luglio del 1995, l'applicativo SSH1 è stato rilasciato al pubblico come software libero, con il relativo codice sorgente, consentendo così di copiare e utilizzare il programma senza alcun costo.
Nel 1998, il SSH Communications Security Corp. (SCS) rilasciò il prodotto software SSH Secure Shell (SSH2), basato sul protocollo SSH-2, ovvero la successiva versione di quello sviluppato nel 1995.
Tuttavia, l'SSH2 non è riuscito a sostituire del tutto l'SSH1, perchè mancava di alcune funzionalità e perchè aveva una licenza più restrittiva rispetto al suo predecessore. Per questi motivi, molti utenti non avevano trovato sufficienti motivazioni per migrare a SSH-2, anche se in pratica risultava un protocollo migliore e più sicuro rispetto a quello meno recente.
La situazione è cambiata con la comparsa di OpenSSH, un'implementazione gratuita del protocollo SSH-2 del progetto OpenBSD che introdurremo nelle prossime lezioni.
Che cos'è l'SSH
Come già anticipato, l'SSH è un protocollo di rete che trova collocazione subito sopra al livello di trasporto della pila protocollare ISO/OSI. Il protocollo possiede un'architettura interna basata su tre layer, simile a quella ISO/OSI ma che non ha alcuna relazione con questa, anche se di fatto copre gli ultimi suoi tre livelli.
Sebbene SSH sia l'acronimo di Secure Shell, non è una vera e propria shell nel senso di Unix Bourne e C. Non è nè un interprete di comandi, né fornisce l'espansione dei caratteri jolly, la cronologia dei comandi etc. SSH si occupa principalmente di creare un canale sicuro per avviare una shell su un computer remoto, con una crittografia end-to-end tra i due sistemi.
Chiaramente, SSH non è la soluzione definitiva alla sicurezza informatica, non protegge i computer da tentativi di intrusione attivi o da attacchi denial-of-service, né elimina altri pericoli come virus e altre minacce. L'unica cosa che si occupa di svolgere è di fornire una crittografia e un'autenticazione robusta e facile da usare.
Procedendo per step, l'aspetto più importante da definire per il protocollo SSH è relativo alla crittografia dei dati trasmessi. Ogni volta che i dati vengono inviati nella rete da un computer, l'SSH del mittente li cripta automaticamente. Dopo, quando questi raggiungono il destinatario, il suo SSH li decifra allo stesso modo.
Così facendo il processo di crittografia è completamente trasparente agli utenti che possono lavorare normalmente nella shell remota del server, senza doversi preoccupare che le loro comunicazioni possano venire lette da terzi.
Inoltre, gli algoritmi di cifratura adoperati da SSH non solo sono moderni ma sono anche abbastanza efficaci da essere utilizzati per le applicazioni critiche di grandi aziende. Nella figura sotto riportata viene delineato il workflow del protocollo SSH:
Com'è possibile vedere dalla figura, un programma server SSH, che in genere viene installato e eseguito da un amministratore di sistema, accetta o rifiuta le connessioni in entrata al suo computer host.
Gli utenti eseguono quindi programmi client SSH, su altri computer, per fare richieste al server SSH. Le richieste possono essere svariate ma quelle più comuni possono essere riassunte in:
"Chiedo di collegarmi", "Inviami un file" o "Esegui questo comando". Il workflow mostrato in figura è certamente semplificato ma rende l'idea di come il protocollo SSH lavori.
Overview del protocollo
SSH è un protocollo e non un software. L'SSH, creato da Tatu Ylönen per Unix, si chiamava semplicemente "SSH". Questo creava confusione perché SSH era anche il nome del protocollo stesso.
In generale, però, quando ci si riferisce a SSH intendiamo il protocollo, anche se spesso viene anche usato come sinonimo per riferirsi a qualche prodotto.
Detto in altri termini, l'SSH è semplicemente una specifica, una raccoltà di regole, su come una comunicazione dovrebbe avvenire per risultare sicura all'interno di una rete. Nello specifico, il protocollo SSH copre l'autenticazione, la crittografia e l'integrità dei dati trasmessi in rete.
Autenticazione
Determina in modo affidabile l'identità di una persona. Se si tenta di accedere a un account su un computer computer remoto, SSH chiede una prova digitale della nostra identità. Se si supera suddetta prova, si può accedere; in caso contrario, SSH rifiuta la connessione.
Crittografia
I dati vengono criptati in modo da risultare comprensibili solo per i destinatari. In questo modo vengono protetti durante il passaggio sulla rete.
Integrità
Garantisce che i dati che viaggiano sulla rete arrivino inalterati. Se dei malintenzionati dovessero catturarli e modificarli, l'SSH lo rileverebbe.
In breve, l'SSH crea connessioni di rete tra sistemi, con forti garanzie che le parti su entrambe le estremità della connessione siano autentiche. Inoltre, garantisce che tutti i dati che passano attraverso queste connessioni arrivino non modificati e non letti da terze parti.
Conclusioni
In questa lezione abbiamo introdotto il protocollo SSH e abbiamo visto come questo sia oggi molto diffuso per via delle sue peculiari funzionalità. Viene fornito nella maggior parte delle distribuzioni Windows, Linux, macOS e praticamente in tutti gli altri sistemi operativi ispirati a Unix.
SSH risulta essere un approccio potente e conveniente per proteggere le comunicazioni tra sistemi all'interno di una rete. Grazie all'uso di tecnologie di autenticazione e crittografia sicure, questo protocollo supporta accessi remoti, esecuzione di comandi remoti, trasferimenti di file, controllo degli accessi e inoltro di porte TCP/IP.
Queste funzionalità saranno delineate maggiormente nel corso della guida.