
PACK (Kit di Analisi e Cracking delle Password)
PACK (Password Analysis and Cracking Toolkit) è una collezione di utilità sviluppate per aiutare nell'analisi di liste di password al fine di migliorare il cracking delle password attraverso il rilevamento di pattern di maschere, regole, set di caratteri e altre caratteristiche delle password. Il toolkit genera file di input validi per la famiglia di cracker di password Hashcat.
NOTA: Il toolkit stesso non è in grado di craccare le password, ma è progettato per rendere più efficiente il funzionamento dei cracker di password.
Prima di poter iniziare a usare il toolkit dobbiamo stabilire un criterio di selezione delle liste di password. Poiché intendiamo analizzare il modo in cui le persone creano le loro password, dobbiamo ottenere un campione il più grande possibile di password trapelate. Una lista eccellente è basata sulla compromissione di RockYou.com. Questa lista fornisce una collezione sia ampia che diversificata, che dà buoni risultati per password comuni usate da siti simili (es. social network). L'analisi ottenuta da questa lista potrebbe non funzionare per organizzazioni con politiche specifiche sulle password. Pertanto, la selezione del campione di input dovrebbe essere il più vicino possibile al tuo target. Inoltre, cerca di evitare di ottenere liste basate su password già craccate, poiché ciò genererà un bias statistico delle regole e delle maschere utilizzate dal singolo(i) che ha craccato la lista e non dagli utenti reali.
L'analisi più basilare che si possa fare è semplicemente ottenere la lunghezza più comune, il set di caratteri e altre caratteristiche delle password nella lista fornita. Nell'esempio seguente, useremo 'rockyou.txt' contenente circa 14 milioni di password. Lancia statsgen.py con la seguente riga di comando:
$ python statsgen.py rockyou.txt
Di seguito è riportato l'output del comando precedente:
_
StatsGen #.#.# | |
_ __ __ _ ___| | _
| '_ \ / _` |/ __| |/ /
| |_) | (_| | (__| <
| .__/ \__,_|\___|_|\_\
| |
|_| [email protected]
[*] Analisi delle password in [rockyou.txt]
[+] Analisi 100% (14344390/14344390) delle password
NOTA: Le statistiche seguenti sono relative al numero di password analizzate, non al numero totale di password
[*] Lunghezza:
[+] 8: 20% (2966037)
[+] 7: 17% (2506271)
[+] 9: 15% (2191039)
[+] 10: 14% (2013695)
[+] 6: 13% (1947798)
...
[*] Set di caratteri:
[+] loweralphanum: 42% (6074867)
[+] loweralpha: 25% (3726129)
[+] numeric: 16% (2346744)
[+] loweralphaspecialnum: 02% (426353)
[+] upperalphanum: 02% (407431)
...
[*] Complessità delle password:
[+] digit: min(0) max(255)
[+] lower: min(0) max(255)
[+] upper: min(0) max(187)
[+] special: min(0) max(255)
[*] Maschere semplici:
[+] stringdigit: 37% (5339556)
[+] string: 28% (4115314)
[+] digit: 16% (2346744)
[+] digitstring: 04% (663951)
[+] othermask: 04% (576324)
...
[*] Maschere avanzate:
[+] ?l?l?l?l?l?l?l?l: 04% (687991)
[+] ?l?l?l?l?l?l: 04% (601152)
[+] ?l?l?l?l?l?l?l: 04% (585013)
[+] ?l?l?l?l?l?l?l?l?l: 03% (516830)
[+] ?d?d?d?d?d?d?d: 03% (487429)
...
NOTA: Puoi ridurre il numero di outlier visualizzati includendo il flag --hiderare che non mostrerà elementi con occorrenza inferiore all'1%.
Ecco cosa possiamo imparare immediatamente dalla lista sopra:
L'ultima sezione, "Maschere avanzate", contiene le maschere più frequenti nel formato Hashcat. I singoli simboli possono essere interpretati come segue:
?l - un singolo carattere minuscolo
?u - un singolo carattere maiuscolo
?d - una singola cifra
?s - un singolo carattere speciale
Ad esempio, la primissima maschera, "?l?l?l?l?l?l?l?l", corrisponderà a tutte le password alfabetiche minuscole. Data la dimensione del campione, sarai in grado di craccare circa il 4% delle password. Tuttavia, dopo aver generato l'output iniziale, potresti essere interessato a utilizzare filtri per restringere i dati delle password.
Vediamo come gli utenti di RockYou tendono a selezionare le loro password usando la maschera semplice "stringdigit" (una stringa seguita da numeri):
$ python statsgen.py ../PACK-0.0.3/archive/rockyou.txt --simplemask stringdigit -q --hiderare
[*] Analisi delle password in [rockyou.txt]
[+] Analisi 37% (5339556/14344390) delle password
NOTA: Le statistiche seguenti sono relative al numero di password analizzate, non al numero totale di password
[*] Lunghezza:
[+] 8: 23% (1267260)
[+] 7: 18% (981432)
[+] 9: 17% (939971)
[+] 10: 14% (750938)
[+] 6: 11% (618983)
[+] 11: 05% (294869)
[+] 12: 03% (175875)
[+] 13: 01% (103047)
[+] 14: 01% (65958)
[*] Set di caratteri:
[+] loweralphanum: 88% (4720184)
[+] upperalphanum: 06% (325941)
[+] mixedalphanum: 05% (293431)
[*] Complessità delle password:
[+] digit: min(1) max(252)
[+] lower: min(0) max(46)
[+] upper: min(0) max(31)
[+] special: min(0) max(0)
[*] Maschere semplici:
[+] stringdigit: 100% (5339556)
[*] Maschere avanzate:
[+] ?l?l?l?l?l?l?d?d: 07% (420318)
[+] ?l?l?l?l?l?d?d: 05% (292306)
[+] ?l?l?l?l?l?l?l?d?d: 05% (273624)
[+] ?l?l?l?l?d?d?d?d: 04% (235360)
[+] ?l?l?l?l?d?d: 04% (215074)
...
La parte superiore dell'output specifica la percentuale di password totali analizzate. In questo caso, craccando solo le password che corrispondono alla maschera "stringdigit" è possibile recuperare solo circa il 37% del totale, come già mostrato nell'output originale. Successivamente, sembra che solo l'11% di questo tipo di password utilizzi caratteri diversi dal minuscolo. Quindi sarebbe saggio concentrarsi solo su stringhe minuscole che corrispondono a questa maschera. Infine, nella sezione "Maschere avanzate" possiamo vedere che la maggior parte delle password "stringdigit" è composta da una stringa seguita da due o quattro cifre. Con le informazioni ottenute dall'output sopra, possiamo iniziare a creare un'immagine mentale dei pattern di generazione delle password degli utenti target.
Ci sono alcuni altri filtri disponibili per lunghezza della password, maschera e set di caratteri:
Lunghezza: --minlength e/o --maxlength
Maschera semplice: --simplemask [numeric, loweralpha, upperalpha, mixedalpha, loweralphanum, ecc.]
Set di caratteri: --charset [digit, string, stringdigit, digitstring, digitstringdigit, ecc.]