Cos’è SSH

SSH, o Secure Shell, è un protocollo di amministrazione remota che permette agli utenti di controllare e modificare i loro server remoti su Internet. Il servizio è stato creato come un sostituto sicuro per il Telnet non criptato e utilizza tecniche crittografiche per garantire che tutte le comunicazioni da e verso il server remoto avvengano in modo criptato. Fornisce un meccanismo per autenticare un utente remoto, trasferire input dal client all’host e ritrasmettere l’output al client.

La figura qui sotto mostra una tipica finestra SSH. Qualsiasi utente Linux o macOS può SSH nel suo server remoto direttamente dalla finestra del terminale. Gli utenti Windows possono trarre vantaggio dai client SSH come Putty. Puoi eseguire comandi di shell nello stesso modo in cui faresti se stessi operando fisicamente sul computer remoto.

Questo tutorial SSH coprirà le basi di come funziona ssh, insieme alle tecnologie sottostanti utilizzate dal protocollo per offrire un metodo sicuro di accesso remoto. Tratterà i diversi livelli e tipi di crittografia utilizzati, insieme allo scopo di ogni livello.

Prendi il tuo hosting VPS Linux con Hostinger. Ottieni fino al 77% di sconto!

Inizia qui

Come funziona SSH

Se stai usando Linux o Mac, allora usare SSH è molto semplice. Se usi Windows, dovrai utilizzare un client SSH per aprire connessioni SSH. Il client SSH più popolare è PuTTY, che puoi conoscere meglio qui.

Per gli utenti Mac e Linux, vai al tuo programma terminale e segui la procedura qui sotto:

Il comando SSH consiste di 3 parti distinte:

ssh {user}@{host}

Il comando chiave SSH indica al tuo sistema che vuoi aprire una Secure Shell Connection criptata. {user} rappresenta l’account a cui volete accedere. Per esempio, si potrebbe voler accedere all’utente root, che è fondamentalmente sinonimo di amministratore di sistema con diritti completi di modificare qualsiasi cosa sul sistema. {host} si riferisce al computer a cui vuoi accedere. Questo può essere un indirizzo IP (ad esempio 244.235.23.19) o un nome di dominio (ad esempio www.xyzdomain.com).

Quando premi invio, ti verrà richiesto di inserire la password per l’account richiesto. Quando la digitate, non apparirà nulla sullo schermo, ma la vostra password viene effettivamente trasmessa. Una volta finito di digitare, premi ancora una volta enter. Se la vostra password è corretta, sarete accolti da una finestra del terminale remoto.

Se volete conoscere altri comandi SSH, trovateli qui.

Comprendere le diverse tecniche di crittografia

Il vantaggio significativo offerto da SSH rispetto ai suoi predecessori è l’uso della crittografia per assicurare il trasferimento sicuro delle informazioni tra l’host e il client. Host si riferisce al server remoto a cui si sta cercando di accedere, mentre il client è il computer che si sta utilizzando per accedere all’host. Ci sono tre diverse tecnologie di crittografia usate da SSH:

  1. Crittografia simmetrica
  2. Crittografia asimmetrica
  3. Hashing.

Crittografia simmetrica

La crittografia simmetrica è una forma di crittografia dove una chiave segreta è usata sia per la crittografia che per la decrittografia di un messaggio sia dal client che dall’host. In effetti, chiunque possieda la chiave può decifrare il messaggio che viene trasferito.

La crittografia simmetrica è spesso chiamata crittografia a chiave condivisa o a segreto condiviso. Di solito viene usata una sola chiave, o a volte una coppia di chiavi dove una chiave può essere facilmente calcolata usando l’altra chiave.

Le chiavi simmetriche sono usate per criptare l’intera comunicazione durante una sessione SSH. Sia il client che il server ricavano la chiave segreta usando un metodo concordato, e la chiave risultante non viene mai rivelata a terzi. Il processo di creazione di una chiave simmetrica viene eseguito da un algoritmo di scambio di chiavi. Ciò che rende questo algoritmo particolarmente sicuro è il fatto che la chiave non viene mai trasmessa tra il client e l’host. Invece, i due computer condividono dei dati pubblici e poi li manipolano per calcolare indipendentemente la chiave segreta. Anche se un’altra macchina cattura i dati condivisi pubblicamente, non sarà in grado di calcolare la chiave perché l’algoritmo di scambio delle chiavi non è noto.

Si deve notare, tuttavia, che il token segreto è specifico per ogni sessione SSH, e viene generato prima dell’autenticazione del client. Una volta che la chiave è stata generata, tutti i pacchetti che si muovono tra le due macchine devono essere criptati dalla chiave privata. Questo include la password digitata nella console dall’utente, quindi le credenziali sono sempre protette dagli sniffer di pacchetti di rete.

