Questo sarebbe un flusso di autenticazione sicuro?

2

Considera il seguente flusso di autenticazione.

  • L'utente invia il proprio nome utente e una password crittografata RSA
  • La password viene decifrata e sottoposta a hash con un salt (e possibilmente un pepe) e verificata
  • Se l'hash corrisponde a un GUID viene generato come token e il token riceve un TTL e una data di scadenza e viene restituito all'utente. Inoltre, l'indirizzo IP del chiamante viene salvato
  • Tale nome utente con il token viene quindi utilizzato per qualsiasi interazione futura con il DB (ogni volta che viene utilizzato il token la sua data di scadenza viene estesa). Solo l'IP che ha creato il token può utilizzare il token.
  • L'accesso da un nuovo IP deve essere prima verificato utilizzando una seconda forma di autenticazione (ad esempio un codice inviato all'e-mail dell'utente)

Quali sono i problemi di sicurezza di un tale sistema di autenticazione?

Mi sembra che un tale sistema utilizzi i token in modo errato, poiché da quello che ho letto sembra che lo scopo dei token sia l'autorizzazione e non l'autenticazione. Ho l'impressione che l'unico vantaggio dell'utilizzo del token sia che una password può essere utilizzata per accedere in qualsiasi momento e il token alla fine scade, quindi se diventa scaduto alla fine diventerà inutile.

Una delle mie preoccupazioni sarebbe se qualcuno ascolta costantemente e intercetta il token che significherebbe essenzialmente che potrebbero usarlo per accedere al database ogni volta che c'è un token attivo (e può aggiornare indefinitamente un token per mantenerlo attivo). Questo è il motivo per cui l'indirizzo IP verrà memorizzato e l'accesso verrà dato solo a quell'indirizzo IP. Ciò minimizzerebbe il rischio che il token venga utilizzato in modo improprio.

In generale un token non può essere restituito crittografato, come può qualcuno impedire che un token venga intercettato e utilizzato in modo improprio?

    
posta yitzih 21.03.2017 - 15:38
fonte

1 risposta

2

Un paio di cose che vale la pena notare:

  • Cambiamento IP - probabilmente più spesso di quanto ti aspetti
  • Sei fregato, non importa se qualcuno è in grado di ascoltare
  • Qualsiasi codice eseguito nel browser può essere bypassato se qualcuno sta ascoltando in

Quello che stai descrivendo è il cosiddetto token al portatore: chiunque abbia il gettone ha il potere del token. Questo è esattamente il modo in cui la maggior parte dei siti web funziona, tranne che spesso li chiamano solo cookie di sessione.

Ci sono un paio di cose che puoi fare per proteggere questo token.

  1. Applica HTTPS utilizzando un certificato affidabile: è un esercizio inutile se non utilizzi HTTPS.
  2. Abilita Sicurezza del trasporto rigoroso HTTP ; questo segnalerà al browser che tutte le richieste al sito devono essere su HTTPS, e quindi qualsiasi uomo nel mezzo sarà probabilmente notato a causa di un certificato non valido. Ciò ha un'efficacia limitata, anche se un utente malintenzionato potrebbe rimuovere l'intestazione HSTS prima che il browser lo veda.
  3. prendi in considerazione blocco della chiave pubblica ; questo renderà più difficile per qualcuno usare un certificato attendibile ma falso mentre si fa un MiTM. Ciò è estremamente efficace se utilizzi un'applicazione non browser perché puoi controllare la convalida del canale.

Se sei ancora preoccupato per qualcuno che intercetta la richiesta, allora hai bisogno di qualcosa come un certificato client, così puoi fare l'autenticazione reciproca. Ciò garantirà la protezione contro l'intercettazione perché lo scambio di chiavi può solo verificarsi tra le parti fidate.

    
risposta data 21.03.2017 - 16:04
fonte

Leggi altre domande sui tag