Nella lezione precedente abbiamo visto come effettuare un collegamento SSH tra un client e un server SSH. In questa lezione presenteremo nel dettaglio le varie caratteristiche del protocollo SSH.
Abbiamo visto quanto sia importante per l'SSH la creazione di un canale di comunicazione sicuro tra due parti e la relativa messa in sicurezza dei dati stessi. Bisogna però dire che il protocollo presenta molte altre feature, oltre quella riguardante la cifratura del canale di comunicazione, che necessitano di un particolare approfondimento. Per questo motivo ci impegneremo nei successivi paragrafi a fornire una panoramica delle funzionalità più importanti e dei relativi limiti.
Panoramica sulle feature SSH
Le principali caratteristiche del protocollo SSH si possono riassumere nelle seguenti:
- Privacy dei dati, grazie all'uso della crittografia;
- Integrità delle comunicazioni, in modo da garantire la non alterabilità delle stesse;
- Autenticazione, cioè prova dell'identità di mittente e destinatario;
- Autorizzazione, ovvero il controllo dell'accesso e delle azioni dei vari account;
- Inoltro o tunneling per crittografare altre sessioni basate su TCP/IP;
Nei paragrafi di seguito presenteremo queste caratteristiche, cercando di mettere in evidenza i loro punti di forza.
Privacy dei dati
Quando parliamo di privacy ci stiamo riferendo alla volontà di proteggere i nostri dati da una possibile divulgazione a terzi. In genere, come ampiamente presentato nelle prima lezione di questa guida, le reti di computer non garantiscono nativamente la privacy e chiunque abbia accesso all'hardware della rete o agli host connessi a questa, potrebbe essere in grado di sniffare i dati in transito: ad esempio, le password potrebbero essere facilmente sottratte mediante attacchi di questo tipo.
L'SSH garantisce una crittografia end-to-end dei dati in transito basatas u chiavi che vengono negoziate in modo sicuro per ogni specifica sessione e poi distrutte al suo termine. Gli algoritmi di cifratura che SSH supporta sono: AES, ARCFOUR, Blowfish, Twofish, IDEA, DES e triple-DES (3DES).
Integrità dei dati
Assicurare l'integrità dei dati trasmessi all'interno di un canale di comunicazione garantisce che questi arrivino inalterati da un capo all'altro del suddetto canale. Quando stiamo scambiando dei dati tramite SSH stiamo adoperando a livello del layer di trasporto il protocollo TCP/IP, se chiaramente ci riferiamo alla rete Internet. Il protocollo TCP/IP possiede già, per sua natura, un controllo di integrità per rilevare alterazione di dati dovuti a possibili problemi della rete. Tuttavia, queste tecniche sono inefficaci contro manomissioni intenzionali dei dati e possono essere aggirate con non poca difficoltà.
In questo modo, anche se l'SSH cifra i propri dati, il TCP/IP non impedisce che un attaccante possa iniettare "dati spazzatura" all'interno del canale di comunicazione.
A questo proposito, il protocollo SSH utilizza il controllo di integrità crittografico verificando che i dati trasmessi non siano stati non solo alterati ma anche che provengano veramente dall'altro capo della connessione. A questo proposito si serve di algoritmi di hash basati su MD5 e SHA-1.
Autenticazione
Autenticare qualcuno significa verificare la sua identità. Tutti i documenti d'identità servono per questo scopo, così come anche le varie tecniche di autenticazione ad alta tecnologia quali il test del DNA, lo scanner della retina e della mano o gli analizzatori di impronte vocali.
Ogni connessione SSH prevede due tipi di autenticazione: il client verifica l'identità del server SSH (autenticazione del server) e il server verifica l'identità dell'utente che richiede l'accesso (autenticazione dell'utente). L'autenticazione del server garantisce che il server SSH sia autentico impedendo a un aggressore di reindirizzare la connessione di rete a un'altra macchina (blocca attacchi di tipo man-in-the-middle).
L'autenticazione dell'utente avviene tradizionalmente con le password, che purtroppo risultano essere molto deboli e facilmente sottraibili. L'SSH supporta la cifratura della password mentre viaggia sulla rete e ciò risulta essere una notevole miglioria rispetto ad altri tipi di protocolli, come per esempio Telnet o FTP che generalmente inviano la password in chiaro.
SSH offre, però, altri meccanismi più evoluti e sicuri delle semplici password, come le firme mediante chiavi pubbliche, per la verifica dell'identità dell'host. Inoltre, diverse implementazioni di SSH supportano altri sistemi, tra cui Kerberos, token SecurID di RSA Security, le password monouso S/Key e i moduli di autenticazione PAM (Pluggable Authentication Modules).
Autorizzazione
Autorizzare significa decidere tutto ciò che un utente può o non può fare. E' una fase successiva all'autenticazione dato che non si possono concedere dei privilegi a qualcuno finché non si sa con certezza chi sia. I server SSH possiedono diversi modi per concedere i privilegi agli utenti e possono essere gestiti tramite la modifica di particolari file come l'/etc/ssh/sshd_config
di OpenSSH, o l'~/.s.s.
di ogni utente.
Tunneling
L'Inoltro o il tunneling SSH consiste nell'incapsulare un altro servizio basato su TCP, come ad esempio Telnet o IMAP, all'interno di una sessione SSH. Questo offre tutti i vantaggi di sicurezza dell'SSH (privacy, integrità, autenticazione, autorizzazione) ad altri servizi basati su TCP.
Per esempio, una normale connessione Telnet trasmette il nome utente, la password e il resto della sessione di login in chiaro. Inoltrando Telnet attraverso SSH, tutti questi dati vengono crittografati automaticamente e sottoposti a controllo di integrità, e ci si può autenticare utilizzando le credenziali SSH.
SSH supporta tre tipi diversi di inoltro:
- inoltro di qualsiasi servizio basato su TCP;
- inoltro diprotocollo X11 (cioè X Windows);
- permette ai client SSH di utilizzare le chiavi private SSH presenti su macchine remote;