Ovunque guardi si dice che i server memorizzano le password in formato hash, ma poi ci sono quelle ultime notizie sugli hacker che rubano le password da grandi aziende. Cosa mi manca?
Ovunque guardi si dice che i server memorizzano le password in formato hash, ma poi ci sono quelle ultime notizie sugli hacker che rubano le password da grandi aziende. Cosa mi manca?
Ci sono due errori comuni, oltre al fatto che i database oi file vengano rubati in primo luogo.
Sfortunatamente, e contro tutti i consigli di sicurezza, molti sistemi memorizzano ancora password in testo normale.
Le password con hash non sono tecnicamente reversibili, ma come è stato sottolineato da altri, è possibile hash milioni di ipotesi di password quindi cercare semplicemente le corrispondenze. In effetti, ciò che di solito accade è che le tabelle di password e hash precalcolati (Rainbow Tables) sono disponibili e utilizzate per cercare le corrispondenze. Una buona tabella arcobaleno può supportare una corrispondenza percentuale elevata in frazioni di secondo per hash della password.
Usare un salt ( un'estensione extra non segreta della password ) nell'hash impedisce l'uso di tabelle arcobaleno precalcolate.
La maggior parte dei compromettitori dipende dalle tabelle arcobaleno. Elaborare il proprio set di hash è certamente possibile, ma richiede molto tempo (come in mesi o più), quindi generalmente è l'hash alla vaniglia a essere vulnerabile.
L'uso di tabelle arcobaleno di stop al sale e un numero elevato di round degli hash degli hash degli hash possono effettuare la transizione della forza bruta da mesi ad anni o più. La maggior parte delle istituzioni semplicemente non implementa questo livello di sicurezza.
Quando si sente che le password sono state rubate, a volte le aziende lo segnalano anche se sono state rubate solo password con hash. In questo modo puoi intervenire nel caso in cui siano rotti. Sfortunatamente, ci sono ancora aziende che memorizzano le loro password in modo errato; ad esempio, se cerchi la violazione della password rockyou, scoprirai che memorizzavano le password in testo non crittografato, il che significa che sono state compromesse non appena sono state rubate. In altri casi, come la violazione della password di Adobe, si è verificata una cattiva gestione dell'archiviazione delle password crittografate nel database. Altre volte, le aziende usano l'hashing sulle loro password ma usano algoritmi di hashing non sicuri o non salano correttamente le loro password. In breve, se un'azienda segue i metodi di memorizzazione delle password consigliati, le password in teoria dovrebbero essere al sicuro nella loro forma hash, ma una buona azienda informerà comunque i propri clienti della violazione. Tuttavia, ci sono molti esempi in cui le aziende non memorizzano correttamente le password, il che porta a essere violate abbastanza rapidamente.
Si esegue l'hash di un gran numero di potenziali password * , quindi si controlla se ogni output corrisponde a qualsiasi hash dal database delle password rubate. Il cracking della forza bruta è fattibile perché le persone non di solito scelgono password altamente imprevedibili.
Quando un database di password viene rubato, il materiale rubato include tutte le informazioni necessario fare cracking offline. (È semplicemente un processo di supposizione e controllo. Altri metodi potrebbero essere disponibili con metodi di memorizzazione di hashing o password meno sicuri.)
* Se vengono utilizzati i sali, il cracker deve considerare anche quelli . Se ogni account utilizza un salt univoco, i cracker non possono semplicemente prendere di mira tutti eseguendo l'hashing di ogni password candidata una volta. Se vengono presi di mira più account, la password che si desidera provare deve essere sottoposta ad hashing una volta per ogni salt. Se gli hash delle password non sono salati o utilizzano tutti lo stesso sale, è molto più facile eseguire attacchi non mirati; è sufficiente eseguire l'hashing di una password candidata una sola volta per individuare l'elenco completo degli utenti che avevano quella password. I sali rendono anche inutili i tentativi di utilizzare il precalcolo degli hash per risparmiare sforzi di cracking. I sali NON riducono il numero di hash che devono essere valutati se viene scelto come target un solo account. A parte queste sfumature, la base del cracking delle password rimane una supposizione e un processo di controllo.
L'hash delle password con funzioni resistenti alla preimmaginazione con un input sufficientemente imprevedibile è sufficiente per rendere impossibile il recupero di una password. (Una password disumanamente forte.)
Tuttavia, la maggior parte delle persone non lo fa nel mondo reale, un database di hash rubato è potenzialmente preoccupante quanto un elenco di password senza hash per un ampio sottoinsieme di utenti su un tipico sito web.
Se il cracker di password trova la password candidata il cui hash corrisponde a quello memorizzato nel database, allora avrà recuperato la password originale (debole).
In alternativa, se una funzione hash non è resistente alla preimage (incluso quando l'output dell'hash è troppo breve) una procedura di congettura e verifica può produrre falsi positivi. (Password alternative non identiche all'originale.)
Gli account degli utenti dell'azienda con la violazione dei dati sono ancora vulnerabili perché queste password sbloccheranno l'account di un utente, anche se non sono identici alla password originale. (Il server non ha modo di sapere se è la password originale. L'hash corrisponde ancora a quello nel database rubato in questo caso.)
Non usare intenzionalmente una funzione hash non sicura, ovviamente .. È ancora possibile dedurre la password originale o restringere il numero di possibilità. Il che renderebbe ancora più vulnerabili gli utenti che riutilizzano le password su altri siti web.
Ci sono altri modi in cui le password possono essere rubate che non derivano da una copia di un database di hash delle password trapelate. Le informazioni di accesso in testo normale potrebbero essere registrate. (Osservando il traffico di rete non crittografato / decrittografato, hackerando e riscrivendo il codice del server o utilizzando bug lato client, ad esempio.) Quindi quel registro può essere esfiltrato.
E ovviamente alcune aziende potrebbero non aver utilizzato schemi di verifica della password sicuri in primo luogo o potrebbero far trapelare il testo in chiaro a causa di un bug 1, 2.
Nonostante le spiegazioni alternative per alcuni casi di violazioni di massa delle password, il recupero delle password in chiaro dagli hash delle password è comune ed efficace. Tuttavia, non è così efficace recuperare il 100% degli hash in ogni perdita di database di grandi dimensioni.
Se le password vengono elaborate con una funzione hash crittografica, gli utenti con password estremamente complesse non devono essere preoccupati come gli utenti tipici. (Ma la maggior parte delle persone stima troppo la forza della password e la propria intelligenza.) Dopo aver speso risorse significative per crackare il 99% degli hash, probabilmente non vale la pena o non è pratico violare l'ultimo 1%. Ma le password complesse non sono utili se le password non sono sottoposte ad hashing.
Gli sviluppatori dovrebbero utilizzare un algoritmo di estensione delle password. Questi algoritmi cercano solo di rendere più costoso l'hashing delle password. (Sia per utenti legittimi che per cracker di password.) Argon2 è attualmente il miglior algoritmo di estensione delle password , specialmente su CPU Intel / ARM. Argon2 in particolare può fare molto per ridurre la frazione di hash che verrà incrinata. (Le password deboli saranno comunque crackabili.)
Molte possibilità:
Anche se le password dovrebbero essere sottoposte ad hashing prima dell'archiviazione, non è sempre così. Purtroppo, anche oggi, ci sono ancora molte password memorizzate come non crittografate . Ruba database, ottieni tutte le password.
Le password potrebbero essere archiviate da qualche altra parte. Le password potrebbero essere incluse nei log , ad esempio. Ruba i log, ottieni tutte le password che sono state utilizzate in quei log.
Le password potrebbero essere sottoposte ad hashing ma non salate . Quindi costruisci un elenco di password -> combinazioni di hash basate su tutti i tipi di password. Inverti questa tabella in modo che diventi hash -> password ( tabella di ricerca ). Ottieni database, converti hash in password, ottieni molte password.
Le password vengono sottoposte ad hashing e salate. Ma molti utenti usano password molto deboli (123456, password, letmein, qwerty ...). Prova elenchi di password contro quegli hash. Ottieni database, effettua un attacco dizionario sugli hash, ottieni molte password.
Variazione rispetto a quella precedente, invece di un elenco predeterminato di password, prova password basate su altre informazioni che hai sull'utente (nome utente, nome, cognome, data di nascita, e-mail ...).
Ancora un'altra variante, poiché molti utenti riutilizzano la stessa password: prova password per la stessa e-mail / nome utente recuperate da altre violazioni .
Ancora un'altra variazione, quando è in atto una forte politica per le password che richiede la modifica delle password su base regolare: se hai una password precedente per l'utente, prova a cambiare i numeri finali : se l'utente aveva la password "joe12" a un certo punto, prova joe13, joe14, joe15 ... Se hai la data in cui la password iniziale era valida e conosci l'intervallo di cambio della password, può essere abbastanza veloce.
Le password vengono sottoposte ad hashing e salate, ma utilizzano hash deboli (veloci) . Come # 4-7, ma puoi fare molti più tentativi molto più rapidamente, quindi puoi provare un dizionario più grande, o anche provare abbastanza sistematicamente tutte le combinazioni ( attacco di forza bruta ).
La comunicazione tra client e server è suscettibile ad attacchi man-in-the-middle (MITM). Le password vengono acquisite durante il percorso.
Esegui l ' ingegneria sociale . "Ciao, questo è il reparto IT, c'è un problema con il tuo account, dobbiamo reimpostare qualcosa, puoi darmi la tua password"? Saresti sorpreso di quanto spesso funzioni se correttamente inquadrato.
Ingegneria sociale di massa, anche nota come phishing : invia una campagna di posta elettronica accedere a un sito che catturerà tutte quelle password.
Hack nel sito e modificalo in modo che invii tutte le password ricevute a un server remoto (o li registra in un file che recupererai in seguito).
Idem, ma modifica il codice lato client per farlo. Potrebbe essere facile come un hack XSS memorizzato.
Una variazione di quanto sopra: keylogger .
Probabilmente ci sono molti altri metodi, ma questo ti dà un'idea di quanto sia facile recuperare tonnellate di password.
Poiché non stiamo discutendo di come le password siano state rubate, e ancor di più in seguito, eviterò il numero di fattori che le aziende dovrebbero implementare per prevenire queste violazioni dei dati.
Se crei un sito web e gestisci il database, sta a noi memorizzare le informazioni in modo efficiente. In caso contrario, quando si verifica una violazione dei dati, gli aggressori possono visualizzare le password in quello che potrebbe anche essere un testo normale, come spesso accade (a seconda del modo in cui sono archiviate).
In Insomma, non vorresti mai che ciò accadesse! - Il cracking delle password è una cosa molto comune e reale, solo perché le password vengono sottoposte ad hashing non le rende in alcun modo sicure.
Supponiamo che un'azienda abbia 1000 password dei clienti, tutte sottoposte ad hashing.
Supponiamo che 600 di quei clienti avessero una password, lunga 8 caratteri, con la probabilità che tali password vengano violate entro i primi 5 minuti (essendo generosi) è molto alto.
"5 minuti ?! Ma sono stati sottoposti ad hashing!" ....
Sì, ma le password di quei 600 clienti erano ancora scadenti, insieme a un algoritmo di hashing altrettanto scadente.
Senza entrare troppo nei dettagli nell'interesse di semplificare la spiegazione; il cracking delle password funziona semplicemente abbinando l'hash a un file di parole del dizionario, scorrendo ogni parola per vedere se il loro hash corrisponde a quelli che sono stati ottenuti da quei 600 clienti, ad esempio, la tua password potrebbe essere:
Password : sicurezza
Hashed MD5 : 2FAE32629D4EF4FC6341F1751B405E45
Quindi eseguo alcuni strumenti di hacking favorevoli contro quegli hash da "crackare" "loro.
Se dovessi mai voler memorizzare le password da solo, MD5 dovrebbe essere evitato, sopra era puramente a scopo di esempio. Invece, cerca i tipi più forti di algoritmi di hashing, renderà molto più difficile per gli aggressori utilizzare con successo le password che hanno rubato.
La risposta breve; l'hashing o qualsiasi formato in cui memorizzi le tue password non ha alcun effetto sulla capacità degli hacker di rubarle. Vengono rubati a causa di una varietà di diverse vulnerabilità. Ci sono una moltitudine di attacchi in cui aiutano a ottenere le password (con hash o meno).
Un punto particolarmente importante è che quando il database delle password è sicuro e accessibile solo al servizio legittimo, qualcuno che tenta di accedere a un account può provarli solo individualmente tramite il servizio legittimo. È possibile rilevare ripetuti tentativi falliti, fornire un avviso automatico e intraprendere un'azione appropriata per limitare ulteriori tentativi di accesso dalla stessa fonte.
Una volta che il database delle password è stato rubato e i dettagli dell'algoritmo di hashing sono noti, le persone in possesso del database delle password rubate possono provare milioni o miliardi di password contro la loro copia del database senza causare ulteriori allarmi a nessuno, e solo quando ne trovano una che funziona sulla loro copia offline tentare di accedere al servizio legittimo impersonando uno degli utenti di quel servizio (forse tu!).
Una percentuale significativa di utenti dispone di password che probabilmente rientrano nel primo miliardo che un utente malintenzionato proverebbe, quindi è solo questione di un lasso di tempo relativamente breve prima che l'attaccante possa accedere a una percentuale significativa di account.
Gli utenti che hanno davvero password complesse, dovrebbero essere in grado di ignorare in modo sicuro una compromissione in cui solo le password con hash erano perdite d, ma molti utenti in realtà non hanno password sufficientemente forti per resistere a questo tipo di attacco offline, ma solo quelle che sembrano abbastanza forti per il controllo automatico della forza delle password dei siti, che normalmente è più preoccupato di garantire che gli account siano sufficientemente forti per resistere agli attacchi online contro il servizio legittimo.
Prendi in considerazione anche il seguente vettore di attacco per le applicazioni web:
Se l'attaccante può modificare il codice di frontend, allora con un piccolo script le password in chiaro potrebbero essere "annusate" per un po '.
Se lo script può essere iniettato dal back-end, potrebbe essere impostato per essere mostrato solo ai visitatori di determinati paesi per proteggersi meglio dalle automazioni dannose di rilevamento delle modifiche al codice del frontend in esecuzione nello stesso paese in cui si trova l'applicazione eseguito da.
Sebbene la memorizzazione delle password in formato hash sia auspicabile, può anche porre alcune difficoltà. Se è necessario che un'entità invii una richiesta a un'altra entità per conto di un utente e la seconda entità richiede l'invio di password in chiaro per la convalida, la prima entità dovrà conservare la password dell'utente in una forma convertibile in testo in chiaro.
Per consentire ciò, le aziende possono memorizzare le password in vari tipi di moduli di sicurezza hardware che controllano tutti i tentativi di recuperare le password da essi. Questo approccio mitiga molti dei pericoli legati all'archiviazione delle password in testo normale. Non può mitigare tutti i pericoli, ma se si suppone che un'entità abbia l'autorità di accedere a un'entità esterna per conto di un utente e l'entità esterna non accetterà nient'altro che la password dell'utente come prova di tale autorità, alcuni dei pericoli associati alle password in testo normale saranno inevitabili, indipendentemente da ciò che la prima entità tenta di fare.