Di recente, durante il test di una piattaforma blockchain per le vulnerabilità, i nostri esperti di sicurezza di Kaspersky Blockchain Security hanno scoperto che il processo di recupero della password della piattaforma era vulnerabile a un attacco attraverso l’enumerazione dei nomi utente. Gli sviluppatori web devono essere consapevoli di questo tipo di attacco e dei suoi pericoli. Cos’è un attacco di enumerazione?
Le applicazioni web con password e autenticazione di accesso includono diversi componenti che interagiscono con il database degli utenti: la finestra di login (per ovvie ragioni), il modulo di registrazione (per evitare la duplicazione dei nomi utente) e la pagina di reimpostazione della password (per assicurarsi che l’account corrispondente esista). Se gli sviluppatori web non implementano queste funzioni in modo sufficientemente sicuro, gli hacker potrebbero essere in grado di utilizzarle per determinare se un particolare username esiste nel database e così rubare i suoi dati o l’account.
In passato, gli sviluppatori erano soliti introdurre tutte queste caratteristiche senza alcuna protezione; gli hacker, quindi, potevano utilizzare una lista di username e un programma in cui li inserivano uno ad uno. Nel corso del tempo, per tenere alla larga potenziali hacker, gli sviluppatori hanno iniziato a implementare accorgimenti protettivi come captcha, limitazioni sul numero di tentativi di login, l’uso di asterischi o altri mezzi per nascondere alcuni dettagli di risposta.
Nelle moderne applicazioni web, la finestra di login ha di solito questo tipo di protezione. Tuttavia, i moduli di registrazione e le pagine di reset delle password a volte non li possiedono. Inoltre, igli sviluppatori web non sempre prendono con la dovuta considerazione il fatto che la presenza o l’assenza di un utente nel database possa essere determinata dai tempi di risposta del server. Ad esempio, se il nome dell’utente appare nel database, la risposta del server richiede 2 millisecondi. In caso contrario, la risposta richiede il doppio, 4 millisecondi. Per una persona, la differenza non è rilevabile, ma per gli strumenti di enumerazione automatizzata è facile da individuare.
I pericoli di un attacco di enumerazione del nome utente
Un attacco di enumerazione consente a un hacker di verificare se un nome esiste nel database. Ciò non gli permette di effettuare immediatamente il login, ma gli fornisce la metà delle informazioni necessarie. Ad esempio, per impostare un attacco di forza bruta, invece di cercare fra gli abbinamenti di login e password, ciò di cui hanno bisogno è una password corrispondente a un nome utente verificato, risparmiando così tempo e fatica.
Ricordate anche che quasi tutti i servizi utilizzano gli indirizzi e-mail come nomi utente. Pertanto, l’utente medio ha un solo login per molti siti web, e non tutti i siti prendono la sicurezza con la stessa serietà; le notizie di fughe di dati di login e password sono molto comuni. Raccolte consolidate di dati ottenute da fughe di dati sono disponibili per molti hacker. Inoltre, gli utenti tendono a utilizzare le stesse password su diversi siti web, quindi dopo essersi assicurati che l’username esiste sul vostro sito web, un hacker può accedere ad una raccolta per vedere se le password dello stesso utente possano andar bene anche su altri siti.
Inoltre, chi si occupa di spear-phishing spesso impiega attacchi di enumerazione durante la fase di ricognizione. Dopo essersi accertati che l’obiettivo ha un account sul vostro sito, i cybercriminali possono inviare un’e-mail che sembra provenire da voi, chiedendo all’utente di cambiare la sua password e, per fare ciò, si collegherà a una pagina di phishing che assomiglia alla vostra pagina web. Quando l’ignaro cliente inserirà una nuova password, dovrà anche confermare quella vecchia, fornendo così ai cybercriminali tutto ciò di cui hanno bisogno.
Come difendersi da un attacco di enumerazione
Avete mai notato come i siti web moderni rispondono all’invio di un modulo di reimpostazione della password? Non dicono “È stato inviato un link per reimpostare la password” o “L’e-mail specificata non è presente nel nostro database”, come invece accadeva per i siti web. Scrivono invece: “Se questa e-mail esiste nel nostro database, invieremo un messaggio con un link”. In altre parole, i siti web non confermano o negano esplicitamente l’esistenza del nome utente. Hanno apportato la modifica proprio per proteggersi dagli attacchi di enumerazione.
Allo stesso modo, non è necessario spiegare in dettaglio nella finestra di login che l’utente ha inserito una password errata o che non esiste quel nome utente nel sistema. Basta dire che la combinazione login/password non è stata trovata. Non è l’ideale da un punto di vista UX (esperienza utente), io, per esempio, mi esaspero quando dimentico quale e-mail ho usato per la registrazione ma sono abbastanza sicuro della password, o viceversa, ma il sito non mi dà alcun indizio su quale campo ho sbagliato. Tuttavia, la sicurezza praticamente sempre implica un prezzo da pagare a livello di comodità, e nel caso dei servizi di autenticazione, si tratta di un piccolo inconveniente giustificato.
Naturalmente, l’uso di un captcha e le limitazioni sui tentativi di login sono anch’essi requisiti fondamentali. Inoltre, per garantire la sicurezza della vostra applicazione web, vi consigliamo di sottoporvi a un audit esterno. E se siete interessati alla tecnologia blockchain, i nostri colleghi di Kaspersky Blockchain Security possono aiutarvi con l’analisi della sicurezza delle applicazioni Web.
Inoltre, non dimenticate di munirvi di una soluzione di sicurezza affidabile.