
Generatore di tentativi di password basato su Grammatica Probabilistica Libera dal Contesto (PCFG)
PCFG = Grammatica Probabilistica a Contesto Libero
PCFG = Indovinello Fuzzy Piuttosto Figo
In breve: Una raccolta di strumenti per condurre ricerche su come gli umani generano le password. Questi possono essere usati per craccare hash di password, ma anche per creare password sintetiche (honeywords) o aiutare a sviluppare migliori algoritmi di robustezza delle password.
Trainer: 4.4
Guesser: 4.6
PRINCE_LING: 4.3
Password_Scorer: 4.4
Sphinx viene utilizzato per creare dinamicamente una Guida per Sviluppatori basata sui docstring nel codice. Per costruire la Guida per Sviluppatori, fare riferimento alle istruzioni in /doc/INSTRUCTIONS.rst
Una Guida per Sviluppatori pre-costruita in PDF si trova anche in /doc/build/latex/pcfgdevelopersguide.pdf. Nota: non ricostruirò questa guida tra le versioni principali per mantenere la cronologia git più pulita. In pratica, fare commit di PDF diventa molto caotico molto rapidamente. Ciò significa che la guida pre-costruita potrebbe essere leggermente obsoleta, quindi se la stai usando per aiutarti a scrivere/modificare codice, si consiglia di costruire la guida da solo invece di usare quella pre-costruita.
Questo progetto utilizza l'apprendimento automatico per identificare le abitudini di creazione delle password degli utenti. Un modello PCFG viene generato addestrandosi su un elenco di password in chiaro/crackate divulgate. Nel contesto di questo progetto, il modello viene chiamato ruleset e contiene molte diverse parti delle password identificate durante l'addestramento, insieme alle loro probabilità associate. Questa derivazione (stemming) può essere utile per altri strumenti di cracking come PRINCE, e/o parti del ruleset possono essere incorporate direttamente in attacchi basati su dizionario più tradizionali. Questo progetto include anche un generatore di tentativi PCFG che utilizza questo ruleset per generare tentativi di password in ordine di probabilità. Questo è molto più potente degli attacchi standard al dizionario, e nei test si è dimostrato in grado di craccare password in media con significativamente meno tentativi rispetto ad altri metodi pubblicamente disponibili. Lo svantaggio è che generare tentativi in ordine di probabilità è lento, il che significa che crea in media 50-100k tentativi al secondo, mentre gli algoritmi basati su GPU possono creare milioni a miliardi (e oltre) di tentativi al secondo contro algoritmi di hashing veloci. Pertanto, il guesser PCFG è più adatto per l'uso contro grandi numeri di hash salati, o altri algoritmi di hashing lenti, dove il costo prestazionale dell'algoritmo è compensato dall'accuratezza dei tentativi.
pip3 install chardetIl ruleset predefinito incluso in questo repository è stato creato addestrandosi su un sottoinsieme di 1 milione di password del dataset RockYou. Prestazioni migliori possono essere ottenute addestrandosi sull'intero set di 32 milioni di password per RockYou, ma ciò è stato escluso per mantenere piccola la dimensione del download. Puoi usare il ruleset predefinito per iniziare a generare password senza doverti addestrare su una nuova lista, ma si consiglia di addestrarsi su un insieme target di password che potrebbero essere più vicine a ciò che stai cercando di colpire. Se crei il tuo ruleset, ecco una guida rapida:
python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESETpython3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6
b. --save_sensitive: Se specificato, i dati sensibili come indirizzi e-mail e siti web completi scoperti durante l'addestramento verranno salvati nel ruleset. Sebbene il generatore di tentativi PCFG attualmente non utilizzi questi dati, sono molto preziosi durante un vero attacco di cracking delle password. Questa opzione è disattivata per impostazione predefinita per rendere questo strumento più facile da usare in un contesto accademico. Nota: anche quando è disattivata, ci sarà quasi certamente comunque qualche dato PII salvato all'interno di un ruleset, quindi proteggi i ruleset generati di conseguenza. Esempio: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive
c. --comments: Aggiunge un commento al file di configurazione del ruleset. Questo è utile per sapere perché e come hai generato il ruleset quando lo rivedi in seguito. Includi il commento che vuoi aggiungere tra virgolette.Questo genera tentativi su stdout utilizzando un ruleset PCFG precedentemente addestrato. Questi tentativi possono quindi essere reindirizzati tramite pipe a qualsiasi programma che desideri utilizzarli. Se non viene specificato alcun ruleset, verrà utilizzato il ruleset predefinito DEFAULT. Ai fini di questa guida si presuppone che il ruleset utilizzato sia NEW_RULESET.
python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAMEpython3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --loadCi sono molti casi in cui potresti voler stimare la probabilità che una password venga generata da un ruleset precedentemente addestrato. Ad esempio, questo potrebbe far parte di una metrica di robustezza della password, o essere utilizzato per altri scopi di ricerca. Un programma di esempio è incluso per eseguire questa operazione.
python3 password_scorer -r NEW_RULESET -i INPUT_LISTNome: PRINCE Language Indexed N-Grams (Prince-Ling)
Panoramica: Costruisce wordlist personalizzate basate su un ruleset/grammatica PCFG già addestrato per l'uso in attacchi combinatori stile PRINCE. L'idea alla base di questo è che poiché l'addestratore PCFG sta già suddividendo un insieme di addestramento di password in parsing individuali, queste informazioni potrebbero essere sfruttate per creare wordlist mirate per altri attacchi.
Meccanismi di Base: Sotto il cofano, lo strumento Prince-Ling è fondamentalmente un mini-generatore di tentativi PCFG. Rimuove la generazione di tentativi Markov e sostituisce le strutture base utilizzate negli attacchi PCFG normali con una struttura base significativamente ridotta, su misura per generare wordlist PRINCE. Ciò consente di generare parole del dizionario in ordine di probabilità con un occhio a quanto utili ci si aspetta che siano quelle parole in un attacco PRINCE.
Usare Prince-Ling
python3 prince-ling.py -r NOME_RULESET -s DIMENSIONE_WORDLIST_DA_CREARE -o NOME_FILE_OUTPUTpython3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt
Se noti bug o se hai una funzionalità che vorresti vedere aggiunta, per favore apri un problema su questa pagina github. Accetto anche pull request, anche se idealmente collega una pull request a un problema in modo che io possa esaminarla più facilmente, fare domande e comprendere meglio le modifiche che stai apportando.
Ci sono molti miglioramenti che possono essere apportati alla modellazione delle strategie di creazione delle password usando PCFG. Sono molto aperto a nuove idee, modifiche e suggerimenti. Solo perché il codice attualmente fa qualcosa in un certo modo non significa che sia l'opzione migliore. Ad esempio, la struttura base fondamentale dell'approccio attuale in cui vengono generate maschere per stringhe alfa, cifre, altro, ecc., è stata scelta perché era l'opzione "più semplice" da implementare. Il mio team ha discusso molto sul fatto che un'opzione migliore potrebbe essere quella di iniziare con una parola base e quindi modellare regole di mangling più tradizionali applicate ad essa come transizioni nel PCFG. Quindi sentiti libero di scatenarti con questo codice!