La sicurezza gioca un ruolo sempre più im­por­tan­te su Internet: ecco perché la procedura di sicurezza SSH è sal­da­men­te ancorata nello stack di pro­to­col­lo TCP/IP. Il pro­to­col­lo SSH consente agli utenti di stabilire una con­nes­sio­ne sicura tra due computer.

Il pro­to­col­lo di rete è stato uti­liz­za­to dal 1995 e da allora è stato rivisto più volte. In questo articolo chiariamo i termini più im­por­tan­ti del pro­to­col­lo SSH e come funziona la crit­to­gra­fia.

Fatto

La shell è la parte del sistema operativo at­tra­ver­so la quale gli utenti possono accedere al computer. Di solito è intesa come la riga di comando basata sul testo (o promt dei comandi, terminale o console), ma anche l’in­ter­fac­cia grafica utente cade sotto il concetto di shell. Si chiama quindi Secure Shell la procedura per stabilire una con­nes­sio­ne, perché il pro­to­col­lo sta­bi­li­sce una con­nes­sio­ne sicura alla shell di un altro computer.

A cosa serve l’SSH?

L’SSH consente a due computer di stabilire una con­nes­sio­ne sicura e diretta all’interno di una rete po­ten­zial­men­te non sicura, come Internet. Ciò è ne­ces­sa­rio per garantire che terzi non possano accedere al flusso di dati e che i dati sensibili non finiscano nelle mani sbagliate. Anche prima di Secure Shell c’era la pos­si­bi­li­tà di stabilire con­nes­sio­ni dirette tra due computer, ma le ap­pli­ca­zio­ni cor­ri­spon­den­ti, come Telnet, Remot Shell o rlogin erano del tutto insicure. SSH cripta la con­nes­sio­ne tra due computer con­sen­ten­do a un computer di essere servito da un secondo computer.

L’SSH non solo fornisce una con­nes­sio­ne cifrata, ma ga­ran­ti­sce anche che tra i computer designati vengano stabilite solo con­nes­sio­ni (in modo che non sia possibile alcun attacco man-in-the-middle) e che i dati cor­ri­spon­den­ti non possano essere ma­ni­po­la­ti durante il tragitto verso il de­sti­na­ta­rio. L’accesso al computer remoto in origine avveniva sempre tramite la riga di comando. Viene uti­liz­za­to per inviare comandi al di­spo­si­ti­vo remoto. Ora è anche possibile uti­liz­za­re Virtual Network Computing (VNC) per eseguire il mirroring di un’in­ter­fac­cia grafica utente (non sempre di­spo­ni­bi­le sui server) sul proprio computer e quindi con­trol­la­re l’altro computer.

L’SSH ha molte ap­pli­ca­zio­ni diverse:

  • Gestione di server a cui non è possibile accedere lo­cal­men­te
  • Tra­sfe­ri­men­to sicuro dei file
  • Creazione sicura di backup
  • Con­nes­sio­ne tra due computer tramite crit­to­gra­fia end-to-end
  • Ma­nu­ten­zio­ne a distanza di altri computer

Lo sviluppo dell’SSH ha in­fluen­za­to anche altri pro­to­col­li. Ad esempio, il poco sicuro pro­to­col­lo FTP, che consente di caricare e scaricare file da un server, è stato ul­te­rior­men­te svi­lup­pa­to nell’SSH File Transfer Protocol (SFTP).

Un vantaggio dell’SSH è che il pro­to­col­lo funziona su tutti i sistemi operativi comuni. Essendo ori­gi­na­ria­men­te un’ap­pli­ca­zio­ne Unix, è anche im­ple­men­ta­ta di default su tutte le di­stri­bu­zio­ni Linux e su macOS. Ma SSH può essere uti­liz­za­to anche su Windows se si installa un programma ap­pro­pria­to.

SSH vs OpenSSH

Secure Shell è stata ori­gi­na­ria­men­te creata nel 1995 come progetto open source. Nello stesso anno, lo svi­lup­pa­to­re Tatu Ylönen ha fondato una società per svi­lup­pa­re ul­te­rior­men­te il pro­to­col­lo. Così il progetto ini­zial­men­te libero si è sempre più tra­sfor­ma­to in un software pro­prie­ta­rio. La comunità della rete non si è limitata ad ac­cet­tar­lo e ha svi­lup­pa­to un fork aperto basato sul pro­to­col­lo SSH-1: OpenSSH. Tuttavia, poiché SSH Com­mu­ni­ca­tion Security continua a lavorare anche su Secure Shell, esistono ora due pro­to­col­li con­cor­ren­ti. Da un lato c’è il pro­to­col­lo pro­prie­ta­rio SSH-2 (un ulteriore sviluppo, perché sono state scoperte lacune di sicurezza nell’SSH-1) e dall’altro c’è OpenSSH.

