Memorizza la password in sqlite vs chiedendo all'utente di digitarla ogni volta

2

Sto creando un'app per Android che deve essere molto sicura. Per l'autenticazione sul server, utilizzerà l'autenticazione a 2 fattori che include:

  • username / password
  • verifica sms

Non posso usare certificati client (con chiavi private), perché nel mio caso non sarebbe pratico.

La password verrà memorizzata in modo sicuro su un server (probabilmente hash e salt). Tuttavia, ho difficoltà a trovare il modo migliore per inserire la password nell'app per Android che verrà utilizzata come client.

Attualmente sto considerando 2 opzioni:

  • Chiedi all'utente la password ogni volta che usa il servizio
  • Salva la password nel DB del telefono e riutilizzala ogni volta che un utente utilizza il servizio

La prima opzione è buona perché la password non viene mai memorizzata sul telefono (eccetto la memoria temporanea nella RAM), ma la password può essere rubata se un dispositivo viene compromesso da un keylogger .

Ho letto dei modi per installare un keylogger su un dispositivo Android e ho scoperto che il modo più comune è quello di installare la vittima su una tastiera personalizzata che verrà utilizzata per tutte le app.

Questo è spiegato da D.W. qui: Keylogger su smartphone?

La seconda opzione è immune ai keylogger (tranne che la prima volta che l'utente inserisce una password), ma ha il rischio che alcuni malware danneggino il database. Non ho trovato molte informazioni sulla sicurezza di SQLite su Android.

Inoltre, la seconda opzione aumenta il rischio se qualcuno ottiene l'accesso fisico al dispositivo. Tuttavia, questo rischio può essere ridotto utilizzando una sorta di codice pin per proteggere l'accesso all'app.

E anche il secondo fattore di autenticazione (SMS nel mio caso) può essere compromesso, sia dal malware al telefono o intercettando l'SMS al provider.

Quindi, la mia domanda è: esiste un modo noto di scaricare un database di un'app su un dispositivo Android non root e qual è la probabilità che ciò accada?

    
posta user3362334 20.03.2017 - 15:27
fonte

3 risposte

3

C'è un bel po 'da decomprimere con questa domanda, e farò del mio meglio per rispondere alla domanda notando che non sono uno sviluppatore Android.

Per cominciare, l'essenza dell'autenticazione a due fattori nella forma tradizionale è qualcosa che hai e qualcosa che conosci . Se si consente l'archiviazione di una password nel dispositivo si riduce o meno il beneficio di sicurezza che si otterrebbe implementando 2FA poiché il semplice possesso del dispositivo potrebbe compromettere. Detto questo, a mio parere, non dovresti fornire la possibilità di memorizzare la password nel dispositivo.

Password will be stored securely on a server(probably hash and salt)

Se vuoi che la tua applicazione sia sicura, allora sicuramente sale e hash casualmente.

Potrebbe anche essere utile notare che NIST ha raccomandato l'uso di SMS per due- autenticazione dei fattori. quindi forse dovresti esaminare qualcosa come Google Authenticator.

Non posso dire se i database SQLite possano essere scaricati o meno su telefoni non-rooted, ma vista l'onnipresenza del malware Android opererei nell'ipotesi che il telefono possa essere compromesso dall'installazione involontaria di un'app dannosa.

    
risposta data 20.03.2017 - 15:41
fonte
1

È solo una mia opinione, ma non dovresti provare a re-inventare una ruota quadrata quando quelli rotondi sono solo intorno. Come vecchio utente Unix, penso che una buona applicazione dovrebbe fare una sola cosa e fare il meglio, invece di provare a fare qualsiasi cosa, incluso portare un caffè.

Supponendo che la tua applicazione non sia un deposito di password, non dovresti nemmeno avere delle funzionalità di gestione delle password: se uno dei tuoi utenti vuole che la sua password sia memorizzata da qualche parte in modo che non devi scriverlo su ogni singola connessione, lascialo usare il suo gestore di password preferito. Il modo in cui lui deciderà se preferisce uno storage locale, un cloud storage o nessuno spazio di archiviazione e il problema di gestire i keylogger sarà per lo sviluppatore di password manager - la domanda dovrebbe essere già indirizzato da qualsiasi gestore di password corretto ...

IMHO, dovresti solo documentare come utilizzare alcuni noti gestori di password come l'eccellente Keypass, 1Password o Lastpass nella tua app, e concentrati solo sulle tue funzionalità.

    
risposta data 20.03.2017 - 16:33
fonte
0

Un'opzione migliore è quella che non è una delle due che stai prendendo in considerazione: uno schema basato su token di accesso come OAuth . Questo ha l'effetto di ricordare l'utente, ma possono revocare un token specifico senza modificare l'intero account. Questo è utile se perdono un dispositivo, per esempio. Puoi anche far scadere i token ogni tanto, il che impedisce a un token rubato di fornire l'accesso permanente fornito da una password rubata.

Google fornisce un set di esercitazioni su come gestire l'autenticazione dell'account su Android. Probabilmente dovresti leggerlo, o almeno fare ricerche in AccountManager .

    
risposta data 20.03.2017 - 16:06
fonte

Leggi altre domande sui tag