Disclaimer : ho creato PfP: Pain-free Passwords come hobby, potrebbe essere considerato un concorrente di LastPass.
Sono stato esaminando i problemi di sicurezza di diversi gestori di password in diverse occasioni. In particolare, finora ho segnalato dodici problemi di sicurezza a LastPass e ho analizzato le decisioni di progettazione che hanno portato a questi. Quindi, sebbene paj28 abbia dato un'ottima risposta generale sui gestori di password, posso fornire alcuni dettagli.
Quando le persone parlano della sicurezza dei gestori di password online, di solito si concentrano sulla sicurezza del server. L'attenzione si concentra su quanto sia facile compromettere il server e cosa succederà in seguito. Tuttavia, questo è solo un vettore di attacco, perché attaccare l'istanza del gestore di password locale potrebbe portare agli stessi risultati. In effetti, attaccare l'estensione del browser potrebbe essere una linea d'azione più promettente, poiché i dati sono già decrittografati lì e non lascerai tracce in nessun registro.
Fammi esaminare questi due aspetti separatamente.
Attacco all'estensione del browser
Ci sono molti dati storici sulle vulnerabilità nell'estensione del browser LastPass. Tutte queste vulnerabilità potrebbero essere sfruttate da pagine web arbitrarie. Per lo meno, questi sono:
Hai notato uno schema qui? LastPass ha lottato per anni per proteggere la propria funzionalità di Compilazione automatica e per limitare l'accesso alla propria API interna. Ogni volta che un nuovo rapporto dimostrava che la correzione precedente era incompleta.
Ora non è insolito che i gestori di password non riescano a implementare la compilazione automatica in modo sicuro, la maggior parte di loro ha riscontrato problemi in quest'area quando ho controllato. Sebbene totalmente evitabili, questi problemi sono abbastanza comuni che ho persino compilato un elenco di consigli per evitare le trappole.
Ma i problemi interni all'API sono piuttosto notevoli. LastPass espone questa API ai siti Web in molti modi diversi. È pensato per essere limitato a lastpass.com ma la logica è così complessa che le restrizioni sono state aggirate più volte in passato. E mentre LastPass ha fatto del suo meglio per minimizzare la gravità dei loro annunci ufficiali, ognuno di questi problemi ha permesso ai siti web di leggere tutte le password contemporaneamente. Peggio ancora, l'ultimo rapporto di Tavis Ormandy ha dimostrato che l'API interna potrebbe essere utilizzata per fare in modo che il componente binario LastPass esegua codice arbitrario sulla macchina dell'utente. Lo stesso potrebbe probabilmente essere fatto con tutti i difetti precedenti che hanno esposto l'API interna.
Ci si potrebbe ovviamente chiedere perché LastPass non è riuscito a limitare correttamente l'accesso all'API interna. Ma la domanda migliore è perché questa API è esposta ai siti Web. Questo perché una parte significativa della funzionalità LastPass non è contenuta nell'estensione, ma si basa piuttosto sul sito Web LastPass per funzionare. È una decisione di progettazione molto problematica, ma finora LastPass non sembrava interessato a risolverla.
Attacco ai dati lato server
Diciamolo chiaramente: non ci fidiamo del server. Non è che diffidiamo particolarmente di LogMeIn, Inc., almeno non più di qualsiasi altra azienda. Ma le nostre password sono dati molto sensibili e anche l'azienda più etica potrebbe avere un dipendente disonesto. Aggiungete a ciò la possibilità che le autorità statunitensi richiedano loro di produrre i vostri dati, cosa che non è nemmeno necessariamente associata a un'indagine penale. Non importa la possibilità che i loro server vengano violati, come se fosse già accaduto una volta.
Quindi è molto importante che i tuoi dati sul server siano crittografati e inutili per chiunque possa tenerlo. Ma cosa può impedire agli aggressori di decrittarlo? Esattamente una cosa: non conoscono la tua password principale che viene utilizzata per derivare la chiave di crittografia. Quindi la domanda essenziale è: LastPass protegge sufficientemente la tua password principale e la tua chiave di crittografia?
In quest'area, non sono a conoscenza di alcuna ricerca pubblicizzata tranne la mia, la maggior parte annotata in questo post del blog. La mia conclusione qui: LastPass soffre di una serie di difetti di progettazione, alcuni in fase di risoluzione mentre altri sono ancora attivi.
Forzatura bruta della password principale
Se gli aggressori hanno messo le mani su un mucchio di dati crittografati, l'approccio di decrittografia più semplice è: indovina la password principale utilizzata per derivare la chiave di crittografia. Puoi provare un numero illimitato di tentativi localmente, su qualsiasi hardware ti puoi permettere, quindi questo processo sarà relativamente veloce.
LastPass utilizza l'algoritmo PBKDF2 per derivare la chiave di crittografia dalla password principale. Pur essendo inferiore ai nuovi algoritmi come bcrypt, scrypt o Argon2, questo algoritmo ha l'importante proprietà di rallentare la derivazione della chiave, quindi gli aggressori che indovinano localmente saranno rallentati. Il tempo richiesto è proporzionale al numero di iterazioni, ovvero: maggiore è il numero di iterazioni, più difficile sarà indovinare una password principale.
Per molto tempo, il valore predefinito di LastPass era di 5.000 iterazioni. Si tratta di un valore estremamente basso che fornisce una protezione minima. Ho calcolato che una singola scheda grafica GeForce GTX 1080 Ti potrebbe essere utilizzata per testare 346.000 tentativi al secondo. È sufficiente per esaminare il database con oltre un miliardo di password note da varie perdite di siti Web in appena più di un'ora.
In base ai miei rapporti, LastPass ha aumentato il valore predefinito a 100.000 iterazioni a metà -2018 che è molto più adeguato. Ovviamente, se sei un obiettivo importante che potrebbe aspettarsi che risorse a livello statale vengano lanciate per indovinare la tua password principale, dovresti comunque scegliere una password principale estremamente forte.
Acquisizione dei dati per la forza bruta h2 >
Una delle mie scoperte all'inizio del 2018 è stata che lo script https://lastpass.com/newvault/websiteBackgroundScript.php
poteva essere caricato da qualsiasi sito web. Quello script conteneva sia il tuo nome utente LastPass che un pezzo di dati crittografati (chiave RSA privata). Dato che il tuo nome utente LastPass è anche il sale di derivazione della password, è tutto ciò di cui qualcuno ha bisogno per forzare la tua password principale localmente.
Questo problema è stato risolto rapidamente, ovviamente. Tuttavia, il difetto era abbastanza ovvio che mi chiedevo se fossi stato il primo a scoprirlo. Anche se ho sollecitato LastPass a controllare i loro log per rilevare eventuali segni di sfruttamento di questa vulnerabilità in natura, per quanto ne so questa indagine non è mai avvenuta.
"round lato server" come protezione inutile
A seguito di un incidente di sicurezza nel 2011, LastPass ha implementato un meccanismo di sicurezza aggiuntivo: oltre alle tue iterazioni PBKDF2 sul lato client, aggiungerebbero altre 100.000 iterazioni sul server. Quindi, in teoria, se qualcuno potesse ottenere dati dal server, ciò aumenterebbe lo sforzo richiesto per indovinare la tua password principale.
In pratica, ho potuto dimostrare in modo conclusivo che queste ulteriori 100.000 iterazioni vengono applicate solo all'hash della password. Tutti gli altri dati utente (password, chiavi RSA, OTP e altro) vengono crittografati solo utilizzando la chiave di crittografia derivata localmente dalla tua password principale, nessuna protezione aggiuntiva qui. Conclusione: questa "protezione" aggiuntiva è un completo spreco di risorse del server e non fornisce alcun valore.
Entrare dalla porta di servizio
Non importa quanto sia debole la protezione, gli attacchi di forza bruta saranno sempre inefficaci contro le password principali più forti. Tuttavia, il design di LastPass contiene molte backdoor che consentirebbero di decriptare i dati senza spendere alcuno sforzo.
L'interfaccia web
LastPass ti fornisce comodamente un'interfaccia web per accedere alle tue password senza l'aiuto di un'estensione del browser. Questa funzionalità è tuttavia una trappola: ogni volta che inserisci la tua password principale in un modulo di accesso sul web, non c'è modo di sapere se eseguirà l'hashing della tua password principale con PBKDF2 prima di inviarla al server o se la trasmetterà in modo chiaro testo.
Ricorda che non ci fidiamo del server? Tuttavia una semplice modifica del codice JavaScript fornito dal server è sufficiente per compromettere tutte le tue password. Anche se controlli quel codice JavaScript, ce n'è troppo perché tu possa notare qualcosa. Inoltre, sarebbe possibile offrire il codice modificato solo a utenti specifici.
Impostazioni account
Anche se si utilizza l'estensione del browser in modo coerente, ogni volta che si accede alle impostazioni dell'account verrà caricare il sito web lastpass.com. Anche in questo caso, non c'è modo per te di sapere che questo sito web non è compromesso e non ruberà i tuoi dati in background.
Diversi altri pezzi della funzionalità di estensione vengono implementati anche ricorrendo a il sito web lastpass.com e LastPass non vede il problema qui.
Recovery OTP
LastPass ha il concetto di password monouso (OTP) che puoi utilizzare per recuperare i dati dal tuo account se dimentichi la password principale. Queste OTP consentono la decrittografia dei dati ma normalmente non sono note al server.
Per rendere il ripristino ancora più affidabile, LastPass creerà automaticamente una OTP di ripristino per impostazione predefinita e la memorizzerà nei dati dell'estensione. Il problema qui: il processo di ripristino è stato progettato in modo tale che l'estensione fornisca immediatamente a lastpass.com quella OTP di ripristino su richiesta, senza nemmeno avvisarti. Quindi un server LastPass compromesso potrebbe chiedere l'estensione per la tua OTP di ripristino e utilizzarla per decrittografare i tuoi dati.
Secondo LastPass, questo problema è stato risolto nell'agosto 2018. Non so come lo abbiano risolto tuttavia, almeno non sono riuscito a vedere nessuna delle soluzioni ovvie nel loro codice.
Esposizione della chiave di crittografia
Ci sono anche diverse occasioni in cui l'estensione esporrà direttamente la tua chiave di crittografia locale sui server LastPass. Ciò ha lo scopo di aiutare la funzionalità LastPass basata sul web a integrarsi meglio con l'estensione del browser, ma annulla gli effetti della crittografia dei dati a livello locale. Le seguenti azioni sono tutte problematiche:
- Apertura delle impostazioni dell'account, Sfida di sicurezza, Cronologia, Bookmarklets, Monitoraggio del credito
- Collegamento a un account personale
- Aggiunta un'identità
- Importazione di dati se il componente binario non è installato
- Stampa di tutti i siti
- Fare clic su una notifica di violazione
L'ultimo è particolarmente grave perché il server LastPass può inviarti notifiche di violazione a piacimento. Quindi questo consente a LastPass di accedere ai tuoi dati ogni volta che lo desidera, invece di aspettare che tu usi funzionalità problematiche da solo.
Altri difetti di progettazione
- Come puoi vedere da solo aprendo https://lastpass.com/getaccts.php mentre sei connesso, il vault di LastPass non è affatto un blob di dati crittografati. Piuttosto ha dati crittografati qua e là, mentre altri campi come l'URL corrispondente all'account utilizzano semplicemente la codifica esadecimale. Questo problema è stato evidenziato in questa presentazione del 2015 e da allora più campi sono stati crittografati, ma non tutti però. In particolare, un rapporto che ho presentato ha sottolineato che i domini equivalenti non crittografati hanno permesso al server LastPass di modificare quell'elenco ed estrarre le tue password in quel modo. Questo particolare problema è stato risolto nell'agosto 2018 secondo LastPass.
- La stessa presentazione rimprovera LastPass per il suo uso di AES-ECB per la crittografia. Tra le altre cose, rivela quali delle tue password sono identiche. LastPass è passato ad AES-CBC da allora, ma quando ho guardato il mio "vault" ho visto un mucchio di credenziali crittografate con AES-ECB (si può dire perché AES-ECB è semplicemente un blob con codifica base64 mentre LastPass la variante di AES-CBC inizia con un punto esclamativo).
- Recovery OTP creato automaticamente e memorizzato nei dati dell'estensione significa che chiunque abbia accesso al tuo dispositivo e indirizzo email può accedere al tuo account LastPass. Questo è in realtà documentato e considerato a basso rischio. Forse uno dei tuoi colleghi ti ha fatto uno scherzo inviandoti un'e-mail a tuo nome perché ti sei dimenticato di bloccare il tuo computer - la prossima volta potrebbero prendere il controllo del tuo account LastPass anche se sei disconnesso da LastPass.
- A proposito di disconnessione, il tempo di scadenza della sessione predefinito è di due settimane. Sebbene sia certamente conveniente, c'è un motivo per cui la maggior parte dei prodotti che gestiscono dati sensibili hanno intervalli di scadenza delle sessioni molto più brevi, in genere ben al di sotto di un giorno.
- Per combinare un valore con un segreto (ad es. come firma) di solito si usa SHA256-HMAC. LastPass utilizza invece un approccio personalizzato, applicando l'hashing SHA256 due volte. Mentre gli attacchi che HMAC intende affrontare non sembrano avere un ruolo qui, non scommetterei su qualcuno con una migliore conoscenza delle criptovalute di me che non trovi una vulnerabilità qui, dopotutto. Inoltre, il lato server occasionalmente produrrà anche alcuni token SHA256: mi chiedo che tipo di imbroglio sta succedendo dove non riesco a vederlo e se è davvero sicuro.