close

SSH

Vai alla navigazione Vai alla ricerca
SSH
Nome Conchiglia sicura
Livello (secondo il modello OSI ) Applicato
Famiglia TCP/IP
Porta/ID 22/ TCP
Scopo del protocollo Accesso remoto
Specifica RFC 4251
Principali implementazioni (clienti) OpenSSH , PuTTY / KitTY , SecureCRT , Xshell
Implementazioni principali ( server ) OpenSSH
 File multimediali su Wikimedia Commons

SSH ( eng.  Security Shell  - "secure shell" [ 1 ] ) è un protocollo di rete a livello di applicazione che consente di controllare in remoto il sistema operativo e le connessioni TCP del tunnel (ad esempio, per trasferire file). Funzionalità simile ai protocolli Telnet e rlogin , ma, a differenza di questi, crittografa tutto il traffico, comprese le password trasmesse . SSH consente di scegliere tra diversi algoritmi di crittografia. I client SSH e i server SSH sono disponibili per la maggior parte dei sistemi operativi di rete.

SSH consente di trasferire in modo sicuro quasi tutti gli altri protocolli di rete in un ambiente non sicuro . Pertanto, non solo puoi lavorare in remoto su un computer tramite una shell dei comandi , ma anche trasmettere un flusso audio o video su un canale crittografato (ad esempio, da una webcam ) [2] . SSH può anche utilizzare la compressione dei dati trasmessi per la successiva crittografia, il che è conveniente, ad esempio, per l'avvio remoto dei client X Window System .

La maggior parte dei provider di hosting fornisce ai clienti l'accesso SSH alla propria home directory a pagamento. Questo può essere conveniente sia per lavorare nella riga di comando che per avviare programmi in remoto (incluse applicazioni grafiche).

Informazioni tecniche sul protocollo

SSH è un protocollo a livello di applicazione. Il server SSH in genere ascolta le connessioni sulla porta TCP 22. La specifica del protocollo SSH-2 è in RFC 4251 . Per l'autenticazione del server, SSH utilizza un protocollo di autenticazione della parte basato su algoritmi di firma digitale RSA o DSA , ma è consentita anche l'autenticazione tramite password (modalità retrocompatibile con Telnet ) e persino l'indirizzo IP dell'host (modalità retrocompatibile con rlogin ).

  1. L'autenticazione con password è la più comune. Come https , ogni connessione genera una chiave segreta condivisa per crittografare il traffico.
  2. Con l'autenticazione della coppia di chiavi, una coppia di chiavi pubbliche e private viene pregenerata per un utente specifico. Sulla macchina da cui ci si vuole connettere, è memorizzata la chiave privata, e sulla macchina remota, la chiave pubblica. Questi file non vengono trasferiti durante l'autenticazione, il sistema controlla solo che il proprietario della chiave pubblica sia proprietaria anche di quella privata. Con questo approccio, di norma, l'accesso automatico è configurato per conto di un utente specifico nel sistema operativo .
  3. L'autenticazione tramite indirizzo IP non è sicura, questa funzione è spesso disabilitata.

L' algoritmo Diffie-Hellman (DH) viene utilizzato per creare un segreto condiviso (chiave di sessione ). I dati trasmessi vengono crittografati utilizzando algoritmi di crittografia simmetrica , AES , Blowfish o 3DES . L'integrità del trasferimento dei dati viene verificata utilizzando CRC32 in SSH1 o HMAC - SHA1 / HMAC - MD5 in SSH2.

Per comprimere i dati crittografati, è possibile utilizzare l'algoritmo LempelZiv ( LZ77 ), che fornisce lo stesso livello di compressione dell'archiviatore ZIP . La compressione SSH viene abilitata solo su richiesta del client e viene utilizzata raramente nella pratica.

Storia e sviluppo

Versione 1.x

