Introduzione
La trasmissione di dati tra dispositivi su una rete deve essere regolata affinché i dispositivi comunichino correttamente. La trasmissione avviene con un insieme di regole noto come protocollo di rete.
I primi protocolli di rete come Telnet e rsh non fornivano una protezione sufficiente contro attacchi informatici dannosi. La necessità di un metodo di comunicazione di rete più sicuro ha ispirato la creazione del protocollo SSH.
In questo tutorial parleremo di cos'è SSH, perché viene utilizzato e come funziona.
Cos'è SSH?
SSH (abbreviazione di Secure Shell) è un protocollo di rete che fornisce un modo sicuro per la connessione remota di due computer. SSH utilizza la crittografia per garantire che gli hacker non possano interpretare il traffico tra due dispositivi connessi.
SSH è costituito da tre livelli distinti:
- Il livello di trasporto stabilisce una comunicazione sicura e protetta tra un client e un server durante e dopo l'autenticazione. Supervisiona la crittografia, la decrittografia e la protezione dell'integrità dei dati. Inoltre, aiuta a velocizzare lo scambio di dati fornendo compressione e memorizzazione nella cache dei dati.
- Il livello di autenticazione comunica i metodi di autenticazione supportati al client. Conduce anche l'intero processo di autenticazione dell'utente.
- Il livello di connessione gestisce la comunicazione tra le macchine dopo l'avvenuta autenticazione. Gestisce l'apertura e la chiusura dei canali di comunicazione e consente più canali per più sessioni.
A cosa serve SSH?
SSH fornisce un livello di sicurezza per il trasferimento di informazioni tra macchine. Alcuni casi d'uso importanti per SSH sono:
- Accesso remoto:SSH garantisce connessioni remote crittografate per utenti e processi.
- Trasferimenti di file – SFTP, un protocollo di trasferimento file sicuro gestito da SSH, fornisce un modo sicuro per manipolare i file su una rete.
- Inoltro X11 – Gli utenti possono eseguire applicazioni X ospitate sul server dalle loro macchine client.
- Port Forwarding:mappando la porta di un client alle porte remote del server, SSH aiuta a proteggere altri protocolli di rete, come TCP/IP.
- Tunnel – Questa tecnica di incapsulamento fornisce trasferimenti di dati sicuri. Il tunneling è utile per accedere a materiali online business-sensitive da reti non protette, poiché può fungere da pratica alternativa VPN.
- Gestione della rete – Il protocollo SSH gestisce l'infrastruttura di rete e altre parti del sistema.
Come funziona SSH?
SSH è un protocollo basato su client-server. Ciò significa che il protocollo consente a un dispositivo che richiede informazioni o servizi (il client) di connettersi a un altro dispositivo (il server).
Quando un client si connette a un server tramite SSH, la macchina può essere controllata come un computer locale.
Il server dispone di una porta TCP designata su cui monitora la rete, in attesa che i client inizializzino la connessione. Prima che un client si connetta e inizi a emettere comandi SSH, deve superare il processo di autenticazione.
Stabilire una connessione SSH
Eseguire il comando seguente su una macchina client per avviare una connessione SSH:
ssh [username]@[server_ip_or_hostname]
Quando il server riceve le richieste, inizia una negoziazione di crittografia della sessione.
Negoziazione della crittografia della sessione
Dopo aver ricevuto una richiesta di connessione, il server invia al client una serie di protocolli di crittografia supportati. Il server utilizza la chiave pubblica come metodo di autenticazione.
Il client confronta i protocolli con il proprio set. Se sono presenti protocolli corrispondenti, le macchine accettano di utilizzarne uno per stabilire la connessione.
Il client confronta la chiave pubblica del server con la chiave privata memorizzata nel suo sistema al primo tentativo di connessione. Se le chiavi corrispondono, il client e il server accettano di utilizzare la crittografia simmetrica per comunicare durante la sessione SSH. A tale scopo, comunicano utilizzando un processo crittografato asimmetrico che utilizza l'algoritmo di scambio di chiavi Diffie-Hellman (DH).
L'algoritmo DH consente alle macchine di lavorare insieme e creare in modo sicuro una chiave crittografica su una rete pubblica. Per generare una chiave, le macchine eseguono i seguenti passaggi:
- Le macchine concordano su due numeri :un modulo e un numero base. Per prevenire la decrittazione della chiave di forza bruta, il modulo scelto è un numero primo di almeno 600 cifre.
- Le macchine scelgono separatamente un numero e applicalo all'equazione che coinvolge i due numeri pubblici.
- Il server e il client scambiano i valori calcolati .
- Ora ogni macchina esegue un calcolo utilizzando il risultato ricevuto dall'altro.
Eseguendo i passaggi precedenti, entrambe le macchine calcolano lo stesso valore, la loro chiave segreta. Infine, il server tenta quindi di autenticare l'utente che richiede l'accesso.
Autenticazione utente
I due metodi di autenticazione utente SSH più comuni utilizzati sono le password e le chiavi SSH. I client inviano in modo sicuro password crittografate al server. Tuttavia, le password sono un metodo di autenticazione rischioso perché la loro forza dipende dalla consapevolezza dell'utente di ciò che rende una password complessa.
Le coppie di chiavi pubblica-privata SSH crittografate asimmetricamente sono un'opzione migliore. Una volta che il client ha decrittografato il messaggio, il server concede al client l'accesso al sistema.
Per generare una coppia di chiavi SSH, digita ssh-keygen
nel terminale. Di conseguenza, il sistema genera e memorizza le chiavi.
Per ulteriori informazioni su questo processo, fare riferimento a Come generare chiavi SSH su Ubuntu (il processo è essenzialmente lo stesso su tutte le distribuzioni Linux e Mac OS).
Spiegazione delle tecnologie di crittografia SSH
SSH utilizza tre tipi di crittografia dei dati durante la comunicazione tra le macchine. Questi sono:
- Crittografia simmetrica
- Crittografia asimmetrica
- Hashing.
Crittografia simmetrica
La crittografia simmetrica genera un'unica chiave che due macchine si scambiano. Quindi, le macchine utilizzano la chiave sia per la crittografia che per la decrittografia. Questo metodo è rapido, non richiede molte risorse e SSH lo utilizza per ogni sessione.
Ogni volta che il client e il server negoziano quale algoritmo utilizzare per una sessione SSH, scelgono sempre il primo algoritmo nell'elenco dei client supportato dal server.
Crittografia asimmetrica
I dati vengono crittografati in modo asimmetrico quando le macchine utilizzano due chiavi diverse ma matematicamente correlate, pubblica e privata, per eseguire la crittografia. La macchina client che ha partecipato alla configurazione della crittografia può decrittografare le informazioni utilizzando la chiave privata.
SSH utilizza chiavi asimmetriche temporali per scambiare chiavi simmetriche, ad esempio durante il processo di autenticazione dell'utente.
Hashing
SSH utilizza l'hashing per convalidare se i pacchetti di dati provengono dall'origine da cui sembrano provenire. Gli algoritmi di hashing utilizzati per produrre hash in SSH sono il codice di autenticazione del messaggio (MAC) e il codice di autenticazione del messaggio hash (HMAC).
Un algoritmo di hashing utilizza un pacchetto di dati per creare una stringa hash univoca. La macchina che invia il pacchetto invia sempre il pacchetto insieme al valore hash.
La macchina ricevente conosce l'algoritmo utilizzato per creare l'hash e può applicarlo ai dati. Lo scopo è vedere se il valore hash calcolato sarà lo stesso. Se il valore dell'hash ottenuto è diverso dall'hash del mittente, i dati sono stati danneggiati durante il trasferimento.