Vous êtes sur la page 1sur 39

UNIVERSIT DEGLI STUDI DI SIENA

Facolt di Ingegneria
Corso di Laurea in INGEGNERIA INFORMATICA

Studio ed implementazione di un algoritmo per la valutazione della qualit delle password


Tesi di Federico Stendardi

Relatore: Prof. Marco Maggini

Correlatore: Carlo Bardi

Anno Accademico 2006/2007

INDICE
AUTENTICAZIONE CON PASSWORD..................................................................................................... 3 Introduzione ...................................................................................................................................... 3 Tipologie di password...................................................................................................................... 3 Memorizzazione delle password ................................................................................................... 5 PASSWORD CRACKING................................................................................................................... 6
Attacchi alle password ............................................................................................................................................... 6 Metodi di attacco........................................................................................................................................................ 7

PASSWORD NEI SISTEMI UNIX ............................................................................................................... 9 PASSWORD NEI SISTEMI WINDOWS ................................................................................................... 10 Hash LM ........................................................................................................................................... 10 Hash NTLM ....................................................................................................................................... 11 ROBUSTEZZA DELLE PASSWORD........................................................................................................ 12 Il concetto di casualit ................................................................................................................. 12 Aumentare la sicurezza di una password ................................................................................. 15 La validit di una password ......................................................................................................... 21 CURA E PREVENZIONE DAGLI ATTACCHI ....................................................................................... 22 One-Time Password ....................................................................................................................... 24 Secure Remote Protocol (SRP) .................................................................................................... 25 Controllo preliminare di password (Proactive Password Checking) .................................... 26
Gestione del dizionario ............................................................................................................................................ 27 Smart Brute Forcing................................................................................................................................................. 31

PROGETTAZIONE E IMPLEMENTAZIONE DI UN ONLINE PROACTIVE CHECKER ............. 34 Scopo............................................................................................................................................... 34 Progettazione ................................................................................................................................. 34 Modello probabilistico della password...................................................................................... 37 Esempio di funzionamento del modello .................................................................................... 38 BIBLIOGRAFIA ........................................................................................................................................... 39

AUTENTICAZIONE CON PASSWORD


Introduzione Una password una forma di autenticazione segreta usata per controllare laccesso a una risorsa. A dispetto del nome, la password non necessariamente una parola anzi preferibile se non lo , poich pi difficilmente indovinabile da malintenzionati. Un altro nome utilizzato al posto di PASSWORD PASSPHRASE. Un PASSCODE invece una chiave di accesso composta esclusivamente da numeri (come il PIN). Oggi le password, in una forma o nellaltra, sono da tempo associate alla sicurezza. Ce lo conferma la vita di tutti i giorni: per aprire una porta, per passare un controllo o per accedere ad aree private utilizziamo delle parole dordine. I codici segreti sono una parte indispensabile della vita moderna. Sono utilizzati per controllare le caselle vocali e di posta elettronica; permettono di prelevare denaro dagli sportelli Bancomat e di collegarsi ad un conto bancario online; sono impiegati per autorizzare transazioni finanziarie e per acquistare e/o vendere prodotti attraverso Internet; consentono di limitare laccesso a connessioni Internet wireless e di cifrare i dati personali pi sensibili. E possibile che sia richiesta una password addirittura per ordinare una pizza, acquistare dei fiori, noleggiare un DVD o far lavare la macchina. Il mondo in cui viviamo pieno di segreti! Che si usi la definizione di password, PIN, codice di accesso o qualche altro nome, si tratta sempre di chiavi segrete che permettono di accedere a parti protette della nostra vita. Le password non sono per semplici chiavi daccesso. Esse, infatti, permettono di autenticarsi su una macchina per accertare la propria identit, garantiscono il rispetto della privacy proteggendo le informazioni pi sensibili e impongono il non disconoscimento, in altre parole limpossibilit di non riconoscere la validit delle transazioni autenticate tramite una password. Lusername identifica lutente, la password lo convalida. Le password, per, presentano delle debolezze: possibile che pi persone contemporaneamente conoscano il segreto. A differenza di una chiave fisica che pu essere nelle mani di una sola persona per volta, non c garanzia che qualcun altro non abbia in qualche modo ottenuto la nostra password, che ne siamo informati o meno. Inoltre, il pericolo che la nostra password possa essere scoperta da un malintenzionato costante. I furti di password si verificano ogni giorno, a migliaia. La nostra unica difesa costruire una password forte, proteggerla con cura e cambiarla regolarmente. Laltro punto debole che interessa le password il comportamento umano. Per natura luomo non teme i pericoli che non percepisce. Infatti, non possiamo immaginare perch mai qualcuno dovrebbe volere accedere al nostro account di posta elettronica o di rete. Con le password che abbiamo scelto, ci sentiamo al sicuro. Proprio per questo motivo, spesso scegliamo password deboli, facilmente indovinabili dagli hacker grazie allausilio di appositi programmi. Tipologie di password La maggior parte delle password scelte dagli utenti sono facilmente riconducibili ai seguenti gruppi: Parole comuni non sicure. In questa categoria sono inclusi i termini tratti da un dizionario, il nome o il cognome dellutente, password comuni o semplici frasi facilmente reperibili in altri elenchi di parole. Queste sono le password peggiori perch sono vulnerabili agli attacchi con dizionario. Alcuni esempi di queste password sono:
3

auto giardino macchinadacucire federico

Parole non sicure con laggiunta di numeri. Leggermente pi sicure delle semplici parole queste password includono numeri che vengono aggiunti allinizio o alla fine nel tentativo di renderle pi sicure o per soddisfare i requisiti di specifici criteri. Di seguito sono proposti alcuni esempi: love2000 maurizio69 666devil

Parole comuni non sicure con semplice offuscamento. Anche in questo caso le password sono solo leggermente pi sicure delle semplici parole perch alcuni caratteri vengono sostituiti oppure perch vengono volutamente inseriti errori di ortografia. Di seguito sono proposti alcuni esempi: g3rman0 m@tt30 $a$$o

Parole non sicure doppie. La maggior parte degli strumenti impiegati per il crack di password ricerca questo semplice pattern. Ecco alcuni esempi: ciaociao gattomatto patpat

Casualit contorta. Tecnicamente queste password sono pi sicure perch sono casuali e meno prevedibili, ma ai fini della sicurezza altrettanto importante scegliere una password che sia facile da ricordare e da digitare. Di seguito sono proposti alcuni esempi: 9uxg$t5C Bn2#sz63j &fM3tc8b

Pattern o sequenze. Queste password sono cos comuni che potrebbero appartenere alla categoria delle semplici parole. Includono un pattern o una sequenza basata sullaspetto o sulla forma delle lettere oppure sulla posizione dei tasti sulla tastiera. Ecco alcuni esempi:

QWERTY zxcvb 123456 asd123

Memorizzazione delle password Prima di analizzare i vari metodi di attacco necessario approfondire come le password vengono memorizzate nei vari sistemi, al fine di verificare lautenticazione in sede di login. Esistono essenzialmente tre metodi per memorizzare le password allinterno di un database: tramite testo in chiaro tramite cifratura tramite hashing Il primo metodo quello pi semplice ma anche quello pi insicuro. Esso consiste nel memorizzare la password cos come viene inserita dallutente (senza cio subire trasformazioni) allinterno di un database protetto (laccesso consentito solo a un ristretto gruppo di persone, di solito gli amministratori). In fase di autenticazione il sistema non deve far altro che confrontare la password immessa con quella presente nel database per autenticare, o no, lutente. Risulta evidente che essendo il database accessibile da altri utenti, lo sono di conseguenza anche le password, che diventano perci vulnerabili, soprattutto nel caso in cui sia un hacker a ottenere laccesso al database. Il secondo metodo pi sicuro del precedente, e consiste nel legare la password a una chiave segreta per formare una stringa contorta tale che da essa si possa risalire alla password di partenza utilizzando la stessa chiave. In pratica la cifratura consiste nel memorizzare la password proteggendola con un'altra password (la chiave segreta). Nel momento in cui si viene a conoscenza della chiave segreta, facile decifrare tutte le password nel database. Per quanto sia non del tutto sicuro, questo metodo a volte necessario nei casi in cui si renda indispensabile ricondursi alla password in chiaro dalla versione cifrata. Per esempio in Windows le password per accedere a vari servizi vengono cifrate prima di essere registrate; in seguito vengono decifrate quando per esempio troviamo nel pannello di accesso a un servizio la password gi digitata (oscurata da asterischi). C da dire che i programmatori dovrebbero utilizzare sistemi di cifratura universalmente riconosciuti come validi ed efficaci, evitando di crearne di propri o utilizzare quelli che si sono rivelati da tempo insicuri.
5

Il terzo metodo sicuramente quello pi sicuro dei tre presentati. Tramite lhashing, la password viene posta in ingresso a una funzione hash e il risultato prodotto da tale algoritmo viene memorizzato nel database delle password. Tali funzioni sono del tipo one-way (a una via) nel senso che non possibile invertire il processo (ricondursi dallhash alla password in chiaro) ed per questo che il livello di sicurezza maggiore rispetto ai precedenti metodi. Lautenticazione avviene eseguendo lalgoritmo di hashing sulla password inserita e confrontando il risultato con quello presente nel database; se esiste una corrispondenza, laccesso viene autorizzato, altrimenti viene negato. In ogni caso anche se questo metodo rende le password esposte meno direttamente, non da escludere che sia vulnerabile a certi tipi di attacchi. PASSWORD CRACKING Il crack di password un metodo che consiste nellutilizzo di vari strumenti e tecniche per indovinare, determinare in modo metodico oppure recuperare una password con lobiettivo di ottenere laccesso non autorizzato a una risorsa protetta. Il crack di password pu essere utilizzato legittimamente per recuperare una password dimenticata, e a volte gli amministratori si servono di questo metodo per testare le password degli utenti. Generalmente, per, una pratica utilizzata per rubare password. Pertanto alcuni la definiscono un gioco, altri un reato. Indipendentemente dalla definizione, per, sia gli esperti dinformatica sia i principianti la utilizzano, visto che esistono molti strumenti alla portata di tutti che permettono di automatizzare il crack delle password (esempi di tali strumenti sono Crack, John The Ripper, Cain & Abel, ). Attacchi alle password Esistono diversi metodi di attacco alle password, spesso usati in modo combinato, che permettono di recuperare in modo rapido ed efficace le password degli utenti. C da dire che i metodi utilizzati variano a seconda del sistema destinatario dellattacco; per esempio molti sistemi impongono un limite al numero di tentativi che si possono effettuare per indovinare la password (basti pensare agli account bancari). I metodi di attacco si possono suddividere in due categorie: attacchi online e attacchi offline. Un attacco online utilizza i normali meccanismi di accesso a un sistema; tipicamente viene visualizzato un prompt nel quale lhacker deve inserire, manualmente o in modo automatizzato, la password di accesso. Questi attacchi sono quelli pi facilmente individuabili e bloccabili, e quindi non sono molto utilizzati, in quanto lhacker deve riuscire a indovinare velocemente la password prima di essere scoperto. Esistono per metodi per effettuare attacchi online senza il rischio di essere scoperti (per esempio effettuando un tentativo ogni tot di tempo, oppure utilizzando una password comune su un elenco di nomi utenti). Gli attacchi offline invece sono pi sofisticati e inoltre non sono rilevabili. Essi si verificano quando un hacker riesce ad entrare in possesso del file contenente le password; tramite appositi strumenti possono provare milioni di password fino a trovare qualche corrispondenza in tale file. Tali attacchi sono limitati solo dalla potenza di calcolo o dalla pazienza di chi li effettua, visto che non devono utilizzare i meccanismi di autenticazione del sistema di destinazione. In linea di massima un attacco offline viene effettuato impiegando una password e confrontando il suo hashing con quelli presenti nel file delle password. Appena viene trovata una corrispondenza la password trovata. Ovviamente per accedere al database delle password un hacker deve riuscire ad abbattere le barriere di sicurezza del sistema in questione. Spesso per tale operazione non difficile a causa della
6

