Come ricordare una macchina affidabile utilizzando l'autenticazione a due fattori (come il sistema di Google)

11

Stiamo sviluppando un'applicazione web che utilizzerà l'autenticazione a due fattori. Probabilmente cercheremo di emulare qualcosa di simile a quello utilizzato da google, dove accedere per inserire un nome utente e una password, quindi ricevere un token in un messaggio SMS da inserire.

Vogliamo consentire agli utenti di ricordare una macchina client se lo desiderano, in modo che possano effettuare il login per 30 giorni senza richiedere il secondo metodo di autenticazione. A quali informazioni avremo accesso (attraverso le intestazioni delle richieste di pagine Web, ecc.) Che possiamo utilizzare per identificare in modo univoco questo computer client fidato?

Ovviamente un utente può avere più di una macchina client fidata, e mi aspetto che se usano due diversi browser sulla stessa macchina di fiducia, ciascun browser dovrà essere considerato attendibile in modo indipendente.

L'impostazione di un cookie sulla macchina con qualche GUID che significa che questo è attendibile semplicemente non sarebbe sufficiente, poiché qualcun altro potrebbe semplicemente copiare il cookie e crearlo sul proprio browser aggirando l'autenticazione a due fattori.

    
posta Marryat 22.02.2013 - 12:31
fonte

2 risposte

9

Non penso che sia interamente possibile con solo JavaScript / PHP (o qualche altro linguaggio lato server) per imprimere / identificare un computer in modo univoco.

Ricorda, qualunque cosa tu faccia, qualcuno con intenzioni malevole può semplicemente copiare la directory dei dati utente di Chrome / Firefox su un sistema simile (stesso sistema operativo, ecc.). In effetti, questa è la cosa più semplice da fare, dato che non devi cercare i cookie. JavaScript non può leggere nulla al di fuori di queste directory, quindi hanno appena duplicato il sistema.

Tuttavia, puoi utilizzare Flash / JavaScript per impronta digitale del browser . Sfortunatamente, l'impronta digitale del browser può cambiare se l'utente installa font / etc. Inoltre, i tuoi utenti dovranno consentire l'esecuzione di Flash / JavaScript - oggigiorno un bel po 'di persone stanno disabilitando JavaScript a causa del recente exploit di 0 giorni. Non vuoi forzare i tuoi utenti a doverli utilizzare. Ad ogni modo, si può facilmente replicare un'impronta digitale replicando il sistema (che richiede tempo, ma non è troppo difficile).

Alla fine, l'autenticazione a due fattori riguarda (a) avere una password e (b) avere accesso fisico a un dispositivo. Se stai dando accesso senza supervisione al tuo computer mentre sei loggato come te, la parte (b) è comunque compromessa, in un modo diverso.

Per rispondere alla tua domanda, però:

  • Puoi inserire un GUID univoco in un cookie
  • Puoi inserire un altro GUID in localStorage
  • È possibile associare parte dell'intestazione della richiesta User-Agent del browser con l'account. Ad esempio, il mio User Agent è User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/536.11 (KHTML, like Gecko) Ubuntu/12.04 Chromium/20.0.1132.47 Chrome/20.0.1132.47 Safari/536.11 . Da qui puoi estrarre il nome del mio browser (che non cambierà), il nome e la versione del sistema operativo (che cambierà di tanto in tanto ), indipendentemente dal fatto che il mio computer sia a 32 bit, ecc.
  • navigator.plugins - Questa è una matrice di tutti i plugin installati sul browser. Forse non è una buona idea per l'autenticazione a 2 fattori, dato che questo cambia spesso.

Si noti che tutti questi possono essere facilmente falsificati. Sono solo dei cerchi in più per un hacker da cui saltare.

Ancora una volta, puoi provare a utilizzare le tecniche di impronte digitali che riguardano la lettura dell'elenco di caratteri installati, ecc. Ancora, questo può essere aggirato, ma è molto più difficile. Puoi anche utilizzare JavaScript per archiviare file simili a cookie in posizioni casuali sul computer (non è sicuro se sia una buona idea)

Modifica: come menziona Joel nei commenti, dovresti anche avere un modo di revocare "computer fidati" (basta dissociare il GUID nel tuo database). E questo dovrebbe applicarsi anche quando viene cambiata la password.

    
risposta data 22.02.2013 - 13:22
fonte
1

Non pensare che questo possa essere fatto in sicurezza per un client arbitrario usando solo un browser web standard. Come dici tu, i cookie non sono una scelta sicura per autorizzare un computer. Inoltre, i cookie sono impostati per browser, non per computer. Potresti provare le tecniche di impronta digitale del browser , ma anche questo è specifico per il browser e non per il computer. E ricorda che le richieste HTTP, comprese le stringhe degli User Agent, possono essere impostate arbitrariamente da un client dannoso.

    
risposta data 22.02.2013 - 13:22
fonte

Leggi altre domande sui tag