Come craccare una password dato il suo hash e il suo sale usando un metodo più efficiente della forza bruta?

20

Sono stato in grado di decifrare le password, dati i loro sali e i loro hash, usando la forza bruta.

In primo luogo, la lunghezza delle password era 3 e la lunghezza salt 2:

ad es. , hash: rrVo/xC.s5/hQ , salt: rr = > password: thr (tempo: ~ 0m4.579s)

Ora, per le password di lunghezza 4 e lunghezza sale 2:

ad es. , hash: ss1C5xfz6Nggg , salt: ss = > password: four (tempo: ~ 7m19.531s)

Come ho già detto, queste password sono state ottenute utilizzando un algoritmo a forza bruta. È utile per lunghezze di password brevi: man mano che aumenta il numero di caratteri per la password, il tempo richiesto per interrompere la password aumenta in modo esponenziale.

Quello che voglio sapere è una tecnica più efficiente per ridurre lo spazio di ricerca.

Informazioni aggiuntive:

  1. Le password vengono create utilizzando: A-Z, a-z, 0-9 e simboli: $, #, +, @, =, /, &

  2. Ho utilizzato il comando openssl per generare gli hash e li ho confrontati con l'hash specificato

    $ openssl passwd -crypt -salt rr thr
    

in uno script bash.

    
posta InfZero 06.03.2017 - 05:50
fonte

5 risposte

25

Senza ulteriori informazioni, non è possibile ridurre lo spazio di ricerca. Poiché non disponi di alcuna informazione preventiva sulla password, non puoi escludere alcuna possibile password dallo spazio di ricerca.

Se la tua funzione di hash (che non specifichi) ha alcune vulnerabilità, potresti essere in grado di imparare qualcosa sulla password prima di iniziare il tentativo di forza bruta (inizia con 'a', contiene 'b' e così via. ..). Riducendo così lo spazio di ricerca.

Qualcos'altro che potrebbe rispondere alle tue esigenze di cracking delle password più veloce è Rainbow Tables che sono una precomputazione che esegui dato il sale , per essere in grado di trovare la password più velocemente più tardi. Le tabelle Rainbow vengono utilizzate come tabella di ricerca per un determinato hash.

Diciamo che abbiamo hash('four','ss') = ss1C5xfz6Nggg , e conosciamo il sale ss . Eseguiremo la seguente precomputazione:

Latabellaarcobalenoeffettivadeveessereordinatainbaseaivalorihash,perconsentireunaricercarapida.Inquestomodo,quandovienefornitol'hashdellapassword,ss1C5xfz6Nggg,dobbiamosolocercarel'hashnellaRainbowTableelanostrapasswordèarchiviataproprioaccantoadessa.Cosìfacendoilprocessodicrackingmoltopiùvelocemente(Acostodeltempodiprecomputazione,ovviamente).

Modifica: Il commento di Sjeord è corretto, quindi devo sottolineare che:

Rainbow tables, despite their recent popularity as a subject of blog posts, have not aged gracefully. CUDA/OpenCL implementations of password crackers can leverage the massive amount of parallelism available in GPUs, peaking at billions of candidate passwords a second. You can literally test all lowercase, alphabetic passwords which are ≤7 characters in less than 2 seconds. And you can now rent the hardware which makes this possible to the tune of less than $3/hour. For about $300/hour, you could crack around 500,000,000,000 candidate passwords a second.

Source

    
risposta data 06.03.2017 - 08:55
fonte
19

Non c'è modo di recuperare la password più velocemente della forza bruta, ma c'è molto che puoi cambiare sulla tua forza bruta.

four (time: ~7m19.531s)

Questo è molto tempo per forzare bruscamente una password così breve. Otterrai un notevole miglioramento delle prestazioni utilizzando hashcat con una scheda grafica decente. Potrei romperlo in meno di due secondi con il seguente comando:

/usr/src/cudaHashcat-2.01/cudaHashcat64.bin ss1C5xfz6Nggg -m 1500 -a 3
    
risposta data 06.03.2017 - 08:55
fonte
9

L'intero scopo del sistema sale + hash è che non dovrebbe esserci modo più veloce di un attacco a forza bruta. Come già sottolineato da BgrWorker, ci sono in effetti dei punti deboli negli algoritmi di hash più vecchi che riducono lo spazio di ricerca (o più precisamente: consenti il calcolo delle collisioni), ma scoprirne uno è considerato un'innovazione che si troverà in un giornale più probabile che in una risposta StackOverflow. : -)

Ci sono alcuni trucchi comuni che puoi usare:

Le tabelle Rainbow sono già state citate e, a seconda delle dimensioni del sale, anche per lunghezze hash e password realistiche forniscono un possibile approccio alle prime 100 o più password.

Uso di attacchi e cracker di dizionari invece di una stupida forza bruta. La password aaaaaaaa è molto meno probabile della password "password" o "12345678", quindi testarli per primi è intelligente.

Infine, in molti scenari del mondo reale, la politica della password di un sito o azienda riduce effettivamente lo spazio di ricerca, a volte in modo drammatico. Se la password non solo può, ma avere per contenere, ad esempio, almeno un numero e un carattere speciale, lo spazio di ricerca su 8 caratteri è appena passato da 10 ^ 15 a 10 ^ 13.

    
risposta data 06.03.2017 - 15:02
fonte
4

Credo che il tuo problema sia che stai usando openssl in uno script bash. Ciò significa che ogni nuovo tentativo di password deve generare ancora un altro processo. Per forzare la brutalità, prendi in considerazione l'utilizzo di un linguaggio di programmazione compilato efficiente come C. Sono sicuro che troverai che la tua efficienza aumenta di più di un ordine di grandezza.

Ovviamente, questo significa che dovrai riscrivere l'intera applicazione per forzatura bruta.

    
risposta data 06.03.2017 - 19:13
fonte
2

Ciò che stai cercando è in diretta opposizione agli obiettivi fondamentali degli algoritmi di hashing delle password in generale. Non dovresti essere sorpreso che ciò che cerchi sia difficile - le persone hanno speso migliaia di ore a renderti difficile per te.

Le persone hanno citato Rainbow Tables e altri approcci di hashing delle password, che sarebbero un'estensione logica di ciò che stai facendo. L'altra alternativa è approfittare del fatto che le persone in genere non scelgono password perfettamente casuali. Software come John the Ripper sono progettati per sfruttarlo, utilizzando schemi di generazione di password comuni per indovinare prima le password più probabili. Ciò significa che devi solo ricorrere a una ricerca di forza bruta se la password è stata scelta correttamente.

    
risposta data 07.03.2017 - 01:36
fonte

Leggi altre domande sui tag