Attacco alle password: tecniche di cracking e consigli per metterle al sicuro

Per sferrare un attacco alle password e rubarci le chiavi di accesso alla nostra vita digitale, i criminal hacker usano diverse tecniche di cracking. Analizziamo le varie modalità di attacco e scopriamo come mettere al sicuro le nostre “chiavi digitali”.

Come fanno i Cybercriminali a rubarci le password?

Le modalità sono diverse, ma nella maggior parte dei casi fanno leva sull’errore umano.

Segnaliamo le due tecniche più frequentemente utilizzate per ottenere – con minimo sforzo – una password non adeguatamente custodita.

Ingegneria Sociale (social engineering): con email o messaggi di phishing si convince l’utente a comunicare la propria password. In pratica, il ladro suona al campanello e si fa aprire la porta… invece di cercare di forzarla.

Credential Stuffing: si viola il database di un servizio contenente un gran numero di password utente e poi si provano su altri siti. Famoso è il caso di LinkedIn: furono rubate circa 164 milioni di credenziali (accadde nel 2012, ma le password furono messe in vendita nel 2016), tra queste anche quella di Mark Zuckerberg che usava la stessa password di LinkedIn (che era “dadada”) anche sui suoi account Twitter e Pinterest.

La tecnica usata è appunto il credential stuffing, una pratica che sfrutta l’enorme quantità di data breaches che si sono verificati negli anni e che hanno generato molti database di credenziali rubate. Nel dark web di possono trovare miliardi di password rubate, quasi sempre senza che gli utenti ne siano consapevoli. Questi dati vengono  utilizzati dai cybercriminali per attaccare altri servizi web dove gli utenti hanno la pessima abitudine di riutilizzare le stesse password.

E tutto questo può essere fatto in modo automatizzato, con sistemi bot che utilizzano software come SHARD (programma opensource reperibile su GitHub: https://github.com/philwantsfish/shard).

In questo modo si riescono a provare le stesse combinazioni di username e password su siti e servizi che non hanno subito intrusioni. Sono attacchi cosiddetti “a bassa intensità”, che non fanno rumore, cioè non generano allarme nel sistema attaccato (perché non ripetitivi, come sarebbe invece un attacco “brute force”).

Ma poiché il “password reuse” (riutilizzare le stesse password su servizi diversi) è molto frequente, questo attacco ha ottime probabilità di successo.

Le password andrebbero invece gestite con grande cura, perché sono diventate le “chiavi” della nostra vita digitale: secondo il Verizon Data Breach Investigations Report 2017 (VDBIR 10a edizione) “l’81% delle violazioni degli account sono realizzate con password rubate e/o password deboli.”

Tuttavia conservare in modo sicuro le proprie credenziali non è banale: è ormai noto che ogni utente deve gestire mediamente circa 100 password. E se devono essere tutte differenti, questo non può essere fatto con sole regole mnemoniche.

Per questo oggi ci vengono in aiuto i Password manager, applicazioni dedicate a conservare tutte le nostre password in modo sicuro e crittografato. Ne parlo in questo articolo.

Hash e Password

Esaminiamo ora come vengono gestite le password, allo scopo di capire le modalità con le quali possono essere rubate. Per fare questo, è importante conoscere cosa sono gli Hash ed in che modo hanno a che fare con le password. 

Gli HASH sono algoritmi crittografici che trasformano un dato di lunghezza arbitraria (messaggio) in una stringa binaria (fingerprint) di lunghezza fissa (lunghezza che varia a seconda dell’algoritmo utilizzato). La peculiarità degli Hash è quello di essere non invertibile (one-way): dall’hash non è mai possibili risalire al valore iniziale.

Questa è una differenza sostanziale rispetto agli algoritmi di crittografia (AES, RSA, ecc.) che invece sono reversibili, a condizione di conoscere la chiave (password).

Tra gli algoritmi di Hash i più usati sono:

MD5 (“Message Digest”-1991): sviluppato da Ronald Rivest, è ormai considerato non più sicuro. Genera una fingerprint da 128 bit (32 caratteri esadecimali). .

SHA-1 (“Secure Hash Algorithm 1”- 1995): genera una fingerprint da 160 bit (40 esadecimali). Ancora molto usato, è ormai considerato non più sicuro, dopo che Google ne ha dimostrato la possibilità di collisione.

SHA-2 (“Secure Hash Algorithm 2”- 2001): è la varianti più sicura di SHA-1, con dimensioni dell’hash maggiori, da 256 (64 esadecimali) a 512 bit (128 esadecimali).

SHA-3: è stato definito dal NIST con la FIPS 202 (agosto 2015) ed è destinato a diventare il nuovo standard.

Per definizione, un algoritmo di hash deve essere:

  • coerente: deve generare un risultato univoco. Quindi l’input A produrrà sempre lo stesso hash B, che rappresenta la fingerprint (impronta digitale) di A.
  • casuale: impossibile da interpretare. Dall’hash non deve essere possibile capire qual è il messaggio originale, si ha solo la certezza che – se l’hash è lo stesso – anche l’originale deve essere lo stesso. 
  • univoco: la probabilità che due messaggi diversi generino lo stesso hash deve essere nulla. Questa caratteristica si definisce “resistenza alle collisioni”. In crittografia si parla di collisione quando un algoritmo di hashing produce lo stesso hash a partire da due input diversi. Ma poiché qualunque algoritmo di hashing può generare un numero finito di risultati, la resistenza alla collisione è direttamente proporzionale alla sua complessità. Per esempio, MD5 produce sempre una stringa di 128 bit. Dunque i possibili hash di MD5 sono pari a 2128,  un valore enorme, ma comunque un numero finito. 

I valori in entrata sono invece in numero infinito, quindi è teoricamente possibile creare una procedura che possa mettere in relazione due stringhe che producono lo stesso hash: questo diventa più facile all’aumentare delle potenze computazionali disponibili. Ed è esattamente quello che ha fatto Google con SHA-1.

In crittografia, con il termine “impossibile” si intende un processo non realizzabile con gli strumenti computazionali disponibili.

Per aumentare la resistenza alle collisioni – essendo aumentate le potenze di calcolo – si rende necessario utilizzare algoritmi di hashing più potenti, cioè con un maggior numero di bit: SHA-2 genera una stringa a 256 o 512 bit, quindi le combinazioni possibili sono rispettivamente 2256 e 2512 (corrisponde a 1,3×10154), numeri esponenzialmente molto più grandi di quelli generati da MD5 e SHA-1.

Perché gli hash sono utili

Per le loro peculiarità, gli hash vengono utilizzati per molti scopi. Uno dei più importanti è legato appunto all’autenticazione ed alla sicurezza delle password.

Oggi in tutti i siti “seri”, le password degli utenti vengono salvate nel database sotto forma di hash e non in chiaro (in “plain text”). Questo è il motivo per cui, in caso di “password dimenticata”, il sito non ci potrà restituirci la nostra password (perché non l’ha salvata in chiaro) ma ci invierà un link per impostarne una nuova. 

Il vantaggio di usare gli hash è evidente: se un attaccante riesce a violare il database delle password, troverà solo gli hash e non le password in chiaro. Poiché gli hash, non sono invertibili, dovrebbe essere impossibile risalire alle password, ma in realtà non lo è del tutto.

Con l’hashing delle password abbiamo sicuramente reso più difficile il lavoro dell’attaccante, ma questi potrebbe riuscire ugualmente a ottenere le password. Vediamo ora quali sono le tecniche che vengono utilizzate per il password cracking.

Le modalità di attacco alle password 

Quando l’attaccante non riesce a rubare la password grazie all’errore umano, può ricorrere a tecniche più sofisticate, come il “password cracking”. Sono tecniche complesse, che richiedono conoscenze informatiche e strumenti idonei, quali computer potenti e software appositi. Ma in certe condizioni possono risultare efficaci.

Il password cracking viene eseguito in due differenti modalità:

Attacco ONLINE: è inevitabilmente lento ed inefficiente, perché richiede la risposta online del sito “interrogato”. Inoltre è abbastanza frequente che il sito imponga dei limiti ai tentativi di login errati (in genere al massimo dieci tentativi). Funziona in modo proficuo quindi negli attacchi a bassa intensità, come il citato “credential stuffing”. 

Attacco OFFLINE: può essere fatto se è già stato estratto il Database degli Hash delle Password. Questo può essere ottenuto in diversi modi:

  • Compromissione del sistema: nei moderni sistemi UNIX, le password sono memorizzate in modo crittografato nel file /etc/shadow, che è accessibile solo a chi ha privilegi amministrativi (permessi di root).
  • Compromissione del DB di un applicativo.
  • Con il tool Mimikatz: è uno strumento progettato per recuperare tutte le password gestite da Windows. Il tool è stato realizzato da Benjamin Delpy quando lavorava per un’agenzia governativa francese e distribuito come software opensource.
  • Trasmissione di Hash in rete per autenticazione. 
  • Intercettazione attraverso la rete Wi-Fi.

Impossessatosi degli hash delle password l’attaccante è già “a metà dell’opera”: avrà infatti a disposizione tutto il tempo per cercare di risalire dagli hash alle relative password. Dovrà farlo per tentativi, dato che l’hash – come spiegato – non è invertibile.

Le tecniche di password cracking 

  1. Il Brute Force

È l’attacco classico che si realizza offline, una volta ottenuto il database degli hash delle password (con le modalità precedentemente illustrate). Consiste nel provare tutte le possibili password, in successione partendo dalle combinazioni più semplici o più plausibili, per poi crescere fino ad una lunghezza massima stabilita. Per portare questi attacchi si usano software di password cracking, facilmente reperibili in rete e che automatizzano l’attacco. 

I più noti sono: John the Ripper (letteralmente: “John lo squartatore”) e Hashcat. Ne esistono molti altri, tra i quali: Elzapop, Cain&Abel, ecc.

Esistono anche servizi online gratuiti di cracking (in rete si trova qualsiasi cosa!). Tra questi segnaliamo:

L’attacco “a forza bruta”, per quanto rudimentale, può risultare efficace grazie all’accresciuta potenza dei computer attuali: oggi, sfruttando la potenza computazionale delle schede grafiche (GPU) messe in parallelo, è possibile realizzare a costi ragionevoli computer in grado di eseguire fino a 100 GH/s, cioè 100 miliardi di Hash al secondo.

Si può anzi affermare che l’attacco brute force è “infallibile”, a condizione di avere a disposizione un tempo illimitato.

Ma nella pratica il tempo non è una variabile trascurabile, possiamo rendere impraticabile questo tipo di attacco (poiché a nessuno interessa impiegare anni o secoli per violare un sistema…) operando sulle seguenti due fondamentali variabili:

  • la lunghezza della password
  • la complessità delle password ed i tipi di caratteri utilizzati.

É buona regola quindi impostare password lunghe:  12 caratteri può essere considerata una soglia minima di sicurezza, mentre possiamo affermare che, con le attuali potenze di calcolo disponibili, non serve andare oltre i 20 caratteri.

Ed inoltre utilizzare tutti i tipi di caratteri disponibili sulla tastiera: numeri, lettere minuscole e maiuscole ed anche i caratteri speciali (spesso assurdamente “vietati” in molti siti, anche di banche). In questo modo avremo a disposizione un totale di 95 differenti caratteri per impostare la password.  

Applicando queste semplici regole, la complessità della password sarà sufficiente da rendere impraticabile l’attacco brute force. 

  1. Attacco “a dizionario”

Per superare l’intrinseca “inefficienza” dell’attacco brute force, gli attaccanti ricorrono a metodi più efficaci ed intelligenti che – sfruttando le cattive abitudini degli utenti – riescono a restringere il campo di ricerca. Questo conferma – se ancora ce ne fosse bisogno! –  che: “Il fattore umano è veramente l’anello più debole della sicurezza”
(“The Art of Deception”, Kevin Mitnick – 2002)

Uno dei metodi utilizzato è l’Attacco “a dizionario”: poiché è noto che le persone usano per le loro password sopratutto parole di senso compiuto (quindi presenti sui dizionari) e queste saranno le prime che gli attaccanti proveranno!

Molto semplicemente il software di password cracking caricherà uno o più file dizionario e lo utilizzerà per la caccia alle password.

Questi dizionari sono disponibili in rete: il dizionario della lingua italiana è di circa 300.000 parole ed è un file di testo di alcuni MB. Ed anche: l’elenco del milione di password più usate al mondo è un file di circa 8 MB. Sono ovviamente disponibili i dizionari di molte lingue, scaricabili ed utilizzabili. Questo modo è molto più rapido di un brute force (molti meno tentativi e più mirati) e permette di  scoprire facilmente le password più deboli.

  1. Attacco con “regole (rules)”

Si basa sul fatto che le persone tendono a riutilizzare le stesse password, modificandole semplicemente di qualche carattere, nell’illusione di renderle più forti pur mantenendo facile la memorizzazione. Sono le cosiddette “modificazioni ovvie delle password”. È noto – per esempio – che la parola “password” viene abitualmente modificata in: P@ssword, PASSWORD, passw0rd, P@$$w0rd, ecc. 

I software di password cracking implementano questi algoritmi di sostituzione, rendendo ancora più efficace l’attacco a dizionario.

L’attacco che utilizza queste regole è quello che – statisticamente – ha la maggior efficacia in termini di tempo/risultato.

  1. Attacco con “Pattern (mask)”

Ci si concentra solo su pattern reali, che sappiamo essere quelli che le persone tendono ad usare. Quando viene richiesta una password contenente almeno una maiuscola, un numero ed un carattere speciale, il pattern statisticamente più utilizzato dagli utenti è: maiuscola all’inizio, numeri e caratteri speciali in fondo. 

In questo modo si riesce a limitare il numero di tentativi, concentrando l’attacco brute force sulle  password più probabili.

  1. Tecniche combinate

Vengono combinate insieme le varie tecniche precedentemente illustrate.

Per maggiori approfondimenti, rimando al testo completo dell’articolo Attacco alle password: tecniche di cracking e consigli per metterle al sicuro, che ho scritto per CYBERSECURITY360, la testata del Network Digital 360 specializzata nella Cybersecurity, con la quale collaboro sin dalla sua nascita.


© Copyright 2019 Giorgio Sbaraglia
All rights reserved.

Quest’opera è distribuita con Licenza Creative Commons Attribuzione – Non commerciale – Non opere derivate 4.0 Internazionale.

Lascia un commento