
grandi set di regole hashcat generati da password compromesse reali
Avviso di manutenzione del progetto: Questo progetto è considerato completato. Non verranno accettate pull request o modifiche a questo progetto in futuro a meno che non si tratti di veri bug o migrazioni per consentire a queste regole di funzionare con versioni più recenti di hashcat.
Pantagrule è una serie di regole per il cracker di password hashcat generate da grandi quantità di dati reali di compromissione delle password. Sebbene i file di regole di Pantagrule possano essere grandi, le regole sono sia personalizzabili che performanti meglio di molti set di regole esistenti.
Pantagrule è stato generato utilizzando l'algoritmo Levenshtein Reverse Path di PACK per la generazione automatica di regole (Kacherginsky, 2013). L'output di PACK è stato poi ordinato in base al numero di volte in cui PACK ha generato la regola per creare il set di regole base. Questo processo è simile alle regole generate da _NSAKEY per le competizioni di cracking delle password nel 2014 (_NSAKEY, 2014), tuttavia Pantagrule è stato generato a partire da un insieme di password significativamente più grande. La versione 2 di Pantagrule è stata sviluppata a partire dal corpus 'founds' di hashes.org pubblicamente disponibile, una wordlist pubblica di prima classe. Questo produce risultati più trasparenti rispetto alla variante originale, che utilizzava un corpus proprietario contenente 842.643.513 password uniche.
Quando set di regole così grandi vengono passati attraverso PACK, si ottengono milioni di regole. Tuttavia, poiché la maggior parte delle regole generate appaiono solo poche volte, la maggior parte delle regole utili sono quelle più comunemente generate dall'algoritmo. Questo repository contiene un sottoinsieme di regole generate da PACK durante l'iterazione attraverso il corpus esistente.
Per generare un'ottimizzazione di secondo passaggio delle regole su dati reali, il primo milione di regole generate è stato eseguito contro l'elenco NTLM di Pwned Passwords utilizzando la wordlist rockyou. Ogni regola che ha crackato una password è stata aggiunta a una propria lista e le regole con prestazioni inferiori sono state scartate.
Sono stati creati quattro tipi di ottimizzazione:
popular.rule: pantagrule.1m eseguito contro le prime 25.000.000 di password del set HIBP.random.rule: pantagrule.1m eseguito contro 25.000.000 di password selezionate casualmente dal set HIBP.hybrid.rule: Una lista ordinata di una combinazione delle regole popular e random di maggior successo, poi tagliata a metà, nel tentativo di creare un set di regole più leggero e 'bilanciato' che funzioni su un insieme di campioni più ampio.one.rule: Una versione di OneRuleToRuleThemAll in cui vengono aggiunte le regole hybrid con le migliori prestazioni, e la lista viene troncata alla dimensione del set di regole dive. È interessante notare che c'è solo una sovrapposizione di poche migliaia di regole tra OneRuleToRuleThemAll e le regole di Pantagrule, rendendo le due strategie complementari. La one di Pantagrule ha prestazioni migliori rispetto ad altre liste note di questa dimensione, e si consiglia di iniziare con questo set di regole prima di provare una delle varianti più grandi.Dopo il successo di questi grandi set di regole, è stato tentato l'inverso della variante royce, in cui è stata utilizzata la metodologia originale di Pantagrule ma entrambi i set di dati erano diversi. Pantagrule ora utilizza la lista pubblica 'founds' di hashes.org come base per la generazione delle regole, e poi è stato eseguito un passaggio di ottimizzazione contro la lista NTLM V6 di Have I Been Pwned. Data la natura completamente pubblica dei dati utilizzati, ciò consente anche la pubblicazione dei dati di riproducibilità grezzi, inclusi pantagrule.v2.1m.rule, che sono il primo milione di regole generate con questa metodologia. I dati per V5 e V6 sono gli stessi per le prime 25 milioni di password.
Per questa versione, il modo in cui viene generata one è cambiato. Per generare one, l'intera lista di 1 milione è stata aggiunta a OneRuleToRuleThemAll.rule e poi l'intero set calibrato su Pwned V6, invece di aggiungere semplicemente le regole e troncare.
Le convenzioni di denominazione per le regole sono ora cambiate nel formato pantagrule.${corpus}.${trainingversion}.${extension}. Questo rende più facile capire per cosa è stata ottimizzata la regola. Ad esempio, per pantagrule.hashorg.v6.random, abbiamo utilizzato la metodologia random con hashes.org come base per la generazione delle regole, ottimizzata su Pwned Passwords V6.
Le regole originali sono state addestrate utilizzando la wordlist proprietaria insieme al set NTLM di Pwned Passwords v5 usando rockyou.txt come base. Poiché i 'dati di addestramento' e i dati di validazione sono gli stessi, avrebbe senso vederli ottimizzati per il dataset V5.
royceSu richiesta del contributore di hashcat Royce Williams, le ottimizzazioni del primo milione di regole sono state anche eseguite con la lista founds di hashes.org. Ciò è dovuto al fatto che il corpus HIBP è relativamente sporco, e la lista founds di hashes.org è probabile che produca un set di regole più pratico per il cracking reale. Queste sono state aggiunte come varianti royce. Le ottimizzazioni royce sembrano consistere di un numero marginalmente inferiore di regole in totale, e random.royce è sostanzialmente più efficace su una lunga coda di password rispetto alla random originale. Le prestazioni non sono aumentate rispetto alle regole esistenti su alcune varianti, ma dato che i dati di addestramento e validazione di Pantagrule originale provengono entrambi dal dataset Pwned Passwords, ciò non sembra sorprendente. Le varianti royce di Pantagrule esistono nella cartella rules/royce.
Per testare eventuali successi della strategia Pantagrule rispetto ad altri set di regole, eseguiremo i dati di validazione sulle prime 25 milioni di password di Pwned Passwords V5 e sulle prime 100 milioni di password di Pwned Passwords V5 per avere un'idea dell'efficacia delle regole nel cracking della 'lunga coda' con ciascun set di regole. Il dizionario canonico rockyou.txt sarà il nostro dizionario e la nostra baseline.
La generazione della variante originale è stata eseguita su una macchina con 8x 1070Ti che eseguiva hashcat v5.1.0. Le varianti royce di Pantagrule sono state create su una macchina con 4x Radeon VII che eseguiva hashcat git build v5.1.0-1774-gf96594ef. Le varianti hashorg.v6 sono state create e validate (molto lentamente) su una singola NVIDIA Tesla M4, una singola 1070Ti e hashcat v6.1.0.
Per notare le prestazioni delle regole contro password molto comuni, 0-25M è suddiviso in una propria colonna. La colonna RPP è le regole per percentuale sul dataset 100M. Questo viene calcolato usando la formula rpp = Math.round(num_rules / (0_100m_percent - 6.450)). Più alto è questo numero, più regole vengono eseguite per percentuale crackata. Questo aiuta a rendersi conto dei rendimenti decrescenti nei set di regole e dà un'idea del costo amplificato dell'esecuzione delle regole su hash più lenti.
| Regole | Numero di Regole | V5 25M | V5 100M | RPP |
|---|---|---|---|---|
| Nessuna regola (solo rockyou.txt) | 0 | 16.549% | 6.450% | N/A |
| pantagrule.private.v5.one | 99,092 | 79.814% | 69.417% | 1,574 |
| pantagrule.private.v5.hybrid | 355,205 | 81.346% | 73.372% | 5,308 |
| pantagrule.private.v5.popular | 478,736 | 81.792% | 73.544% | 7,135 |
| pantagrule.private.v5.random | 616,236 | 81.687% | 69.805% | 8,828 |
| pantagrule.hashorg.v6.one | 99,092 | 74.500% | 60.573% | 1,831 |
| pantagrule.hashorg.v6.hybrid | 339,953 | 77.649% | 68.341% | 5,493 |
| pantagrule.hashorg.v6.popular | 514,416 | 80.668% | 72.377% | 6,931 |
| pantagrule.hashorg.v6.random | 638,773 | 80.603% | 72.713% | 8,614 |
| pantagrule.private.hashorg.one.royce | 99,092 | 79.618% | 69.092% | 1,582 |
| pantagrule.private.hashorg.hybrid.royce | 314,268 | 81.068% | 73.082% | 4,716 |
| pantagrule.private.hashorg.popular.royce | 420,984 | 81.386% | 73.102% | 6,316 |
| pantagrule.private.hashorg.random.royce | 592,235 | 81.659% | 74.010% | 8,766 |
| best64 | 64 | 45.117% | 24.985% | 3 |
| hob064 | 68 | 37.786% | 19.773% | 5 |
| OneRuleToRuleThemAll | 52,014 | 78.058% | 64.541% | 895 |
| d3adhob0 |
Questo lavoro conferma le limitazioni dell'algoritmo LRP di PACK originariamente osservate da _NSAKEY su set di dati moderni quando si utilizza il dizionario rockyou. Sebbene l'algoritmo LRP generi regole che aumentano la percentuale di cracking, lo fa a costo di un grande aumento dello spazio di ricerca. Per questo motivo, Pantagrule è più utile nei casi in cui il cracking difficile richiede regole esotiche.
È importante notare che se puoi usare PACK per generare regole basate su un corpus specifico e poi colpire i tuoi hash rimanenti con esso, è probabile che tu ottenga una percentuale di cracking maggiore rispetto all'uso di uno di questi grandi set di regole. Ad esempio, Pantagrule V2 non performa altrettanto bene su PPv5 come il set di regole calibrato su v5.
Dal rilascio originale di Pantagrule, queste regole si sono dimostrate valide in molteplici impegni di red team presso grandi aziende tecnologiche e società di consulenza. La lista originale pantagrule.1m ha crackato l'8% degli hash HIBP rimanenti che avevano resistito al corpus usato per generare Pantagrule, ai set di regole comuni sopra menzionati, a un brute force alfanumerico a 7 caratteri e alle topologie PathWell di KoreLogic.
Come afferma anche l'autore della meta-regola One Rule to Rule Them All (Hunt, 2017), non esiste una regola che funzioni meglio delle altre. Ogni caso d'uso è diverso, e ogni fonte di regole può essere quella che ti aiuta più di un'altra su un dump di hash specifico o con una wordlist specifica. Nota che questi dati non mostrano cosa è stato crackato; alcune regole hanno crackato hash che altre regole non hanno crackato.
Le regole di Pantagrule sono rilasciate sotto licenza MIT. Sentiti libero di integrarle nei tuoi strumenti.
| 57,548 |
| 51.274% |
| 34.800% |
| 2,030 |
| dive | 99,092 | 77.111% | 63.314% | 1,743 |
| _NSAKEY V1 | 123,289 | 76.42% | 64.121% | 2,138 |
| _NSAKEY V2 | 123,289 | 76.882% | 64.472% | 2,124 |