Esistono una varietà di cifrari simmetrici, inclusi, ma non limitati a, AES (Advanced Encryption Standard), CAST128, Blowfish ecc. Prima di stabilire una connessione protetta, il client e un host decidono quale cifrario usare, pubblicando una lista di cifrari supportati in ordine di preferenza. Il cifrario più preferito tra i cifrari supportati dai client che è presente nella lista dell’host viene usato come cifrario bidirezionale.

Per esempio, se due macchine Ubuntu 14.04 LTS stanno comunicando tra loro su SSH, useranno aes128-ctr come cifrario di default.

Cifratura asimmetrica

A differenza della cifratura simmetrica, la cifratura asimmetrica usa due chiavi separate per la cifratura e decifratura. Queste due chiavi sono conosciute come la chiave pubblica e la chiave privata. Insieme, entrambe queste chiavi formano una coppia di chiavi pubbliche e private.

La chiave pubblica, come suggerisce il nome, è distribuita apertamente e condivisa con tutte le parti. Mentre è strettamente legata alla chiave privata in termini di funzionalità, la chiave privata non può essere calcolata matematicamente dalla chiave pubblica. La relazione tra le due chiavi è molto complessa: un messaggio cifrato dalla chiave pubblica di una macchina può essere decifrato solo dalla chiave privata della stessa macchina. Questa relazione unidirezionale significa che la chiave pubblica non può decifrare i propri messaggi, né può decifrare qualsiasi cosa criptata dalla chiave privata.

La chiave privata deve rimanere privata, cioè perché la connessione sia sicura, nessuna terza parte deve mai conoscerla. La forza dell’intera connessione sta nel fatto che la chiave privata non viene mai rivelata, in quanto è l’unico componente in grado di decifrare i messaggi che sono stati crittografati con la propria chiave pubblica. Pertanto, qualsiasi parte con la capacità di decifrare messaggi firmati pubblicamente deve possedere la chiave privata corrispondente.

A differenza della percezione generale, la crittografia asimmetrica non viene utilizzata per crittografare l’intera sessione SSH. Invece, è usata solo durante l’algoritmo di scambio delle chiavi della crittografia simmetrica. Prima di iniziare una connessione protetta, entrambe le parti generano coppie temporanee di chiavi pubbliche e private, e condividono le loro rispettive chiavi private per produrre la chiave segreta condivisa.

Una volta che una comunicazione simmetrica protetta è stata stabilita, il server utilizza la chiave pubblica del client per generare e sfidare e trasmetterla al client per l’autenticazione. Se il client può decifrare con successo il messaggio, significa che possiede la chiave privata richiesta per la connessione. La sessione SSH inizia quindi.

Hashing

L’hashing unidirezionale è un’altra forma di crittografia usata nelle connessioni Secure Shell. Le funzioni one-way-hash differiscono dalle due forme di crittografia precedenti nel senso che non sono mai destinate ad essere decifrate. Generano un valore unico di una lunghezza fissa per ogni input che non mostra alcuna tendenza chiara che possa essere sfruttata. Questo li rende praticamente impossibili da invertire.

È facile generare un hash crittografico da un dato input, ma impossibile generare l’input dall’hash. Questo significa che se un client possiede l’input corretto, può generare l’hash crittografico e confrontare il suo valore per verificare se possiede l’input corretto.

SSH usa gli hash per verificare l’autenticità dei messaggi. Questo viene fatto usando gli HMAC, o Hash-based Message Authentication Codes. Questo assicura che il comando ricevuto non sia in alcun modo manomesso.

Mentre viene selezionato l’algoritmo di crittografia simmetrica, viene anche selezionato un algoritmo di autenticazione del messaggio adatto. Questo funziona in modo simile a come viene selezionato il cifrario, come spiegato nella sezione sulla crittografia simmetrica.

Ogni messaggio che viene trasmesso deve contenere un MAC, che viene calcolato usando la chiave simmetrica, il numero di sequenza del pacchetto e il contenuto del messaggio. Viene inviato all’esterno dei dati crittografati simmetricamente come sezione conclusiva del pacchetto di comunicazione.

Come funziona SSH con queste tecniche di crittografia

Il modo in cui SSH funziona è facendo uso di un modello client-server per consentire l’autenticazione di due sistemi remoti e la crittografia dei dati che passano tra loro.

SSH opera sulla porta TCP 22 per impostazione predefinita (sebbene questa possa essere modificata se necessario). L’host (server) ascolta sulla porta 22 (o qualsiasi altra porta assegnata a SSH) le connessioni in entrata. Organizza la connessione sicura autenticando il client e aprendo l’ambiente di shell corretto se la verifica ha successo.

