class: center, middle # SECURING ACCOUNT --- La vita lavorativa, sociale, economica delle persone è online. -- Documenti, informazioni, numeri di carta di credito sono all'interno di siti web (portali) -- Le persone sono identificati da username e password -- E' vitale tenere sicure queste informazioni --- PASSWORD -- autenticazione tramite conoscenza -- supponiamo ci sia una password di 4 digit un digit è una cifra da 0 a 9 quanto tempo ci mette un pc a controllare tutte le combinazioni ? -- 0 0 0 0 0 0 0 1 0 0 0 2 .... 9 9 9 9 -- 1 ora, 1 minuto, 1 secondo ? --- Proviamo Codice Javascript (linguaggio interpretato usato nel browser) -- Non è il linguaggio più veloce, ce ne sono altri che sono molto piu' veloci -- console.time("crack"); digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; for(let d1 of digits) for(let d2 of digits) for(let d3 of digits) for(let d4 of digits) console.log(d1, d2, d3, d4); console.timeEnd("crack"); -- 10 x 10 x 10 x 10 = 10000 combinazioni --- console.log è una funzione onerosa, cambiamola: function controlla_pass(d1, d2, d3, d4) { return d1==='9' && d2==='9' && d3==='9' && d4==='9'; } console.time("crack"); digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; for(let d1 of digits) for(let d2 of digits) for(let d3 of digits) for(let d4 of digits) if (controlla_pass(d1, d2, d3, d4)) console.log("account craccato:", d1, d2, d3, d4); console.timeEnd("crack"); --- 4 lettere maiuscole function controlla_pass(d1, d2, d3, d4) { return d1==='Z' && d2==='Z' && d3==='Z' && d4==='Z'; } console.time("crack"); letters = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ]; for(let d1 of letters) for(let d2 of letters) for(let d3 of letters) for(let d4 of letters) if (controlla_pass(d1, d2, d3, d4)) console.log("account craccato:", d1, d2, d3, d4); console.timeEnd("crack"); -- 26 x 26 x 26 x 26 = 456.976 --- 4 digit / lettere maiuscole / lettere maiuscole / segni function controlla_pass(d1, d2, d3, d4) { return d1==='§' && d2==='§' && d3==='§' && d4==='§'; } console.time("crack"); letters = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '|', '\\', '!', '"', '£', '$', '%', '&', '/', '(', ')', '=', '?', '^', '@', '#', '<', '>', ',', '.', '-', '_', ';', '§' ]; for(let d1 of letters) for(let d2 of letters) for(let d3 of letters) for(let d4 of letters) if (controlla_pass(d1, d2, d3, d4)) console.log("account craccato:", d1, d2, d3, d4); console.timeEnd("crack"); -- 85 x 85 x 85 x 85 = 52.200.625 --- 8 digit function controlla_pass(d1, d2, d3, d4, d5, d6, d7, d8) { return d1==='§' && d2==='§' && d3==='§' && d4==='§' && d5==='§' && d6==='§' && d7==='§' && d8==='§'; } console.time("crack"); letters = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '|', '\\', '!', '"', '£', '$', '%', '&', '/', '(', ')', '=', '?', '^', '@', '#', '<', '>', ',', '.', '-', '_', ';', '§' ]; for(let d1 of letters) for(let d2 of letters) for(let d3 of letters) for(let d4 of letters) for(let d5 of letters) for(let d6 of letters) for(let d7 of letters) for(let d8 of letters) if (controlla_pass(d1, d2, d3, d4, d5, d6, d7, d8)) console.log("account craccato:", d1, d2, d3, d4, d5, d6, d7, d8); console.timeEnd("crack"); --- - Il browser si è bloccato -- - Perché non è terminato? -- - Qualche errore ? -- - ESERCIZIO: proviamo a stimare il tempo necessario per controllare tutte le password --- Domande ? --- chi crea i siti o servizi cerca un bilanciamento tra sicurezza della password e usabilita' --- Cerchiamo di elencare in questo corso le Best Practice --- le password devono essere minimo 8 caratteri. Ma i servizi di autenticazione dovrebbero accettare almeno 64 caratteri compresi spazi, segni e caratteri unicode -- (spoiler: nessuno lo fa) --- chi controlla le password dovrebbe verificare che non siano già presenti in: -- - password ottenute da precedenti breach corpuses (https://haveibeenpwned.com/Passwords) -- - parole comuni del dizionario -- - caratteri ripetuti o sequenziali 'aaaaa' oppure '1234abcd' -- - parole legate al contesto, ad esempio il nome del servizio 'contocorrente', 'amazonpassword', il nome utente es: davidegessi e tutti i derivati da questi -- Idealmente le password dovrebbero essere RANDOM --- il verificatore non deve permettere l'uso di hint visibili ad un utente non autorizzato, esempio "il nome del mio primo animale domestico", "il cognome della nonna materna" --- Negli ambienti di lavoro c'e' la pratica di cambiare password ogni 3-6 mesi, ora non e' piu' raccomandato. Le password generate sono simili magari con l'aggiunta di un numero alla fine e dal punto di vista della persona che le deve cambiare è un procedura frustrante e le password si dimenticano. --- il verificatore deve permettere solo un numero limitato di tentativi di accesso in un determinato periodo di tempo. Esempio cellulare, ti puoi dimenticare il passcode ma se lo sbagli 10 volte di fila puo' anche essere un tentativo di intrusione... è un bilanciamento tra sicurezza ed usabilita' --- il senso è di rallentare un eventuale attacco, il primo blocco è di 1 minuto, il secondo magari 5 minuti e cosi' via. --- 2FA (MFA) -- login piu' inserimento di un codice che proviene da altra (altre) fonti -- conoscenza, possesso, biometric auth --- OTP -- La password cambia ad ogni utilizzo, (chiavetta usb, oppure app per telefono) -- Meglio la app del sms perche' la sim puo' essere clonata, tramite social engineering --- Keylogging. -- Malware su pc e telefono. -- usare solo i propri device! Neanche quelli di amici sono sicuri --- Domande ? --- Credential Stuffing -- usano nomi e password gia' presenti in un file caricati sul web o darkweb. -- grave perche' le persone tendenzialmente usano la stessa password ovunque. --- Social Engineering -- foglietti con le password (non ascoltare chi dice di farlo), -- valutare chi chiede cose strane e che puo' essere riferito al proprio account. --- Phishing -- mail che sembrano provenire da un sito affidabile o simile ad uno che si usa. sms da corrieri con link da cliccare. -- E' semplice simulare un sito professionale identico a siti esistenti. Guardare attentamente l'url del link ! andare manualmente sui siti menzionati nelle email, non cliccare i link. Certi siti simulano anche il 2FA. --- Man in the middle attack -- non c'e' mai una comunicazione diretta tra il proprio pc e il sito finale. -- Serve la crittografia --- Il problema siete voi ! -- Le persone non sono fatte per usare password complicate. -- Una persona ha tanti account... io ne avro' centinaia, come fare ? --- Single Sign On -- accedere ad altri siti, usando l'account google o facebook o twitter -- aumenta la sicurezza, e l'usabilita'. Il sito finale non vede la tua password. --- Password manager -- Evita il phishing perche' ricorda l'url corretta di un sito. -- Punto di debolezza l'utente deve ricordare un'unica password. -- Funzionano su piu' browser, sul cellulare. -- Vanno bene anche i password manager di android, apple e microsoft. -- Sembra un mucchio di lavoro applicare il password manager a tutti i propri account, ma si puo' applicare un po' alla volta. -- Esempio Bit Warden --- BREAK --- Esercizio --- 1) Perché l’obbligo di cambiare regolarmente le nostre password potrebbe in realtà rappresentare una minaccia per la sicurezza? --- 2) Se ho una password di sei caratteri composta solo da lettere maiuscole (inglesi) e cifre decimali, quanti secondi potrebbe impiegare un avversario a scoprirla, supponendo che faccia un tentativo al secondo? --- 3) Concedici un momento di svago e gioca a The Password Game [https://neal.fun/password-game/ cercando di arrivare almeno alla regola 12. --- 4) Anche se il gioco è chiaramente umoristico, critica l’esperienza comune di creare nuove password. Spiega come esista un compromesso tra usabilità e sicurezza nel contesto delle password. --- Considera la seguente vignetta per la domanda. Fonte: xkcd.com/936 5) Considera la riga superiore della vignetta. Perché password di quel tipo sono facili da indovinare per un computer, ma difficili da ricordare per un essere umano? --- Considera la seguente vignetta per la domanda. Fonte: xkcd.com/936 6) Ora considera la riga inferiore della vignetta. Perché password di quel tipo sono difficili da indovinare per un computer, ma facili da ricordare per un essere umano? --- 7) Che cos’è un attacco di tipo credential stuffing? --- 8) Fai un esempio di qualcosa che appartiene alla persona stessa (una sua caratteristica fisica o comportamentale) e che può essere usata per confermare la sua identità quando accede a un sistema. --- 9) Se fornisci una risposta che è, o sembra essere, una conoscenza reale, la risposta sarà segnata come errata, senza eccezioni, e quel fattore dovrà essere considerato compromesso. --- 10) Fornisci un esempio specifico di qualcosa che possa essere considerato un tipo di fattore di inerenza ai fini dell’autenticazione. --- 11) Perché gli attacchi di phishing sono così difficili da prevenire? --- 12) Supponi che il tuo capo ti chieda se l’azienda dovrebbe rendere obbligatorio l’uso di gestori di password per tutti i dipendenti. Spiega, in un breve paragrafo, perché potresti voler che tutti in azienda utilizzino un password manager.