Secure Shell
In informatica e telecomunicazioni Il Secure Shell Protocol (SSH) è un protocollo di rete crittografico che permette di stabilire una sessione remota cifrata tramite interfaccia a riga di comando con un altro host di una rete informatica. È il protocollo che ha sostituito l'analogo, ma non…
In informatica e telecomunicazioni Il Secure Shell Protocol (SSH) è un protocollo di rete crittografico che permette di stabilire una sessione remota cifrata tramite interfaccia a riga di comando con un altro host di una rete informatica. È il protocollo che ha sostituito l'analogo, ma non sicuro, Telnet.
Descrizione
Il client SSH ha un'interfaccia a riga di comando simile a quella di telnet e rlogin, ma l'intera comunicazione (ovvero sia l'autenticazione - mutua - che la sessione di lavoro) avviene in maniera cifrata. Per questo motivo, SSH è diventato uno standard di fatto per l'amministrazione remota di sistemi UNIX e di dispositivi di rete, rendendo obsoleto il protocollo telnet, giudicato troppo pericoloso per la sua mancanza di protezione contro le intercettazioni.
Il client ed il server SSH sono installati o installabili su molte versioni di UNIX, GNU/Linux, macOS e Microsoft Windows. Inoltre è disponibile come strumento di amministrazione su alcuni apparati di rete. La IANA (Internet Assigned Numbers Authority) ha assegnato al servizio SSH la porta 22 TCP e UDP, anche se è comunque possibile implementare il servizio SSH su altre porte non definite dalla IANA.
Il comando su sistemi UNIX-like è il seguente:
ssh [opzioni] nomeutente@host [comando]
La prima versione dell'SSH era completamente open Source, mentre la seconda è diventata commerciale; esiste comunque una versione libera detta OpenSSH che si basa sulla prima versione, ma che fornisce supporto alla seconda versione.
Architettura del protocollo
Il protocollo SSH si basa su un'architettura rappresentabile in tre distinti livelli: Transport Layer Protocol, User Authentication Protocol e Connection Layer Protocol. La divisione in tre livelli indipendenti garantisce un'estrema flessibilità del protocollo: l'indipendenza logica dei livelli permette di modificare la configurazione della connessione senza dover modificare i livelli superiori o inferiori del protocollo, per esempio si può modificare il protocollo di compressione delle informazioni senza dover cambiare il protocollo di cifratura o di autenticazione del sistema.
È importante specificare che i livelli sopra citati non hanno alcuna relazione con i livelli dello standard Modello OSI essendo livelli interni al protocollo SSH che a sua volta è posizionabile subito sopra al livello di trasporto ISO/OSI. Di fatto i livelli interni al protocollo SSH coprono gli ultimi tre livelli della pila ISO/OSI applicando un'organizzazione diversa da quella prevista dallo standard per le reti.
Transport Layer Protocol
Il Transport Layer Protocol è il primo dei tre livelli del protocollo SSH, in esso sono contenuti tutti i protocolli e le procedure utilizzate nell'instaurazione e creazione del canale cifrato di comunicazione client-server. All'interno del Transport Layer avviene l'autenticazione del server, lo scambio delle chiavi, la cifratura, la compressione e il controllo d'integrità dei pacchetti. Il livello comprende in parte il livello di sessione e in parte il livello di presentazione dello standard ISO/OSI. La connessione creata sfrutta normalmente il protocollo TCP/IP per la comunicazione al livello di rete e di trasporto ma è teoricamente indipendente da esso. Nel Transport Layer viene effettuato il controllo dell'integrità dei pacchetti ma non vengono gestiti i casi in cui i pacchetti della connessione vengano persi, in tali casi la sessione viene terminata e deve essere ristabilita completamente. Per tali motivi i protocolli di trasporto orientati alla connessione come il TCP sono fortemente consigliati per impedire la perdita di pacchetti e la chiusura della connessione.
Scambio delle chiavi
Dopo la definizione degli algoritmi da utilizzare nella connessione avviene uno dei passi più importanti nell'instaurazione del canale sicuro di comunicazione: lo scambio delle chiavi. Per poter garantire la sicurezza e la privatezza della comunicazione è indispensabile stabilire degli algoritmi di scambio delle chiavi sicuri, una falla di sicurezza nello scambio delle chiavi comprometterebbe l'intera connessione. La negoziazione delle chiavi avviene all'inizio di ogni connessione, per garantire maggiore sicurezza le chiavi vengono generalmente rinegoziate ogni ora o ogni gigabyte di dati transitato nella connessione.
Gli algoritmi di scambio di chiavi più utilizzati sono:
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
I due algoritmi utilizzati sono variazioni dell'algoritmo di scambio di chiavi Diffie-Hellman in cui è stato aggiunto un sistema di certificazione del server mediante un host key. Osservando le stringhe identificatrici degli algoritmi è possibile dedurre che esse variano solo per il termine groupX, tale termine definisce il gruppo utilizzato nella definizione dei parametri dell'algoritmo Diffie-Hellman, tali gruppi sono documentati all'interno del RFC3526.
L'algoritmo Diffie-Hellman è stato certificato come uno dei più sicuri metodi di scambio di chiavi su un canale di comunicazione non sicuro ed è tra gli algoritmi più utilizzati al mondo. A causa dell'elevato numero di calcoli necessari per lo scambio di chiavi Diffie-Hellman è possibile utilizzare nei sistemi più vecchi e con meno potenza di calcolo l'algoritmo RSA egualmente sicuro ma meno esigente in termini di potenza di calcolo.
MCMX