Le notizie di attacchi informatici che portano alla sottrazione di nomi utenti e password sui siti dei gestori di servizi online più o meno famosi sono quasi all’ordine del giorno.
Strumenti come Have I been pwned tengono traccia di questi incidenti e permettono agli utenti di verificare se le loro credenziali fossero coinvolte.
Nel 2021 è stata presentata RockYou2021, una lista contenente 8,4 miliardi di password riconducibili a utenti di tutto il mondo e relative a una vasta schiera di servizi online.
RockYou2021 è una sorta di compendio di credenziali rastrellate dai criminali informatici nel corso di aggressioni sferrate nel corso degli ultimi anni. Tale archivio, insieme con molti altri, ha evidenziato quanto sia comune ancora oggi la pratica di usare password deboli (corte, facilmente indovinabili, contenenti termini presenti nei dizionari,…) e di condividerle tra più servizi diversi. In questo modo, una volta acquisito l’accesso su un servizio, l’aggressore può accedere agli altri utilizzati dal medesimo soggetto.
Posto che l’uso dell’autenticazione a due fattori è lo strumento migliore per proteggersi, le password vanno scelte in modo sicuro.
Gestire adeguatamente le password non è però solo responsabilità dell’utente ma anche dei servizi online che memorizzano quelle stesse password all’interno di database conservati lato server.
Purtroppo l’utente non ha modo per sapere quale metodologia viene utilizzata lato server per proteggere le sue password: da client non si ha infatti alcuna visibilità sul codice in esecuzione server-side. In altre parole, dopo aver creato un account utente sul sito “X”, non è dato sapere quali strumenti tecnici vengono utilizzati per proteggere le password.
Le password degli utenti dovrebbero essere sempre salvate lato server usando la crittografia: un eventuale aggressore o un dipendente infedele non potranno impadronirsene e leggerle “in chiaro”. Non avete idea, però, di quali e quanti siti web ancora oggi memorizzino le password senza applicare alcuna forma di protezione.
Dicevamo che di solito non è possibile sapere se un certo sito Web memorizzi correttamente le password e le protegga usando la crittografia. Certamente, però, se cliccando sul link Password dimenticata oppure Ho dimenticato la password si riceve un’email con le credenziali in chiaro, certamente il sito Web non si sta comportando correttamente e le password sono di sicuro conservate senza applicare alcuna forma di protezione.
Stessa cosa se la password viene inviata per email dopo la conclusione della procedura di registrazione.
Il sito Plain Text Offenders raccoglie una lista dei servizi che mantengono, in spregio a qualunque linea guida e buona norma sulla sicurezza, password in chiaro sui loro server. Alcuni nomi sono davvero insospettabili. Purtroppo Plain Text Offenders non sembra più aggiornato e le ultime segnalazioni si fermano a maggio 2021: il sito resta comunque un ottimo spunto per verificare se nel frattempo i soggetti coinvolti avessero risolto il problema e per rendersi conto di come la memorizzazione delle password in chiaro lato server sia una brutta abitudine ancora difficile da estirpare.
Protezione delle password lato server: crittografia, hashing e salting
Crittografare le password memorizzate all’interno di un database lato server (ad esempio la lista dei clienti registrati su un sito di ecommerce) può sembrare una buona cosa.
Tralasciando l’algoritmo crittografico utilizzato, le password vengono però crittografate usando la cifratura simmetrica quindi ricorrendo a una chiave di cifratura nota al gestore del servizio.
Quella chiave, però, è inequivocabilmente salvata da qualche parte: un criminale informatico può trovarla e avere così la possibilità di portare in chiaro tutte le password degli utenti conservate a livello di database.
Il sito Plain Text Offenders citato in precedenza contiene non soltanto un elenco di siti che salvano o salvavano le password degli utenti in chiaro ma anche di quelli che usano un algoritmo crittografico reversibile.
Una buona soluzione per proteggere le password lato server consiste nell’utilizzo degli algoritmi di hashing.
Una funzione di hashing è una funzione non invertibile che a partire da una stringa produce una sequenza di bit (detta digest) strettamente correlata con i dati ricevuti in ingresso.
A meno di problemi di sicurezza intrinseci, tuttavia, non è possibile usare il digest per risalire alla stringa di partenza riportandola in chiaro.
Ogni algoritmo di hashing porta a un output di lunghezza fissa. Così, per esempio, con SHA-256 (una delle più usate funzioni di hashing) si ottiene un valore di hash di 256 bit solitamente rappresentato con una stringa esadecimale di 64 caratteri.
Ciascun valore di hash è unico: se due diversi messaggi in ingresso producono lo stesso valore di hash si verifica una collisione e ciò rende l’algoritmo inaffidabile.
Nel 2017, dopo almeno due anni di studi, Google ha dimostrato una collisione nell’algoritmo SHA-1 dimostrando come fosse una funzione alla quale era bene non affidarsi più.
Gli algoritmi di hashing sono comunemente utilizzati per verificare se un file scaricato dal Web corrisponde a quello prodotto dallo sviluppatore. Se il valore di hash coincide con quello pubblicato dal produttore sul suo sito Web significa che il file risulta inalterato. Ne parliamo ad esempio nell’articolo sul download dell’immagine ISO di Microsoft Office.
La scelta del migliore e più sicuro algoritmo di hashing gioca un ruolo fondamentale: in alcuni casi i criminali informatici, usando attacchi brute force e/o le cosiddette rainbow tables possono provare a invertire la funzione di hash e risalire alle password reali degli utenti.
Martin Hellman e successivamente Philippe Oechslin lavorarono sul concetto delle rainbow tables o “tabelle arcobaleno” partendo da un compromesso tra tempo e memoria.
Le tabelle arcobaleno contengono milioni di corrispondenze tra password e hash corrispondenti: occupano molto spazio ma permettono di arrivare alla decifrazione dei dati velocemente.
L’hash corrispondente alla password da portare in chiaro viene paragonato con tutti gli hash esistenti in tabella. Ciò può rivelare quale password in chiaro è legata a un determinato hash.
A ogni passaggio viene utilizzata una funzione di riduzione a sé (evidenziata con un colore diverso, da qui si parla di “arcobaleno”) che converte l’hash in semplice testo appartenente a un gruppo indicato (ad esempio stringhe con certe caratteristiche in termini di caratteri alfanumerici utilizzati).
Ripetendo il procedimento migliaia di volte si ottiene una catena della quale vengono conservati su disco solo il primo e l’ultimo valore password-hash.
Le rainbow tables hanno una struttura progettata per gestire milioni di coppie (stringa/password, hash), partendo solitamente dalle parole di uso comune.
Provate a cercare su Google gli hash ottenuti applicando i tre algoritmi MD5, SHA-1 e SHA-256: troverete l’immediata corrispondenza con la stringa di partenza, in questo caso arcobaleno.
Per usare le rainbow tables è necessaria un’elevata potenza di calcolo: in rete si trovano però tabelle già pronte per l’uso ottimizzate per i vari algoritmi di hashing. Usando servizi cloud come quelli di Amazon, Google e Microsoft si possono ridurre significativamente i tempi di elaborazione e risalire a una password in chiaro esaminandone l’hash.
Per difendersi da questo tipo di attacchi si può utilizzare una tecnica intelligente chiamata salting.
“Salare” una password significa aggiungere un valore (nonce crittografico) all’inizio o alla fine della password stessa per arrivare a un diverso valore di hash. Prima dell’hashing una serie di dati casuali vengono generati e aggiunti a ogni singola password in modo da renderla ancora più lunga e complessa. L’importante è non usare mai un’unica stringa per “salare” tutte le password né sceglierne una troppo corta.
Dopo il salting decifrare una serie di password può essere estremamente dispendioso in termini di tempo e risorse computazionali per gli eventuali criminali informatici e lo sarà ancora di più se la password scelta dall’utente è già complessa di suo. Ecco perché dovreste sempre usare una password forte, indipendentemente dal sito sul quale vi state registrando.