Informatica per script kiddies 17 – Qualche parola su TOTP

Eccoci con un nuovo Informatica per script kiddies, un po’ specifico su una cosa che vedo sempre più utilizzata ma non troppo chiara né agli utenti né a chi si occupa di web senza troppa esperienza: l’autenticazione a due fattori TOTP.

I problemi di username e password

Siamo di solito abituati, per accedere a sistemi online, a utilizzare un nome utente e una password. È un sistema molto semplice e piuttosto rodato, ma ha diversi punti deboli, un po’ per questioni strutturali e un po’ perché gli esseri umani sono pigri o – se preferite – tendono più ad essere efficienti che ad essere efficaci.

Tra le diverse vulnerabilità di questo approccio, tre mi sembrano veramente molto grandi.

La prima è che, strutturalmente, il nome utente e la password sono sempre gli stessi, molto a lungo, sul medesimo sistema. Può risultare relativamente semplice, per chi volesse violare un nostro account, scoprirli una volta per tutte e usarli comodamente quando preferisce.

La seconda è che, oltre ad essere sempre gli stessi, lo username e la password tendiamo a scriverceli da qualche parte – fosse anche la memoria del browser – facilitando di molto il lavoro a chi volesse leggerli.

La terza è che tendiamo a usare lo stesso username e password per tantissime cose diverse, amplificando ulteriormente le possibilità di farceli fregare.

L’autenticazione a due fattori

Una soluzione con un buon rapporto efficacia / semplicità che si è escogitata nel tempo è l’autenticazione a due fattori.

L’idea è che oltre alla coppia username/password, ovvero il primo fattore, per entrare nel sistema sia necessario un secondo fattore, tipicamente un dato che difficilmente un attaccante ha in mano.

Come secondo fattore, in natura, si utilizza letteralmente di tutto. Un approccio comunissimo, oggi che più o meno tutti viviamo in simbiosi con i cellulari, è l’inviare qualcosa sul cellulare. Una notifica, ad esempio, o uno SMS (approccio molto pericoloso, l’SMS, ma comunque meglio dei soli user e pass). Un approccio meno comune ma molto utilizzato dove si voglia garantire un certo livello di sicurezza, è il collegare un oggetto fisico, tipicamente una chiavetta USB (che, per una volta, ha senso chiamare “chiavetta”) in possesso del solo legittimo proprietario dell’account.

Un ultimo approccio è dare in mano all’utente un dispositivo in grado di generare un codice che cambia continuamente nel tempo e che va utilizzato assieme alla password: fino a poco tempo fa era un’esperienza comune a chiunque usasse un home banking.

Questo approccio, che nella sua versione più aperta si chiama TOTP (time-based one-time password, ovvero password monouso a tempo) è quello di cui parliamo oggi.

Come funziona il TOTP

L’idea su cui si basa TOTP è relativamente semplice nel suo funzionamento.

Per descriverlo al meglio, introduco l’algoritmo su cui si basa, l’HOTP.

L’HOTP è un sistema per generare password monouso. L’idea, semplificata un pochino, è che le due parti, all’inizio, si scambino una chiave. Data la chiave e un numero qualsiasi, esiste un algoritmo che tira fuori un codice numerico, che è sempre lo stesso se la chiave e il numero sono sempre gli stessi.

A ogni accesso, entrambe le parti utilizzano un numero nuovo per generare il nuovo codice numerico di accesso.

Insomma, mi faccio un account sul sistema Pippo, e lui mi dà la mia chiave (e se la memorizza). Al mio primo accesso, per entrare, userò la chiave e il numero “1” per generare il mio codice di accesso. Il sistema Pippo farà lo stesso, e se i codici corrispondono mi fa entrare. La volta dopo uso il numero “2”, e così via.

TOTP funziona esattamente in questo modo, ma invece di utilizzare un numero che bisogna far crescere, utilizza il tempo. Il sistema Pippo mi dà la chiave, l’ora in cui l’ha generata, e un intervallo (ad esempio un minuto). Quando farò login, mi calcolerò il numero di minuti passati dall’ora iniziale, e userò quella cifra al posto di “1” o “2”, e la stessa cosa farà il sistema.

In questo modo posso usare come secondo fattore un codice che non ho deciso io (dipende dalla chiave, decisa dal sistema), e che cambia di continuo, ad esempio una volta ogni minuto. Questo risolve entrambi i problemi presentati nell’introduzione di questo articolo. Non male, no?

Sì ma devo usare una calcolatrice a ogni login?

No, ovviamente, anche perché il calcolo è una menata non da poco.

I sistemi che utilizzano TOTP generalmente danno chiave e intervallo sia esplicitamente che sotto forma di codice QR. Esistono moltissimi programmi e app in grado, dal codice a barre, di calcolare per noi quale sia il codicino numerico da usare in questo momento.

La più diffusa è sicuramente l’app di Google, che si chiama Authenticator e che è pensata per funzionare con i sistemi Google. È però una delle soluzioni peggiori possibile, perché non ha alcun modo comodo di fare un backup delle chiavi. Io uso Aegis, che trovo ottima, e il gestore di password BitWarden nella sua versione a pagamento, ma credo che troverete altri consigli nel thread di questo post su /r/ItalyInformatica.

Le fregature

Ovviamente un sistema così semplice ha delle vulnerabilità.

La principale è legata al fatto che è basata sul tempo, e per funzionare bene ha bisogno di una risoluzione molto elevata (fare codici numerici troppo più durevoli di un minuto, se non sono molto lunghi, è rischioso). L’orologio dell’utente e quello del sistema, però, non sono necessariamente ben sincronizzati, quindi è necessaria un minimo di tolleranza: i codici hanno una vita un po’ più lunga di quella dichiarata, perché i sistemi tendono ad accettare anche codici scaduti da poco o del prossimo futuro, per evitare che una piccola asincronia generi frustranti problemi di accesso.

La seconda è dovuta al fatto che, per quanto difficili da intercettare, le chiavi TOTP sono ai fatti normali password. Un attaccante che dovesse scoprire chiave e intervallo è in possesso di tutto il necessario per generare il codice di accesso.

Nonostante queste vulnerabilità, però, TOTP resta un ottimo sistema da associare alla semplice password come secondo fattore. Due sistemi con vulnerabilità indipendenti tra loro sono assai meglio che un solo sistema vulnerabile.

Conclusioni

E attivate l’autenticazione a due fattori, su, che ormai è supportata quasi ovunque.