Le password deboli e il riutilizzo delle password sono ancora alcune delle preoccupazioni più gravi per la sicurezza informatica. Esistono diversi modi per aumentare la sicurezza delle password, ma spesso non vengono adottate da utenti e amministratori. Ecco come è possibile assicurarsi che i dati sensibili nell’applicazione web non vengano compromessi a causa di password utente non sicure.
Lunghezza o complessità?
Il criterio password più comune applicato dagli amministratori, sia nel caso di applicazioni Web che di altri sistemi, è un criterio di lunghezza e complessità. Ad esempio, potrebbe essere necessaria una password complessa per contenere almeno 8 caratteri, lettere maiuscole e minuscole, numeri e caratteri speciali. Tuttavia, questa politica è in realtà piuttosto debole e non dovrebbe essere raccomandata.
Esistono diversi siti web, dove è possibile controllare quanto tempo ci vorrebbe per rompere la password utilizzando un attacco a forza bruta. Se si immette una password di 8 caratteri con numeri, maiuscoli / minuscoli e caratteri speciali in Come sicuro è la mia password, si dice che un computer potrebbe interrompere la password in 9 ore. D’altra parte, se si immette una password di 16 caratteri che utilizza solo lettere minuscole, il risultato è 224 milioni di anni.
La ragione di questo è matematica. La formula per l’entropia della password è log2(RL), dove R è il numero di caratteri univoci e L è la lunghezza della password. Se si utilizzano solo caratteri minuscoli, L 26. Se si aggiungono caratteri maiuscoli e cifre, diventa 62. Con i caratteri speciali, dipende da quali caratteri sono consentiti, ma diciamo che diventa 70. Per una password di una lettera, ciò significa che l’aggiunta di caratteri aggiuntivi aumenta di tre volte la complessità. Ma una password di due lettere basata solo su caratteri minuscoli ha 262 x 676 entropia. Pertanto, l’aggiunta di un solo carattere minuscolo a una password minuscola aumenta la complessità non tre ma 26 volte. Si può chiaramente vedere, che è la lunghezza della password che conta davvero, non la complessità.
La lunghezza è sufficiente?
Se il cracking delle password fosse basato solo sul metodo della forza bruta (provando ogni singola combinazione possibile), la lunghezza della password sarebbe il modo migliore per rendere praticamente impossibili gli attacchi. Tuttavia, c’è anche una tecnica di attacco informatico chiamato attacchi dizionario, che significa fondamentalmente indovinare la password in base alle parole comunemente usate. Ad esempio, una password la volpe marrone veloce salta sopra il cane pigro sarebbe incrinato da un attacco dizionario quasi istantaneamente. D’altra parte, una password con esattamente le stesse lettere: vromjon tobki huhet qecar dzowyf xup selg, sarebbe quasi impossibile da decifrare.
Fortunatamente, gli attacchi al dizionario sono anche molto facili da evitare se si utilizzano parole false che sono facili da memorizzare a causa del modo in cui suonano. Ad esempio, è possibile utilizzare una password lunga come bargle zaws gubble meh brudda dulgly. Coloro che conoscono lingue oscure hanno ancora più fortuna perché la maggior parte degli attacchi dizionario sono basati sul vocabolario inglese e diverse altre lingue del mondo popolare. Ad esempio, la password nista’ niekol il-‘ie, ma jwe’aniex potrebbe essere considerata abbastanza sicura.
Un’altra tecnica interessante per la creazione di password sicure è utilizzando solo il primo paio di lettere di ogni parola per formare una password lunga che si basa su una frase reale. Ad esempio, è possibile creare una password più sicura dalla frase rapida della volpe marrone: thequibrofoxjumovethelazdog (anche se contiene ancora diverse parole del dizionario, che non è ottimale). Puoi anche, per esempio, prendere la prima lettera di ogni parola da una frase più lunga che conosci bene: skwklbfhkskppp (i testi della canzone Soft kitty). Naturalmente, in tutti questi casi cambiando alcune lettere in maiuscolo e l’aggiunta di numeri tra le parole reali aumenta anche la sicurezza (ad esempio, The7Qui0Bro1Fox2Jum3Ove4The5Laz6Dog).
Si noti che gli strumenti di interruzione della password replicano anche i trucchi dell’utente, come la sostituzione di alcuni caratteri con numeri simili (ad esempio 1, i, 2 e z), invertendo le parole (ad esempio drowssap), aggiungendo un numero alla fine, ecc. Pertanto, le password come dr0w554P123! sono facilmente incrinate.
Il falso senso di sicurezza
Un altro meccanismo molto comune utilizzato dalle applicazioni web e altri sistemi per aumentare la sicurezza delle password è costringendo l’utente a cambiare regolarmente la propria password. Tali meccanismi di solito memorizzano gli hashes per le vecchie password e quindi non consentono all’utente di riutilizzare una qualsiasi delle loro password precedenti.
Sfortunatamente, questa politica introduce un falso senso di sicurezza perché gli utenti trovano modi semplici per aggirarlo. Siamo onesti, cosa facciamo quando il sistema ci chiede di aggiornare la nostra password? Di solito aggiungiamo il successivo numero consecutivo alla fine e continuiamo a sostituirlo ogni tre mesi quando richiesto (password1, password2, password3…).
Questa tecnica non aumenta l’entropia delle password e non impedisce in alcun modo gli attacchi al dizionario. Pertanto, sempre più grandi giocatori tra cui Microsoft si stanno allontanando dal raccomandare modifiche regolari della password. Anche le grandi istituzioni come FTC ora raccomandano contro questo, in modo da non implementare questo meccanismo nell’applicazione web.
Il pericolo del riutilizzo delle password
Anche se si arriva con la password più sicura, diventa insicura se lo si utilizza su ogni sito web e in ogni applicazione. Con il numero di violazioni dei dati globali, c’è una grande probabilità che la password per qualche sito sia stata compromessa. Se ritieni che ciò sia improbabile, potresti essere sorpreso: basta inserire il tuo indirizzo email su Have I Been Pwned.
Per fortuna, la maggior parte dei siti in realtà non memorizza le password in testo normale (anche se anche i più grandi giocatori sul mercato sono stati colpevoli di esso). Ciò significa che, nel caso di una violazione dei dati, è solo l’hash della password che viene compromesso. Tuttavia, in molti casi, gli hashes non sono sicuri. Molte applicazioni web utilizzano algoritmi hash vecchi e facili da compromettere come MD5. In tal caso, l’utente malintenzionato ha bisogno di molto meno tempo per trovare la password sulla base di un hash. Naturalmente, più semplice è la password, più velocemente sarà compromessa.
Purtroppo, non è possibile verificare il riutilizzo della password nell’applicazione Web. Pertanto, è sufficiente educare gli utenti e confidare che essi seguono i vostri suggerimenti.
Sicurezza dei gestori di password
Per combattere il riutilizzo delle password, ricorriamo ai gestori di password. Sono diventati più popolari negli ultimi anni e c’è un bel po’ da scegliere per ogni piattaforma. Molti di loro sono molto facili da usare e multipiattaforma. Ciò significa che è possibile, ad esempio, memorizzare il database delle password (protetto con una singola password lunga e molto complessa) nel cloud e accedervi dal PC, dal cellulare e da qualsiasi altro luogo tramite un’interfaccia web. I gestori di password combattono il riutilizzo delle password e possono anche generare password univoche complesse per te, anche se tali password non saranno facili da ricordare.
Alcuni gestori di password rendono ancora più facile per gli utenti di applicazioni web e introdurre i propri plugin del browser web. Tali plugin prendono la password dal database delle password e la usano automaticamente sul sito web. Tuttavia, tali plugin sono il tallone d’Achille di gestori di password e dovrebbe essere evitato, come dimostrato per esempio dall’ultima vulnerabilità LastPass. Sarete molto più sicuri se si apre manualmente il gestore di password, copiare la password e incollarlo nell’applicazione web.
Autenticazione a più fattori
La difesa più efficace contro gli attacchi basati su password al giorno d’oggi è l’autenticazione a più fattori (MFA), spesso semplificata all’autenticazione a due fattori (2FA). L’ipotesi di base è che l’utente deve fornire qualcosa che conosce (la password) e utilizzare qualcosa che hanno (ad esempio, uno smartphone o un token hardware). L’autenticazione a più fattori è anche parte dei requisiti di conformità più recenti per PCI DSS e altro ancora. Tuttavia, non tutti i meccanismi di Autenticazione a più fattori sono ugualmente sicuri.
La tecnica MFA più comune è per l’applicazione web per inviare un SMS con un codice monouso al numero di cellulare fornito dall’utente. Questa è anche la peggiore idea per l’AMF. Gli aggressori utilizzano attacchi SIM-swap per compromettere tali meccanismi. Essi truffano l’operatore di telefonia mobile, emettono un duplicato della scheda SIM dell’utente e lo usano per ricevere il codice monouso. Uno dei casi più popolari di un tale attacco è stato il compromesso dell’account che appartiene al CEO di Twitter.
Un modo per evitare questo è quello di utilizzare un app per dispositivi mobili. È possibile sviluppare la propria applicazione o utilizzare soluzioni standard one-time-password (OTP) come Google Authenticator o FreeOTP. Le app per dispositivi mobili utilizzano codici monouso generati dall’applicazione o inviano una notifica push al tuo cellulare (che devi confermare).
Tuttavia, l’utilizzo di un app per dispositivi mobili potrebbe rappresentare un problema aggiuntivo per gli utenti. Se acquistano un nuovo telefono o devono reimpostare quello corrente, in genere devono visitare una succursale per ottenere l’accesso ai servizi online. D’altra parte, se possono ripristinare l’accesso chiamando al telefono, questo li rende molto suscettibili alle truffe di ingegneria sociale. Inoltre, le app per dispositivi mobili basate su codici monouso standard non proteggono gli utenti dal phishing: una pagina di phishing può fungere da proxy per la pagina reale e intercettare il codice e la password.
Token hardware per il salvataggio
L’opzione di sicurezza definitiva per MFA sembra essere token hardware. Tali gettoni sono stati intorno per un po’, in forme diverse. Ad esempio, dalla fine degli anni ’90, molte banche hanno rilasciato token ai propri clienti per consentire loro di accedere ai servizi online. Tali token richiedevano di ottenere il codice di accesso in base al codice di seed visualizzato dal sito Web. Dispositivi come questo non sono stati utilizzati solo dalle banche, ma, ad esempio, anche dai produttori di giochi (ad esempio, da Blizzard dal 2008, ancora supportati fino a poco tempo fa). Ci sono banche che usano ancora tali token fisici invece o in aggiunta alle app per dispositivi mobili.
Un’altra forma di token hardware sta diventando sempre più popolare: le chiavi hardware. Tuttavia, l’idea non è nuova – sono stati utilizzati per anni da alcuni produttori di software per combattere la pirateria. Soluzioni come YubiKey, Google Titan, Thetis e altre consentono l’accesso a molte applicazioni e si basano su standard comuni (come OTP, Smart Card, OpenPGP, FIDO U2F, FIDO2). Ci sono chiavi che è possibile utilizzare per computer e telefoni cellulari: possono utilizzare un’interfaccia fisica (USB-A, USB-C) o una wireless (Bluetooth, NFC). Puoi associare il tuo account a più chiavi contemporaneamente (se hai paura di perdere il token o se hai bisogno di token diversi per dispositivi diversi a causa di requisiti tecnologici).
Al giorno d’oggi, i meccanismi di sicurezza hardware sono anche parte delle apparecchiature informatiche regolari. Per diversi anni, i computer desktop e portatili sono stati dotati di moduli hardware (TPM/SE) che forniscono tecnologie di crittografia. Il sistema operativo Windows 10 è compatibile con lo standard FIDO2, il che significa che qualsiasi dispositivo Windows 10 con il modulo hardware può funzionare come una chiave hardware. I telefoni cellulari sono spesso dotati di scanner di impronte digitali o riconoscimento facciale. Tutti questi, soprattutto in combinazione con le password, forniscono una maggiore sicurezza. E ‘vero che qualcuno può rubare il telefono / laptop e scanner di impronte digitali / faccia possono essere violati, ma la probabilità che il ladro avrà anche la password è molto piccola.
Tutte le password contano
Come uno sviluppatore di applicazioni web, si potrebbe pensare che se una password utente senza privilegi viene violato, non mette in pericolo l’applicazione web a tutti. Purtroppo, non è sempre così. Ad esempio, se un utente malintenzionato utilizza un’iniezione SQL per ottenere l’elenco degli hash delle password e quindi viola anche la password di un utente, è possibile utilizzare questo account utente per accedere al sistema e utilizzare l’escalation dei privilegi per ottenere l’accesso a un account con privilegi. Sfortunatamente, un utente malintenzionato potrebbe anche ottenere la password dell’utente tramite social engineering, phishing o malware e questo è qualcosa che tu, come sviluppatore di applicazioni web, non puoi evitare.
Pertanto, è necessario assicurarsi che gli utenti utilizzino sempre password sicure. Si tratta di due attività: l’utilizzo di meccanismi di sicurezza delle password nell’applicazione Web e il test delle password deboli. Nel primo caso, è possibile sviluppare meccanismi personalizzati o utilizzare soluzioni open source (ad esempio nowsecure o zxcvbn) e nel secondo caso: utilizzare uno scanner di vulnerabilità web in grado di verificare le password predefinite e le password deboli.