Nel 1995, Tatu Ylönen , ricercatore presso l'Università di Tecnologia di Helsinki, in Finlandia, ha sviluppato la prima versione del protocollo (ora chiamato SSH-1), innescata da un attacco di password mining alla sua rete universitaria. L'obiettivo di SSH era sostituire i precedenti protocolli rlogin, TELNET, FTP [16] e rsh, che non fornivano una forte autenticazione e privacy. Ylönen ha rilasciato la sua implementazione come software libero nel luglio 1995 e lo strumento ha rapidamente guadagnato popolarità. Entro la fine del 1995, la base di utenti SSH era cresciuta fino a raggiungere i 20.000 utenti in cinquanta paesi.

Nel dicembre 1995 Ylönen ha fondato SSH Communications Security per promuovere e sviluppare SSH. La versione originale del software SSH utilizzava vari pezzi di software libero come GNU libgmp, ma le versioni successive rilasciate da SSH Communications Security si sono evolute in software sempre più proprietario.

È stato stimato che nel 2000 il numero di utenti fosse cresciuto fino a 2 milioni.

Versione 2.x

"Secsh" era il nome ufficiale dell'Internet Engineering Task Force (IETF) per il gruppo di lavoro IETF responsabile della versione 2 del protocollo SSH. Nel 2006 è stata adottata come standard una versione aggiornata del protocollo SSH-2. Questa versione non è compatibile con SSH-1. SSH-2 offre sicurezza e funzionalità migliorate rispetto a SSH-1. Ad esempio, una migliore sicurezza si ottiene attraverso lo scambio di chiavi Diffie-Hellman e un forte controllo dell'integrità con i codici di autenticazione dei messaggi. Le nuove funzionalità di SSH-2 includono la possibilità di avviare un numero qualsiasi di sessioni di shell su una singola connessione SSH. A causa della superiorità e della popolarità di SSH-2 rispetto a SSH-1, alcune implementazioni come libssh (v0.8.0+), Lsh e Dropbear supportano solo il protocollo SSH-2.

Versione 1.99

Nel gennaio 2006, ben dopo la creazione della versione 2.1, RFC 4253 ha specificato che un server SSH che supporta sia la versione 2.0 che le versioni precedenti di SSH dovrebbe identificare la sua versione prototipo come 1.99. Questa non è una versione aggiornata, ma un metodo per determinare la compatibilità con le versioni precedenti.

OpenSSH e OSSH

Nel 1999, gli sviluppatori, desiderando una versione gratuita del software, sono tornati alla vecchia versione 1.2.12 del programma SSH originale, che era stato rilasciato l'ultima volta con una licenza open source. OSSH di Bjorn Grönwall è stato successivamente sviluppato da questa base di codice. Poco dopo, gli sviluppatori di OpenBSD hanno diviso il codice della Groenlandia e hanno lavorato molto su di esso, creando OpenSSH , fornito con la versione 2.6 di OpenBSD. A partire da questa versione, è stato formato un ramo di "portabilità" per portare OpenSSH su altri sistemi operativi.

Nel 2005, OpenSSH era l'implementazione più popolare di SSH, inclusa per impostazione predefinita su un gran numero di sistemi operativi. OSSH è nel frattempo deprecato. OpenSSH continua a essere supportato e supporta il protocollo SSH-2, eliminando il supporto per SSH-1 dalla codebase con il rilascio di OpenSSH 7.6 .

Standard e implementazioni software

La prima versione del protocollo, SSH-1, è stata sviluppata nel 1995 dal ricercatore Tatu Ulönen dell'Università di Tecnologia di Helsinki ( Finlandia ). SSH-1 è stato scritto per essere più privato dei protocolli rlogin, telnet e rsh. Nel 1996 è stata sviluppata una versione più sicura del protocollo, SSH-2, incompatibile con SSH-1. Il protocollo ha guadagnato ancora più popolarità e nel 2000 aveva circa due milioni di utenti. Allo stato attuale, il termine "SSH" si riferisce solitamente a SSH-2, poiché la prima versione del protocollo, a causa di notevoli carenze, è ormai praticamente non utilizzata.

Nel 2006, il protocollo è stato approvato dal gruppo di lavoro IETF come standard Internet.

