Il protocollo Secure Shell (SSH) imposta connessioni crittografate remote tra computer. Abilita anche il tunneling.
Dopo aver letto questo articolo sarai in grado di:
Argomenti correlati
Cos'è l'autenticazione?
Controllo degli accessi
Sicurezza della forza lavoro che opera da remoto
Sicurezza Zero Trust
Abbonati a theNET, il riepilogo mensile di Cloudflare sulle tematiche più discusse in Internet.
Copia link dell'articolo
Il protocollo Secure Shell (SSH) è un metodo che consente di inviare comandi in modo sicuro a un computer su una rete non protetta. SSH utilizza la crittografia per autenticare e crittografare le connessioni tra dispositivi. SSH consente anche il tunneling, o port forwarding, ovvero quando i pacchetti di dati sono in grado di transitare in reti su cui altrimenti non sarebbero in grado di transitare. SSH viene spesso utilizzato per controllare i server da remoto, per la gestione dell'infrastruttura e per il trasferimento di file.
Durante le trasferte, il proprietario di un negozio potrebbe impartire ai propri dipendenti istruzioni da remoto per garantire che il negozio venga gestito senza intoppi mentre è via. Allo stesso modo, SSH consente agli amministratori di gestire server e dispositivi da remoto. I vecchi protocolli di gestione remota come Telnet trasportavano i comandi degli amministratori in una forma che poteva essere vista da chiunque. (Immagina se i dipendenti mettessero il proprietario del negozio in vivavoce durante una chiamata; tutti i clienti nel negozio potrebbero ascoltare istruzioni private). A differenza di Telnet, SSH è sicuro: proprio per questo motivo si chiama "Secure Shell".
Connessioni crittografate remote: SSH imposta una connessione tra il dispositivo di un utente e una macchina remota, spesso un server. Utilizza la crittografia per codificare i dati che transitano nella connessione. Una parte che intercetta potrebbe trovare solo qualcosa di simile a dati statici, casuali che non significano nulla a meno che non vengano decrittografati. (SSH utilizza metodi di crittografia che rendono la decrittografia estremamente complessa per gli estranei).
Capacità di tunneling: nella connettività di rete, il tunneling è un metodo per spostare pacchetti attraverso una rete utilizzando un protocollo o un percorso che normalmente non sarebbero in grado di utilizzare. Il tunneling funziona avvolgendo i pacchetti di dati* con informazioni aggiuntive, chiamate intestazioni, per cambiarne la destinazione. I tunnel SSH utilizzano una tecnica chiamata port forwarding per inviare pacchetti da una macchina all'altra. Il port forwarding è spiegato più dettagliatamente di seguito.
*Tutti i dati che transitano in una rete vengono suddivisi in blocchi più piccoli; tali blocchi sono chiamati "pacchetti".
SSH viene eseguito sulla suite di protocolli TCP/IP, su cui si basa gran parte di Internet. TCP è l'acronimo di Transmission Control Protocol, mentre IP è l'acronimo di Internet Protocol. TCP/IP associa questi due protocolli per formattare, instradare e distribuire i pacchetti. IP indica, tra le altre informazioni, a quale indirizzo IP deve essere indirizzato un pacchetto (pensa a un indirizzo postale), mentre TCP indica a quale porta deve essere trasferito un pacchetto in ciascun indirizzo IP (pensa al piano di un edificio o al numero di un appartamento).
TCP è un protocollo a livello di trasporto: si occupa del trasporto e della distribuzione dei pacchetti di dati. Di solito, vengono utilizzati protocolli aggiuntivi oltre a TCP/IP per trasmettere i dati in un formato che l'applicazione possa utilizzare. SSH è uno di questi protocolli. (Altri esempi includono HTTP, FTP e SMTP).
Queste chiavi "asimmetriche", così chiamate perché hanno valori diversi, consentono anche ai due lati della connessione di negoziare chiavi simmetriche identiche e condivise per un'ulteriore crittografia sul canale. Una volta completata questa negoziazione, le due parti utilizzano le chiavi simmetriche per crittografare i dati che si scambiano.
In una connessione SSH, entrambe le parti hanno una coppia di chiavi pubbliche/private e ciascuna parte autentica l'altra utilizzando queste chiavi. Ciò differenzia SSH da HTTPS, che nella maggior parte delle implementazioni verifica solo l'identità del server Web in una connessione client-server. (Tra le altre differenze, HTTPS di solito non consente al client di accedere alla riga di comando del server e il firewall a volte blocca SSH ma quasi mai blocca HTTPS).
Mentre la crittografia a chiave pubblica autentica i dispositivi connessi in SSH, un computer adeguatamente protetto richiederà comunque l'autenticazione della persona che utilizza SSH. Spesso questo avviene tramite l'immissione di un nome utente e una password.
Una volta completata l'autenticazione, la persona può eseguire i comandi sulla macchina remota come se lo stesse facendo sulla propria macchina locale.
Il port forwarding è come inoltrare un messaggio tra due persone. Roberto può inviare un messaggio ad Alice, che a sua volta lo trasmette a Davide. Allo stesso modo, il port forwarding invia un pacchetto diretto a un indirizzo IP e una porta su una macchina a un indirizzo IP e una porta su una macchina diversa.
Ad esempio, immagina che un amministratore voglia apportare una modifica a un server all'interno di una rete privata che gestisce e che voglia farlo da remoto. Tuttavia, per motivi di sicurezza, quel server riceve pacchetti solo da altri computer all'interno della rete privata. L'amministratore potrebbe invece connettersi a un secondo server all'interno della rete, aperto alla ricezione del traffico Internet, e quindi utilizzare il port forwarding SSH per connettersi al primo server. Dal punto di vista del primo server, i pacchetti di dati dell'amministratore provengono dall'interno della rete privata.
I sistemi operativi Linux e Mac sono dotati di SSH integrato. Nelle macchine Windows, invece, è possibile che sia necessario installare un'applicazione client SSH. Sui computer Mac e Linux, gli utenti possono aprire l'applicazione Terminale e immettere direttamente i comandi SSH.
Tecnicamente, SSH può trasmettere qualsiasi dato arbitrario su una rete e il tunneling SSH può essere impostato per una miriade di scopi. Tuttavia, i casi d'uso SSH più comuni sono:
La porta 22 è la porta predefinita per SSH. A volte, il firewall può bloccare l'accesso a determinate porte sui server dietro il firewall, ma lasciare la porta 22 aperta. SSH è quindi utile per accedere ai server sull'altro lato del firewall: i pacchetti diretti alla porta 22 non vengono bloccati e possono quindi essere inoltrati a qualsiasi altra porta.
Qualsiasi protocollo può essere oggetto di abusi da parte di soggetti malintenzionati e la natura crittografata e le capacità di tunneling di SSH lo rendono particolarmente interessante per gli autori di un attacco. SSH è stato utilizzato in una serie di attacchi documentati per estrarre dati privati, aprire percorsi backdoor in una rete sicura e persino ottenere l'accesso come root sui server.
Alcuni tipi di attacchi possono anche sottrarre chiavi SSH per accedere a computer e server privati. In effetti, la gestione delle chiavi SSH è un grave problema di sicurezza per le grandi organizzazioni, poiché i loro numerosi server possono utilizzare migliaia o addirittura milioni di chiavi e il monitoraggio e l'aggiornamento di tali chiavi è quasi impossibile. Una volta che un autore di un attacco ottiene una chiave, potrebbe avere un accesso persistente per mesi o anni.
Una delle principali differenze tra SSH e altri protocolli di tunneling è il livello OSI in base a cui operano. GRE, IP-in-IP e IPSec sono tutti protocolli a livello di rete. In quanto tali, non sono a conoscenza delle porte (un concetto a livello di trasporto), ma operano tra indirizzi IP. (L'esatto livello OSI di SSH non è definito rigorosamente, ma la maggior parte delle fonti lo descrive come un protocollo di livello 7/a livello di applicazione).
Un'altra differenza è l'uso di TCP da parte di SSH. TCP, come descritto sopra, è un protocollo a livello di trasporto e uno dei principali utilizzati su Internet. Un altro protocollo a livello di trasporto ampiamente utilizzato è UDP (User Datagram Protocol). UDP è un protocollo di trasporto "best-effort": l'invio di pacchetti senza garantirne la distribuzione, il che lo rende più veloce ma a volte causa una perdita di pacchetti. Sebbene TCP sia più lento di UDP, garantisce la distribuzione di tutti i pacchetti secondo l'ordine previsto ed è quindi più affidabile.
IPSec utilizza esclusivamente UDP invece di TCP per consentire ai pacchetti IPSec di transitare nel firewall. Pertanto, i tunnel IPSec sono in genere più veloci dei tunnel SSH, ma possono perdere pacchetti in transito. GRE e IP-in-IP possono essere utilizzati con TCP o UDP.
Infine, SSH crittografa solo un'applicazione alla volta, non tutto il traffico da e verso un dispositivo. Ciò differenzia SSH da IPSec, che crittografa tutto il traffico di rete, indipendentemente dall'applicazione da cui proviene. Per questo motivo, SSH non viene utilizzato per configurare le VPN.
Sebbene SSH sia ampiamente utilizzato, esporre le porte di un server a Internet è sempre rischioso. Cloudflare Zero Trust consente alle organizzazioni di rendere disponibili i propri server SSH su Internet senza il rischio di aprire tali porte in entrata. I server possono essere connessi in modo sicuro alla rete Cloudflare. Gli amministratori e gli altri utenti possono quindi accedere al server tramite Cloudflare installando un client Cloudflare WARP sul proprio dispositivo. Scopri di più qui.