OpenSSH e l’SSH com­mer­cia­le sono ap­pros­si­ma­ti­va­men­te equi­va­len­ti sia in termini di fun­zio­na­li­tà che di portata. La dif­fe­ren­za è prin­ci­pal­men­te nei costi, ma anche nel supporto. Se si opta per il prodotto SSH Com­mu­ni­ca­tion Security, si ha a di­spo­si­zio­ne un supporto 24/7. Ciò può essere par­ti­co­lar­men­te utile per le grandi aziende che hanno diversi manager IT. OpenSSH, d’altra parte, ga­ran­ti­sce grazie alla community open source che il progetto venga co­stan­te­men­te svi­lup­pa­to da molti par­te­ci­pan­ti.

Come funziona l’SSH? Una spie­ga­zio­ne

Secure Shell utilizza mol­te­pli­ci tecniche di crit­to­gra­fia e au­ten­ti­ca­zio­ne. In questo modo si ga­ran­ti­sce che i flussi di dati non possano essere né letti né ma­ni­po­la­ti. D’altra parte, solo i par­te­ci­pan­ti au­to­riz­za­ti possono mettersi in contatto tra loro.

Au­ten­ti­ca­zio­ne

In un primo passo il server SSH e il client si au­ten­ti­ca­no a vicenda. Il server invia un cer­ti­fi­ca­to al client per ve­ri­fi­ca­re che sia ef­fet­ti­va­men­te il server giusto. Solo al primo contatto c’è il rischio che un terzo si ponga tra i due par­te­ci­pan­ti e in­ter­cet­ti la con­nes­sio­ne. Poiché però il cer­ti­fi­ca­to stesso è criptato, non può essere imitato. Una volta che il client sa qual è il cer­ti­fi­ca­to corretto, nessun altro può fingere di con­tat­ta­re il server cor­ri­spon­den­te.

Dopo l’au­ten­ti­ca­zio­ne del server, il client deve anche iden­ti­fi­car­si al server come utente au­to­riz­za­to. Questo, o il suo valore hash criptato, viene me­mo­riz­za­to 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 al­ter­na­ti­va per l’au­ten­ti­ca­zio­ne lato client: l’uso della coppia di chiavi Public Key e Private Key (chiave pubblica e chiave privata).

La Private Key viene creata in­di­vi­dual­men­te per il proprio computer e protetta con una pas­sph­ra­se che dovrebbe essere più lunga di una tipica password. La chiave privata viene me­mo­riz­za­ta esclu­si­va­men­te sul proprio computer e rimane sempre segreta. Se si desidera stabilire una con­nes­sio­ne SSH, occorre prima inserire la pas­sph­ra­se e aprire l’accesso alla Private Key.

Sul server (così come sul client stesso) ci sono anche chiavi pubbliche. Il server crea un problema di crit­to­gra­fia 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 è con­sen­ti­to stabilire una con­nes­sio­ne legittima.

Durante una sessione è ne­ces­sa­rio inserire la pas­sph­ra­se solo una volta per con­net­ter­si a qualsiasi numero di server. Al termine della sessione gli utenti si scol­le­ga­no dal proprio computer locale per garantire che nessun terzo che abbia accesso al computer locale possa con­net­ter­si al server.

Crit­to­gra­fia

Dopo la reciproca au­ten­ti­ca­zio­ne i due par­te­ci­pan­ti alla co­mu­ni­ca­zio­ne sta­bi­li­sco­no una con­nes­sio­ne criptata. A questo scopo, viene generata una chiave per la sessione, che scade al termine della stessa. Questo non deve essere confuso con le coppie Public e Private Key, che vengono uti­liz­za­te solo per lo scambio di chiavi. La chiave uti­liz­za­ta per la crit­to­gra­fia sim­me­tri­ca è vvalida solo per questa unica sessione. Sia il client che il server hanno la stessa chiave, quindi qualsiasi messaggio scambiato può essere criptato e de­crip­ta­to. Client e server creano la chiave con­tem­po­ra­nea­men­te ma in modo in­di­pen­den­te. Con il co­sid­det­to algoritmo di scambio di chiavi, entrambe le parti uti­liz­za­no de­ter­mi­na­te in­for­ma­zio­ni pubbliche e segrete per creare la chiave.