Sono comuni due implementazioni di SSH: una commerciale privata e una gratuita. L'implementazione gratuita si chiama OpenSSH. Nel 2006, l'80% dei computer su Internet utilizzava OpenSSH. Un'implementazione privata è stata sviluppata da SSH Communications Security, una consociata interamente controllata di Tectia [3] , ed è gratuita per uso non commerciale. Queste implementazioni contengono quasi lo stesso insieme di istruzioni.

Il protocollo SSH-1, a differenza del protocollo telnet , è resistente agli attacchi di sniffing del traffico (" sniffing "), ma non agli attacchi man-in-the-middle . Il protocollo SSH-2 resiste anche agli attacchi unendo nel mezzo ( dirottamento della sessione in inglese  ), poiché è impossibile partecipare a una sessione già stabilita o intercettarla.

Per prevenire attacchi man-in-the-middle , quando ci si connette a un host la cui chiave non è ancora nota al client, il software client mostra all'utente un'impronta digitale della chiave .  Si raccomanda di confrontare attentamente il “key cast” mostrato dal software client con il key cast del server, preferibilmente ottenuto tramite canali di comunicazione affidabili o personalmente.

Il supporto SSH è disponibile su tutti i sistemi simili a UNIX e la maggior parte di essi ha un client e un server ssh come utility standard. Esistono molte implementazioni di client SSH anche per sistemi operativi non UNIX. Il protocollo ha guadagnato grande popolarità dopo lo sviluppo diffuso di analizzatori di traffico e metodi per interrompere il funzionamento delle reti locali, in alternativa al protocollo Telnet non sicuro per la gestione di nodi importanti.

SSH richiede un server SSH e un client SSH. Il server ascolta le connessioni dalle macchine client e, quando viene stabilita una connessione, esegue l'autenticazione , dopodiché inizia a servire il client. Il client viene utilizzato per accedere a una macchina remota ed eseguire comandi.

Per connettersi, il server e il client devono creare coppie di chiavi, pubbliche e private, e scambiarsi chiavi pubbliche. Di solito viene utilizzata anche una password.

Server SSH

  • BSD : OpenSSH
  • Linux : dropbear , lsh-server , openssh-server , ssh , Tectia SSH Server
  • Windows : freeSSHd , copssh , WinSSHD , KpyM Telnet/SSH Server , MobaSSH , OpenSSH tramite Cygwin [4] , Tectia SSH Server

Client e shell SSH

  • GNU/Linux, *BSD: kdessh, lsh-client, openssh-client, putty, ssh, Vinagre, Tectia SSH (SSH Communications Security) Client
  • MS Windows e Windows NT: PuTTY \KiTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD, XShell, Tectia SSH (SSH Communications Security) Client
  • MS Windows Mobile: client PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole, Tectia SSH (SSH Communications Security)
  • Mac OS: iTerm2 [it] , NiftyTelnet SSH, vSSH, ZOC [it]
  • Symbian OS: PuTTY
  • Java: MindTerm, AppGate Security Server
  • J2ME: MidpSSH
  • iPhone: i-SSH, ssh (in bundle con Terminal), Termius, OpenTerm, LibTerm, Shelly
  • Android: connectBot, Admin Hands, Server Auditor, JuiceSSH
  • Mora: BBSSH
  • MAEMO 5: OpenSSH
  • MeeGo 1.2 Harmattan: OpenSSH

Suggerimenti per la sicurezza SSH

  1. Divieto di accesso root remoto .
  2. Vieta la connessione con una password vuota o disabilita l'accesso con password.
  3. Selezione di una porta non standard per il server SSH.
  4. Utilizzo di chiavi RSA SSH2 lunghe (2048 bit o più). I sistemi di crittografia basati su RSA sono considerati sicuri se la lunghezza della chiave è di almeno 1024 bit [5] .
  5. Limitazione dell'elenco di indirizzi IP da cui è consentito l'accesso (ad esempio, impostando un firewall ).
  6. Divieto di accesso da alcuni indirizzi potenzialmente pericolosi.
  7. Evitare di utilizzare accessi di sistema comuni o noti per l'accesso SSH .
  8. Rivedere regolarmente i messaggi di errore di autenticazione .
  9. Installazione di sistemi di rilevamento delle intrusioni (IDS) .
  10. Utilizzo di hook che falsificano un servizio SSH ( honeypot ) .
  11. Implementazione della tecnologia.

