Attacchi bruteforce online
In effetti, i siti che non implementano alcuna forma di protezione contro gli attacchi bruteforce online stanno perdendo le password dei loro utenti. Molti siti non hanno alcuna forma di protezione e molti altri lo fanno.
Il blocco semplice ha problemi:
- Se blocchiamo l'IP dell'utente dopo x tentativi falliti, un botnet strong da 10'000 riesce a provare le password x * 10'000. A 100'000 tentativi molte delle password più deboli sono già state violate.
- Se blocchiamo l'account dell'utente dopo x tentativi falliti, qualsiasi utente malintenzionato può bloccare l'account di qualsiasi utente.
Ciò implica che la difesa deve essere più sofisticata, oppure possiamo semplicemente ignorare la difesa e provare a incolpare l'utente quando alla fine esplode, il che è meno che etico. Gli schemi più sofisticati utilizzano una combinazione di rilevamento di attività sospette e requisiti di accesso condizionatamente più rigorosi.
Per rilevare attività sospette, tracciamo i segni positivi in base agli accessi riusciti effettuati con esito positivo, come gli ISP dell'utente e alcuni identificatori dei dispositivi con cui l'utente ha effettuato l'accesso in precedenza. Possiamo anche utilizzare segni negativi come IP da ISP o paesi "contaminati" o un rapido aumento dei tentativi di accesso.
In termini di requisiti di accesso più rigorosi, possiamo utilizzare brevi timeout, captcha, autenticazione a più fattori e persino blacklist.
Attacchi bruteforce offline
Tutte le misure di cui sopra sono inutili quando il nostro amministratore di sistema scontento vende una copia del nostro database delle password sul mercato nero, perché in tal caso l'hacker può solo inserire la password e vedere se corrisponde al database. Craccare gli hash può essere economico, facile o facile ma molto costoso, a seconda di come abbiamo cancellato le password
Vedi: Come fare in modo sicuro le password di hash?
Salt: Per rendere più difficile all'utente malintenzionato di crackare l'intero database, utilizziamo un sale, che rende ogni hash un po 'unico. Ogni utente ha un sale diverso, che viene memorizzato accanto all'hash. Ciò significa che l'attaccante non può semplicemente calcolare l'hash di una password e confrontarla con l'hash di ogni utente, ma l'attaccante deve calcolare un nuovo hash per ogni password che prova contro ogni utente. L'utilizzo di un sale non aumenta il costo per ottenere la password di un singolo utente.
Hash costoso: nessun attaccante può bruteforce 100 miliardi di password al secondo, a meno che lo schema di hashing sia stato creato da un deficiente (che è plausibile). Alcuni utenti malintenzionati possono calcolare 100 miliardi di hash di base come sha256 al secondo, ma la soluzione è semplicemente non usare un hash di base per cancellare la password. Una soluzione banale è che il nostro hash non è in realtà hash =sha256(password, salt)
, invece è hash =sha256(sha256(sha256(.......(password, salt)...)password, salt)password, salt)
, dove usiamo circa 100'000 iterazioni di sha256, rendendo ogni attacco 100'000 volte più costoso. In realtà questa difesa è troppo semplice per rompere con l'hardware specializzato, quindi in pratica usiamo funzioni di derivazione chiave speciali tike bcrypt
e scrypt
per mescolare più hash di base in modi che sono costosi da calcolare per qualsiasi attaccante, indipendentemente dall'hardware.