Non limitarti solo analizzando l'attacco dall'esterno. Devi vedere l'immagine più grande ... pensa alle misure di sicurezza come strati di una cipolla. Impilerai più che puoi nella speranza di chiudere qualsiasi angolo di attacco. Gli hash delle password sono uno di questi livelli.
Is hacking a database that easy? I mean instead of finding new ways to hash, why can't they make their database more secure or "hack-proof"?
Non importa quanto sia difficile hackerare il database. Considera che l'hashing della password dovrebbe proteggere la password anche dal sistema o dall'amministratore del database.
Nota che anche se provassi a farlo, non è necessariamente facile proteggere il database delle password. Come lo proteggeresti? Con un'altra password? Dove conserveresti quella password principale? Come proteggi la password principale contro qualcuno che è in grado di leggere tutto sul sistema?
If a hacker manages to hack into some database, why would he want to know the hashed passwords?
Bene, per provare ad attaccarli.
Nota come vengono utilizzate le password: l'utente legittimo mette un nome utente e una password in chiaro nella schermata di accesso, il testo in chiaro viene quindi sottoposto a hash e confrontato con l'hash della password.
Ogni utente malintenzionato può fare esattamente la stessa cosa, tranne che farlo sullo schermo di login / prompt effettivo non è efficiente - richiede tempo e viene facilmente rilevato; molti sistemi bloccheranno un account dopo alcuni cattivi tentativi.
Quindi, quando l'attaccante ottiene la lista degli hash delle password, può fare lo stesso hashing nel suo programma - velocissimo in modo accecante, e specialmente con attacchi "dicitonary" o "rainbow", che scambiano RAM / storage contro il tempo.
So, shouldn't all the fields be hashed?
Non puoi cancellare tutti i campi perché l'applicazione deve conoscere il valore degli altri campi, semplicemente. È difficile recuperare il valore da una versione con hash, anche per un utente legittimo.
Ma in effetti, ci sono database che fanno qualcosa del genere - crittografano (non ha hash) anche i dati reali. Vuoi valutare se ne vale la pena dal punto di vista delle prestazioni e devi quindi assicurarti che la crittografia fornisca effettivamente una vera sicurezza. Ad esempio, devi assicurarti che la tua chiave rimanga protetta mentre il DB ha bisogno di accedervi, e così via.
La crittografia non è appropriata per le password perché in realtà non vogliamo che le password possano essere decifrate (stesse idee come all'inizio = > lavori interni e la difficoltà di rendere la chiave di crittografia più sicura delle password effettive volevi assicurarti in primo luogo.