Quante volte vi è capito di dimenticare la password di accesso ad uno dei vostri siti di servizi preferiti? Per vostra fortuna all’atto dell’ iscrizione avete diligentemente compilato tutta la parte relativa alle informazioni di recupero, nella quale vi veniva chiesto di inserire il cognome di vostra madre, piuttosto che il nome del vostro primo animale domestico od ancora l’indirizzo della scuola elementare. A questo punto che problema c’è se ce la dimentichiamo?
Basta rispondere esattamente alla domanda e come per magia la password vi arriva (sottolineo qui il fatto che essa transita sulla rete in chiaro senza alcuna cifratura nella maggioranza dei casi) all’indirizzo email scelto. Ora si tratta solo di sceglierne un’altra e si ricomincia ad usufruire del servizio tanto agognato.
Il perché di tutta questa trafila è semplice: essendo questi servizi di facile accesso e da una qualsiasi postazione, non ci sono molti modi “comodi” per identificare l’utente che richiede la password, e ci si deve affidare sulla conoscenza di fatti personali che generalmente dovrebbero essere conosciuti solamente dal titolare dell’account. Forse fino a qualche anno fa questo sistema poteva considerarsi abbastanza robusto, ma è piuttosto opinabile che lo sia ancora oggi nell’era dei social network, in cui tutte queste informazioni sono spesso facili da reperire.
Sistemi più sicuri certamente ne esistono: si potrebbero usare le smart card (o più in generale sistemi che si appoggiano ad un certificato digitale) oppure il confronto di una serie di parametri biometrici. Capite facilmente che si tratta però di metodi scomodi e costosi, i quali potrebbero anche richiedere hardware dedicato, e viene da chiedersi se il servizio erogato è così “importante” da rendere conveniente l’utilizzo di tali tecnologie (nella maggior parte dei casi credo proprio non ne valga la pena, per alcuni forse sarebbe il caso!).
Ad ogni modo poter recuperare la password è comodo, spesso in contesti moderni in cui il numero di servizi online che utilizziamo si moltiplica giornalmente. Possiamo quindi sbizzarrirci nell’usare una chiave anche molto complessa, rimanendo comunque nella totale sicurezza che questa sarà facilmente recuperabile nei momenti di amnesia più totale.
Allora perché, vi starete forse chiedendo, ho detto nel titolo di questo articolo che questa funzionalità di recupero password è pericolosa per la nostra sicurezza? Un recente rapporto della nota società di security BitDefender, di cui potete leggere un riassunto a questo indirizzo, ci svela che (come se già non lo si sapesse) più del 70% delle persone normalmente utilizza la stessa password per accedere a più servizi diversi.
Ma c’è di più: solo circa l’1% dichiara di utilizzare stringhe alfanumeriche sufficientemente complesse, mentre la stragrande maggioranza arriva al massimo a password di circa 6 caratteri (aggiungo io: probabilmente senza utilizzare caratteri speciali).
Questi dati ci fanno capire quanto sia sentito dal pubblico di internet il problema della sicurezza online! Oltre ad una mancanza di informatizzazione, che possiamo anche comprendere in certe fasce d’età ma non nelle generazioni più giovani, c’è dal mio punto di vista una non corretta realizzazione e valutazione del rischio a cui si può incorrere. Non è solo il furto del codice di sicurezza della carta di credito od il pin del bancomat (a cui certamente tutti facciamo più attenzione) a doverci preoccupare, ma anche informazioni riservate quali il nostro indirizzo, la targa della nostra auto, il nome di nostra moglie, la scuola dei nostri figli od ancora il periodo dell’anno in cui andiamo in vacanza.
Sono tutte informazioni che trascuriamo, e che spesso mettiamo anche in bella vista sulla nostra bacheca di Facebook (me compreso, lo ammetto), le quali rappresentano invece una vera manna per ogni sorta di malintenzionato ed andrebbero protette con molta più attenzione. Esistono molti modi per scovare una password, ed i più comuni sono senza dubbio il phishing, il brute forcing ed il bypass delle procedure di recupero.
Il phishing ormai lo conosciamo tutti, e si tratta di quella tecnica usata dai cracker per ottenere la nostra password semplicemente “chiedendocela”, talvolta con email appositamente realizzate per ingannarci ed altre volte, in maniera molto più subdola, costruendo pagine web praticamente identiche a quelle originali sulle quali noi stessi inseriamo le credenziali che, piuttosto che essere inviate ai server del servizio, vengono ridirette e memorizzate dai furbetti autori della pagina contraffatta.
Il brute forcing è invece una tecnica (qui parliamo del metodo di attacco verso una password e non verso chiavi di cifratura. La differenza è che, mentre una chiave di cifratura è costituita da sequenze di caratteri senza alcun significato, le password spesso sono costituite da parole presenti in un qualsiasi dizionario. Questo rende l’attacco computazionalmente più breve rispetto ad uno verso una chiave di cifratura) che si fonda sulla ricerca di tutte le possibili parole che rappresentano la stringa di sicurezza.
In pratica, vengono utilizzati degli enormi “dizionari” (il nome tecnico è rainbow table) in cui ogni singola parola o combinazione di caratteri è potenzialmente una password valida e le si prova tutte fintanto che non ci si riesce a loggare al servizio. Questa è la motivazione per cui è sempre sconsigliato utilizzare parole di senso comune, piuttosto è meglio usare stringhe senza senso oppure introdurre caratteri speciali a “condimento” della parola scelta.
Bypassare le procedure di recupero, è invece una tecnica che parte, come già avrete intuito dal discorso di apertura, dalla conoscenza della risposta alla domanda che il servizio ci propone in caso di smarrimento, che come abbiamo visto potrebbe essere molto più facile di quanto previsto.
Notiamo adesso un’evidenza: il fatto che oltre il 70% delle persone utilizzi la stessa password per servizi e profili diversi è un grosso pericolo, in quanto è sufficiente “bucare” uno solo di essi, magari il più accessibile e meno protetto, ed avere una password da spendere un po’ ovunque! Il consiglio è quindi quello di usare sempre combinazioni diverse, a costo di fare uno sforzo mnemonico extra che sarà però ricompensato con una maggiore sicurezza.
Dal nostro punto di vista, quello dell’utente fruitore del servizio, non possiamo fare altro che produrre una password molto complessa, cambiarla di frequente, e cercare di rispondere alla domanda di sicurezza o con un qualcosa di davvero personale che mai e poi mai pubblicheremo su Facebook, oppure con un po’ di ingegno si potrebbe selezionare nella lista la classica domanda “Qual è il cognome di tua madre da nubile?” ed invece scrivere la risposta per “Qual è il nome del tuo gatto?”. Così facendo creeremmo un po’ di confusione nel malintenzionato e, anche se forse non riusciremmo a fermarlo, quantomeno lo rallenteremmo un po’.
Fatto questo siamo nelle mani di chi si cura del servizio, e che quindi prende in consegna la nostra password memorizzandola sui propri server. Come può il gestore aiutarci a rendere sicuro l’ambiente? Normalmente, le precauzioni di sicurezza che si prendono sono relative alla cifratura del canale di trasmissione utilizzando l’SSL, e quindi la crittografia asimmetrica, attraverso cui i dati transitano in tutta tranquillità dal nostro PC al server senza che vi sia il rischio (almeno in teoria!) che qualcuno li possa decifrare e leggere, in quanto la chiave privata è in possesso solamente del server stesso.
Ma che fine fa la nostra password una volta atterrata sul server? Solitamente la si memorizza in chiaro o cifrata su un qualche database chissà dove in giro per il mondo. Ogniqualvolta c’è una richiesta di connessione con la nostra user id, il server la recupera e la confronta con quella che gli è appena arrivata dalla richiesta del client: se sono uguali si accede al servizio, altrimenti no. Tutto ciò implica che, se la password è in chiaro esiste un luogo “fisico”, il database, dalla quale è possibile leggerla oppure, se è cifrata, esiste un luogo “fisico” in cui c’è la chiave per poterla decifrare.
Per quanto complicato sia lo stoccaggio della password, esiste sempre una strada percorribile a ritroso per recuperarla. Proprio perché abbiamo parlato di luoghi fisici, è necessario avere accesso diretto ai server (anche in remoto), e questo già di per sé può rappresentare una valida barriera nei confronti dei cracker, in quanto ci sono fior di firewall a garantire un certo livello di sicurezza.
Ma, soprattutto alcune recenti notizie, fanno pensare quanto questa barriera sia a volte poco efficace. Ricordiamo come solo qualche mese fa più di 40 mila account di Firefox siano stati trovati su dei server pubblici, o come più recentemente accaduto ad un noto servizio che “aiuta” gli automobilisti a rintracciare gli autovelox, i cui server sono stati violati esponendo più di 10 milioni di credenziali alla mercé di chiunque abbia cattive intenzioni!
A questo punto, se colleghiamo la possibilità di violare le protezioni fisiche verso le nostre password con il fatto che 7 persone su dieci usano la stessa un po’ ovunque, ci rendiamo conto di quanto lo stoccaggio dei nostri dati sia cruciale: violato un server, si ha una password che ha grosse chance di essere valida anche su servizi online più “delicati” dal punto di vista della privacy.
Adesso finalmente possiamo svelare l’arcano relativo al titolo dell’articolo. Se tutti noi rinunciassimo alla funzionalità di recupero password su qualsiasi servizio esistente, sarebbe infatti possibile utilizzare una differente tecnica di stoccaggio a prova di violazione fisica o virtuale che sia! Se la password è memorizzata sul database del servizio in chiaro, oppure cifrata, ma comunque facilmente decifrabile con una chiave è perché deve, tra le altre cose, essere possibile recuperarla abbastanza facilmente.
Se questa necessità venisse meno, si potrebbe usare una funzione one way attraverso cui generare un’impronta digitale della nostra password dalla quale non è possibile risalire all’originale (a patto di usare almeno uno SHA-2). In pratica, data una stringa di testo qualsiasi, si esegue l’hash della stessa e, indipendentemente dalla sua lunghezza, si ottiene una stringa di lunghezza finita che è una sorta di impronta per la quale non esiste una corrispondenza biunivoca con il messaggio di origine: si ottiene così il digest del testo. Essendo il calcolo dell’hash un algoritmo “distruttivo”, anche avendo a disposizione il digest non è possibile risalire al testo di originale.
La specifica più comunemente usata è denominata SHA, ed è stata sviluppata niente meno che dall’NSA (quella di Splinter Cell per intenderci!) agli inizi degli anni novanta. Dopo lo SHA-0 e lo SHA-1 siamo oggi giunti allo SHA-2 che produce un output che può arrivare fino a 512 bit, e mentre per le prime due versioni sono state trovate delle vulnerabilità, quest’ultima è considerata sufficientemente sicura, al punto che, recentemente, tutti gli istituti bancari italiani sono stati obbligati a farne uso.
I crittoanalisti sono comunque al lavoro per trovare degli exploit validi, anche perché essendo SHA-2 basato sullo SHA-1 è probabile che vi siano delle vulnerabilità simili; nel frattempo però il NIST ha già previsto per il 2012 la possibile ratifica ufficiale di nuovi algoritmi che faranno parte delle specifiche SHA-3.
Più in generale possiamo dire che le procedure di hashing sono molto usate e considerate sicure, tant’è che vengono comunemente applicate all’SSL o nella creazione dei certificati digitali, in quanto il digest non è solo sicuro ma è anche univoco: non esistono due stringhe di input che daranno lo stesso risultato (a patto che si scelga un output con un numero sufficiente di bit a prevedere più combinazioni di digest di quelle possibili in input, ossia se l’algoritmo risolve il problema delle “collisioni”).
Applicando questa tecnica alla memorizzazione delle credenziali lato server, renderemmo l’ambiente intero immune alla violazione “fisica”. Quando ci autentichiamo, il nostro client non deve fare altro che prendere la nostra password, farne l’hash ed inviare il digest al server, che lo memorizzerà sul suo database. Ad ogni richiesta di autenticazione, il confronto verrà effettuato tra il digest memorizzato e quello che arriva dalla richiesta del client, rimanendo in grado di autenticare oppure no esattamente come prima.
A questo punto la password non esiste da nessuna parte nell’universo se non esclusivamente nella nostra testa (o sul post-it attaccato al monitor del PC, come mi è capitato più volte di vedere…), ed anche se qualcuno avesse accesso fisico ai server del servizio saremmo al sicuro, in quanto al massimo sarebbe leggibile il digest e non la vera password. E’ chiaro che usare il digest non risolve del tutto i problemi, poiché se l’interazione tra client e server non è sufficientemente sicura potrei comunque tentare di bypassare il sistema: potrei infatti intercettare la trasmissione e costruire delle richieste fasulle verso il server del servizio ed ottenere comunque l’accesso.
Ma se l’applicazione è sufficientemente robusta, ci sono buone probabilità che il server si accorga che la richiesta non è autentica e quindi, nonostante l’hash della password corrisponda con quanto presente sul database, potrei escluderla non accettandola. Questi accorgimenti non risolverebbero di certo la situazione definitivamente, ma sicuramente rafforzerebbero l’anello di quella che è la catena di sicurezza del servizio in generale.
Potremmo quindi usare la stessa chiave su più servizi con una sicurezza maggiore, benché rimanga comunque un comportamento da evitare, ma alla luce dell’indagine di BitDefender c’è poca speranza che nel breve periodo l’informatizzazione aiuti gli utenti a consapevolizzarsi sui rischi informatici relativi alla violazione d’identità.
Dovremmo però rinunciare agli strumenti di recupero password, ed essere quindi più attenti a ciò che facciamo in rete, ma d’altra parte ci sono già alcuni servizi, ad esempio quelli bancari, che di fatto non permettono di recuperare un pin dimenticato: ci si deve presentare in filiale e se ne riceverà uno nuovo. Il perché questi accorgimenti siano presi in considerazione solamente dai servizi bancari e pochi altri, è indice di come anche i professionisti del settore siano poco sensibili alle tematiche di sicurezza e se ne sottovalutino i rischi.
Io personalmente, da utente, ho sviluppato un algoritmo mentale che mi permette di avere password molto complesse, e diverse tra loro, contestuali al servizio usato e dal nome del quale, con qualche calcolo particolare, recupero la chiave senza bisogno di doverla memorizzare. Quando invece mi “vesto” da programmatore e sviluppo delle applicazioni cerco sempre di tenere a mente la sicurezza delle credenziali e delle informazioni che i miei “clienti” mi affidano.
E voi, siete cauti nella scelta delle vostre password? Usate metodi particolari per sentirvi più sicuri?