Il client deve iniziare la connessione SSH iniziando l’handshake TCP con il server, assicurando una connessione simmetrica sicura, verificando se l’identità mostrata dal server corrisponde alle registrazioni precedenti (tipicamente registrate in un file RSA key store), e presentando le credenziali utente richieste per autenticare la connessione.

Ci sono due fasi per stabilire una connessione: prima entrambi i sistemi devono accordarsi sugli standard di crittografia per proteggere le comunicazioni future, e poi l’utente deve autenticarsi. Se le credenziali corrispondono, all’utente viene concesso l’accesso.

Negoziazione della crittografia della sessione

Quando un client cerca di connettersi al server via TCP, il server presenta i protocolli di crittografia e le rispettive versioni che supporta. Se il client ha una coppia simile di protocollo e versione, viene raggiunto un accordo e la connessione viene avviata con il protocollo accettato. Il server usa anche una chiave pubblica asimmetrica che il client può usare per verificare l’autenticità dell’host.

Una volta stabilito questo, le due parti usano quello che è conosciuto come algoritmo Diffie-Hellman Key Exchange per creare una chiave simmetrica. Questo algoritmo permette sia al client che al server di arrivare ad una chiave di cifratura condivisa che sarà usata d’ora in poi per cifrare l’intera sessione di comunicazione.

Ecco come funziona l’algoritmo ad un livello molto semplice:

  1. Entrambi il client e il server si accordano su un numero primo molto grande, che ovviamente non ha alcun fattore in comune. Questo valore del numero primo è noto anche come valore di partenza.
  2. Poi, le due parti si accordano su un meccanismo di crittografia comune per generare un altro insieme di valori manipolando i valori di partenza in un modo algoritmico specifico. Questi meccanismi, noti anche come generatori di crittografia, eseguono grandi operazioni sul seme. Un esempio di tale generatore è AES (Advanced Encryption Standard).
  3. Entrambe le parti generano indipendentemente un altro numero primo. Questo viene utilizzato come chiave privata segreta per l’interazione.
  4. Questa nuova chiave privata generata, con il numero condiviso e l’algoritmo di crittografia (ad esempio AES), viene utilizzata per calcolare una chiave pubblica che viene distribuita all’altro computer.
  5. Le parti quindi utilizzano la loro chiave privata personale, la chiave pubblica condivisa dell’altra macchina e il numero primo originale per creare una chiave condivisa finale. Questa chiave è calcolata indipendentemente da entrambi i computer, ma creerà la stessa chiave di crittografia su entrambi i lati.
  6. Ora che entrambe le parti hanno una chiave condivisa, possono crittografare simmetricamente l’intera sessione SSH. La stessa chiave può essere usata per criptare e decriptare i messaggi (leggi: sezione sulla crittografia simmetrica).

Ora che la sessione sicura con crittografia simmetrica è stata stabilita, l’utente deve essere autenticato.

Autenticazione dell’utente

La fase finale prima che l’utente abbia accesso al server è l’autenticazione delle sue credenziali. Per questo, la maggior parte degli utenti SSH usa una password. All’utente viene chiesto di inserire il nome utente, seguito dalla password. Queste credenziali passano in modo sicuro attraverso il tunnel crittografato simmetricamente, quindi non c’è alcuna possibilità che vengano catturate da una terza parte.

Anche se le password sono crittografate, non è ancora raccomandato usare le password per le connessioni sicure. Questo perché molti bot possono semplicemente forzare le password facili o predefinite e ottenere l’accesso al vostro account. Invece, l’alternativa raccomandata è SSH Key Pairs.

Sono un insieme di chiavi asimmetriche utilizzate per autenticare l’utente senza la necessità di inserire alcuna password.

Conclusione

Capire a fondo come funziona SSH può aiutare gli utenti a capire gli aspetti di sicurezza di questa tecnologia. La maggior parte delle persone considera questo processo estremamente complesso e incomprensibile, ma è molto più semplice di quanto si pensi. Se vi state chiedendo quanto tempo ci vuole per un computer per calcolare un hash e autenticare un utente, beh, succede in meno di un secondo. Infatti, la massima quantità di tempo è spesa nel trasferimento dei dati attraverso Internet.

Speriamo che questo tutorial SSH vi abbia aiutato a vedere il modo in cui diverse tecnologie possono essere raggruppate insieme per creare un sistema robusto in cui ogni meccanismo ha un ruolo molto importante da svolgere. Inoltre, ora sapete perché Telnet è diventato una cosa del passato non appena è arrivato SSH.

Per altri tutorial su Linux, assicuratevi di controllare la nostra sezione tutorial VPS.

Questo post è stato modificato l’ultima volta il 16 giugno 2020 4:37 am

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *