Autenticazione a due fattori per SSH

«Shell sicura» SSH è un protocollo di rete per stabilire una connessione sicura tra host, standard sulla porta 22 (che sarebbe meglio cambiare). I client e i server SSH sono disponibili per la maggior parte dei sistemi operativi. All'interno di SSH può funzionare praticamente qualsiasi altro protocollo di rete, quindi è possibile lavorare da remoto su un altro computer, trasmettere flussi audio o video attraverso un canale crittografato, e così via. Inoltre, attraverso un proxy SOCKS su un host remoto è possibile connettersi ad altri host già a nome di questo host remoto.

L'autenticazione avviene tramite password, ma gli sviluppatori e gli amministratori di sistema tradizionalmente utilizzano chiavi SSH. Il problema è che la chiave segreta può essere rubata. L'aggiunta di una frase di passaggio teoricamente protegge dalla sottrazione della chiave segreta, ma nella pratica, con il forwarding e la memorizzazione nella cache delle chiavi, essa può comunque essere utilizzata senza conferma. L'autenticazione a due fattori risolve questo problema.

Come implementare l'autenticazione a due fattori

Gli sviluppatori dell'azienda Honeycomb hanno recentemente pubblicato una guida dettagliata, su come implementare l'infrastruttura corrispondente sul client e sul server.

La guida presuppone che tu abbia un certo host di base, aperto su Internet (bastione). Vuoi connetterti a questo host da laptop o computer attraverso Internet e avere accesso a tutti gli altri dispositivi che si trovano dietro di esso. 2FA garantisce che un aggressore non possa fare lo stesso, anche se ottiene accesso al tuo laptop, ad esempio, installando malware.

La prima opzione è OTP

OTP sono codici di accesso digitali monouso che in questo caso vengono utilizzati per l'autenticazione SSH insieme alla chiave. Gli sviluppatori scrivono che questa non è un'opzione ideale, perché un aggressore può alzare un falso bastione, intercettare il tuo OTP e usarlo. Ma è meglio che niente.

In questo caso, sul lato server nel configurazione di Chef si devono scrivere le seguenti righe:

  • metadata.rb
  • attributes/default.rb (da attributes.rb)
  • files/sshd
  • recipes/default.rb (copia da recipe.rb)
  • templates/default/users.oath.erb

Sul lato client devi installare qualsiasi applicazione OTP: Google Authenticator, Authy, Duo, Lastpass, installa brew install oath-toolkit o apt install oathtool openssl, poi genera una stringa casuale base16 (chiave). Viene convertita in formato Base32, che utilizzano gli autenticatori mobili, e importata direttamente nell'app.

Alla fine puoi connetterti al bastione e assicurarti che ora richieda non solo la passphrase, ma anche il codice OTP per l'autenticazione:

➜ ssh -A bastion
Inserisci la passphrase per la chiave '[snip]': 
Password monouso (OATH) per '[user]': 
Benvenuto in Ubuntu 18.04.1 LTS...

La seconda opzione è l'autenticazione hardware

In questo caso, all'utente non viene richiesto di inserire ogni volta il codice OTP, poiché il secondo fattore diventa un dispositivo hardware o la biometria.

Qui la configurazione di Chef è un po' più complessa, mentre la configurazione dei client dipende dal sistema operativo. Ma dopo aver eseguito tutte le azioni, i client su MacOS possono confermare l'autenticazione in SSH tramite la passphrase e toccando il sensore con il dito (secondo fattore).

I possessori di iOS e Android confermano l'accesso premendo un pulsante sullo smartphone. Questa è una tecnologia speciale di Krypt.co, che è anche più sicura degli OTP.

Su Linux/ChromeOS esiste un'opzione per lavorare con i token USB YubiKey. Certo, un aggressore può rubare il tuo token, ma non conosce comunque la passphrase.

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster