Questo sito web utilizza cookie tecnici e, previo Suo consenso, cookie di profilazione, nostri e di terze parti. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsente all'uso dei cookie. Leggi la nostra Cookie Policy per esteso.OK

SICUREZZA INFORMATICA

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, ma nella maggior parte dei casi fanno leva sull’errore umano. Analizziamo le varie modalità di attacco e scopriamo come mettere al sicuro le nostre “chiavi digitali”

10 Dic 2019
Giorgio Sbaraglia

Consulente aziendale Cyber Security, membro del CLUSIT


Sono diverse le modalità di cracking utilizzate dai criminal hacker per sferrare un attacco alle password (password cracking) e riuscire così a rubarci le credenziali di accesso alla nostra vita digitale, ma nella maggior parte dei casi fanno leva sull’errore umano.

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

  • ingegneria sociale (social engineering): utilizzando e-mail o messaggi di phishing si convince l’utente a comunicare la propria password;
  • 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. Negli stessi giorni i medesimi hacker (OurMine Team) violarono anche l’account Twitter di Jack Dorsey (@Jack, il fondatore di Twitter) e quelli Quora e Twitter di Sundar Pichai (CEO di Google). Sembra incredibile, trattandosi di personaggi ai vertici delle maggiori aziende della Silicon Valley, ma le loro password di LinkedIn erano riutilizzate anche per questi altri account!

Il credential stuffing, in particolare, è una tecnica di password cracking che sfrutta l’enorme quantità di data breach che si sono verificati negli anni e che hanno generato molti database di credenziali rubate, facilmente reperibili nel dark web. Questa miniera di informazioni viene utilizzata dai cyber criminali per attaccare altri servizi web dove gli utenti hanno riutilizzato le stesse password.

E tutto questo viene fatto in modo completamente automatizzato, con sistemi bot che utilizzano software specifici come SHARD (opensource e reperibile su GitHub).

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 essendo così diffusa la pessima abitudine di riutilizzare le stesse password su servizi diversi (come precedentemente raccontato per Zuckerberg e non solo), questo attacco ha ottime probabilità di successo.

Non dovrebbe essere necessario ribadire quanto sia oggi diventato importante proteggere le proprie password: dovrebbe trattarsi ormai – per qualunque utilizzatore di computer e del web – di una norma elementare di “cyber igiene”.

Le password sono 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”.

Il problema di conservare in modo sicuro le proprie credenziali sta diventando piuttosto complicato: è 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 – ovviamente – crittografato.

Attacco alle password: hash e algoritmi crittografici

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 e perché 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 stringa binaria viene convertita e rappresentata in esadecimale (quindi la sua lunghezza si riduce di quattro volte).

La peculiarità degli hash è quello di essere non invertibile (one-way): dall’hash non è mai possibile 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 di decodifica (password).

Gli algoritmi di Hash più usati sono:

  • MD5 (“Message Digest” -1991): genera una fingerprint da 128 bit (32 caratteri esadecimali). Sviluppato da Ronald Rivest, è ormai considerato non più sicuro;
  • SHA-1 (“Secure Hash Algorithm 1” – 1995): genera una fingerprint da 160 bit (40 esadecimali). 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 PUB 202 (agosto 2015) ed è destinato a diventare il nuovo standard.

Le altre caratteristiche peculiari che deve avere l’hash sono:

  • 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 è impossibile capire qual è il messaggio originale, si ha solo la certezza che – se l’hash è lo stesso – anche l’originale deve essere lo stesso. Questa funzione è utile per fare il “checksum” di un file: se il file che viene trasferito o copiato mantiene lo stesso hash (prima e dopo), significa che non è stato alterato o corrotto;
  • 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.

Si capisce, quindi, perché gli hash sono utili: per le loro peculiarità, vengono utilizzati per molti scopi. Uno dei più importanti è legato al’’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. Questo è il motivo per cui, in caso di “password dimenticata”, il sito non ci potrà restituire la nostra password (perché, semplicemente, non ce l’ha), ma ci invierà un link per impostarne una nuova.

Purtroppo, esiste ancora una minoranza di siti che salvano le password in chiaro, ma sono sempre meno frequenti.

Quindi, quando ci si registra su un sito, questo calcola l’hash della password che abbiamo impostato e salva quell’hash all’interno del suo database.

Al login successivo, la password che inseriamo verrà convertita nell’hash (con uno degli algoritmi disponibili) e sarà confrontata con quella presente nel database.

Se i due hash coincidono, il login viene permesso, altrimenti significa che la password digitata è errata.

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.

Dovrebbe essere impossibile, ma in realtà non lo è del tutto. Con l’hashing delle password abbiamo sicuramente reso più difficile il lavoro dell’attaccante, ma questi – con gli strumenti e le tecniche di password cracking che andiamo ora ad illustrare – potrebbe riuscire ugualmente a ottenere le password.

Tipologie di attacco alle password

Quando l’attaccante non riesce a rubare la password grazie all’errore umano, come abbiamo spiegato in premessa, può ricorrere a tecniche più sofisticate, come il “password cracking”.

Il cracking di una password è complesso, richiede conoscenze informatiche e strumenti idonei, quali computer potenti e software appositi. Ma in certe condizioni può risultare efficace.

Può essere realizzato in due differenti modalità:

  • Attacco ONLINE: è ovviamente 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). Può essere utile quindi negli attacchi a bassa intensità, come il citato “credential stuffing”. Viene utilizzato anche negli attacchi all’RDP (Remote Desktop Protocol): in molti casi infatti chi utilizza RDP non si preoccupa di limitare il numero di tentativi di accesso ed imposta password inadeguate. Per l’attaccante diventa solo una questione di tempo il riuscire ad accedere alla porta RDP. E frequentemente questo accesso mira ad introdurre un ransomware, che blocca il sistema violato.
  • Attacco OFFLINE: può essere fatto se è già stato estratto il database degli hash delle password. Questo può essere ottenuto in diversi modi:
  1. 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);
  2. compromissione del DB di un applicativo;
  3. 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;
  4. trasmissione di hash in rete per autenticazione;
  5. intercettazione attraverso la rete Wi-Fi.

Impossessatosi degli hash delle password l’attaccante avrà 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.

Una prima modalità è la creazione delle “Rainbow Table” (tabelle arcobaleno): sono tabelle dove vengono inseriti tutti gli input possibili e ne vengono calcolati i rispettivi hash. Sono state inventate da Martin Hellman, il creatore (assieme a Whitfield Diffie) dell’algoritmo Diffie-Hellman per lo scambio delle chiavi, che ha permesso lo sviluppo della crittografia a chiave pubblica.

Le rainbow table sono file di enormi dimensioni, anche oltre i 100 GB, che si possono trovare in rete.

Per contrastare le rainbow table e renderne più difficile l’utilizzo, è buona regola aumentare la lunghezza della password: in questo modo aumenteranno esponenzialmente anche le dimensioni delle “tabelle arcobaleno” necessarie.

Un’altra contromisura usata oggigiorno è il cosiddetto salt (sale): quando un utente imposta una password, il sistema crea un valore casuale aggiuntivo, il salt. Questo valore si aggiunge alla password nella funzione di hash e produce così un altro valore, differente da quello generato dalla sola password.

Questa misura aggiuntiva risulta efficace proprio contro le rainbow table, ma potrebbe non bastare per difenderci da altri tipi di attacchi quali il “brute force” e l’attacco “a dizionario”.

Attacco alle password: tecniche di cracking

Analizziamo adesso le principali tecniche di hacking utilizzate dai criminal hacker nel tentativo di rubare le password delle proprie vittime.

Brute Force

È l’attacco classico che si realizza offline, senza dover mantenere una connessione con il sistema della vittima, a condizione di aver già 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.

Si trovano inoltre servizi gratuiti di cracking online (in rete non manca nulla):

  1. hashkiller.co.uk
  2. hashes.org
  3. crackstation.net

