PDA

Visualizza versione completa : Complessita e tempo esecuzione bruteforce vs. dizionario


Morpheus-89
25-10-2012, 15.45.51
Come saprete per scoprire un codice numerico o alfanumerico senza conoscerlo uno dei possibili modi è quello di effettuare un attacco di tipo brute-force, ma questi dovendo provare tutte le combinazioni possibili sono abbastanza lenti, soprattutto se il codice da trovare è lungo e complesso. Dunque mi chiedevo:

Facciamo l'esempio che io debba scoprire un codice di 10 caratteri composto da soli numeri con le cifre che vanno da 0 a 9 dove le cifre si possono ripetere, si avrebbe un totale di 10^10 = 10000000000 possibili combinazioni dunque con un attacco brute force ci vorrebbe un bel po di tempo, se io creo un file di testo con tutte le 10000000000 combinazioni possibili e poi cerco di scoprire il codice con un attacco di tipo dizionario sfruttando il file, avrei miglioramenti in termine di tempo di esecuzione dell'attacco rispetto al brute-force?

Io credo di no, ma aspetto una vostra delucidazione

Grazie

booty island
25-10-2012, 15.55.43
Piú che altro hai idea delle dimensioni totali del file in questione? Imho sarebbe davvero troppo grande, quindi andrei di brute force.

borgata
25-10-2012, 19.08.37
Ovviamente no, a meno che le cifre contenute nel file di testo non siano generate in un ordine particolare che consenta di testare prima i casi più probabili (sempre che questo sia possibile).
Altrimenti non ha proprio senso farlo, il programma fa prima a generare da solo tutti i numeri che leggerli da un file.

LoryOne
25-10-2012, 19.28.25
Le dimensioni del file sono piuttosto corpose, ma è chiaro che prima o poi la combinazione la si trova. Solitamente si utilizza comprimere ed indicizzare il contenuto **, facendo accesso ad esso in modalità random: In questo modo è più probabile azzeccare una combinazione che non debba necessariamente essere frutto di una logica combinatoria sequenziale. Non è detto che non ci voglia tempo comunque...
C'è chi ha pensato di sfruttare la potenza di calcolo in rete, suddividendo il tempo di elaborazione su più unità elaborative: A seconda dell'algoritmo in uso *, invece delle CPU vengono sfruttate le GPU, notoriamente più potenti (soprattutto in virgola mobile) e strutturalmente fornite di più pipelines per l'esecuzione in parallelo.
Avrai sicuramente sentito parlare di CUDA (nVidia) o ATIStream (ATI).
Con gli attacchi basati su dizionario, potresti non azzaccare mai la combinazione, ma potresti anche riuscirci.
Ad ogni modo, come dice borgata, puoi anche evitare del tutto il database.

ps: Non perdere mai troppo tempo a pensare alla password cazzuta: dedica il tuo tempo ad evitare al tuo server di consegnare il file delle password, facendo in modo che i privilegi di esecuzione siano ridotti, così come ridotti devono essere i privilegi di accesso al file in questione; Elimina più che puoi le vie di accesso da remoto a servizi che non c'entrano nulla con le funzioni che il tuo server espleta e, soprattutto, evita accuratamente che il tuo server si appoggi a quei servizi. Verifica e limita più che puoi: dedica molto tempo alla verifica dell'input.

* A volte si memorizza un "seed" per combinazioni di x caratteri e da quello si parte per l'elaborazione dell'algoritmo (accesso sempre non sequenziale), riducendo di molto le dimensioni del DB.
** Ormai il file di testo è obsoleto e lento. Si sfrutta SQL su base dati indicizzato.

Morpheus-89
25-10-2012, 19.57.05
Non devo fare nessun attacco brute-force :D la mia era una semplice curiosità ;) grazie per le delucidazioni

LoryOne
25-10-2012, 19.59.42
Figurati. L'avevo capito :D

booty island
25-10-2012, 20.14.02
Se la password é lunga, variegata, con maiuscole, minuscole, numeri e caratteri speciali senza alcun senso logico... meglio lasciar perdere... a meno di non sfruttare bug, exploit o altro, dipende da che password dobbiamo trovare..