Ho la password "data / hash", dopo cosa?

0

In teoria, le password non dovrebbero essere archiviate in testo normale e dovrebbe anche essere evitato di memorizzarle come un semplice hash, qualcosa come md5(password) .

Si consiglia di memorizzare l'output della funzione che utilizza algoritmi / cifrari come bcrypt , script , PBKDF , passato alla password con un po 'di sale.

Ma una volta che il database / file con password è stato compromesso, ad esempio un file contenente dati come questo:

id, password

12, $2a$10$zkeaH43RM9Ep5.KPcyXWYuCaVSbKmmXaKLztvCa0G867ItEpvx4fa  (bcrypt)

12, 05ffaebcca41770af425d4ba9b4e7bcdff532237dca931c192a36d94db7307d4 (scrypt)

12, JDJhJDEwJHprZWFINDNSTTlFcDUuS1BjeVhXWXVDYVZTYkttbVhhS0x6dHZDYTBHODY3SXRFcHZ4NGZh (base64 ofuscation bcrypt)

Come attaccante, dal primo sguardo, posso vedere che nel primo caso è stato usato bcrypt con un costo di 10, per il secondo ho solo una lunghezza di 64 in cui probabilmente è incluso il sale, il terzo termina essendo la base64 che offusca semplicemente bcrypt

base64($2a$10$zkeaH43RM9Ep5.KPcyXWYuCaVSbKmmXaKLztvCa0G867ItEpvx4fa) 

solo per menzionare alcuni esempi casuali.

Quindi, una volta che queste informazioni sono state compromesse, oltre a seguire una procedura per cambiare la password, ecc., quale potrebbe essere il modo migliore per memorizzare le password che potrebbe ritardare di più il processo di ricerca di come è stato generato e avere più tempo per consentire tutti gli utenti per ripristinare / modificare le password.

O chiedendo in modo diverso, pur avendo questo tipo di dati che normalmente un utente malintenzionato inizia a fare? basandoci su ciò che potrebbe essere migliorato in modo che potrebbe essere più difficile trovare un modello, iniziare a scansionare le password, ecc.

    
posta nbari 04.08.2017 - 09:42
fonte

2 risposte

1

Aumentare il valore del lavoro, che renderà esponenzialmente più difficile la vita di un hacker. Usa un salt casuale per ogni password, che lo renderà tale che un hacker deve generare dizionari di attacco unici per ciascun utente. Usa un pepe codificato nell'applicazione per aggiungere un elemento nascosto agli hash che l'hacker sarebbe forzato alla forza bruta.

Qualsiasi tentativo di nascondere il metodo utilizzato per hash la password è la sicurezza tramite l'offuscamento, che di per sé non è realmente la sicurezza.

Ci sono diversi scenari che possono verificarsi se un utente malintenzionato accede al tuo database, ne analizzerò alcuni.

Nessun sale / stesso sale per ogni voce. In questo scenario, l'utente malintenzionato può rompere tutti i password degli utenti in un colpo solo. Dato che l'unica variazione di cui devo preoccuparmi è la password stessa, posso eseguire l'hash una sola volta e controllare tutti i 10.000 utenti.

Sale unico per ogni voce, sale aggiunto all'hash. In questo scenario, posso solo violare le password degli utenti una alla volta. Diciamo dei tuoi 10.000 utenti, 300 avevano la password "password". Invece di pensare che 300 dei tuoi utenti avessero quella password in una sola volta, avrei dovuto ripassare con gli utenti 100.000 volte per controllarli tutti.

Sale unico + pepe hardcoded. Questo scenario dipende dalla profondità di un'intrusione che soffri. Se ottengono l'accesso ai server delle applicazioni, potrebbero annusare il pepe. Se non è così, invece di dover indovinare la password, devo anche indovinare il pepe. L'unico problema è che non ho modo di dire se sono vicino. Se dovessi scegliere di usare un pepe lungo 128 caratteri, inizialmente generato usando una libreria crittograficamente protetta, dovrei forzare la parte superiore della password, praticamente distruggendo gli attacchi basati sul dizionario.

Il nostro obiettivo è quello di rendere infernale l'attacco da parte di un aggressore alle password, facendo le cose in modo tale che l'attaccante non abbia altra scelta che sedersi e aspettare un'eternità.

Nota a margine, se il database delle password è stato mai compromesso, è necessario contrassegnare immediatamente tutti gli account e al successivo accesso richiedere all'utente di seguire la procedura di reimpostazione della password, non la procedura di modifica della password. Ciò ti consente di verificare l'identità degli utenti utilizzando un canale laterale per garantire l'autenticità della richiesta.

    
risposta data 04.08.2017 - 15:21
fonte
0

Se vuoi tempo, usa il contatore salino e iterativo alto per calcolare i costi. Opzionalmente, anche un pepe che viene memorizzato sul lato server, possibilmente al di fuori della radice dell'app e chiamarlo quando necessario. Dipende dal tipo di app che hai ma per i siti web è importante farlo nel caso in cui PHP smetta di analizzare il codice.

In tal caso, un utente malintenzionato otterrà anche la formula su come viene generato l'hash in primo luogo. Ma mancherebbe ancora il pepe. Se il server viene violato, d'altra parte, l'utente malintenzionato ottiene entrambi, oltre all'accesso al database.

Da questo punto in poi, sei in guai seri perché l'attaccante ora sa come generare l'hash, sa quali sono i valori di sale e pepe, il che significa che può facilmente cambiare temporaneamente l'hash della password con la sua password preferita e accedere al conto di sua scelta.

Potrebbe anche decidere di scansionare o esportare l'intero database, il che significa rubare le informazioni dalla fonte. Dipende da quanto è grande il tuo database e se la tua app utilizza un solo database.

Quindi, in sostanza, le password di cracking vengono per ultime in previsione che molti utenti usano ancora le stesse password per più account. Il che ci riporta alla risposta originale. Usa sale unico e da 5k a 10k di iterazioni per rendere il calcolo degli hashard costoso. Puoi salire fino a un milione ma qualsiasi valore superiore a 10k potrebbe causare problemi di prestazioni. In questo modo, potrebbero volerci anni per rompere le password ragionevoli. È per questo che alcuni siti web richiedono l'utilizzo di lettere maiuscole, numeri e caratteri speciali ... semplicemente per aumentare il pool di risorse.

Da una nota a margine, invece di andare a tali lunghezze, un utente malintenzionato dovrebbe piuttosto estrarre la tua password semplice per qualsiasi account che desidera con un keylogger o un attacco di reindirizzamento DNS a un sito fasullo. Verrà dopo il dispositivo invece di cercare di violare il server. Se questo è lo stesso, è meglio proteggere il tuo server, il che significa proteggerlo sia da remoto che fisico.

    
risposta data 04.08.2017 - 17:57
fonte

Leggi altre domande sui tag