d06 rainbow tables
TRANSCRIPT
-
7/29/2019 D06 Rainbow Tables
1/44
Rainbow Tables
Luca Grilli,
Fabrizio Montecchiani
-
7/29/2019 D06 Rainbow Tables
2/44
Funzioni di Hash sicure
Una funzionehash h() riceve in input un messaggio m di lunghezza arbitraria, e ritorna un output hm = h(m) di lunghezza prefissata (128 bit)
Propriet importanti di una funzione di hash (crittografica)sicura1. noto m facile calcolare hm = h(m)2. dato h, difficile calcolare m tale che h = h(m) (one-way o
resistenza alla pre-immagine)
3. dato m, difficile trovare m m tale che h(m) = h(m')(resistenza alla seconda pre-immagine)4. difficile trovare m, mtali che h(m) = h(m') (resistenza alle
collisioni) le propriet 3 implica la 2, ma non il contrario la propriet 4 implica la 3, ma non il contrario
-
7/29/2019 D06 Rainbow Tables
3/44
Attacco Brute-Force
Sia h:{0, 1}* {0, 1}b una funzione crittografica di hash K= 2b: cardinalit dello spazio dei possibili valori di hash
Supponiamo che l'output distribuito in modo casuale
in questo spazio
Considerando un insieme di n stringhe
Quanto deve valere n al fine di avere una probabilit >
0.5 che una stringa abbia un valore di hash dato?n = ln 2 / (ln K ln(K1))
per Kgrande circa n = (ln 2)K
-
7/29/2019 D06 Rainbow Tables
4/44
Attacco Brute-Force
Per una funzione hash a 128 bit, necessariotestare (ln2)2128 possibili input (circa 1038)per ottenere una probabilit di 0.5 di ottenereun valore hash specificato
10
38
microsecondi equivalgono a circa 1024
anni!
-
7/29/2019 D06 Rainbow Tables
5/44
Compromesso Tempo-Memoria
Si pu pensare di ridurre il tempo di calcoloaumentando loccupazione di memoria (oviceversa)
sembrerebbe pi efficace effettuare un attacco brute-force una prima volta,
memorizzare il risultato in un hash database,
quindi utilizzare questo database per accelerare il
cracking su qualsiasi macchina Questo approccio richiederebbe memorie con
capacit dellordine delle centinaia di Terabyte limite ancora troppo elevato
-
7/29/2019 D06 Rainbow Tables
6/44
Rainbow Tables
Una rainbow table una rappresentazionecompatta che mira a ridurre le dimensioni diun hash database a una tabella molto pi
compatta, incrementando leggermente itempi di calcolo
Viene calcolato lhash di tutte le password mane viene memorizzata solo una piccola parte
-
7/29/2019 D06 Rainbow Tables
7/44
Rainbow Tables
Siano h() una funzione di hash e P un insieme finito dipassword
Lobiettivo di precalcolare una struttura dati tale che, dato un qualsiasi output h della funzione hash,
pu individuare la passwordp in P tale che h(p) = h,
oppure stabilire che non esiste una talep in P
Il modo pi semplice per farlo calcolare h(p) per ogni
p in P memorizzare la tabella richiede (|P|b)bit di spazio,
dove b le dimensioni di un output di h(),
proibitivo per grandi P
-
7/29/2019 D06 Rainbow Tables
8/44
Funzione di Riduzione
L'idea di definire una funzione di riduzioner()che mappa a ritroso i valori di hash in valori di P
esistonodiverse possibili funzioni di riduzione pseudo-
random una funzione di riduzione non linverso di una
funzione di hash!
-
7/29/2019 D06 Rainbow Tables
9/44
Funzione di Riduzione
Alternando
la funzione di hash con
la funzione di riduzione,
possiamo formare catene alternate di password evalori di hash
-
7/29/2019 D06 Rainbow Tables
10/44
Generazione
Per generare una rainbow table: scegliere un insieme iniziale casuale di password in P
calcolare per ognuna di esse le catene di lunghezza
fissa l memorizzare in tabella soltanto
la prima (startpoint) password e
lultima (endpoint) password di ogni catena
Esempioaaaaaa h() 281DAF40 r() sgfnydh()920ECF10r() kiebgt
-
7/29/2019 D06 Rainbow Tables
11/44
Lookup e Inversione
Per invertire un valore hash h* necessarioeffettuare
una prima fase detta di lookup
una seconda fase detta di inversione
-
7/29/2019 D06 Rainbow Tables
12/44
Lookup
1. Calcolare una catena a partire da h,applicando r() e h() alternativamente
2. Se in qualsiasi punto si osserva un valorecorrisponde ad uno degli endpoint dellatabella, recuperare il corrispondente
startpoint
-
7/29/2019 D06 Rainbow Tables
13/44
Inversione
1. Utilizzare lo startpoint trovato in fase dilookup per ricreare la catena
2. Se la catena prodotta contiene il valore h*allora il valore immediatamente precedentenella catena la passwordp cercata
-
7/29/2019 D06 Rainbow Tables
14/44
Esempio
Hash h* = 920ECF10
Lookup: calcoliamo la sua catena finch non troviamo un valore intabella (un endpoint):
920ECF10 r() kiebgt
kiebgt contenuto nella tabella con startpoint aaaaaa (vedi esempioprecedente)
Inversione: ricostruiamo la catena partendo da aaaaaa:
aaaaaa h() 281DAF40 r() sgfnydh() 920ECF10
La password sgfnyd
-
7/29/2019 D06 Rainbow Tables
15/44
Falso Allarme
La catena ricostruita non sempre contiene il valorehash h* Esempio: h* = FB107E70
FB107E70 r() bvtdll h() 0EE80890 r() kiebgt
FB107E70 non nella catena di aaaaaa (falso allarme)
In questo caso, il match viene ignorato e si continua adestendere la catena di h* in cerca di un altro match
Se la catena di h* raggiunge la lunghezza lsenza match buoni,la password non mai stata prodotta in una delle catene e
pertanto non pu essere invertita
-
7/29/2019 D06 Rainbow Tables
16/44
Propriet
Il contenuto della tabella non dipende dal valorehash da invertire il contenuto viene creato una sola volta e riutilizzato in
ogni attacco senza alcuna modifica
Aumentando la lunghezza delle catene siriducono le dimensioni della tabella
aumenta per il tempo richiesto per eseguire lericerche (compromesso tempo-memoria)
nel semplice caso di catene di un elemento, la ricerca molto veloce, ma la tabella molto grande (hash
database)
-
7/29/2019 D06 Rainbow Tables
17/44
Collisioni
Pu accadere che in un qualsiasi punto due cateneproducano lo stesso valore (collision)
Le due catene si fondono (merge) nel punto di collisione
di conseguenza la tabella coprir un minor numero dipassword poich le catene precedenti non sono memorizzate
completamente, una collisione impossibile da individuare in modo efficiente
La funzione di hash h() genera raramente collisioni(collision-resistant) mentre la funzione di riduzione r()non altrettanto robusta
-
7/29/2019 D06 Rainbow Tables
18/44
Funzioni di Riduzione Multiple
Per risolvere il problema delle collisioni possibile utilizzare, anzich una sola funzione di riduzione r(), un insieme di funzioni r1()rk()utilizzate
alternativamente
In questo modo, perch due catene collidano e sifondino, devono colpire lo stesso valore nella
stessa iterazione ancora possibile avere delle collisioni, ma che non comporteranno la fusione delle catene
-
7/29/2019 D06 Rainbow Tables
19/44
Esempio
-
7/29/2019 D06 Rainbow Tables
20/44
Lookup
Poich il valore hash di interesse pu essere trovato inqualsiasi punto della catena, necessario generare kcatene diverse
La prima catena assume che il valore di hash sia nell ultima
posizione e applica soltanto rk() la seconda catena assume che il valore di hash sia nellapenultima posizione e applica in sequenza rk-1(), h() e rk(),
l'ultima catena applica tutte le funzioni di riduzione alternate
con h()
Questo procedimento comporta che alcune catenepossano essere prodotte e valutate inutilmente (falsealarm)
-
7/29/2019 D06 Rainbow Tables
21/44
Esempio
-
7/29/2019 D06 Rainbow Tables
22/44
Debolezze
La generazione richiede molto tempo
Possono verificarsi molti false alarm
Inefficiente con meccanismi di salt
Lo spazio di ricerca cresce notevolmentesuperando i limiti di memoria attuali
-
7/29/2019 D06 Rainbow Tables
23/44
Approfondimenti
A Cryptanalitic Time-Memory Trade-Off,Martin E. Hellman
www-ee.stanford.edu/~hellman/publications/36.pdf
Making a Faster Cryptanalytic Time-Memory
Trade-Off, Philippe Oechslin
lasecwww.epfl.ch/~oechslin/publications/crypto03.pdf
http://www-ee.stanford.edu/~hellman/publications/36.pdfhttp://lasecwww.epfl.ch/~oechslin/publications/crypto03.pdfhttp://lasecwww.epfl.ch/~oechslin/publications/crypto03.pdfhttp://lasecwww.epfl.ch/~oechslin/publications/crypto03.pdfhttp://www-ee.stanford.edu/~hellman/publications/36.pdfhttp://www-ee.stanford.edu/~hellman/publications/36.pdfhttp://www-ee.stanford.edu/~hellman/publications/36.pdfhttp://www-ee.stanford.edu/~hellman/publications/36.pdfhttp://www-ee.stanford.edu/~hellman/publications/36.pdfhttp://www-ee.stanford.edu/~hellman/publications/36.pdfhttp://www-ee.stanford.edu/~hellman/publications/36.pdfhttp://www-ee.stanford.edu/~hellman/publications/36.pdf -
7/29/2019 D06 Rainbow Tables
24/44
LanManager Hash
UPPERCASE+
NULL PADDING / TRUNCATING
-
7/29/2019 D06 Rainbow Tables
25/44
-
7/29/2019 D06 Rainbow Tables
26/44
Rainbow Tables e LM Hash
-
7/29/2019 D06 Rainbow Tables
27/44
L0pht Heavy Industries
L0pht Heavy Industries stato un collettivo di hacker attivo tra il 1992 eil 2000 e situato a Boston
Durante la sua attivit ha rilasciato numerosi avvisi relativi alla sicurezzainformatica e prodotto strumenti software ampiamente utilizzati comeL0phtCrack, un password cracker per OS Windows
Il 19 maggio 1998, tutti i sette membri di L0pht (Brian Oblivion, Kingpin,Mudge, Space Rogue, Stefan Von Neumann, John Tan, Weld Pond)diedero una famosa testimonianza davanti al Congresso degli Stati Uniti,asserendo che avrebbero potuto spegnere l'intera rete Internet in 30minuti
Nel gennaio 2000, L0pht Heavy Industries si fusa con la startup @stake,completando la lenta transizione da un'organizzazione underground auna societ "whitehat" di sicurezza informatica. Symantec ha annunciatol'acquisizione di @stake il 16 settembre 2004, e completato l'operazionel'8 ottobre dello stesso anno
-
7/29/2019 D06 Rainbow Tables
28/44
L0phtCrack
L0phtCrack unapplicazione per il recupero e il test dipassword originariamente prodotto da Mudge (L0phtHeavy Industries)
Utilizza attacchi con dizionario, brute-force, e con rainbowtables
E uno degli strumenti preferiti dagli hacker, specialmentele vecchie versioni (basso prezzo e alta disponibilit)
Nel gennaio 2009 L0phtCrack stato acquisito dagli autorioriginali Zatko (Mudge), Wysopal e Rioux da Symantec
L0phtCrack 6 stato annunciato l11 marzo 2009 allaconferenza SOURCE Boston Conference
-
7/29/2019 D06 Rainbow Tables
29/44
L0phtCrack 6
Alcune features: OS target
Windows XP, Vista Seven (32 e 64 bit) reti con Windows NT, 2000, XP, Server 2003, Server 2008 (32 e 64
bit) varianti principali di BSD e Linux con demone SSH
password scoring punteggio basato su metrica per valutare rapidamente la qualit
delle password
metodi per Password Audit dizionario hash DB precalcolato brute force rainbow tables
-
7/29/2019 D06 Rainbow Tables
30/44
www.l0phtcrack.com
-
7/29/2019 D06 Rainbow Tables
31/44
www.l0phtcrack.com
-
7/29/2019 D06 Rainbow Tables
32/44
L0phtCrack e LM Hash
La prima versione di l0phtCrack fu utilizzata percrackare lalgoritmo LM Hash
LM Hash stato mantenuto da Microsoft fino aWindows Vista per garantire la retrocompatibilit coni vecchi sistemi
Windows mantiene per ogni password sia la versioneottenuta con LM Hash sia quella ottenuta con NT Hash
se un attaccante riesce a crackare la versione LM Hashdella password (ad esempio tramite rainbow tables)allora pu sfruttare questa informazione per crackareanche la versione NTLM Hash
-
7/29/2019 D06 Rainbow Tables
33/44
L0phtCrack e LM Hash
Il cracking della versione LM Hash fornisce iprimi 14 caratteri della password
per password di dimensioni maggiori i restanticaratteri possono essere trovati per inferenza o con
attacco brute-force
Lalgoritmo NT Hash case-sensistive una volta crackata la versione LM Hash della
password restano soltanto 2xpossibili password, conxpari alla lunghezza della password
x un numero minore o uguale a 14 (al pi 16384tentativi)!
-
7/29/2019 D06 Rainbow Tables
34/44
NTLM Protocol
NTLM Protocol: protocollo Microsoft perlautenticazione su dominio di tipo challenge-
response introdotto con lalgoritmo NTLM Hash
-
7/29/2019 D06 Rainbow Tables
35/44
NTLM Protocol
Ogni volta che un utente richiede lautenticazionesu dominio entrambe le versioni della password (LMHash e NTLM Hash) subiscono il seguente processo:
1. NULL padding fino a 21B
2. divisione dellhash in 3 parti da 7B
3. ognuna delle 3 parti viene convertita in una chiave DES di8B aggiungendo 1B di parit
4. con ogni chiave viene criptato un challenge di 8B inviatoin chiaro in rete dal server di autenticazione
5. i 3 output ottenuti al passo precedente sono concatenatiper formare un output finale di 24B che viene inviato inrete al server per verificare lautenticazione
-
7/29/2019 D06 Rainbow Tables
36/44
L0phtCrack e LM Hash
Il meccanismo di challenge-responsedovrebbe rendere pi difficile il cracking
In realt louput contiene informazionesfruttabile da un attaccante
solo 2B dellhash originale (16B) finiscono nella
terza componente da 7B, il resto sono caratteriNULL noti
solo lottavo byte della prima met dellhashoriginale finisce nella seconda componente da 7B
-
7/29/2019 D06 Rainbow Tables
37/44
L0phtCrack e LM Hash
Esempio: password di dimensione pari al pia 7 caratteri (scelta molto frequente perutenti non esperti)
nella versione LM Hash il secondo gruppo da 7B composto da soli caratteri NULL
nella versione prodotta dallNTLM Protocol i
primi 8B corrispondono al challenge cifrato conlLM Hash, non serve decriptare i restanti 16B!
-
7/29/2019 D06 Rainbow Tables
38/44
Kerberos
Microsoft ha adottato Kerberos come protocollo diautenticazione di defualt da Windows 2000 e per i dominiActive Directory
NTLMv2 ancora utilizzato in diverse seguenti situazioni,tra cui:
il cliente si autentica a un server che non appartiene a un
dominio non esiste un dominio Active Directory (modalit
workgroup"o "peer-to-peer") nei casi in cui un firewall blocca le porte richieste da Kerberos
-
7/29/2019 D06 Rainbow Tables
39/44
Ophcrack
Ophcrack unapplicazione open source peril recupero delle password di sistemioperativi Windows
Si avvale di rainbow tables per crackare glihash LM ed NTLM
Sviluppata da Cedric Tissieres e PhilippeOechslin
-
7/29/2019 D06 Rainbow Tables
40/44
Ophcrack
-
7/29/2019 D06 Rainbow Tables
41/44
Xp Rainbow Tables
XP free small (380MB) Success rate: 99.9% Charset: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
XP free fast (703MB) Success rate: 99.9% Charset: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
XP special (7.5GB) Success rate: 96% Charset: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !"#$%&'()*+,-./:;?@[\]^_`{|}~
XP german (7.4GB) Success rate: 99%
Only for passwords that contains at least one german character () Charset: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !"#$%&'()*+,-./:;?@[\]^_`{|}~
-
7/29/2019 D06 Rainbow Tables
42/44
Vista Rainbow Tables
-
7/29/2019 D06 Rainbow Tables
43/44
www.freerainbowtables.com
L'obiettivo di FreeRainbowTables.com quellodi dimostrare l'insicurezza delle funzioni hashsemplici
DistrRTgen (Distributed Rainbow TableGenerator): generazione distribuita di catene
possibile generare rainbow tables enormi che sono
in grado di rompere password anche molto lunghe il client BOINC disponibile dalla pagina di download
del sito
-
7/29/2019 D06 Rainbow Tables
44/44
Fonti
Beautiful Security Leading Security Experts ExplainHow They Think, Andy Oram, John Viega , O'ReillyMedia, 2009
www.wikipedia.org
www.l0phtcrack.com
www.ophcrack.sourceforge.net
www.freerainbowtables.com
http://www.wikipedia.org/http://www.l0phtcrack.com/http://www.ophcrack.sourceforge.net/http://www.freerainbowtables.com/http://www.freerainbowtables.com/http://www.ophcrack.sourceforge.net/http://www.l0phtcrack.com/http://www.wikipedia.org/