Un’altra forma di crit­to­gra­fia 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 ma­ni­po­la­ti, anche il valore hash cambia au­to­ma­ti­ca­men­te. In questo modo il de­sti­na­ta­rio può vedere se i dati sono stati mo­di­fi­ca­ti da terzi durante il tragitto. I valori di hash sono pro­get­ta­ti in modo tale da non poter essere sem­pli­ce­men­te simulati. Ideal­men­te non è mai possibile generare due tra­smis­sio­ni diverse con lo stesso hash, il che significa prevenire le col­li­sio­ni.

Porte SSH

Le porte TCP sono endpoint che aprono i server e i client per con­sen­ti­re la co­mu­ni­ca­zio­ne. Le parti in co­mu­ni­ca­zio­ne ricevono e inviano i pacchetti di dati at­tra­ver­so di esso. TCP ha uno spazio di indirizzo di 16 bit e quindi sono di­spo­ni­bi­li 65535 porte. Tuttavia la Internet Assigned Numbers Authority (IAA) ha assegnato alcune porte (esat­ta­men­te 1024) per alcune ap­pli­ca­zio­ni: è di­spo­ni­bi­le anche la porta SSH. Per im­po­sta­zio­ne pre­de­fi­ni­ta, tutte le con­nes­sio­ni SSH fun­zio­na­no sulla porta 22.

N.B.

Poiché la porta uti­liz­za­ta per le con­nes­sio­ni SSH è nota e si sa che trasmette dati sensibili, essa è il bersaglio preferito dai criminali in­for­ma­ti­ci. Alcuni utenti ritengono quindi utile ri­po­si­zio­na­re la porta SSH. Tuttavia si trat­te­reb­be solo di una pro­te­zio­ne a breve termine, perché con uno scanner di porte è possibile trovare tutte le porte uti­liz­za­te da un cal­co­la­to­re.

SSH permette anche il port for­war­ding: la porta SSH di un client o server viene uti­liz­za­ta da un altro utente all’interno di una rete locale per stabilire una con­nes­sio­ne sicura su Internet. A questo scopo, i par­te­ci­pan­ti creano un tunnel: i dati vengono ricevuti tramite la porta 22 e quindi inoltrati al client nella rete locale.

Client SSH

Il client SSH è so­li­ta­men­te il proprio PC con il quale si desidera stabilire una con­nes­sio­ne al server. Per fare questo, è possibile o ne­ces­sa­rio (a seconda del sistema operativo) in­stal­la­re un software separato che sta­bi­li­sce una con­nes­sio­ne SSH. Questi programmi sono di solito chiamati anche client SSH. Dalla SSH Com­mu­ni­ca­tion Security stessa proviene l’SSH a pagamento Tectia SSH, che contiene inoltre un software server. Inoltre ci sono numerose al­ter­na­ti­ve gratuite, come il software open source PuTTy per Windows e Linux o lsh, che funziona su tutti i sistemi operativi basati su Unix.

Consiglio

Alcuni programmi for­ni­sco­no agli utenti un’in­ter­fac­cia grafica che sem­pli­fi­ca la con­fi­gu­ra­zio­ne e la di­stri­bu­zio­ne di SSH. In linea di principio, Secure Shell può essere eseguito anche dalla riga di comando – su macOS e altri sistemi operativi simili a Unix, anche senza ulteriori in­stal­la­zio­ni.

Server SSH

Il server SSH è la con­tro­par­te 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 pro­get­ta­to esclu­si­va­men­te per i server SSH. È di uso comune avviare SSH sui server già dall’avvio, ga­ran­ten­do in questo modo la pos­si­bi­li­tà di accedere al server dall’esterno tramite SSH in qualsiasi momento.

Non è ne­ces­sa­rio 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 in­stal­la­re un server SSH sul proprio PC di casa, ad esempio per be­ne­fi­cia­re dei vantaggi del port for­war­ding.

Vai al menu prin­ci­pa­le