Autenticazione OTP su OpenBSD

Pubblicato il 09/05/2015 in BSD, System Administration, Technology • 3 min read

Da un po' di tempo a questa parte sto iniziando a studiare OpenBSD e tra le varie cose interessanti di questo sistema operativo, ho trovato molto semplice configurare un sistema di autenticazione One Time Password da poter usare, per esempio, come metodo di accesso tramite SSH quando non possiamo utilizzare l'autenticazione via chiave.

Vediamo come si fa!

Una volta installato correttamente OpenBSD, passiamo a configurare S/Key, un sistema di One Time Password che prevede la risposta ad un challenge per verificare la validità dell'autenticazione.

Non è necessario installare alcun software, in quanto tutto ciò che serve è presente di default nell'installazione di OpenBSD e la documentazione ufficiale di OpenBSD è sufficiente per configurare facilmente il sistema di OTP.

Inizializzazione S/Key

Il primo passo della configurazione di questo sistema, è la creazione della directory /etc/skey attraverso il comando

root@server:~# skeyinit -E

A questo punto, è necessario effettuare l'inizializzazione delle OTP per ogni utente sul sistema che si vuole abilitare.

Effettuiamo il login sul server con l'utente da abilitare (con molta fantasia user) e utilizziamo il comando

user@server:~$ skeyinit
Reminder - Only use this method if you are directly connected
           or have an encrypted channel.  If you are using telnet,
           hit return now and use skeyinit -s.
Password:
[Adding user with md5]
Enter new secret passphrase:
Again secret passphrase:

ID user skey is otp-md5 100 owl16524
Next login password: SHE ACTA WHOA ON DRAG BATH

user@server:~$

Prestiamo attenzione a due cose: skeyinit ci chiede innanzitutto la password di sistema per l'utente che sta inizializzando l'OTP e poi la passphrase necessaria per generare la risposta alla sfida del sistema OTP.

Utilizziamo S/Key

A questo punto, una volta effettuata l'inizializzazione del sistema S/Key, è necessario vedere come utilizzarlo.

Proviamo ad effettuare il login via ssh:

user@client:~$ ssh -l user:skey server
otp-md5 99 owl16524 <---- sfida
S/Key Password:

Come è possibile notare, il sistema ci chiede di inserire una password in relazione alla sfida OTP.

Ma come facciamo a generare le password?

Abbiamo due modi per generare le password:

  1. i tool di sistema
  2. applicazioni esterne, come quelle disponibili su Android o iOS

Utilizzando i tool di sistema, possiamo generare le password da conservare poi in un luogo sicuro.

user@server:~$ otp-md5 -n 100 100 owl16524
Reminder - Do not use this program while logged in via telnet.
Enter secret passphrase:
1: NINE LADY ALSO WHEE ARM EDDY
2: DICE SWAB AVOW RIP YANK SLIM
....  
99: FORT JEST LAUD SOAR COWL PUN
100: SHE ACTA WHOA ON DRAG BATH

Oppure possiamo installare sullo smartphone un'applicazione in grado di effettuare la generazione delle password: tra le varie applicazioni per Android ho provato OTPdroid che mi sembra essere adatta allo scopo.

Il sistema scelto, qualsiasi esso sia - una volta inserita la sfida chiesta dal sistema e la passphrase impostata in precedenza - ci fornirà la password in modo da poter effettuare con successo l'autenticazione sul server:

user@client:~$ ssh -l user:skey server
otp-md5 99 owl16524
S/Key Password:
OpenBSD 5.7 (GENERIC) #0: Thu Apr 30 22:01:01 CEST 2015

user@server:~$

Per stessa natura di un sistema One Time Password, una volta consumata la password legata alla sfida richiesta dal sistema, essa non ha più alcun valore essendo non riutilizzabile.

Le password, quindi, devono essere quindi rigenerate (attraverso il comando skeyinit) quando stanno per terminare.

Conclusioni

Abbiamo visto com'è possibile configurare un sistema di One Time Password in poche e decisamente semplici mosse; questo tipo di autenticazione in base alla sfida può essere integrato con l'autenticazione SSH con chiave per creare un sistema di two factor authentication che, magari, potrà essere oggetto di un post successivo.