superficialit con cui alcuni amministratori controllano la sicurezza dei loro sistemi. Infatti ogni sistema operativo presenta delle vulnerabilit che vengono corrette appena individuate, ma questo richiede unattenzione costante negli aggiornamenti dei propri sistemi. Metodi di attacco Tirare a indovinare Spesso e volentieri accade che molti utenti scelgano password deboli, di solito collegate in qualche modo a loro. Numerose ricerche e studi hanno dimostrato che circa il 40% delle password scelte dagli utenti sono facilmente indovinabili dai programmi di cracking. Esempi di password insicure sono: password vuota password,passcode,admin e loro derivati Il nome dellutente o lusername di login il nome di persone significative per lutente (fidanzata/o, madre, padre..) il luogo di nascita o la data di nascita il nome di un animale il codice della patente semplici modifiche delle precedenti (per esempio rigirando una parola, aggiungendo qualche numero in fondo alle stesse,..) pattern derivanti dal layout delle tastiere (tipo QWERTY, xcvbn,..) e altre ancora. Qualche utente si rifiuta persino di cambiare la password che gli viene data di default al momento della creazione dellaccount; ci favorisce il lavoro degli hacker visto che esistono numerose liste di password di default utilizzate da vari sistemi. Attacchi con dizionario Gli attacchi con dizionario enfatizzano ulteriormente la tendenza delle persone di scegliere password deboli e facilmente prevedibili. I programmi di cracking sono quasi tutti provvisti di elenchi di parole (words lists) pi o meno sofisticati, che possono contenere milioni e milioni di vocaboli tra cui: vocaboli in varie lingue nomi propri di persone luoghi password comuni nomi di persone famose nomi di film

Lattacco con dizionario avviene utilizzando come password le parole contenute nel dizionario, incluse semplici varianti di tali parole, nella speranza di trovare una corrispondenza. Grazie alla potenza dei moderni calcolatori possibile verificare migliaia di password al secondo,
7

incrementando notevolmente la possibilit di trovare una corrispondenza. Questo metodo, combinato con il precedente, in grado di recuperare il 50% delle password nella maggior parte dei sistemi attuali. Attacco a forza bruta Quando nessuno dei due metodi precedenti ha sortito un esito positivo, non resta che tentare con il metodo meno sofisticato ma pi diretto, ovvero provare tutte le possibili password. Questo metodo teoricamente infallibile, nel senso che alla fine produrr almeno un risultato positivo. In pratica per il tempo necessario per arrivare a tale risultato aumenta esponenzialmente con laumentare del numero dei caratteri minimi che compongono una password e della dimensione del set di caratteri utilizzati in tali password. Rainbow table Gli attacchi non in linea prevedono lhashing di milioni di password al fine di trovare qualche corrispondenza nel computer di destinazione. Per facilitare tale compito esistono delle tabelle precompilate con hash di milioni di password. La creazione di queste tabelle richiede molto tempo, ma una volta completate possibile decodificare un numero elevato di password in pochi secondi. Le rainbow table sono importanti perch rendono immediatamente vulnerabile ogni password contenente meno di 15 caratteri. Rapporti sociali ingannevoli E possibile che un hacker ottenga la vostra password semplicemente chiedendovela. Sebbene sia il trucco pi vecchio del mondo, una tecnica ancora molto efficace. Gli hacker possono inviarvi un messaggio di posta elettronica in cui vi comunicano che il vostro account di Ebay o Paypal stato sospeso e vi chiedono di immettere la vostra password (tecnica nota col nome di pishing). La miglior difesa contro questi tipi di attacchi di non rivelare mai a nessuno la propria password. Altre tecniche Gli hacker dispongono di numerose tecniche di attacco: possono servirsi di keylogger per registrare ogni tasto premuto sulla vostra tastiera, oppure di sniffer, strumenti specializzati che consentono di controllare il traffico di rete per captare le password inviate attraverso la rete senza essere cifrate. E ancora, possono sfruttare le vulnerabilit dei browser web per ottenere i cookie che potrebbero contenere informazioni di autenticazione. Le tecniche impiegate sono molte e in costante evoluzione.

PASSWORD NEI SISTEMI UNIX


Nei sistemi operativi Unix ogni utente possiede una password; tali password vengono elaborate tramite una funzione hash, e il risultato memorizzato nel sistema. In questo modo il sistema non ha bisogno di conoscere la password: quando lutente la fornisce ne calcola lhash e lo confronta con quello memorizzato. Lhash utilizzato da Unix ( noto come crypt() ) basato su una versione modificata del DES: si utilizza la password (8 caratteri, 7 bit per carattere danno 56 bit) come chiave per cifrare 64 bit di zeri, ripetendo la procedura 25 volte. Il risultato costituisce lhash e viene memorizzato nel file delle password, situato in /etc/passwd. Nellalgoritmo viene utilizzato anche un numero casuale detto salt di 12 bit, che viene salvato poi in chiaro insieme con lhash. Il salt serve a rendere pi difficili gli attacchi con dizionario (lattaccante deve provare tutti i possibili valori di salt), a generare hash diversi da password uguali e a modificare lalgoritmo DES rispetto a quello standard. Lutilizzo infatti di una versione modificata del DES e la ripetizione della cifratura per 25 volte hanno lo scopo di peggiorare le prestazioni. Questo perch a suo tempo (negli anni 70) si voleva rallentare il calcolo dellhash, per rendere pi difficili attacchi che impiegano molti tentativi. Oggi per la potenza di calcolo che un attaccante pu possedere rende quasi vano questo tentativo di aumentare la sicurezza dellalgoritmo di hash. In Unix viene utilizzato il meccanismo delle shadow password. Visto che il file delle password deve essere leggibile da tutti, gli hash delle password vengono memorizzati in un altro file (/etc/shadow) leggibile solo dallutente root (da notare che per eseguire un attacco off-line necessario avere a disposizione gli hash).

Figura 1 - Autenticazione in UNIX

PASSWORD NEI SISTEMI WINDOWS


I sistemi operativi Windows orientati alle reti fino a Windows NT4 utilizzavano due tipologie di hashing: LAN Manager (LANMAN o LM) NT LAN Manager (NTLM, NTLMv2)

