Autenticazione a due fattori per SSH

"Secure shell" SSH è un protocollo di rete per stabilire una connessione sicura tra host, normalmente tramite la porta 22 (che è meglio cambiare). Client SSH e server SSH sono disponibili per la maggior parte dei sistemi operativi. Quasi tutti gli altri protocolli di rete funzionano all'interno di SSH, ovvero puoi lavorare in remoto su un altro computer, trasmettere un flusso audio o video su un canale crittografato, ecc. Oltretutto, tramite proxy SOCKS su un host remoto puoi connetterti ad altri host per conto di questo host remoto.

L'autenticazione avviene tramite password, ma gli sviluppatori e gli amministratori di sistema utilizzano tradizionalmente le chiavi SSH. Il problema è che la chiave privata può essere rubata. L'aggiunta di una passphrase teoricamente protegge dal furto della chiave privata, ma in pratica, durante l'inoltro e la memorizzazione nella cache delle chiavi, può ancora essere utilizzato senza conferma. L'autenticazione a due fattori risolve questo problema.

Come implementare l'autenticazione a due fattori

Gli sviluppatori di Honeycomb hanno recentemente pubblicato istruzioni dettagliate, come implementare l'infrastruttura adeguata sul client e sul server.

Le istruzioni presuppongono che tu abbia un determinato host di base aperto a Internet (bastione). Vuoi connetterti a questo host da laptop o computer tramite Internet e accedere a tutti gli altri dispositivi che si trovano dietro di esso. 2FA garantisce che un utente malintenzionato non possa fare lo stesso anche se riesce ad accedere al tuo laptop, ad esempio installando malware.

La prima opzione è OTP

OTP: password digitali monouso, che in questo caso verranno utilizzate per l'autenticazione SSH insieme alla chiave. Gli sviluppatori scrivono che questa non è un'opzione ideale, perché un utente malintenzionato potrebbe innalzare un falso bastione, intercettare la tua OTP e utilizzarla. Ma è meglio di niente.

In questo caso, lato server, nella configurazione di Chef vengono scritte 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

Qualsiasi applicazione OTP è installata sul lato client: Google Authenticator, Authy, Duo, Lastpass, installati brew install oath-toolkit o apt install oathtool openssl, viene generata una stringa (chiave) base16 casuale. Viene convertito nel formato Base32 utilizzato dagli autenticatori mobili e importato direttamente nell'applicazione.

Di conseguenza, puoi connetterti a Bastion e vedere che ora richiede non solo una passphrase, ma anche un codice OTP per l'autenticazione:

➜ ssh -A bastion
Enter passphrase for key '[snip]': 
One-time password (OATH) for '[user]': 
Welcome to Ubuntu 18.04.1 LTS...

La seconda opzione è l'autenticazione hardware

In questo caso l'utente non è obbligato a inserire ogni volta il codice OTP, poiché il secondo fattore diventa il dispositivo hardware o la biometria.

Qui la configurazione di Chef è un po' più complicata e la configurazione del client dipende dal sistema operativo. Ma dopo aver completato tutti i passaggi, i client su MacOS possono confermare l'autenticazione in SSH utilizzando una passphrase e posizionando un dito sul sensore (secondo fattore).

I proprietari di iOS e Android confermano l'accesso premendo un pulsante sul tuo smartphone. Questa è una tecnologia speciale di Krypt.co, che è ancora più sicura dell'OTP.

Su Linux/ChromeOS c'è un'opzione per lavorare con i token USB YubiKey. Naturalmente, un utente malintenzionato può rubare il tuo token, ma non conosce ancora la passphrase.

Fonte: habr.com

Aggiungi un commento