Andrea Beggi

The sands of time were eroded by the river of constant change.

Proteggere l’accesso SSH tramite l’autenticazione a due fattori

A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

Tempo fa ho parlato dell’autenticazione a due fattori dell’account Google. Il codice di Google Authenticator rilasciato da Big G è Open Source e può essere utilizzato per diverse applicazioni. Per esempio può aggiungere uno strato alla sicurezza dell’accesso SSH con una time based one-time password (TOTP). Il bello è che Google non mette il naso nella vostra connessione: è una faccenda tra il vostro server e il vostro smartphone e chiunque lo può verificare esaminando il codice sorgente.

Come funziona? Una volta inseriti nome utente e password “tradizionali” il server richiede un ulteriore codice di accesso numerico, che va copiato dall’applicazione installata sul telefono e che cambia ogni 30 secondi. In questo modo, anche se la vostra password venisse rivelata, nessun malintenzionato potrebbe accedere al server a meno di non essere in possesso anche del vostro smartphone. Vediamo come fare (distribuzione debian-based).

Cominciamo con l’installare il necessario:

sudo apt-get update

sudo apt-get install libpam-google-authenticator

Accediamo con l’utente per cui vogliamo configurare l’autenticazione a due fattori (è un’impostazione user-based) e impartiamo il comando

google-authenticator

Google Authenticator

Google Authenticator fornirà una secret key, una serie di codici di emergenza che andranno conservati in un luogo sicuro, e mostrerà un QR-code.

ga2

Rispondiamo “y” alla richiesta di aggiornare il file, “y” alla restrizione di un login ogni 30 secondi, “n” alla richiesta di aumentare la finestra di tempo, e “y” a quella di abilitazione di un limite ai tentativi di accesso in un breve intervallo di tempo per arginare gli attacchi brute force.

A questo punto dobbiamo abilitare Google Authenticator per gli accessi SSH: apriamo il file

/etc/pam.d/sshd

e aggiungiamo la linea

auth required pam_google_authenticator.so

Apriamo anche

/etc/ssh/sshd_config

e cerchiamo la linea

ChallengeResponseAuthentication no

modificandola in

ChallengeResponseAuthentication yes

e finalmente facciamo ripartire il servizio in modo che le modifiche vengano recepite:

service ssh restart

Dopo aver scaricato (se non l’avete già) l’app di Google Autenthicator per la vostra piattaforma, potete inserire nel programma la secret key oppure scansionare direttamente il QR-code.

ga4

Da questo momento Google Authenticator comincerà a produrre codici di accesso che dovrete consultare e inserire al momento del login al vostro server SSH.

ga3

 

Attenzione: ricordatevi di abilitare l’autenticazione a due fattori anche per l’utente che utilizzate di solito per accedere via SSH, quello che ha i privilegi da sudoer, perché da questo momento in poi l’autenticazione è modificata per tutti gli utenti, e se non avete configurato l’utente giusto rischiate di chiudervi fuori.

14 Commenti

Matteo Bisi | #

Bell’articolo grazie, proverò alla prima occasione

samuele | #

Grazie per la dritta
E ricordatevi di tenere carico lo smartphone 😉

spider | #

Vabbe’, non c’era mica bisogno di mascherare i numeri 😉

Teo | #

Solo un problema. Non riesco ad accedere con i codice rilasciati dall’App, ma solo con i codici di sicurezza (i 5 rilasciati al setup).

Teo | #

Risolto. Verificate che l’orario del server sia allinea con quello del dispositivo dove utilizzate l’App di Google Authenticator

kOoLiNuS | #

… e se sei in un posto con la connessione (cablata) ma senza campo cellulare?

Andrea | #

L’applicazione non fa traffico dati. Una volta installata genera codici per sempre senza doversi collegare a nulla. Non serve il campo cellulare.

Francesco | #

Sto avendo un po di problemini nell’installazione su una Ubuntu Server 10.04… a volerlo compilare mi da un bel po di errori, ho anche aggiornato gcc, ma sembra proprio che quel codice non glivada bene, non gli vanno giù gli asterischi, per i quali si aspetta una “}”, invece se provo a scaricarlo con quel comando che hai scritto tu mi dice che non trova il pacchetto… hai in mente qualcosa che potrei controllare?
Ciao, grazie mille.

Andrea | #

Potrebbe essere un problema di repository. Prova ad aggiungere multiverse e vedi come si comporta….

Francesco | #

Ciao Andrea, scusa il ritardo nella risposta.
Niente da fare, mi dice:

E: Impossibile trovare il pacchetto libpam-google-authenticator

Il comando apt-get update va…
Boh, se ti viene in mente cosa potrebbe essere… grazie mille.

Francesco | #

Risolto… semplicemente, con la Ubuntu 10 non trova il pacchetto, ho dovuto installare una Ubuntu 12… scioccante, con un errore di questo genere non te ne esci più… perchè non si capisce cosa possa essere, ed alla fine e addiruttura la versione del sistema operativo… -.-

Francesco | #

Funziona bene con Putty, peccato che non funziona con SecureCRT, perchè username e password te li chiede in un popup, quindi fuori dal terminale, e non funziona perchè non ti chiede anche il codice di verifica…

Marco | #

Ciao Andrea,
grazie della divulgazione di questo bell’articolo che non conoscevo pur occupandomi spesso di problematiche di Sicurezza Informatica.

Chiaro e ben fatto,
complimenti.

MDM