A partire da Windows 2000 Microsoft ha abbandonato la famiglia LM/NTLM e ha adottato una versione modificata di Kerberos v5 (protocollo standard gi diffuso da anni in ambiente Unix). I vecchi protocolli sono comunque tuttora in uso per ragioni di compatibilit con sistemi Windows 9x/NT. Hash LM La tecnica di hashing LM utilizza tecniche di password hashing e autenticazione a sfida e risposta. Lhash della password calcolato cos: La password viene troncata a 14 caratteri, oppure, se pi corta, sono inseriti in coda dei caratteri nulli I caratteri vengono convertiti in maiuscolo La stringa di 14 caratteri viene divisa in due stringhe da 7 caratteri (prima e seconda met) Ognuna delle due stringhe viene utilizzata come chiave DES (7 caratteri x 8 bit/carattere = 56 bit) per cifrare una costante di 64 bit (KGS!@#$%) I due risultati vengono concatenati in una stringa di 128 bit che costituisce lhash

Lhash LM, lungo 128 bit, potrebbe sembrare a prima vista pi forte di quello Unix (lungo 64 bit), ma invece presenta enormi difetti. Infatti la conversione dei caratteri in maiuscolo riduce di molto lentropia della password, che sar ben lontana dagli 8 bit per carattere considerati. Inoltre, al contrario dellhash Unix, LM non prevede un salt, per cui attacchi a dizionario sono molto pi semplici. Infine la suddivisione della password nelle due met semplifica moltissimo il cracking; infatti dopo questa divisione accade che la dimensione dello spazio diminuisce molto: con una password alfabetica di 14 caratteri lo spazio grande 2614 = 6,5 x 1019 = 65,8 bit, ma con due password alfabetiche di 7 caratteri diventa 2x267= 1,6x1010=33,9bit. Il cracking delle due met pu infatti essere fatto separatamente, e tra laltro risulta pi semplice del previsto, visto che spesso la seconda met sar pi corta di 7 caratteri (in quanto la password sar molto probabilmente pi corta di 14 caratteri). La seconda met cos scoperta potrebbe essere daiuto per scoprire la prima met. Per lautenticazione diretta LM prevede un meccanismo a sfida e risposta; secondo tale meccanismo il server invia una sequenza casuale di 64 bit (sfida), il client invece calcola lhash LM della password aggiungendo 40 bit di zeri e suddividendo il risultato in tre blocchi da 56 bit. Ogni blocco viene utilizzato come chiave DES per cifrare la sfida, la risposta data dalla concatenazione dei tre risultati (192 bit). I problemi derivanti da questo meccanismo sono essenzialmente due:
10

possibile con una coppia sfida-risposta crearsi un dizionario per ottenere le password; ci che viene utilizzato per autenticarsi la password (o meglio il suo hash ma si tratta pur sempre della password memorizzata in un modo diverso).

Hash NTLM Lhash NTLM un miglioramento del precedente algoritmo di hashing visto che elimina la conversione della password in maiuscolo e la sua divisione a met. Tale sistema prevede che la password sia codificata in Unicode (16 bit per carattere), preservando maiuscole e minuscole. In seguito viene calcolato un hash MD4 della stringa Unicode (128 bit). Per quanto riguarda lo schema di autenticazione esso identico a quello per LM, ovviamente utilizzando lhash NTLM. Il problema sorge dal fatto che molti client, per problemi di compatibilit, inviano sia la risposta NTLM che quella LM. In tal modo un hacker pu effettuare il cracking dellhash LM, e una volta ottenuta la password in maiuscole effettua un altro cracking dellhash NTLM per scoprire quali lettere sono invece minuscole.

11

ROBUSTEZZA DELLE PASSWORD


La robustezza delle password si riferisce al grado di difficolt per una persona non autorizzata di indovinarla. Le password sono spesso classificate in deboli, vulnerabili e forti in base alla difficolt nellindovinarle. I termini debole e forte sono relativi e hanno significato solo se messi in relazione agli specifici sistemi che gestiscono le password. La necessaria qualit delle password dipende da come i sistemi di autenticazione limitano i tentativi di indovinare una password utente, sia che essi siano fatti da persone che conoscono bene un utente, sia che siano fatti da un computer (costretto a provare milioni di possibilit). In ogni caso bene tener presente che anche una password forte pu essere comunque rubata o estorta ad un utente, raccolta da un keylogger, intercettata durante il transito nella rete, o scoperta in altri modi. In linea generale una password pu considerarsi robusta se completamente casuale, cio non prevedibile. Questo perch vanifica ogni attacco di tipi dizionario, obbligando lhacker ad optare per una ricerca esaustiva (brute force), che in certe situazioni risulta praticamente infattibile. Purtroppo per per luomo non semplice essere imprevedibili e spesso nel tentativo di esserlo finisce col diventare fin troppo prevedibili. La casualit lelemento pi importante della sicurezza ma anche quello pi difficile da ottenere, questo perch la password per essere sicura deve essere anche facilmente memorizzabile, al fine di impedire allutente di doverla annotare da qualche parte. Il problema sorge dal momento che la memoria umana ha difficolt nel memorizzare stringhe casuali di caratteri per un arbitrario periodo di tempo. Al contrario essa memorizza facilmente stringhe o pezzi di esse che hanno un senso, come parole del dizionario o altri pattern che assumono un significato per lutente che lo utilizza. Ci impone ad un utente di scegliere password ridondanti, spesso collegate alla propria vita personale o allambiente in cui vive, selezionando termini e numeri per lui significativi invece di attingere dallampia gamma di parole disponibili. Tali password sono quelle che vengono facilmente scovate dai programmi di cracking e sono quelle considerate deboli. Il concetto di casualit La casualit uno strano concetto, che non facile da definire con esattezza. Si definisce casuale qualcosa che apparentemente non presenta un pattern in sequenza. La sequenza 1, 2, 3, 4, 5 non casuale in quanto facilmente visibile un pattern, oltre che intuitivamente prevedibile il prossimo elemento. La sequenza 15, 68, 57, 156, 35, 92 invece completamente casuale in quanto non possibile prevederne il successivo elemento. Se non esiste una formula o un pattern per riprodurre una sequenza, allora essa pu considerarsi casuale. E difficile determinare univocamente se una sequenza o no casuale, quindi per fare ci necessario analizzarne tre propriet. Distribuzione uniforme Essa prevede che nella produzione di una sequenza casuale di dati si possano ottenere tutti i risultati con la stessa probabilit. Poich la distribuzione uniforme, si presuppone che dopo un certo periodo di tempo i dati generati in maniera casuale includano lintero set di dati. Le lingue parlate dalluomo non sono casuali, e lo stesso vale per le password da esse derivate. Nei due grafici
12

seguenti viene mostrata la distribuzione di caratteri per password reali (scelte dalluomo) e per password generate da un computer.

Figura 2 - Distribuzione delle password utilizzate comunemente

Figura 3 - Distribuzione password generate dal calcolatore

Dal primo grafico risulta evidente che preferiamo lutilizzo di lettere minuscole e di alcuni numeri, se invece le password fossero casuali avrebbero una distribuzione simile a quella del secondo grafico. C da dire che la distribuzione uniforme di sequenze casuali non implica che landamento
13

sia quello del grafico, ma stabilisce solo la probabilit che ci avvenga; infatti la distribuzione uniforme la media statistica che si ottiene analizzando molti esempi (in numero finito ovviamente). Quindi in una distribuzione uniforme i dati possono essere di diversi formati: dislocati in modo uniforme, raggruppati oppure una combinazione dei due. Risulta evidente che per garantire una maggiore sicurezza delle password necessario che la distribuzione dei caratteri sia simile a quella del secondo grafico. Imprevedibilit Ci che determina la casualit di un elemento la mancanza di esperienza acquisita dagli elementi precedenti al fine di prevedere quali elementi appariranno successivamente in una sequenza. In altre parole una sequenza di elementi casuale se ognuno di essi indipendente dallaltro. Claude Shannon studi a fondo la casualit di una sorgente di informazioni, arriv a formulare una misura, chiamata entropia, che in un certo qual modo d una stima della casualit di una sorgente. La formula dellentropia data da:

p ( s ) log( p ( s ))
sS

dove S rappresenta linsieme dei simboli della sorgente, s rappresenta uno specifico simbolo, p(s) denota la probabilit per un certo simbolo di comparire in una sequenza. Da questa formula risulta evidente che sequenze con pochi simboli molto probabili (p(s) vicina ad 1 per pochi simboli) hanno una bassa entropia, cio danno poca informazione. Al contrario sequenze con simboli poco probabili danno unelevata entropia, cio molta informazione. Daltronde se per esempio analizziamo la frase essere o non essere cos di primo acchito possiamo dire che d informazione 19 (il numero dei caratteri di cui composta incluso lo spazio). Analizzandola attentamente per notiamo che questa sequenza composta solo da 5 caratteri diversi. Approfondendo ancora di pi possiamo dire che la sequenza utilizza solo due frasi distinte, essere e o non , dando informazione 2. In pratica quindi siamo arrivati a concludere che tale sequenza offre una bassa entropia, perch anche omettendo alcuni caratteri possibile ricondursi alla sequenza di partenza, tutto questo perch essa prevedibile. La stessa cosa vale per le password, visto che una sequenza (pi o meno casuale) di simboli. Password come aaaaaaaa oppure 123456 hanno una bassissima entropia, e sono facilmente prevedibili. Una password invece tipo xc1*Jb4.> ha unalta entropia. Quindi buona norma utilizzare password con alta entropia, ci non toglie che lentropia nel modo in cui stata definita (cio riferita al singolo simbolo) non vale nel caso di attacchi a dizionario. Una password del tipo Francesco359 potrebbe sembrare a prima vista una sequenza con unentropia abbastanza elevata da potersi considerare sicura. Ci invece sbagliato; i programmi di cracking pi sofisticati (e gli hacker con grossa potenza di calcolo a disposizione) provano spesso ad aggiungere uno o pi caratteri in testa e/o in coda ai vocaboli del dizionario. Quindi basta aggiungere il numero 359 in coda alla parola Francesco (comunemente reperibile in molti dizionari o elenchi di nomi di persona) per crackare con successo la password. In definitiva lentropia nel senso pi classico non pu essere usato come misura per contrastare gli attacchi con dizionario, ma risulta utile contro gli attacchi a forza bruta (verr analizzato pi avanti).

14

Unicit Se consideriamo una sequenza casuale di caratteri, la probabilit di ripetere due volte la stessa sequenza risulta molto bassa. Anzi, aumentando la lunghezza di tale sequenza, la probabilit di ripetizione decresce ancor di pi (ecco perch molto difficile indovinare un numero di carta di credito, visto che per ogni numero valido ce ne sono svariati milioni non validi). Visto che le distribuzioni casuali implicano che tra i caratteri non ci sia alcuna relazione, altamente improbabile che due sequenze realmente casuali si ripetano. La mancanza di casualit come gi pi volte detto uno dei punti deboli delle password. Se facciamo riferimento ad un vocabolario per esempio della lingua inglese, notiamo che il numero di vocaboli, anche supponendo laggiunta di pattern numerici al termine di ogni parola, molto limitato rispetto alle reali possibilit offerte dalle password casuali. Considerando password di 8 caratteri minuscoli, abbiamo che se generate casualmente possibile selezionare 268 sequenze(si tratta di disposizioni con ripetizione), ovvero 208.827.064.576 differenti password. Il vocabolario inglese invece presenta poco pi di 17.000 vocaboli di 8 lettere, e quindi si arriva a notare che per ogni vocabolo ce ne sono pi di 12 milioni non utilizzati perch sono sequenze che in inglese non hanno senso; un enorme spreco. E per questo che le password non casuali finiscono per essere riunite in gruppi di sequenze tra loro simili, e non distribuite uniformemente in tutto lo spazio disponibile. Ci riduce lo spazio in cui un hacker deve cercare, ovviamente tutto a suo vantaggio visto che in tale spazio pu effettuare molte trasformazioni sulle parole per tentare di trovare una password valida. Cenni sulla casualit delle macchine Abbiamo parlato in precedenza della possibilit di utilizzare un computer per generare password casuali. Per come viene inteso il termine casuale per non corretto affermare che una password generate in modo casuale da un pc si pu considerare realmente casuale. I pc infatti sono costituiti da componenti elettronici che si prendono il compito di eseguire operazioni aritmetiche. Tali componenti per necessitano di istruzioni precise su quali operazioni effettuare, quindi anche per generare numeri (pseudo)casuali il programmatore deve fornire un set distruzioni atte a creare un numero. Tali set distruzioni sono parte integrante di programmi chiamati PSEUDO-RANDOM NUMBER GENERATOR (PRNG), ovvero generatori di numeri pseudo - casuali. In questi programmi presente un algoritmo che a partire da un valore iniziale prefissato (detto seme) genera numeri apparentemente casuali e non correlati, ma ovviamente facili da prevedere se si conosce lalgoritmo. In ogni caso anche se una password generata da un PRNG non completamente casuale comunque la pi valida scelta per creare password sicure e robuste (il problema viene dopo nel dover memorizzare tale password). Aumentare la sicurezza di una password Aumentare la robustezza della password unoperazione pi semplice di quel che si pensi e richiede uno sforzo minimo se paragonato ai vantaggi che pu dare alla sicurezza del proprio codice segreto. Anche se vogliamo escludere lutilizzo dei generatori di password, possibile comunque creare password abbastanza casuali e resistenti agli attacchi e al tempo stesso facili da ricordare. Innanzitutto un fattore importante nella scelta delle password la sua lunghezza, ci da quanti caratteri composta. Intuitivamente password corte sono pi facili da individuare anche seguendo metodi brute force. E interessante notare per che aumentando il numero di caratteri aumenta in
15

modo esponenziale il numero di password possibili, cio lo spazio delle password. Infatti dato un insieme A di simboli e una lunghezza n, il numero N di possibili password ottenibile combinando tra loro i simboli dellinsieme A dato dalla seguente formula:

P=|A|n
Dove |A| denota la cardinalit dellinsieme A. Nella seguente tabella viene fornito un esempio per password composte da caratteri alfabetici minuscoli (|A|=26):

n 3 4 5 6 7 8 9 10 11 12 13 14 15

P 17.576 456.976 11.881.376 308.915.776 8.031.810.176 208.827.064.576 5.429.503.678.976 141.167.095.653.376 3.670.344.486.987.780 95.428.956.661.682.200 2.481.152.873.203.740.000 64.509.974.703.297.200.000 1.677.259.342.285.730.000.000

Figura 4 - Variazione dello spazio delle password al variare della lunghezza

Il numero P che descrive la cardinalit dellinsieme delle possibili password, in relazione alla lunghezza che essa ha e al set di caratteri utilizzati, quello che dobbiamo aumentare per far s che eventuali attacchi brute force non siano computabili. Infatti tale numero non ha effetto sugli attacchi a dizionario; per esempio la password SUPERCALIFRAGILISTICHESPIRALIDOSO ha 33 caratteri maiuscoli (il set complessivo 26 come quello minuscolo ovviamente), e lo spazio di password in cui stato selezionato comprende in totale circa 4,9*1046 possibili sequenze. Un numero ovviamente improponibile per un attacco brute force, ma risulta in pratica nullo per un attacco a dizionario, visto che tale parola molto probabilmente contenuta in qualche elenco (per esempio elenchi riferiti a cartoni animati). Questo per non vuol dire che non possiamo usare password per noi facili da ricordare, infatti esistono dei metodi per poter utilizzare parole comuni e che vedremo pi avanti in questa sezione. Prima di esaminarli bene notare che la lunghezza non il solo parametro che dobbiamo prendere in considerazione per vanificare gli attacchi brute force. Dalla formula precedente si pu facilmente vedere che un altro parametro che conta linsieme dei
16

caratteri utilizzati nella password, in particolare i set utilizzati. Tipicamente possiamo suddividere i caratteri utilizzati per creare password in 5 set: caratteri alfabetici minuscoli, in totale 26 caratteri alfabetici maiuscoli, in totale 26 cifre , in totale 10 simboli non alfanumerici (caratteri stampabili dalla tastiera e altri simboli stampabili utilizzando apposite combinazioni di tasti) caratteri non stampabili (sono caratteri che raramente possiamo inserire nelle password e includono i caratteri di BACKSPACE, TAB e INVIO)

Nota: la distinzione dei set deve tener conto anche dei sistemi operativi su cui tale password viene creata. Alcuni sistemi operativi non consentono lutilizzo di caratteri speciali, oppure non distinguono tra lettere maiuscole e minuscole. Inutile dire che tali sistemi offrono un basso grado di sicurezza per le password riducendo il set di caratteri utilizzabile.

Molti criteri di verifica della robustezza di una password richiedono che in essa siano utilizzati pi set di caratteri diversi. Utilizzare pi set di caratteri porta numerosi vantaggi non solo per contrastare gli attacchi brute force, ma anche per difendersi da attacchi da dizionario, utilizzando allo stesso tempo facili password mnemoniche. Per esempio la password ingegnere utilizza solo un set di caratteri, e per di pi risulta essere una banale parola del dizionario italiano. Utilizzando per pi set, la stessa parola e un po di creativit possibile rendere questa password meno vulnerabile a qualsiasi tipo di attacco. Per prima cosa possiamo per esempio sostituire qualche lettera minuscola col suo corrispettivo maiuscolo: iNgeGNerE. Ancora per tale password risulta vulnerabile ad attacchi a dizionario (molti programmi provano anche versioni modificate di parole comuni, per esempio sostituendo alcuni caratteri con il corrispettivo maiuscolo). Quindi vediamo di utilizzare un altro set, quello dei simboli, per rendere la password meno prevedibile. Una possibilit pu essere per esempio: !NgegNr3. Utilizzando 4 set di caratteri (quelli stampabili con la tastiera) possibile trasformare una password comune come ingegnere in una molto meno prevedibile ma al tempo stesso abbastanza facile da ricordare. Un attacco brute force su questa password infatti risulta infattibile (viene usato un set di 94 caratteri, e una lunghezza di password pari a 9 per un totale di 572.994.802.228.617.000 possibili sequenze) mentre un attacco a dizionario richiede sicuramente un programma molto sofisticato e una potenza di calcolo rilevante (e difficilmente reperibile) per riuscire a trovare tale trasformazione della parola ingegnere. Il problema che, come si pu notare dalla fig.1, gli utenti tendono a selezionare password con un'alta presenza di lettere minuscole (ricerche statistiche in merito hanno dimostrato che il 75% di una password composta da lettere minuscole e che il 60% delle password composta unicamente da simboli di questo set di caratteri). Questo perch lutilizzo di lettere minuscole nelle password rende pi semplice e scorrevole la loro digitazione, riducendo la frustrazione dellutente. E per possibile rendere sicure password composte da sole lettere minuscole, per esempio creando frasi password (magari separando ogni parola con uno spazio, se tale carattere consentito dal sistema) come le seguenti: iotifointer e ne vadofiero ioadoro il miogatto collisionediautomobili
17

Queste password risultano sicure sia ad attacchi di tipo brute force (sono composte da minimo 11 caratteri) che ad attacchi a dizionario. Lutilizzo di lettere maiuscole invece occupa meno del 3% delle password utilizzate comunemente dagli utenti. E per di pi spesso tali lettere sono messe in posizioni facilmente prevedibili, tipo allinizio della parola oppure alla fine. I programmi di cracking pi sofisticati, tipo CRACK, valutano tra le altre anche queste semplici trasformazioni riguardanti le lettere maiuscole. Invece risulta pi convincente lutilizzo di tale set in posti meno prevedibili anche allinterno di frasi password come le precedenti o in frasi creative: IoTifoInter pescepalla.DLL WWW.mestesso.COM

Lo stesso discorso fatto per le maiuscole vale anche per i numeri. Essi sono pi utilizzati delle maiuscole al fine di diversificare la composizione delle password. Il problema che spesso vengono inseriti in posizioni prevedibili (per esempio prima o dopo una parola, oppure seguendo intuitive sostituzioni di caratteri che prevedono di convertire la e in 3, l in 1, o in 0, ecc). Inoltre il vantaggio nellutilizzo di numeri non molto elevato, a causa del fatto che possibile selezionare solo da un insieme di 10 simboli. Inoltre studi dimostrano che gli utenti preferisco certi numeri ad altri, in particolare come si pu vedere dal grafico sottostante il numero 1 quello nettamente pi gettonato seguito dal 2 e lo 0.

Figura 5 - Utilizzo dei numeri nelle password

Da questo grafico si intuisce che un cracker furbo potrebbe modificare la sua strategia di brute forcing semplicemente includendo solo i numeri 1 e 2. In questo modo possono ottenere un terzo di tutte le password che contengono numeri. Inoltre bene evitare di inserirli alla fine di una parola, infatti un terzo delle password termina con un numero, e nel 10% di esse tale numero 1. Infine unaltra cosa da segnalare che oltre ad utilizzare numeri comuni, gli utenti tendono a utilizzare pattern prevedibili o sequenze poco fantasiose, come 123456, 2007,1212,ecc. Quindi buona norma evitare tali pattern e inserire numeri in posti pi difficili da scovare.
18

Per quanto riguarda i simboli invece, essi, nonostante offrano un enorme ventaglio di possibili scelte, difficilmente vengono usati nella composizione di password. I caratteri direttamente stampabili disponibili direttamente nella tastiera sono in totale 94 (52 lettere, minuscole e maiuscole, 10 numeri e 32 simboli). I sistemi informatici moderni per supportano una gamma di caratteri molto superiore a quella presente nelle comuni tastiere. Per esempio sotto ambiente Windows, tramite il programma MAPPA CARATTERI possibile accedere a molti caratteri differenti, in base al tipo di font. Per esempio il carattere ARIAL di Microsoft comprende pi di 65000 caratteri e simboli differenti contenuti in diverse lingue. Il supporto dei caratteri estesi viene definito Unicode. Luso dei simboli, soprattutto quelli non presenti sulla tastiera, consente di disporre della pi ampia gamma possibile di caratteri. Se per esempio utilizziamo lintero set di caratteri per una password di otto caratteri le possibili permutazioni differenti sono ben 340.240.830.764.391 *10^24. Nonostante sia ancora possibile indovinare la password, risulta molto improbabile che qualcuno riesca a farlo. Utilizzando questi caratteri si incrementa quindi enormemente lo spazio delle password, ma anche vero che la digitazione di password contenenti anche tali caratteri risulta meno fluida e pi frustante per utenti che devono inserire tale sequenza segreta diverse volte durante una sessione di lavoro. Alcuni esempi di caratteri ottenibili utilizzando la combinazione ALT+codice sono visibili nelle seguenti due tabelle:

Codice ASCII 1 3 20 128 143 156 200

Simbolo corrispondente

Figura 6 - Esempi di caratteri ASCII non presenti sulle tastiere

Codice UNICODE 0135 0155 1000 0408 0452 0731 0947

Simbolo corrispondente

Figura 7 - Esempi di caratteri UNICODE

19

Resta da dire che anche per i simboli valgono le stesse considerazioni fatte per le lettere e i numeri; vengono inseriti spesso in punti prevedibili, come allinizio o al termine di una parola o ancora ad offuscare una parola (per esempio i simboli delle virgolette, del trattino,.. allinizio e alla fine di una parola). Una considerazione va fatta per il carattere di spazio (SPACE), che risulta essere poco utilizzato nelle password ma utilissimo invece per creare sequenze facili da ricordare e sicure (come mostrato in precedenza per le frasi-password). In Windows, per esempio, possibile utilizzare gli spazi non solo allinterno delle password ma anche prima o dopo. Se una password seguita da tre spazi, anche eventuali malintenzionati dovranno digitare la stessa combinazione per accedere allaccount protetto da tale password. Luso degli spazi una strategia particolarmente efficace perch: Sono facili da ricordare. Favoriscono la creazione di password lunghe e composte da pi parole. Sono semplici e immediati da digitare. Estendono la gamma di caratteri disponibili oltre le lettere minuscole e i numeri.

Per finire riporto la seguente tabella, dove viene messo a confronto lo spazio delle password utilizzando solo le minuscole o lintero set di caratteri di una tastiera:

n 3 4 5 6 7 8 9 10 11 12 13 14 15

solo lettere min

caratteri della tastiera

17.576 830.584 456.976 78.074.896 11.881.376 7.339.040.224 308.915.776 689.869.781.056 8.031.810.176 64.847.759.419.264 208.827.064.576 6.095.689.385.410.820 5.429.503.678.976 572.994.802.228.617.000 141.167.095.653.376 53.861.511.409.490.000.000 3.670.344.486.987.780 5.062.982.072.492.060.000.000 95.428.956.661.682.200 475.920.314.814.253.000.000.000 2.481.152.873.203.740.000 44.736.509.592.539.800.000.000.000 64.509.974.703.297.200.000 4.205.231.901.698.740.000.000.000.000 1.677.259.342.285.730.000.000 395.291.798.759.682.000.000.000.000.000
Figura 8 Confronto tra spazio dei caratteri minuscoli e quello dei caratteri stampabili

Da questa tabella si pu vedere quanto la robustezza di una password agli attacchi brute force dipenda congiuntamente dal numero dei set utilizzati e dalla lunghezza della password. Infatti per esempio la password duedicuori, di dieci lettere minuscole, verosimilmente pi resistente della password J%3mPw6, sette caratteri misti. Questo conferma quanto detto in precedenza, cio che possibile creare password resistenti e al tempo stesso facili da memorizzare.

20

La validit di una password Un fattore importante nella sicurezza delle password la loro validit nel tempo. Qualsiasi password non dovrebbe durare in eterno, anche se molto robusta, questo per il semplice motivo che il cracking di password richiede tempo, e pi una password rimane in vita, pi sono le possibilit che venga scoperta. Le password vengono digitate sulle tastiere, salvate sui dischi, archiviate in memoria, attraversano le reti e, a volte, vengono condivise con altre persone. Nel tempo tutti questi passaggi riducono potenzialmente la sicurezza di una password, che pu essere ristabilita solo impostandone una nuova. Le password non recenti comportano altri rischi. Gli utenti tendono ad affezionarsi alle password e, di conseguenza, utilizzano sempre le stesse su pi sistemi. Gli hacker dispongono di numerosi strumenti per ottenere password e hash di password e lunico modo per combatterli tentare di anticiparli cambiando regolarmente e frequentemente la propria parola segreta. Se una password viene decodificata, magari cambiandola possibile bloccare laccesso al sistema. Il momento ottimale per cambiare la password dipende dal suo livello di sicurezza, dallimportanza delle informazioni che protegge e da come protetto il sistema in cui memorizzata. Lattacco ad un determinato account pu avere effetti devastanti (per esempio account di conti finanziari o carrelli per lo shopping online), mentre in altri casi la decodifica di una password non produce danni per il possessore. Generalmente gli amministratori richiedono agli utenti di modificare le password dopo un minimo di 60 giorni e un massimo di 120 giorni, solitamente perch le password utilizzate non sono mai sicure. Il problema principale del cambio regolare delle password che per molti utenti tale procedura fastidiosa e inutile. Pertanto la aggirano in vari modi, tra cui il pi dannoso sicuramente il riutilizzo di un insieme ridotto di password. Per evitare tutto questo molti amministratori utilizzano una cronologia delle password, cio un file nel quale vengono registrate le password che sono state utilizzate nello stesso sistema da un utente. In ogni caso per il modo pi sicuro consiste nellutilizzare password robuste e originali. Nella prossima sezione esaminer come poter prevenire, o eventualmente curare, la scelta di password vulnerabili da hacker.

21

CURA E PREVENZIONE DAGLI ATTACCHI


La tendenza degli utenti a scegliere password deboli stata da sempre la causa di numerosi attacchi hacker a sistemi anche blasonati (per quelli pi famosi sono reperibili in rete anche le relative documentazioni). La tecnologia corrente tale che la costruzione di un dizionario di svariati milioni di parole e termini comuni unoperazione di basso costo. Tramite questi enormi dizionari la ricerca di password vulnerabili si pu effettuare in un lasso di tempo dellordine dei secondi. Nonostante la diffusione di politiche di scelta delle password sicure, soprattutto allinterno delle aziende che hanno linteresse nel tutelare i propri dati, gli utenti continuano imperterriti nel selezionare password deboli, frequentemente termini tratti da un dizionario. Per un amministratore del sistema ci sono quattro possibili scelte da effettuare per risolvere il problema della scelta di password deboli: Educare gli utenti su come scegliere una password robusta. Prendersi carico della scelta delle password per ogni utente, utilizzando appositi programmi per la generazione casuale di parole dordine. Andare a verificare periodicamente la robustezza delle password scelte dagli utenti, tramite lutilizzo di appositi programmi come Crack (reactive-checking). Utilizzare programmi per la verifica in tempo reale della robustezza delle password (proactive-checking). Adottare protocolli sicuri che risultano immuni allutilizzo di password deboli.

Nel seguito di questa sezione verranno esaminati i cinque metodi, il quarto dei quali sar approfonditamente descritto in seguito (fornendone anche una possibile implementazione). Il primo metodo, cio educare gli utenti su come selezionare password sicure, non risulta fattibile in ambienti lavorativi dove il ricircolo di personale molto frequente, e conseguentemente alto il numero di novizi che devono essere educati. Inoltre molti utenti non comprendono a fondo limportanza di scegliere password forti, e i novizi a maggior ragione non hanno lidea di cosa sia ovvio. Per questo motivo potrebbero pensare che invertire una parola, o mettere la maiuscola sullultima lettera di un termine renda una password forte. Inoltre, al di l di quanto sia buono il metodo adottato per educare gli utenti, molti di essi possono credere che non sia significativo seguire queste linee guida, a causa magari della loro temporanea permanenza nellambiente lavorativo. Un altro problema sta nel fatto che lo stesso metodo di educazione possa rivelarsi dannoso a sua volta. Per esempio, se tale metodo consiglia allutente uno specifico modo per creare password, come utilizzare la prima lettera di una frase preferita, allora qualche utente potrebbe seguire alla lettera tale algoritmo rendendo un attacco molto pi facile. Il secondo metodo presentato prevede la generazione casuale delle password degli utenti, impedendo quindi a questi ultimi di sceglierne di proprie. Affinch questo meccanismo funzioni correttamente necessario che le password siano generate in modo casuale e uniforme rispetto allintero spazio di caratteri utilizzato. Per, come spiegato in precedenza, tali generatori casuali di
22

password non sono realmente casuali, ma rispecchiano un ben preciso algoritmo, che pu eventualmente essere analizzato e riprodotto da un hacker. Un altro motivo per cui tale metodo poco consigliato risiede nel fatto che le password generate sono di difficile memorizzazione, costringendo magari gli utenti a scriverle in foglietti facilmente scovabili. Il terzo metodo abbastanza diffuso e consiste nello scansionare periodicamente il file delle password per cercare eventuali password deboli. Tale scansione viene effettuata utilizzando appositi programmi, come Crack, e pu richiedere diversi giorni di esecuzione. Ci sono dei rilevanti problemi che derivano dallutilizzo di tali programmi: Il dizionario utilizzato nella ricerca pu non comprendere abbastanza termini per rilevare tutte le password deboli. Un hacker esterno pu avere un dizionario pi ampio, e quindi scovare tali password risultate invulnerabili per il programma di scansione. Il processo di scansione richiede tempo, anche seguendo veloci implementazioni. Un fortunato, e determinato, hacker pu penetrare nel sistema attraverso una password debole scovata prima che il programma di scansione labbia individuata. Tale problema rilevante in ambienti con un numero molto elevato di utenti. Il risultato prodotto dal programma di scansione pu essere intercettato e usato contro il sistema.

Inoltre c da dire che non c nessuna correlazione tra il trovare una password debole e il fatto che venga sostituita con una migliore. Addirittura molto probabile che la maggior parte degli utenti che vengono avvisati dagli amministratori dellutilizzo di una password debole, ne ignorino limportanza e continuino a tenerla per anni. Il quarto metodo sembra non avere i problemi menzionati precedentemente. Esso consiste nel verificare on the fly la robustezza di una password prima che essa venga memorizzata nel sistema; in tal modo lutente in grado di verificarne istantaneamente il grado di sicurezza. Sono due i problemi principali relativi a tale metodo: Le dimensioni del dizionario. Il tempo richiesto per verificare lappartenenza di un termine al dizionario.

Il primo problema sta diventando sempre meno rilevante, visto che il costo dei supporti magnetici e ottici si drasticamente ridotto negli ultimi anni, a tal punto che possibile avere un hard disk da diverse centinaia di Gb di capienza ad un prezzo molto accettabile. Ovviamente il dizionario richiesto dai programmi che effettuano la verifica della robustezza devono avere milioni di parole tratte da dizionari in varie lingue, termini o frasi comuni, ecc. e pu arrivare anche ad occupare diverse centinaia di Mb. Il secondo problema risulta invece essere di rilevante importanza. La particolarit di tali programmi infatti quella di effettuare la verifica online della robustezza di una password; questo vuol dire che lutente rimane bloccato finch non ottiene il responso dal programma. E pertanto necessario che il tempo di ricerca di tale password nel dizionario sia molto breve, qualche secondo al massimo. Fortunatamente esistono delle soluzioni molto efficaci per memorizzare il dizionario in una forma
23

tale che la ricerca di un termine pu essere fatta in tempo costante - O(1). Tali metodi verranno analizzati in seguito. Lultimo metodo presentato prevede lutilizzo di protocolli orientati alle password che cercano di offrire un elevato grado di sicurezza anche in presenza di password deboli. Verranno brevemente descritti due di questi protocolli. One-Time Password One-Time Password (OTP) un meccanismo di autenticazione nel quale viene generata una nuova password ad ogni accesso da parte dellutente, questo al fine di risolvere il problema dellintercettazione. Queste password monouso vengono generate sulla base di un contatore (esiste quindi una sequenza di password successive) oppure sulla base dellistante temporale. Spesso i sistemi one-time password si appoggiano su token, dispositivi hardware che forniscono allutente la password da inserire (eventualmente sostituiti da implementazioni software dellalgoritmo di generazione delle password). Rimane il problema che chiunque entri in possesso del token pu autenticarsi con successo nel sistema. Per risolvere questo problema si pu utilizzare un PIN combinato con la one-time password utilizzando una delle seguenti tre categorie: PIN accodato alla one-time password PIN come password per il token PIN come parte del segreto base

Il PIN pu anche essere breve (ad esempio solo 4 o 5 cifre), dato che pensato come strumento complementare la sicurezza non affidata totalmente a lui.
Generazione della password

I meccanismi di OTP (One-Time Password) utilizzano lo schema dellhash di Lamport per creare una sequenza di password che sia percorribile solo in un senso, utilizzando una funzione hash. La particolarit di questo schema sta nel fatto che nessun dato segreto (password o chiave) deve essere memorizzato sul server. Tale meccanismo di OTP deriva dal sistema S/KEY sviluppato da Bellcore. Di seguito viene illustrato il funzionamento di massima del sistema. Linizializzazione del sistema avviene facendo scegliere allutente una passphrase (10-63 caratteri) e concatenandola con un seme fornito dal server, ottenendo il dato iniziale S (da notare che la presenza del seme permette di riutilizzare la stessa passphrase pi volte e/o con pi macchina). Lutente pu calcolare li-esima OTP della sequenza di N elementi ripetendo N-i operazioni di hash su S: pi = H N-i (S)

0 i N 1

dove H una funzione di hash. Lutente comunica p0 (prima password della sequenza) al server attraverso un canale sicuro. A questo punto il funzionamento procede nel seguente modo: Il client invia lo username al server
24

Il server invia il numero di sequenza i e il seme Il client concatena la passphrase fornita dallutente con il seme ottenendo S, calcola la OTP richiesta pi e la invia al server. Il server ha immagazzinato pi-1 e calcola H(pi): se queste coincidono lautenticazione va a buon fine.

I principali problemi che presenta questa metodologia di autenticazione vanno riscontrati nel fatto che possibile autenticarsi solo per un numero prefissato di volte, dopo di che richiesta una reinizializzazione. Inoltre lautenticazione non mutua (il server non si autentica) e non genera un segreto (la connessione pu essere dirottata), perci vulnerabile ad attacchi man-in-the-middle (dove lhacker si intromette tra il client e il server, prendendo le sembianze di questultimo). Infine visto che il server a inviare il numero di sequenza, questo rende possibili attacchi al numero di sequenza in cui lattaccante invia un numero pi alto di quello reale, e una volta ottenuta la password relativa pu calcolare le password successive e utilizzarle per autenticarsi un certo numero di volte. In definitiva quindi, anche se questo metodo non soffre dellutilizzo di password deboli, presenta comunque rilevanti problemi di sicurezza. Secure Remote Protocol (SRP) Il protocollo SRP fa parte della famiglia dei cosiddetti Protocolli di autenticazione basati su password, ed stato introdotto nel 1998 da Thomas Wu e standardizzato in RFC 2946 (la versione descritta SRP-3). Il funzionamento generale di questo protocollo prevede che lutente debba ricordare e inserire una password, ma lo schema, utilizzando una tecnica simile allo scambio Diffie-Hellman, robusto anche se la password relativamente debole, in quanto lintercettazione dei messaggi del protocollo non sufficiente per effettuare attacchi offline a dizionario. Il server deve immagazzinare un verificatore, non la password in chiaro dellutente. I vantaggi derivanti dallutilizzo di tale protocollo sono: Invulnerabilit agli attacchi a dizionario sulla password da parte di un attaccante attivo o passivo. Il server non memorizza un password equivalent, se lattaccante si impadronisce del database del server deve fare un attacco a dizionario. La chiave di sessione non derivata dalla password (bassa entropia) ma proviene da uno scambio simile al Diffie-Hellman. La compromissione in un dato momento della password non compromette le sessioni passate.

25

Radice primitiva di un numero primo Prima di passare alla descrizione del meccanismo di autenticazione SRP necessario definire cosa una radice primitiva di un numero primo. Un numero n ha radici primitive se e solo se nella forma: 2 , 4 , pa , 2pa dove p P, p > 2, a > 1 e P denota linsieme dei numeri primi. Funzionamento Siano U lo username, P la password, s un salt, H una funzione di hash, m un numero primo molto grande, g una sua radice primitiva (m e g scelti tali che g<m). Sia x=H(s||P), allora il verificatore v = gx mod m. Il server immagazzina U, s e v (non immagazzina n P n x). Il client sceglie un numero 1<a<m casuale, calcola A = ga mod m e invia al server A e U. Il server cerca nel suo database s e v corrispondenti a U ricevuto, sceglie due numeri b<m e u casuali, calcola B=v+ gb mod m e manda al client B, u e s. A questo punto, sia Ks=gb(a+ux) mod m, la chiave K = H(Ks). Il client la pu calcolare cosi: Ks=(B-gx)a+ux mod m=(gx + gb - gx)a+ux mod m= gb(a+ux) mod m. Il server invece la pu calcolare cosi: Ks=(Avu)b mod m= (gagux)b mod m=gb(a+ux) mod m. Con gli ultimi due messaggi client e server si dimostrano reciprocamente di conoscere la chiave segreta K: Il client invia M1=H(H(m) + H(g) || H(U) || s || A || B || K); Il server dopo aver verificato M1 invia M2=H(A || M || K). Il client verifica M2, se il valore atteso lautenticazione avvenuta con successo.

Il protocollo SRP molto robusto; esso risulta invulnerabile ad attacchi con dizionario, attacchi di tipo man-in-the-middle e attacchi alla chiave di sessione. Esistono altri protocolli della famiglia a cui appartiene SRP, tra cui meritano menzione il protocollo EKE (Encrypted Key Exchange), DHEKE (Diffie-Hellman Key Exchange), SPEKE (Simple Password Exponential Key Exchange), e altre varianti. Controllo preliminare di password (Proactive Password Checking) Al giorno doggi c chi dice che ormai le password sono destinate a scomparire. Molti studi si stanno facendo verso direzioni alternative, come ad esempio le password grafiche o la biometria, ma molto probabilmente faremo uso delle nostre password per molto tempo ancora. Ecco perch nostra premura sceglierle in modo originale e difficilmente indovinabile. E molto difficile per per persone non esperte in campo informatico capire quando una password forte e quando invece vulnerabile. Per questo si pensato bene di sviluppare software che si preoccupino dinformare lutente sulla robustezza della password inserita, prima che essa possa essere memorizzata sul server. Tali software spesso forniscono anche delle indicazioni sul perch una data password non stata accettata ed eventualmente su cosa fare per aumentarne la robustezza. In linea di massima sono disponibili due versioni di questi programmi:

26

software presenti in vari siti che aiutano lutente al momento della registrazione a scegliere una password adeguata; software che lavorano offline, spesso sviluppati come patch o come sostituti di programmi addetti al cambiamento della password presenti in ogni sistema operativo (per esempio passwd in UNIX). Questi programmi, a differenza di quelli come Crack studiati per un checking a tappeto periodico, sono meno sofisticati soprattutto per il semplice fatto che dovendo essere eseguiti in tempo reale, lutente si aspetta una risposta in un tempo accettabile, e pertanto necessario che il programma faccia le sue valutazioni il pi velocemente possibile. I software pi semplici operano dei controlli sulla lunghezza minima della password, sul numero di set di caratteri utilizzati e il numero di caratteri ripetuti (per esempio possono rifiutare password lunghe meno di otto caratteri, oppure composte solo da caratteri minuscoli, ecc). I programmi invece un po pi sofisticati operano anche ricerche su dizionari forniti internamente al programma o esternamente dallamministratore. Sono pochi invece i programmi che operano delle analisi dellentropia della password (Pam Passwd ne un esempio, anche se esso opera solo un analisi dellentropia della password in merito al numero dei caratteri ripetuti). E anche vero per che se un software di prochecking dotato di un ottimo dizionario di termini comunque in grado di individuare la maggior parte delle password deboli. Linconveniente per nellavere un ampio dizionario, come detto precedentemente, in termini di complessit spaziale e temporale. Bench il primo problema di spazio sia ormai superato, il secondo rimane invece un nodo che necessita di essere sciolto. Non pensabile infatti di dover fare una ricerca sequenziale in un file di testo di oltre quattro milioni di termini (circa 40 Mb) per tentare di trovare una corrispondenza con la password inserita. Tale ricerca richiede tempo, cosa che lutente non gradisce. Fortunatamente sono state studiate e rese disponibili diverse metodologie per memorizzare il dizionario in una forma diversa dal semplice file di testo, in modo da occupare molto meno spazio e da rendere il tempo di ricerca costante. Tutti i metodi presentati di seguito sostituiscono il tradizionale metodo di ricerca sequenziale con una procedura alternativa e ottimizzata. Essi forniscono mediamente le stesse prestazioni (in termini di compressione del dizionario originale e di tempo richiesto per la ricerca), pertanto nella progettazione di un proactive password checker il programmatore pu scegliere il metodo che pi gradisce. Gestione del dizionario
Trigrammi

Nagle nel 1988 propose questo metodo basato sui trigrammi: ogni parola del dizionario viene suddivisa nei sui trigrammi (sottostringhe di 3 lettere) e memorizzati in una tabella a tre dimensioni. Per esempio la parola hello contiene i trigrammi hel,ell,llo. Inoltre vengono memorizzati altri trigrammi comuni, come per esempio lettere ripetute tre volte o sequenze ovvie come abc. Quindi una volta immessa la password nel sistema, ne vengono estratti i trigrammi e se almeno due di essi non sono contenuti nella tabella la password viene accettata. Di conseguenza, se la password una parola del dizionario, essa viene rifiutata perch tutti i suoi trigrammi sono contenuti nella tabella. Lerrore di falso negativo quindi pari a zero. C da dire che, come negli altri metodi presentati, lerrore di falso positivo, cio parole che non sono del dizionario ma che vengono comunque rifiutate, sempre possibile ma nella pratica poco probabile. In termini di spazio la
27

tabella dei trigrammi risulta avere dimensioni dellordine di numerotermini3, e data la sua semplicit di realizzazione risulta un metodo molto appetibile per chi si appresta a realizzare un password checker. Resta da dire che il suo error rate sui falsi positivi risulta essere il pi elevato degli altri due metodi proposti.
Alberi di decisione

Un altro metodo molto diffuso si basa sullutilizzo degli alberi decisione, e sui fondamenti di Machine Learning per la fase di addestramento dellalbero. Quello che si fa inizialmente di utilizzare il dizionario come insieme di esempi positivi per apprendere delle descrizioni concise che classifichino le password come positive o negative. Inoltre, viene creato un insieme di esempi negativi generando in maniera casuale password non appartenenti al dizionario. Gli esempi vengono dati tutti in una volta, e non possibile aggiungere altri termini senza prima ripetere la procedura di training. Le descrizioni acquisite in questa fase vengono rappresentate tramite gli alberi di decisione; essi sono in grado di ottenere grandi rapporti di compressione su problemi di appartenenza di parole, poich prefissi comuni a molte parole devono essere conservati solo una volta. Esistono molte implementazioni di tale metodo, ma in linea generale esso funziona nel seguente modo. Lalbero di decisione viene visto come una procedura che classifica le parole come appartenenti al dizionario (positivi) o non appartenenti ad esso (negativi). Le parole sono descritte da attributi, ovvero funzioni che assumono un numero finito di valori. Ad esempio, un possibile attributo potrebbe essere il valore della seconda lettera della parola data, oppure la lunghezza della parola stessa. Un nodo in un albero di decisione corrisponde a qualche attributo e gli archi che partono da questo nodo fino ai suoi figli corrispondono al valore che lattributo associato pu assumere. Alle foglie viene associata la classificazione, positiva o negativa. Un albero di decisione pu venire usato per classificare una parola w partendo dalla radice dellalbero, e valutando di volta in volta lattributo associato per w, ottenendo il valore v, quindi seguendo gli archi etichettati con v fino a raggiungere una foglia. A questo punto viene restituita la classificazione raggiunta. Un sistema di riferimento per lapprendimento di alberi di decisione il famoso ID3. Inizialmente lalbero vuoto, e deve essere scelto un attributo da associare alla radice. Tutti gli esempi positivi e negativi vengono associati a tale nodo. Tra i possibili attributi, ID3 sceglie quello che massimizza un valore informativo - teorico chiamato gain. Il gain di un attributo a viene calcolato come segue. Supponiamo che al nodo padre vengano associati p esempi positivi e n esempi negativi, con p+n=t. Definiamo linformazione rappresentata da questa partizione di esempi cosi: I(p,n) = (p/t)log2(p/t) (n/t)log2(n/t) Dopo che l'attributo stato selezionato, l'informazione calcolata come la somma pesata delle informazioni corrispondenti ai nodi figli: I(a) = i=1..s (ti/t)I(pi,ni) dove vi sono s possibili valori per a e pi (ni) dei p (n) esempi positivi (negativi) hanno l'i-esimo valore per l'attributo a. Nuovamente, ti = pi + ni. Il gain dell'attributo a definito da I(p,n) - I(a). Dopo che un attributo stato selezionato, gli archi e i nodi figli vengono generati per ognuno dei possibili valori dell'attributo. Insiemi di esempi vengono associati a questi nuovi nodi - pi precisamente, esempi che erano associati ai nodi padre vengono partizionati in base ai loro valori
28

dell'attributo scelto. Se un nodo associato solamente ad esempi positivi (negativi), esso diventa una foglia dell'albero, con un'etichetta positiva (negativa) corrispondente. Altrimenti, l'intera procedura viene ripetuta su nodi generati, fino a quando rimangono solo foglie. Intuitivamente, il gain seleziona l'attributo che generer nodi figli che siano quanto pi sbilanciati possibile rispetto alle loro corrispondenti classificazioni. Dato che la procedura di generazione dell'albero si ferma solo quando rimangono o solo esempi positivi o solo negativi, risulta chiaro che il criterio del gain condurr la procedura a fermarsi pi velocemente, producendo in generale alberi pi piccoli. Un argomento importante nell'apprendimento degli alberi di decisione, che molto rilevante rispetto al problema studiato, va sotto il nome di pruning (potatura). Gli alberi di decisione che vengono appresi con la procedura appena descritta, classificheranno correttamente tutti gli esempi dati, se gli attributi sono sufficienti a discriminare una classe dall'altra. In altre parole, il grado d'errore osservato (observed error rate) sar uguale a 0. Comunque, se l'albero grande, pu succedere che qualche foglia, o anche grandi sottoalberi, risultino utili solo per un insieme ristretto di esempi. Questi sottoalberi possono essere eliminati, incrementando cos l'observed error rate, ma decrementando le dimensioni dell'albero. Dove i sottoalberi vengono eliminati, i nodi che erano precedentemente interni divengono foglie, e la classificazione associata viene calcolata utilizzando una regola maggioritaria; se, ad esempio, la maggior parte dei nodi associati a quel nodo sono positivi (negativi), il nodo etichetter la foglia come positiva (negativa). In generale, il pruning dell'albero sempre stato considerato conveniente. Una ragione ovviamente da collegare all'aumentare della semplicit del classificatore. Ma la ragione pi importante relativa al potere predittivo. E stato notato molto presto che gli alberi potati, sebbene avessero un grado di errore osservato maggiore, erano quasi sempre migliori quando venivano usati su esempi generati con la stessa distribuzione.
Filtri di bloom

Lultimo metodo presentato, che sar poi quello utilizzato per limplementazione del password checker come termine di questo studio, fa riferimento al filtro di bloom, proposto da H. Bloom nel 1970. Il filtro di bloom una struttura dati probabilistica usata per testare se un elemento appartiene ad un insieme dato. Lalgoritmo per la generazione di un filtro di bloom dato un dizionario di n termini il seguente: il filtro di bloom rappresentato da un array di m bits, tutti inzializzati a 0. Sono necessarie poi k distinte funzioni hash, ognuna delle quali mappa un valore chiave per una delle m posizioni dellarray; ogni elemento viene fatto passare attraverso le k funzioni hash, ognuna delle quali ritorner una posizione nellarray che verr settato a 1. Per vedere se un elemento appartiene al dizionario si utilizza lo stesso metodo; si fa passare la password attraverso le k funzioni hash, si va a vedere quante posizioni nellarray sono settate a 1. Se almeno una settata a 0 la password non appartiene al dizionario e viene accettata. Anche in questo metodo la probabilit di errori di falso negativo 0, infatti una parola appartenente al dizionario sar sempre rifiutata, perch tutti i suoi bit sono settati necessariamente a 1. Esiste per la possibilit di errori di falsi positivi. In particolare possibile calcolare tale probabilit in funzione del numero dei termini e del numero di funzioni hash utilizzate.
29

Infatti assumendo che una funzione hash selezioni ogni posizione dellarray in modo uniforme, la probabilit che un certo bit non sia settato ( pari a 0) da una certa funzione hash durante linserimento di un elemento data da:

La probabilit che non sia settato da una delle k funzioni hash :

Se abbiamo inserito n elementi, la probabilit che un certo bit sia ancora a 0 :

La probabilit che sia uno invece :

A questo punto analizziamo la probabilit che dato un elemento non appartenente al dizionario, le funzioni hash restituiscano bit impostati a 1. La probabilit data da:

E palese il fatto che aumentando m la probabilit di falsi positivi diminuisce, mentre aumentando n tale probabilit aumenta. Tramite questa equazione possibile calcolarsi ad esempio quanto deve essere grande m per avere un determinato valore della probabilit, oppure quante funzioni hash devo usare per minimizzare tale probabilit conoscendo n e m. Due interessanti propriet dei filtri di bloom sono: a differenza di altri insiemi basati su tabelle hash, ogni filtro di bloom pu rappresentare lintero universo di elementi. In questo caso, tutti i bit sono a 1. Unaltra conseguenza di questa propriet che laggiunta di un elemento non fallisce mai a causa della particolare struttura del filtro, anche se come visto prima ci comporta un aumento dellerrore di falsi positivi;

30

Lunione e lintersezione di filtri di bloom di uguali dimensioni e set di funzioni hash pu essere facilmente implementato tramite le operazioni di AND e OR bit a bit, rispettivamente. Linconveniente principale che la versione base dei filtri di bloom non permette la cancellazione di un elemento (mettere i suoi bit a 0 equivale a danneggiare altri elementi con alcuni di quei bit) senza dover rifare il filtro daccapo; ci comunque possibile utilizzando una variante chiamata filtro di bloom con contatori. Tale variante prevede laggiunta per ogni posizione dellarray di ulteriori bit che fungono da contatore. Al momento dellinserimento di un elemento, tale contatore viene incrementato, viceversa viene decrementato quando un elemento viene cancellato. Quando il contatore arriva a 0 tale bit viene messo a 0. Il problema principale dovuto alloverflow aritmetico del contatore, che deve pertanto essere sufficientemente grande (in ogni caso necessario definire un valore massimo per inserimento). Un altro problema che lo spazio occupato da tale variante di bloom superiore di 3-4 volte rispetto alla versione statica supponendo di usare un contatore di 34 bit. Esistono per altre implementazioni che cercano di diminuire questo gap spaziale, anche se in ogni caso questo fattore non particolarmente rilevante ai fini dellutilizzo del filtro nei password checker. Smart Brute Forcing La maggior parte dei programmi che verificano in tempo reale la robustezza di una password effettuano principalmente controlli su dizionario, sulla lunghezza, il numero di set di caratteri utilizzati e i caratteri ripetuti. Il problema di questi programmi che password comunque deboli come ca12612 oppure hhiijjkk possono facilmente sfuggire ai controlli di questi software. Questo perch i controlli vengono fatti quasi esclusivamente sui dizionari, e anche se una password come 12345abc pu essere rifiutata da alcuni checker molto probabilmente la password 12a3b4c5 verr accettata senza problemi. Il motivo alla base di questo problema sta nel fatto che la pratica comune considera gli attacchi a dizionario molto pi importanti rispetto a quelli a forza bruta, perch pi facilmente praticabili. Quindi una password che risulta invulnerabile ad attacchi con dizionario viene accettata senza guardarne a fondo lentropia. Inutile dire che queste password a bassa entropia non presenti nei dizionari rappresentano una classe di password deboli da gestire e saper riconoscere adeguatamente. Per spiegare meglio questo problema user un esempio basato su password di sette caratteri costituite solamente da lettere minuscole e numeri; a questo seguiranno le conclusioni su come un attaccante pu adoperarsi per un attacco a forza bruta furbo (smart brute forcing). Denominiamo P() loperazione di permutazione; una password di sette caratteri case insensitive alfanumerica ricade in una delle seguenti otto aree di distribuzione: P(7a): tutti i caratteri sono alfabetici P(6a+1n): 6 alfabetici e 1 numerico P(5a+2n): 5 alfabetici e 2 numerici P(4a+3n): 4 alfabetici e 3 numerici P(3a+4n): 3 alfabetici e 4 numerici P(2a+5n): 2 alfabetici e 5 numerici P(1a+6n): 1 alfabetico e 6 numerici
31

P(7n): tutti i caratteri sono numerici La tabella seguente mostra lo spazio di ricerca e il costo di ogni area. Il costo di ricerca calcolato supponendo una velocit di attacco di 4,7s per tentativo (testato su un processore a 2GHz utilizzando MD5 come algoritmo di hashing).

Area Tutto 7a 6a+1n 5a+2n 4a+3n 3a+4n 2a+5n 1a+6n 7n

Spazio di ricerca 78.364.164.096 8.031.810.176 21.624.104.320 24.950.889.600 15.994.160.000 6.151.600.000 1.419.600.000 182.000.000 10.000.000

Percentuale 100,00% 10,25% 27,59% 31,84% 20,41% 7,85% 1,81% 0,23% 0,01%

Tempo di cracking Minuti Ore Giorni 6.138,53 102,31 4,26 629,16 10,49 0,44 1.693,89 28,23 1,18 1.954,49 32,57 1,36 1.252,88 20,88 0,87 481,88 8,03 0,33 111,20 1,85 0,08 14,26 0,24 0,01 0,78 0,01 0,00

Figura 9 Costi dei rispettivi spazi di ricerca per una password alfanumerica di 7 caratteri

Dalla tabella, e dal grafico, si nota come larea che contiene il maggior numero di password (e quindi a maggiore entropia) quella composta da 5 caratteri alfabetici e 2 numerici. Seguono poi le aree P(6a+1n), P(4a+3n), P(7a) e P(3a+4n). Le ultime tre aree invece sono decisamente vulnerabili, cio a bassa entropia. Sarebbe possibile unanalisi ancora pi approfondita per ogni area ad alta entropia, andando ad analizzare il numero di caratteri ripetuti e quante volte lo sono, ma gi questanalisi preliminare sufficiente per capire che un programma di cracking che si accinge ad effettuare il crack di un certo password space pu partire andando ad analizzare le aree pi deboli riferite ai set di caratteri utilizzati e alla lunghezza della password. Seguendo il nostro esempio una
32

password come 1c5a627, che fondamentalmente casuale, pu essere crackata in pochi minuti da un programma che seleziona in ordine crescente di entropia le aree da analizzare. E questa la ragione principale per cui un buon password checker deve prevedere anche situazioni del genere, andando a rifiutare password che cadono in aree insicure, ma quasi nessun programma opera in tal senso, affidandosi esclusivamente alla prevenzione da attacchi a dizionario.

33

PROGETTAZIONE E IMPLEMENTAZIONE DI UN ONLINE PROACTIVE CHECKER


Scopo Lo scopo principale di questo lavoro la realizzazione di un software che verifichi online la robustezza di una password. Lo sviluppo e la progettazione di tale software si appoggia ovviamente a tutte le problematiche riguardanti le password, ampiamente discusse fino a questo punto. Molti siti offrono questi piccoli moduli software, un esempio MSN, che in tempo reale, cio durante la digitazione della password, forniscono una valutazione in fasce della qualit della password digitata. Il modulo software che andr a sviluppare sar scritto in un linguaggio server-side, in particolare PHP, quindi non dar la risposta in tempo reale ma solo dopo che lutente ha inviato la password al server. Il motivo per cui ho effettuato questa scelta, che presenta linconveniente di dover far transitare la password fino al server, sta nellutilizzo di un dizionario (di diversi Megabyte) che necessariamente deve risiedere sul server (sarebbe assurdo trasferire il dizionario al client). Il software quindi dopo aver ricevuto una password ne d una valutazione in base a quattro fasce: debole, vulnerabile, buona, ottima. Tale software incorporabile in qualsiasi sito che lo necessiti, essendo indipendente dal sistema in cui gira. Sarebbe opportuno per operare delle modifiche al dizionario in modo da introdurre parole che fanno riferimento allaccount utente di cui si verifica la password. Progettazione Nonostante ci siano gi diversi moduli software disponibili in rete che verificano la robustezza di una password, in questo lavoro ho cercato di colmare alcune lacune presenti in tali software. In particolare ho focalizzato lattenzione sullentropia della password, andando ad analizzare se ricade in una zona debole dello spazio delle password (si veda il paragrafo SMART BRUTE FORCING), e verificando che non ci siano pattern o sequenze banali. E inoltre presente un dizionario di termini composto da circa quattro milioni di vocaboli, contenenti parole tratte dai seguenti dizionari: Inglese Tedesco Italiano Danese Africano Croato Ceco Finlandese Ungarese Giapponese Latino Norvegese Polacco Spagnolo Svedese
34

Turco Parole, frasi e pattern comuni utilizzati nelle password Tale dizionario memorizzato tramite un filtro di bloom, in particolare in una tabella hash di 7.057.090 byte (dimensione ottenuta supponendo di volere una probabilit di falsi positivi pari a 0.001 e utilizzando 11 funzioni hash). Il filtro di tipo statico, non prevede la possibilit di effettuare cancellazioni e/o aggiunte. Unapposita classe definita nel file bloomfilter.php si preoccupa di gestire il filtro, creando nuovi array da dizionari, inserendo gli elementi e verificando se una stringa sia presente nel dizionario. Nel file HashFunction.php invece sono presenti tutte le undici funzioni hash utilizzate dal filtro per inserire gli elementi. Lultimo e pi importante file checker.php, quello che si preoccupa di dare la valutazione di una password. Lanalisi di una password riguarda principalmente la presenza nel dizionario della sequenza inserita e, eventualmente, il calcolo della sua entropia. Lanalisi nel dizionario viene effettuata non solo cercando lesatta corrispondenza, ma anche operando alcune trasformazioni che spesso gli utenti usano per mascherare parole comuni. In particolare vengono provate le seguenti varianti della password: La password originaria; La password tutta in minuscole; La password invertita (preventivamente convertita in minuscolo); La password dove sono state sostituiti i caratteri 0,1,3,@,$,&, con le lettere o,l,e,a,s (tipici offuscamenti come per esempio fd3ric0); Parole di dizionario a cui sono stati aggiunti in testa o in coda pattern prevedibili come 1234,qwerty,tgbyhn (questi ultimi due si rifanno alla disposizione dei tasti nelle tastiere); La password dove sono stati inseriti caratteri numerici e simboli allinizio e alla fine (dopo aver convertito la password in minuscolo); Gli offuscamenti del tipo federico2007, 1984carlo, cio aggiungendo un anno allinizio o al termine di una parola di dizionario; Parole di dizionario ripetute due volte; Parole di dizionario specchiate (ad esempio fedeedef).

Gli ultimi quattro punti meritano un discorso pi approfondito. Come detto in precedenza in questo studio, le password non sono memorizzate in chiaro, ma spesso vengono fatte passare attraverso opportuni algoritmi di hashing, come ad esempio MD5. Quindi, un hacker che prova diversi tentativi, deve tener conto anche del tempo necessario per eseguire lhashing di ogni parola del dizionario, per capire quanto tempo potrebbe impiegare nel caso peggiore. In particolare il quartultimo punto e il terzultimo, definiscono dei controlli aggiuntivi sulla sicurezza di una password, ma presentano delle limitazioni ad esempio sul numero massimo di numeri allinizio o al termine di una parola di dizionario che vengono analizzati. Questo perch un hacker che va a provare queste soluzioni, impiega solo un gruppo ristretto di casi, per via della complessit esponenziale che tali tentativi hanno. Per questo motivo ho fatto dei test sommari per vedere il tempo necessario ad eseguire un hashing tramite MD5, e verificando poi quali casi risultassero fattibili per gli hacker (e quindi le relative password sono considerate deboli) , quali abbastanza fattibili e quelli invece praticamente improbabili. La tabella che segue mostra i diversi pattern
35

riferiti agli ultimi quattro punti, con il numero di elementi coinvolti e il tempo necessario per la ricerca nel caso peggiore. La dimensione del dizionario di 3.917.117 termini, e il tempo medio per effettuare lhashing di una stringa di 4,7s. Vengono usate delle colorazioni che rimandano a quelle dei semafori, e indicano le zone deboli (rosso), medie (gialle) e difficilmente vulnerabili (verde) in base al tempo necessario per verificare tutti i possibili elementi.
Tipo di pattern N Elementi Tempo richiesto secondi minuti ore giorni 18,41 0,31 0,005114 0,000213

termine esatto 3.917.117 Pattern del tipo parola + numero 1 in testa 39.171.170 184,10 3,07 0,05114 0,002131 1 in coda 39.171.170 184,10 3,07 0,05114 0,002131 2 in testa 391.711.700 1841,04 30,68 0,511401 0,021308 2 in coda 391.711.700 1841,04 30,68 0,511401 0,021308 1 in testa e 1 in coda 391.711.700 1841,04 30,68 0,511401 0,021308 2 in testa e 1 in coda 3.917.117.000 18410,45 306,84 5,114014 0,213084 1 in testa e 2 in coda 3.917.117.000 18410,45 306,84 5,114014 0,213084 3 in testa 3.917.117.000 18410,45 306,84 5,114014 0,213084 3 in coda 3.917.117.000 18410,45 306,84 5,114014 0,213084 2 in testa e 2 in coda 39.171.170.000 184104,50 3068,41 51,14014 2,130839 Pattern del tipo parola + simbolo della tastiera 1 testa 125.347.744 589,13 9,82 0,163648 0,006819 1 in coda 125.347.744 589,13 9,82 0,163648 0,006819 2 in testa 4.011.127.808 18852,30 314,21 5,23675 0,218198 2 in coda 4.011.127.808 18852,30 314,21 5,23675 0,218198 1 in testa e 1 in coda 4.011.127.808 18852,30 314,21 5,23675 0,218198 2 testa e 1 in coda 128.356.089.856 603273,62 10054,56 167,576 6,982334 1 in testa e 2 in coda 128.356.089.856 603273,62 10054,56 167,576 6,982334 3 in testa 128.356.089.856 603273,62 10054,56 167,576 6,982334 3 in coda 128.356.089.856 603273,62 10054,56 167,576 6,982334 2 in testa e 2 in coda 4.107.394.875.392 19304755,91 321745,93 5362,432 223,4347 Pattern del tipo parola + lettera minuscola/maiuscola 1 lettera in testa 203.690.084 957,34 15,96 0,265929 0,01108 1 lettera in coda 203.690.084 957,34 15,96 0,265929 0,01108 2 lettere in cima 10.591.884.368 49781,86 829,70 13,82829 0,576179 2 lettere in fondo 10.591.884.368 49781,86 829,70 13,82829 0,576179 1 in cima e 1 in fondo 10.591.884.368 49781,86 829,70 13,82829 0,576179 3 lettere 550.777.987.136 2588656,54 43144,28 719,0713 29,9613 Pattern del tipo parola + anno (1900-2100) anni 1900-2100 in coda 787.340.517 3700,50 61,68 1,027917 0,04283 anni 1900-2100 in testa 787.340.517 3700,50 61,68 1,027917 0,04283 Altro parole ripetute due volte 3.917.117 18,41 0,31 0,005114 0,000213 parole specchiate 3.917.117 18,41 0,31 0,005114 0,000213

In particolare possibile notare che le zone rosse messe in evidenza dalla tabella richiedono circa quattro ore per essere esplorate da un hacker, quindi tali pattern sono decisamente da evitare. La zona gialla invece richiede molto pi tempo, circa 36 ore, per essere provata interamente; in ogni caso hacker con molta pi potenza di calcolo della mia potrebbero provare questi pattern in tempi
36

molto minori, quindi ho deciso di rendere deboli password che ricalcano queste zone. Le zone in verde invece sono molto sicure, solamente considerando quelle poche presenti nella tabella il tempo necessario ad esaminarle sale a 250 giorni circa, un periodo proibitivo anche per gli hacker pi testardi. Modello probabilistico della password Se la password non presente nel dizionario (incluse le diverse permutazioni riferite alla tabella soprastante) si passa al calcolo della sua entropia. Pi che di entropia quella che vado a valutare linformazione totale della password, data dalla somma delle informazioni dei singoli caratteri. Linformazione totale tiene conto del numero di caratteri usati, del numero di set e dei caratteri ripetuti. La prima cosa che viene fatta lanalisi delle probabilit dei caratteri, la quale tiene conto della lunghezza della password, del set a cui tale carattere appartiene, da quanto questo set viene usato allinterno della password e da quante volte questo carattere si ripete allinterno della stessa. Il modello adottato di tipo probabilistico adattivo, nel senso che le probabilit dei singoli caratteri si adattano alla password, essendo influenzati dalla sua lunghezza, dalle ripetizioni e dal numero di set utilizzati. La formalizzazione del modello viene derivata in questo modo. Inizialmente, cio prima di scansionare la password, le probabilit dei singoli caratteri presenti in essa pari a:

P(carattere)=
dove NumeroCaratteriSet rappresenta il numero di caratteri totali presenti nel set corrispondente, ad esempio 26 nel caso di lettere minuscole. La motivazione intuitiva di tale formula sta nel fatto che inizialmente un carattere pi probabile di un altro se appartiene ad un set pi ristretto. Quindi la probabilit di un carattere data dalla probabilit che esso venga scelto dal suo set e che venga scelto quel particolare set. Partendo da questo presupposto vado ad analizzare la password carattere per carattere, incrementando ogni volta di uno ogni componente della formula di partenza. Al termine quindi il carattere C avr la probabilit calcolata come segue:

P(C) =
Il primo fattore fa riferimento alla dimensione del set, alla ripetizione del carattere a quante volte tale set viene utilizzato nella password. Il secondo fattore invece esprime la probabilit di scegliere quel particolare set rispetto agli altri utilizzati nella password. Quindi viene calcolata linformazione di ciascun carattere:

I(C) = - log2 P(C)


Linformazione totale della password P data dalla sommatoria:

dove C linsieme dei caratteri presenti nella password.


37

Una particolarit molto interessante di tale metodo che riesce ad individuare le aree vulnerabili spiegate nel paragrafo SMART BRUTE FORCING, dando quindi un informazione completa sulla robustezza di una password. Linformazione di P calcolata ricadr nelle quattro fasce accennate precedentemente, in base a questi criteri: fascia debole fascia vulnerabile fascia buona fascia ottima ; ; ;

dove I denota linformazione della password. Esempio di funzionamento del modello Un esempio viene fornito per spiegare il funzionamento di tale modello. Supponiamo di voler analizzare linformazione della password aU76a3a. La password lunga sette caratteri, utilizza tre set (minuscole, maiuscole e numeri) e presenta il carattere a ripetuto tre volte. Inizialmente quindi le probabilit dei caratteri saranno:
a U 7 6 3 0,01282 0,01282 0,03333 0,03333 0,03333

Al termine invece avremo le seguenti probabilit:


a U 7 6 3 0,05517 0,01481 0,06154 0,06154 0,06154

La password quindi avr un informazione totale pari a 22.32, valore che la colloca nella fascia debole.

38

BIBLIOGRAFIA http://en.wikipedia.org/wiki/Password http://en.wikipedia.org/wiki/Password_strength http://en.wikipedia.org/wiki/Password_cracking http://en.wikipedia.org/wiki/Bloom_filter F. Bergadano, B.Crispo e G. Ruffo. Proactive Password Checking with Decision Tree. Eugene H. Spafford. OPUS: Preventing Weak Password Choices. Daniel V. Klein. Foiling The Cracker: A Survey of, and Improvements to, Password Security. J. Yan. A Note on Proactive Password Checking. http://www.davidecerri.org/it/doc/iis2003-password.pdf Mark Burnett e Dave Kleiman. La Password Perfetta.

39

Vous aimerez peut-être aussi