8

Ho visto varie domande su questo problema, ma ci sono un paio di domande che non sono state poste. Se l'utente dimentica la propria password, vorrei che fosse in grado di ripristinarla con il proprio indirizzo e-mail (cioè non c'è alcuna domanda/risposta sulla sicurezza). La password è memorizzata come hash salato, quindi non è possibile il recupero. Invece, vorrei solo che l'utente inserisse una nuova password dopo aver confermato di aver richiesto un reset.Ripristinare la password ASP.NET - problemi di sicurezza?

Un metodo comune che è stato menzionato è semplicemente:

1) Creare un GUID casuale/crittografia forte di numeri casuali

2) Invia un URL univoco contenente il numero casuale per e-mail dell'utente affrontare

3) Quando confermata, l'utente è invitato a cambiare la password

Tuttavia, questo non è aperto a un attacco MITM? Se l'invio di una password temporanea su Internet a un'e-mail non è sicuro, qual è la differenza tra l'operazione e l'invio di un URL univoco a cui l'utente malintenzionato può accedere? Ho perso un passaggio chiave da qualche parte che renderà questo sistema più sicuro (o c'è un modo migliore per reimpostare la password)?

Grazie

risposta

9

Se si costruisce correttamente il hash, l'URL di click dovrà provenire dall'indirizzo IP che ha richiesto il reset. Ciò richiederebbe al MITM di falsificare l'IP e/o falsificare le intestazioni. Mentre ciò è possibile, più è unico l'identificazione dell'hash nel sistema in questione, più diventa difficile eliminare l'hash.

Si consiglia inoltre che il guid sia un hash unidirezionale di determinati criteri. È anche possibile crittografare i dati di sistema nella richiesta utilizzando una chiave pubblica che sblocca una chiave privata in modo che quando si fa clic sull'url, questi stessi dati di sistema crittografati pubblici devono accompagnare l'hash e l'unico sistema che potrebbe decodificare questi valori sarebbe la chiave privata detenuta sul server. Fondamentalmente un allegato psuedo-PKI per l'hash.

+0

mi piace l'idea di tentare di garantire il link di conferma click proviene dallo stesso computer come l'iniziale resetta richiesta. –

+2

Per quanto riguarda l'aspetto IP, sicuramente quella parte sarebbe irrilevante? Come utente malintenzionato, dichiarerei di dimenticarmi la password, quindi la richiesta di reimpostazione della password proviene dal mio PC (l'autore dell'attacco). Eseguendo un attacco MITM, vorrei intercettare l'e-mail, fare clic sul link e cambiare la password poiché continua a vedere il mio indirizzo IP. – keyboardP

+0

Probabilmente, ma ciò presuppone che l'utente malintenzionato abbia già compromesso anche l'account di posta elettronica. L'IP sarebbe solo un piccolo sottoinsieme di informazioni identificative. Potrebbero esserci altre metriche applicate che aumenterebbero la complessità dell'hash. La chiave non sarebbe quella di fare affidamento su una singola metrica, poiché ognuno deve essere compromesso. Più sono richiesti, più difficile è passare. A un certo punto diventa una questione di sforzo rispetto al risultato. –

7

I tuoi mezzi per autenticare l'utente è un segreto condiviso (la password).

Se l'utente dimentica quel segreto, è necessario un modo per stabilire un nuovo segreto condiviso. Non importa in che modo lo fai, avrai ancora il problema di autenticare l'utente per condividere quel nuovo segreto.

Se l'unica cosa che sai dell'utente che potrebbe essere usato per autenticarle è il loro indirizzo email, allora avrai bisogno di un modo per confermare che l'utente che richiede un reset ha il controllo di quell'indirizzo email.

E l'unico modo per farlo è inviare via email un segreto a quell'indirizzo e-mail e controllare se lo hanno ricevuto.

Quale sarà sempre aperto a un attacco MitM sufficientemente subdolo.

Il motivo per cui non si invia una password temporanea è per evitare il problema "l'utente non può essere disturbato cambiando e quindi continua a utilizzare la password temporanea non sicura anziché la propria."

+1

D'accordo con quanto sopra. Vorrei solo aggiungere che una password temporanea dovrebbe essere monouso: una volta utilizzato per accedere all'utente, non può essere riutilizzato e l'utente deve cambiarlo, altrimenti l'utente dovrebbe richiedere una nuova password. Non aggira l'attacco del MITM con qualsiasi mezzo, ma dovrebbe aiutare in una certa misura. – JonoW

+0

L'ironia della password temporanea è che probabilmente sarebbe più sicura di password effettiva dell'utente: D Comunque, sto andando giù il percorso 'link di conferma' che li blocca fino a quando la password viene modificata. – keyboardP

+0

Con il vettore di attacco MITM. Questo dovrebbe essere negato se quando ti viene richiesta una nuova password ti viene chiesto un segreto. Quindi, quando ti viene inviato il link dall'email e fai clic sul link, devi inserire di nuovo lo stesso segreto? –

1

per mitigare il rischio di un attacco man in the middle io uso le seguenti misure:.

  • Una richiesta di ripristino può essere utilizzato una sola volta
  • Se una richiesta di reset non viene utilizzato, scade dopo un'ora.
  • Tutte le richieste di reset sono permanentemente registrati se è stato infine completato o scaduto.
+0

Avrei dovuto resettare il ripristino molto più rapidamente di un'ora. L'intento di reimpostare una password è per l'accesso immediato. Non è ragionevole aspettarsi che un utente "onesto" aspetti un'ora per utilizzare il reset. –