SSH: Shell sicura
SSH sta per Secure Shell. È noto anche come Secure Socket Shell. Un protocollo di rete crittografico chiamato Secure Shell (SSH) viene utilizzato per gestire in modo sicuro i servizi di rete su reti non sicure. L'architettura client-server è la base delle applicazioni SSH, che collegano un'istanza client SSH a un server SSH.
Come successore di Telnet e dei protocolli shell remoti Unix non sicuri come Berkeley Remote Shell (rsh) e i protocolli rlogin e rexec associati, SSH è stato creato per sistemi operativi simili a Unix che utilizzano comunicazioni token di autenticazione in testo semplice non sicure.
Definizione
Possiamo applicare SSH in molti modi diversi. L'implementazione più semplice crittografa i dati utilizzando coppie di chiavi pubblica-privata generate automaticamente su entrambe le estremità di un canale di comunicazione e di una connessione di rete. Successivamente, autentica l'utente utilizzando una password. Quando un utente genera manualmente una coppia di chiavi pubblica-privata, l'autenticazione viene virtualmente completata una volta stabilita la coppia di chiavi, consentendo l'avvio immediato di una sessione senza richiesta di password.
cos'è l'invio di directory
In questo caso, il proprietario mantiene segreta la chiave privata corrispondente, e la chiave pubblica viene installata su tutte le macchine che devono consentire l'accesso al proprietario. Sebbene la chiave privata serva da base per l'autenticazione, la chiave non viene mai inviata in rete durante l'esecuzione dell'autenticazione. SSH conferma che il fornitore della chiave pubblica possiede anche la corrispondente chiave privata.
Collegare la chiave pubblica sconosciuta con una chiave privata nota in tutte le versioni di SSH è fondamentale prima di accettarle come chiavi pubbliche legittime con ID. Accettare una chiave pubblica da un utente malintenzionato senza convalidarla accetterà un utente malintenzionato non attendibile come utente legittimo.
Creazione
Tatu Ylönen, un informatico finlandese, ha creato SSH per la prima volta nel 1995. L'ulteriore sviluppo della suite di protocolli è avvenuto in molti gruppi di sviluppatori, portando a diverse iterazioni di implementazione. Sono disponibili implementazioni per tutti i sistemi operativi più diffusi, inclusi i sistemi embedded. OpenSSH, che i creatori di OpenBSD hanno reso disponibile come software open source nel 1999, è lo stack software più utilizzato.
Gestione delle chiavi OpenSSH per l'autenticazione
L'elenco delle chiavi pubbliche approvate viene comunemente conservato sui sistemi simili a Unix nel file ~/.ssh/chiavi autorizzate nella directory home dell'utente, che ha privilegi di accesso remoto. SSH rispetta questo file solo se non può essere modificato da nessun altro oltre al proprietario e root. La password non è più necessaria quando sono presenti sia la chiave pubblica dell'estremità remota che la chiave privata corrispondente dell'estremità locale. Ma potremmo usare una passphrase per bloccare la chiave privata per una protezione molto maggiore. Possiamo anche cercare il codice segreto in posizioni comuni e possiamo utilizzare un'opzione della riga di comando per fornire il suo percorso completo (opzione -i per ssh).
SSH fornisce inoltre un'autenticazione basata su password crittografata con generazione automatizzata di chiavi. L'aggressore in questo scenario può impersonare il lato server affidabile, richiedere la password e ottenerla (attacco man-in-the-middle). Sul lato server possiamo disattivare l'autenticazione della password.
Utilizzo
SSH utilizza il paradigma client-server. In genere, per la registrazione viene utilizzato SSH. Può anche eseguire il tunneling delle porte TCP, inoltrare connessioni X11 ed eseguire comandi su un sistema remoto. In genere, le connessioni a un demone SSH che consentono connessioni remote vengono effettuate utilizzando un'applicazione client SSH. Entrambi si trovano spesso sulla maggior parte dei sistemi operativi contemporanei, come macOS, distribuzioni Linux, OpenBSD, FreeBSD, NetBSD, Solaris e OpenVMS. Alcune versioni sono proprietarie, freeware e open source con vari gradi di complessità e completezza (come PuTTY e la versione di OpenSSH inclusa con Cygwin e OpenSSH). In particolare, SSH non è incluso per impostazione predefinita nelle versioni di Windows fino a Windows 10 versione 1709.
Funzionalità simili di gestione dei file (sincronizzazione, copia ed eliminazione remota) sono offerte dall'applicazione Windows gratuita e open source WinSCP, che utilizza PuTTY come back-end. Senza bisogno di essere installati sul computer client, WinSCP e PuTTY sono disponibili in pacchetti per funzionare direttamente da un'unità USB. Spesso è necessario abilitare una funzionalità nell'app Impostazioni per configurare un server SSH in Windows.
Per gestire i problemi di connessione e prevenire i rischi per la sicurezza derivanti dall'esposizione diretta di una macchina virtuale basata su cloud a Internet, SSH è fondamentale nel cloud computing. Una connessione sicura su Internet può essere resa possibile tramite un computer virtuale con tunnel SSH tramite un firewall. Per questo protocollo, la IANA ha designato la porta TCP 22, la porta UDP 22 e la porta SCTP 22.
Già nel 2001 la IANA classificava la porta TCP 22 predefinita per i server SSH come una delle porte più conosciute. Il protocollo del livello di trasporto orientato alla connessione SCTP può essere utilizzato per eseguire SSH invece di TCP.
Progressione storica
Iterazione 1
Un attacco di sniffing della password alla rete della sua istituzione ha ispirato Tatu Ylönen, un ricercatore presso l'Università di Tecnologia di Helsinki in Finlandia, a creare l'iterazione iniziale del protocollo (oggi noto come SSH-1) nel 1995.
SSH è stato progettato per assumere il ruolo dei protocolli precedenti, tra cui rlogin, TELNET, FTP e rsh, privi di robuste garanzie di autenticazione e segretezza. Ylönen ha reso disponibile la sua applicazione come freeware. Nel luglio 1995, il dispositivo divenne rapidamente molto apprezzato. Alla fine del 1995 si contavano 20.000 utenti SSH sparsi in 50 nazioni diverse.
Per promuovere e far avanzare SSH, Ylönen ha fondato SSH Communications Security nel dicembre 1995. Vari componenti software gratuiti, incluso GNU libgmp, sono stati utilizzati nella prima versione del programma SSH, ma le iterazioni successive fornite da SSH Communications Security sono diventate software sempre più proprietario. Secondo le stime, nel 2000 gli utenti erano 2 milioni.
Iterazione 2
Nella sua documentazione ufficiale, l'Internet Engineering Task Force (IETF) ha designato come 'Secsh' il gruppo di lavoro incaricato di creare la versione 2 del protocollo SSH.
SSH-2, un'iterazione del protocollo migliorata, è diventata uno standard nel 2006. SSH-1 non è compatibile con questa versione. SSH-2 offre funzionalità e aggiornamenti di sicurezza rispetto a SSH-1. Ad esempio, lo scambio di chiavi Diffie-Hellman e la solida verifica dell'integrità tramite codici di autenticazione dei messaggi forniscono una maggiore sicurezza. La capacità di gestire un numero illimitato di sessioni shell su una singola connessione SSH è una delle nuove funzionalità di SSH-2. Poiché SSH-2 è più avanzato e ampiamente utilizzato di SSH-1, alcune implementazioni, come libssh (v0.8.0+), Lsh e Dropbear, supportano solo SSH-2.
Iterazione 1.99
La RFC 4253 richiedeva che un server SSH che supportasse la versione 2.0, così come le versioni precedenti, indicasse la versione del proprio protocollo come 1.99 nel gennaio 2006, ben dopo lo sviluppo della versione 2.1. Questo numero di versione viene utilizzato per indicare la compatibilità con le versioni precedenti anziché per rappresentare una revisione precedente del software.
cos'è uno stack in Java
OSSH e OpenSSH
Da quando l'ultima versione del programma SSH originale, la versione 1.2.12, è stata distribuita con licenza open source nel 1999, gli sviluppatori hanno lavorato su una versione software gratuita. Questo è stato utilizzato come base per il programma OSSH di Björn Grönvall. Subito dopo, il team di OpenBSD ha clonato il lavoro di Grönvall per produrre OpenSSH, che è stato incluso in OpenBSD Release 2.6. Hanno creato un ramo di 'portabilità' da questa versione per trasferire OpenSSH a diversi sistemi operativi.
L'implementazione SSH più utilizzata nel 2005 era OpenSSH, la versione predefinita in molte distribuzioni di sistemi operativi. Dopo aver rimosso il supporto SSH-1 dal codice base nella versione OpenSSH 7.6, OpenSSH è ancora in fase di aggiornamento e supporta il protocollo SSH-2. Nel frattempo, l’OSSH non è più rilevante.
Usi
L'utente 'josh' 'SSHed' dal computer locale 'foo Fighter' alla macchina distante 'tengwar' per eseguire xeyes come esempio di tunneling di un programma X11 tramite SSH. Le persone utilizzano il client Windows SSH PuTTY per accedere a OpenWrt.
imposta in Java
SSH è un protocollo che funziona con molti sistemi, incluso Microsoft Windows e la maggior parte delle varianti Unix (Linux, BSD, incluso macOS di Apple e Solaris). Le seguenti app possono richiedere funzionalità esclusive o compatibili con particolari client o server SSH. Ad esempio, attualmente è possibile utilizzare solo il server OpenSSH e l'implementazione client del protocollo SSH per costruire una VPN.
- Per accedere a una shell su un host distante (in sostituzione di Telnet e rlogin)
- Per eseguire un comando solitario su un host distante (in sostituzione di rsh)
- Per configurare l'accesso automatizzato (senza password) di un server remoto (ad esempio, utilizzando OpenSSH)
- Essendo una VPN crittografata completamente funzionale, tieni presente che solo il client e il server OpenSSH supportano questa funzionalità.
- Per trasmettere X da un host distante (possibile attraverso più host intermedi)
- Per utilizzare client SSH che supportano il protocollo SOCKS per navigare in Internet tramite una connessione proxy crittografata.
- Per montare in modo sicuro la directory di un server remoto come file system su una macchina locale utilizzando SSHFS.
- Attraverso una o più delle tecnologie sopra menzionate per il monitoraggio e l'amministrazione automatica del server remoto.
- Per lo sviluppo di dispositivi mobili o incorporati compatibili con SSH.
- Per proteggere i meccanismi di trasferimento dei file.
Metodi di trasferimento per i file
Diversi sistemi di trasferimento file utilizzano protocolli Secure Shell come
- Su SSH, Secure Copy (SCP) è sviluppato dal protocollo RCP.
- rsync, che dovrebbe essere più efficace di SCP, viene spesso gestito tramite una connessione SSH.
- Un'alternativa sicura all'FTP è il protocollo SSH File Transfer Protocol (SFTP) (da non confondere con FTP su SSH o FTPS)
- FISH, o file trasferiti tramite protocollo shell, è stato introdotto nel 1998 e sviluppato da SSH su istruzioni shell Unix.
- Aspera, noto anche come Fast and Secure Protocol (FASP), utilizza SSH per il comando e per il trasporto dei dati, porte UDP.
Architettura
Tre componenti distinti costituiscono l'architettura a strati del protocollo SSH:
- Il protocollo TCP (Transmission Control Protocol) di TCP/IP è comunemente utilizzato dal livello di trasporto (RFC 4253), con la porta numero 22 riservata come porta di ascolto del server. Questo livello implementa la crittografia, la compressione, il controllo dell'integrità, lo scambio iniziale delle chiavi e l'autenticazione del server. Sebbene ciascuna implementazione possa consentire di più, espone allo strato superiore un'interfaccia per trasmettere e ricevere pacchetti di testo in chiaro fino a 32.768 byte ciascuno. Di solito, dopo che 1 GB di dati è stato trasportato o dopo che è trascorsa un'ora, a seconda di quale evento si verifica per primo, il livello di trasporto organizza il ri-scambio delle chiavi.
- L'autenticazione del client viene gestita tramite il livello di autenticazione dell'utente (RFC 4252), che offre anche diverse tecniche di autenticazione. L'autenticazione guidata dal client significa che il client SSH, non il server, può chiedere all'utente una password. Solo le richieste di autenticazione del client ricevono una risposta dal server. Vengono spesso utilizzate le seguenti tecniche di autenticazione dell'utente:
Parola d'ordine , una semplice tecnica di autenticazione della password che include la possibilità di modificare la password. Non tutti i software utilizzano questa tecnica. - Solitamente supporta almeno coppie di chiavi DSA, ECDSA o RSA chiave pubblica è una tecnica per l'autenticazione basata su chiave pubblica. Altre implementazioni accettano inoltre certificati X.509.
- La funzionalità di accesso singolo per le sessioni SSH viene fornita tramite GSSAPI tecniche di autenticazione, che offrono un sistema estensibile per gestire l'autenticazione SSH utilizzando meccanismi esterni come Kerberos 5 o NTLM. Sebbene OpenSSH disponga di un'implementazione GSSAPI funzionale, le implementazioni SSH commerciali spesso integrano queste tecniche per l'utilizzo nelle aziende.
- L'idea dei canali che definiscono i servizi SSH offerti è definita dal livello di connessione (RFC 4254). Possiamo multiplexare più connessioni SSH da una singola. Entrambi trasmettono dati in entrambe le direzioni. Le richieste di canale trasmettono dati fuori banda specifici a un determinato canale, come il codice di uscita di un processo lato server o la modifica delle dimensioni di una finestra di terminale. Inoltre, utilizzando la dimensione della finestra di ricezione, ciascun canale controlla il proprio flusso. Il client SSH effettua una richiesta globale per inoltrare una porta lato server. I tipi di canale comuni includono:
- Shell per SFTP, exec e shell terminali (compresi i trasferimenti SCP)
- TCPIP diretto per connessioni inoltrate dal client al server.
- Connessioni inoltrate da server a client utilizzando forwarded-tcpip
- Per confermare la legittimità dell'host, il record DNS SSHFP (RFC 4255) offre le impronte digitali della chiave pubblica dell'host.
Grazie al suo design aperto, possiamo utilizzare SSH per un'ampia gamma di attività oltre alla protezione delle shell, conferendogli una grande versatilità.
Vulnerabilità
SSH-1
A causa dell'inadeguata protezione dell'integrità dei dati fornita da CRC-32 in questa versione del protocollo, nel 1998 è stata identificata una vulnerabilità in SSH 1.5 che consentiva l'inserimento non autorizzato di materiale in un flusso SSH crittografato. Nella maggior parte delle implementazioni, è stata aggiunta una patch nota come SSH Compensation Attack Detector. Molte di queste implementazioni riviste includevano un nuovo difetto di overflow di numeri interi, consentendo agli aggressori di eseguire codice arbitrario con root o con le funzionalità del demone SSH.
Nel gennaio 2001 è stata rilevata una falla che consente agli aggressori di modificare l'ultimo blocco di una sessione crittografata IDEA. Nello stesso mese è stata rilevata un'altra falla che consentiva a un server non autorizzato di passare l'accesso di un client a un altro server.
A causa delle sue vulnerabilità intrinseche, SSH-1 è generalmente considerato obsoleto e dovrebbe essere evitato rimuovendo esplicitamente il fallback SSH-1. La maggior parte dei server e client attuali supporta SSH-2.
Recupero del testo non crittografato per CBC
Una vulnerabilità teorica che consentiva il recupero di un massimo di 32 bit di testo in chiaro da un blocco di testo cifrato crittografato utilizzando il metodo di crittografia standard dell'epoca, CBC, è stata scoperta in tutte le versioni di SSH nel novembre 2008. La soluzione più semplice è passare a CTR, contatore modalità, invece della modalità CBC, che rende SSH immune all'attacco.
NSA sospettata di decrittazione
Il rilascio di documenti sensibili da parte di Edward Snowden a Der Spiegel il 28 dicembre 2014 implica che la National Security Agency sarà potenzialmente in grado di decodificare alcune comunicazioni SSH.