Pur essendo un attacco rudimentale, perché opera “a forza bruta”, 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 GHz/sec., 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 poiché il tempo non è – nella pratica – un aspetto trascurabile (a nessuno interessa impiegare anni o secoli per violare un sistema…), vediamo quali sono le variabili che influiscono sul tempo necessario perché l’attacco abbia successo:

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

Un esempio chiarirà meglio questi aspetti:

  1. una password di 8 caratteri composta di soli numeri avrà un numero di combinazioni pari a 108 = 100.000.000. Con una potenza di analisi di 100 GH/s verrà scoperta in molto meno di un secondo;
  2. se la password è lunga invece 14 caratteri ed utilizza tutti i tipi di caratteri disponibili sulla tastiera (quindi numeri, lettere minuscole e maiuscole, caratteri speciali, in totale 95) avrà un numero di combinazioni pari a 9514 = 4,8×1027. A 100 GH/s serviranno circa 1.546 milioni di anni. Quindi la complessità della password rende impraticabile l’attacco brute force.

Per questo è stato introdotto il concetto di “entropia”, che ci fornisce la misura della forza di una password. Ne tratteremo in seguito.

Attacco “a dizionario”

L’attacco brute force è altamente inefficiente, come abbiamo dimostrato. Per questo gli attaccanti ricorrono a metodi più efficaci ed intelligenti che – sfruttando le cattive abitudini degli utenti – riescono a restringere il campo di ricerca.

Uno dei metodi utilizzato è l’attacco “a dizionario”: poiché le persone usano per le loro password parole di senso compiuto, queste saranno le prime che gli attaccanti proveranno.

Uno (o più) file dizionario viene caricato dal software di password cracking, che 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.

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 e via dicendo.

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

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

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 è: 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.

Tecniche combinate

Vengono chiaramente combinate insieme le varie tecniche precedentemente illustrate.

Attacco alle password: cos’è il concetto di entropia

Concludiamo illustrando il concetto di entropia, utilizzato in crittografia per dare una misura matematica della complessità di una password. Una password con una maggiore entropia è più difficile da scoprire.

La nozione di entropia è stata introdotta nel 1948 da Claude Shannon, ingegnere e matematico statunitense, definito “il padre della teoria dell’informazione”. Nel 1948 pubblicò il saggio “Una teoria matematica della comunicazione”, un trattato scientifico che poneva la base teorica per lo studio dei sistemi di codificazione e trasmissione dell’informazione. Fu in questa ricerca che Shannon coniò la parola bit, per designare l’unità elementare d’informazione.

Ed il bit viene utilizzato appunto come unità di misura dell’entropia di una password.

Vediamo di cosa si tratta: se la password viene scelta con le stesse probabilità per ogni simbolo, ci sono NL password possibili (ove N=numero simboli possibili; L=lunghezza password).

L’entropia H di una password è definita quindi come:

H=log2(NL) = L x log2(N), (ove log2=logaritmo in base 2)

Ovvero:

H = L x (Log10N/Log102) (ove Log10=logaritmo in base 10)

Per un corretto livello di sicurezza, la password dovrebbe avere un’entropia di almeno 64 bit.

Oltre 128 bit non è più necessario incrementare la forza della password in quanto l’ulteriore aumento di sicurezza sarebbe superfluo (questo per le potenze di calcolo dei computer attuali).

Vediamo un esempio pratico (supponendo di utilizzare tutti i 95 caratteri disponibili):

  • Password di 12 caratteri: H = log2(9512) = 78,838 bit
  • Password di 20 caratteri: H = log2(9520) = 131,397 bit

Questo ci fa concludere che una password lunga 20 caratteri e che utilizzi tutti i tipi di caratteri (numeri, lettere minuscole e maiuscole, caratteri speciali) è ampiamente sufficiente a garantire un elevato livello di sicurezza.

Ovviamente a condizione che questa password non venga poi scritta in un foglietto in bella vista sulla tastiera o sullo schermo del computer!

E questo dimostra ancora una volta che: “Il fattore umano è veramente l’anello più debole della sicurezza”, The Art of Deception, Kevin Mitnick, 2002.

@RIPRODUZIONE RISERVATA

Articolo 1 di 5