Esempi di utilizzo di SSH

Il comando per connettersi a un server SSH locale dalla riga di comando GNU/Linux o FreeBSD per l'utente pacify (il server è in ascolto sulla porta non standard 30000):

$ ssh -p 30000 [email protected]

La generazione della coppia di chiavi (in sistemi operativi simili a UNIX) viene eseguita dal comando

$ ssh-keygen

Generazione di una coppia di chiavi RSA SSH-2 con una lunghezza di 4096 bit da puttygen in un sistema operativo simile a UNIX:

$ puttygen -t rsa -b 4096 -o campione

Alcuni client, come PuTTY, dispongono anche di un'interfaccia utente grafica .

Per usare SSH in Python , ci sono moduli come python-paramiko e python-twisted-conch.

Tunneling SSH

Un tunnel SSH è un tunnel creato su una connessione SSH e utilizzato per crittografare i dati incanalati. Utilizzato per proteggere la trasmissione di dati su Internet ( IPsec ha uno scopo simile ). Quando viene inoltrato attraverso un tunnel SSH, il traffico non crittografato di qualsiasi protocollo viene crittografato su un'estremità della connessione SSH e decrittografato sull'altra.

L'attuazione pratica può avvenire in diversi modi:

  • Creazione di un proxy Socks per le applicazioni che non sanno come lavorare tramite un tunnel SSH, ma possono funzionare tramite un proxy Socks.
  • Utilizzo di applicazioni che possono funzionare tramite un tunnel SSH.
  • Creando un tunnel VPN , adatto a quasi tutte le applicazioni.
  • Se l'applicazione funziona con un server specifico, è possibile configurare il client SSH per consentire le connessioni TCP attraverso il tunnel SSH che arrivano a una porta TCP specifica sulla macchina su cui è in esecuzione il client SSH. Ad esempio, i client Jabber si connettono per impostazione predefinita sulla porta 443. Quindi, per configurare una connessione al server Jabber tramite un tunnel SSH, il client SSH è configurato per reindirizzare le connessioni da qualsiasi porta sulla macchina locale (ad esempio, la porta 4430) a un server remoto (ad esempio, jabber .example.com e porta 443):
$ ssh -L 4430 :jabber.example.com:443 qualche host

In questo caso, il client Jabber è configurato per connettersi alla porta 4430 del server localhost (se il client ssh è in esecuzione sulla stessa macchina del client Jabber).

Per creare un tunnel ssh, è necessaria una macchina con un server ssh in esecuzione e l'accesso a jabber.example.com. Questa configurazione può essere utilizzata se l'accesso a jabber.example.com dalla macchina locale è bloccato da un firewall, ma c'è l'accesso ad alcuni server ssh che non hanno restrizioni di accesso a Internet.

Vedi anche

Note

  1. ^ Opzione di traduzione dalla copia d'archivio di Yu. A. Semyonov del 2 febbraio 2008 sulla Wayback Machine
  2. Questo utilizza Port Forwarding Archiviato il 16 dicembre 2005 nelle connessioni TCP della Wayback Machine .
  3. Informazioni sulla sicurezza delle comunicazioni SSH Archiviato il 9 luglio 2012 su Wayback Machine 
  4. Istruzioni per l'installazione di un server ssh per Windows tramite Cygwin (link inaccessibile) . Data di accesso: 27 gennaio 2009 Archiviata dall'originale il 20 gennaio 2009. 
  5. ^ CyberSecurity.ru: "Chiave RSA a 768 bit crackata con successo" Archiviato il 14 gennaio 2010 su Wayback Machine . 01/08/2010

Collegamenti

Standard
Clienti SSH
  • OpenSSH  è una libreria gratuita e un insieme di utilità per supportare la crittografia
  • PuTTY  è un popolare client SSH multipiattaforma.
  • https://serverauditor.com/ - popolare client SSH multipiattaforma mobile (Android, iOS, Google Chrome)
  •  Confronto di client SSH
Programmi di accesso ai file
Altro