In che modo le nostre password potrebbero essere violate così facilmente?

9

Stiamo salvando la password in un database usando PHP:

return hash('sha256', PASSWORD_SALT . $password);

Recentemente un (fortunatamente) buon hacker SQL ci ha iniettato e incrinato alcune password, compresa quella dell'amministratore.

La storia non si è conclusa drammaticamente o terribilmente come nei film di Hollywood, perché è stato così gentile da indicarci i buchi. (Lo abbiamo "ringraziato" di conseguenza.)

Ora che i buchi sono stati riparati, temiamo che possano esserci dei buchi da qualche altra parte, dato che la base del codice è grande. Le domande sono:

  • Come mai ha infranto la password così velocemente (poche ore in meno di un giorno)? PASSWORD_SALT è piuttosto lungo, memorizzato nel codice sorgente e non ce l'ha. Inoltre, una password vuota non è accettata nel codice PHP.
  • Supponiamo che dovremmo modificare l'hash / crittografia per le password esistenti e future. Quale crittografia consigliate in modo che la password esposta sia più sicura?

Ci ha detto che ha usato un po 'di software e dozzine di macchine desktop a sua disposizione nella sua azienda. Ha detto che è un esperto di sicurezza annoiato in qualche grande azienda, quindi ha i mezzi per fare cose.

    
posta Phung D. An 20.06.2018 - 15:29
fonte

3 risposte

16

Innanzitutto, ciò che chiami PASSWORD_SALT non è davvero un sale. Un sale è diverso per ogni password e memorizzato nel database. Quello che hai è qualcosa che è condiviso da tutte le password e memorizzato nel codice sorgente. Questo è comunemente chiamato pepe.

Quindi, in che modo l'hacker ha violato le password così velocemente, senza conoscere il pepe? Probabilmente ha creato un nuovo utente per se stesso, quindi ha un utente per il quale conosce la password. Può quindi provare a forzare il pepe su quell'utente, poiché sa a quale password deve concatenarlo. La chiave qui è che non deve crackare il pepe e una password allo stesso tempo. Può prima spezzare il pepe e poi crackare le password. Questo è molto, molto più semplice.

Una singola iterazione di SHA-256 non è un buon algoritmo di hashing della password. È un modo per digiunare. Secondo questi benchmark per una configurazione Nvidia GTX 1080 8x , puoi provare circa 2 miliardi di hash al secondo. Se diamo all'attaccante 12 ore, questo è quasi 10 14 hash. In media, basta crackare un pepe con log 2 (10 14 ) - 1 = 45 bit di entropia. Ciò corrisponde, ad esempio, a 10 lettere minuscole casuali.

Una volta che hai il pepe, puoi iniziare a scansionare le password. Poiché probabilmente hanno un'entropia inferiore rispetto al pepe, dovrebbe essere molto più veloce.

Per sapere come eseguire correttamente l'hashing della password, vedi questa domanda .

    
risposta data 20.06.2018 - 22:38
fonte
2

How on earth did he crack the password so fast ( few hours to less than a day), PASSWORD_SALT is quite long, stored in the in source code and he did not have it. Also, blank pwd is not accepted in php code

Beh, sono sicuro che ha usato uno o più computer con build in GPU. Forse sta eseguendo più GPU in modalità CLI. Ciò significa che più GPU come la GTX1080 realizzano lo stesso compito per una sola operazione. In questo caso, stringere le stringhe di hashing in SHA256 da un elenco di password e confrontarlo con le stringhe di password con hash che ha trovato nel database.

Per darti un esempio di quante password GTX1070 è in grado di scomporre e confrontare in un secondo, ti rimanderò a questo blog che ho trovato: link

In questo esempio il tester ha utilizzato un EVGA GeForce GTX 1070 SC GAMING ACX 3.0 su un sistema Windows 7 . La GPU è riuscita a "crackare" 2117,4 MH / s per l'algoritmo SHA256.

Quindi tenta di decifrare almeno alcune password, confrontarle tra loro e dove è possibile determinare il sale. Con la consapevolezza di come sembra il sale, ha creato una nuova passwordlist. A partire dal sale seguito dalla sua normale passwordlist.

We suppose we should change the hash/encryption for existing and future passwords. Which encryption do you recommend so that the exposed pwd is more secured ?

Quando un hacker è in grado di ottenere password con hash, è una questione di tempo, a seconda dell'algoritmo hash, quanto tempo ci vuole per decrittografare la maggior parte delle password. Non voglio raccomandare un algoritmo, perché dipende strongmente dalla capacità di calcolo e dal tempo di caricamento. Ma se vuoi avere un'idea di quale algoritmo sia più strong di SHA256 dai un'occhiata ai benchmark di password cracking: link

Forti polizze password in cui un altro modo per ritardare un processo di cracking o rendere impossibile per l'hacker di indovinare la password corretta.

    
risposta data 20.06.2018 - 17:00
fonte
1

Sono scettico sul fatto che la descrizione delle circostanze sia accurata e affidabile. In particolare, trovo davvero difficile crederlo in questo modo:

PASSWORD_SALT is quite long, stored in the source code and he did not have it.

Ho letto questo come un'affermazione secondo cui PASSWORD_SALT era segreta e impossibile da indovinare per un attaccante in qualsiasi periodo di tempo (in termini tecnici, che ha un'alta entropia). Ma se concedessimo questo reclamo dovremmo concludere che l'attaccante ha sconfitto preimage resistance di SHA-256-che, non avendo altro che un efficace valore di output casuale per la funzione hash, sono stati in grado di trovare un input che produce quell'output . E non solo uno di questi input-one che sembra essere preceduto da una PASSWORD_SALT apparentemente segreta, lunga e imprevedibile.

Ma ovviamente il tuo hacker non ha scoperto una rottura catastrofica in SHA-256. Quindi penso che la tua comprensione delle circostanze debba essere imprecisa. O:

  1. L'hacker è riuscito a vedere il tuo codice e ha appreso il valore di PASSWORD_SALT;
  2. Il tuo valore per PASSWORD_SALT è in realtà facile da indovinare applicando gli stessi metodi normalmente applicati per il crack delle password. Il suggerimento della risposta di Anders secondo cui l'autore dell'attacco potrebbe aver creato un account con una password conosciuta è un metodo plausibile per fare questo: cracking di una bassa entropia salata data la conoscenza della password è lo stesso problema di cracking di una password con bassa entropia data la conoscenza del sale.

We assume we should change the hash/encryption for existing and future passwords. Which encryption do you recommend so that the exposed password is more secured?

Se utilizzi PHP, le versioni recenti hanno eccellente funzionalità di memorizzazione delle password integrata .

    
risposta data 21.06.2018 - 00:03
fonte

Leggi altre domande sui tag