Opzioni per la crittografia lato client dei database Web locali

4

Il mio scenario è il seguente:

  • Applicazione Web, eseguita dal browser, progettata per dispositivi mobili.
  • Utilizza lo spazio WebSQL che può contenere informazioni sensibili i dati.
  • Utilizza Application Cache per abilitare l'utilizzo offline in assenza di connettività.
  • Può connettersi a un'API in cui è possibile scaricare anche dati più sensibili. L'autenticazione viene gestita con l'autenticazione BASIC e i dati non crittografati vengono trasferiti via cavo, poiché l'applicazione deve accedere all'API nei seguenti ambienti / scenari:

    • Su una rete Wi-Fi locale protetta e privata.
    • Su Internet pubblica, su una connessione VPN.
    • Su Internet pubblica, tramite una connessione HTTPS.

Finora, in base alle mie conoscenze limitate, la sicurezza dei dati sensibili trasferiti sul filo è coperta. Tuttavia, i dati "a riposo" nella memoria WebSQL locale e formattati nelle pagine HTML dell'applicazione Web non sono sicuri.

Il problema attuale è che se un dispositivo mobile contiene dati sensibili e viene perso o rubato, come ridurre al minimo il rischio di accesso ai dati sensibili.

Poiché l'applicazione deve essere utilizzabile senza interazione con il server, qualsiasi crittografia basata su software dovrebbe essere contenuta sul client stesso. Ciò significa che, presumibilmente, il tentativo di crittografare il database WebSQL sarà inutile, come se un intruso esperto potesse bypassare la crittografia hardware, presumibilmente possono anche determinare la logica di crittografia / decrittografia?

La soluzione proposta per la crittografia dei dati a riposo, consiste nell'utilizzare la crittografia hardware integrata che fa parte di iOS e dispositivi Android , che richiedono agli utenti di inserire una password nella schermata di blocco. Ci sono anche le funzionalità correlate di "cancellazione remota" che potrebbero essere utilizzate.

D: In che modo "sicuro" è la soluzione proposta? Se la crittografia hardware integrata non è sufficiente, quali sono le migliori strategie per implementare la crittografia lato client dei dati WebSQL senza necessità di interazione con un server?

L'implementazione di una soluzione di crittografia / decrittografia dei dati basata su software offre solo vantaggi marginali in termini di sicurezza, in quanto è possibile accedere al codice di crittografia / decrittografia e decodificarlo? È solo per me, o è il principale vantaggio di questi soli scopi di marketing, cioè essere in grado di "dire" che è crittografato?

Link interessanti:

link

Anche ...

Underlying storage mechanisms may vary from one user agent to the next. In other words, any authentication your application requires can be bypassed by a user with local privileges to the machine on which the data is stored. Therefore, it's recommended not to store any sensitive information in local storage.

https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Client-side_databases

Questo significa che l'unica opzione sicura è quella di produrre un'applicazione ibrida? Per esempio. utilizzando PhoneGap. È molto più sicuro, potrebbe essere semplicemente decodificato per visualizzare il codice JavaScript che crittografa / decodifica nello stesso modo comunque?

    
posta Adam Marshall 13.03.2014 - 14:30
fonte

3 risposte

6

Ho lavorato in passato su applicazioni mediche in esecuzione su dispositivi portatili che devono comunicare con un server centrale, ma devono funzionare anche quando non è presente alcuna connessione di rete.

La prima cosa da fare è fare un'analisi di sicurezza adeguata. Quali sono i rischi per i dati e in che modo riesci a proteggere i dati da tali rischi. per es.

  1. Trasferimento dati sensibili della rete TCP al server.
  2. Archiviazione di dati sensibili sul dispositivo
  3. Identificazione dell'utente sul dispositivo
  4. Identificazione del dispositivo al server
  5. accesso ai dati sensibili sul dispositivo da parte di un utente identificato.

Ciò che è appropriato varierà con la natura dei dati sensibili e il prodotto coinvolto, ma per darti una guida, ecco le risposte per quel prodotto medico ...

  1. I dati sulla rete sono stati crittografati da AES-256 e, ove possibile, abbiamo utilizzato una rete APN privata collegata al data center del server tramite una linea dedicata privata.

  2. Sul dispositivo abbiamo archiviato informazioni mediche sensibili crittografate da AES-256 ma senza identificatori di pazienti. La chiave di crittografia era specifica del dispositivo, pertanto non è possibile accedere ai file di dati copiando i dati su un dispositivo diverso.

  3. Accesso al software in cui il dispositivo era controllato da un numero pin a 3 cifre. Questo era probabilmente l'aspetto più debole, in quanto i pazienti in genere sceglievano pin semplici (ad esempio 123 o 147)

  4. Ogni dispositivo si identificava con un certificato client per il server e quindi doveva fornire ulteriori identificativi forniti dal server per verificare che il dispositivo corrispondesse alle aspettative del server. Solo il server conosceva l'identità del paziente che usava quel dispositivo e l'identificazione del server consisteva nel confermare se il dispositivo era autorizzato a connettersi al server e quale dispositivo era.

  5. Nel nostro caso, l'accesso alle misurazioni storiche passate era importante per i pazienti, quindi i pazienti potevano vedere le loro misurazioni storiche se il dispositivo si era autenticato con successo con il server nelle ultime 24 ore e l'ultima connessione socket avvenuta con successo ha comportato l'autenticazione del dispositivo.

risposta data 17.03.2014 - 14:10
fonte
2

App web per dispositivi mobili: se si tratta di un'app Web, in esecuzione dal browser e non in una shell nativa come PhoneGap, come si usa offline? Se è già caricato e non fa richieste (non essere disturbato dal jitter di connettività), sì, è utile, ma questo significa anche che non è possibile avviare l'app senza una connessione, giusto? Dato che si conservano molti dati sul client, un'app Phone Phone probabilmente sarà più adatta.

Sicurezza: Anche se, non so quanto sia sicura la crittografia nativa dello storage (non credo sia comunque infrangibile, comunque), sono abbastanza sicuro che dovresti attenersi al presunzione che la sicurezza dei tuoi dati locali non è la responsabilità dell'app - come hai già detto, le persone possono proteggere i loro dispositivi con password sullo schermo. Inoltre, la tua app chiederà un accesso ad ogni avvio? Non penso che tu voglia forzare l'utente ad accedere ogni volta che lo carica. Se la mia ipotesi è corretta, allora cosa impedisce l'intruso semplicemente di accendere l'app e basta leggere i dati?

Dati sensibili alla memorizzazione nella cache: Non.

    
risposta data 17.03.2014 - 12:56
fonte
1

Modificato (dopo i commenti)

Prima di tutto

  1. Il salvataggio dei dati sensibili sul client è una questione di accordo tra l'utente e il proprietario dei dati. Dovresti entrare nei dettagli della licenza del software e nella politica sulla privacy che afferma di offrire.

  2. Decidere di salvare i dati nell'applicazione client, senza un solido criterio di sincronizzazione, può creare problemi di coerenza dei dati (a parte la sicurezza).

  3. Decidere di salvare i dati nell'applicazione client, può comportare un sistema complesso di sincronizzazione che accresce il carico di lavoro del database (infernale) .

  4. Personalmente ritengo che il dispositivo debba essere utilizzato solo come terminale, non come parte dell'architettura.

Per questi motivi, salvare i dati localmente non è una buona opzione e +1 a Nikolay per

Caching sensitive data: Don't.

Il cliente ha ragione e non ascolta ragioni

Detto questo, se la richiesta è obbligatoria e non c'è modo di convincere il cliente / proprietario a spostarsi verso un'architettura on-demand , devi trovare tutti i trucchi per aumentare la sicurezza all'interno il cliente, proteggendo i diritti, la privacy e in generale l'accesso e l'uso dei dati.

Laproposta(cheèunadelleopportunità),consideraiseguentipuntichiave:

  1. L'utentedeveaccederealsistemaalmenounavolta;
  2. Dopol'accesso,eseguiremolasincronizzazionedeidatilocaliconilserver;
  3. Dopolasincronizzazione,unanuovachiavedicrittografiasaràgenerata(vediidettaglidiseguito)eutilizzataintuttalasessione(anchedopoladisconnessionedalserveredallarete);
  4. Tutteleinformazionielaboratedalcliente,anchedopoladisconnessione,verrannosalvateneldispositivo,utilizzandounalgoritmocheconsiderala"chiave di crittografia attualmente disponibile";

Autenticazione a due fattori

Le chiavi per crittografare i dati durante le sessioni verranno generate dopo il processo di accesso. Il secondo fattore è un elemento chiave per massimizzare la sicurezza di un prodotto che può essere definito come "non sicuro".

Questo meccanismo garantisce che se il dispositivo viene rubato (ad esempio), i dati disponibili localmente saranno limitati a una sessione, ma, soprattutto, il sistema remoto non sarà accessibile utilizzando il dispositivo.

Che dire di VPN o ...

Un prodotto sviluppato specificamente per essere utilizzato all'interno di una intranet, dove il dispositivo non ha la capacità di connettersi ad altre reti, non ha bisogno di meccanismi di sicurezza elevati, infatti, quel tipo di prodotti ha solo bisogno di identificare l'utente (useresti certificati di identità, LDAP o simili diavolerie) .

Se l'applicazione deve salvare i dati localmente e può essere distribuita in qualsiasi tipo di dispositivo (che ha i requisiti minimi), la VPN non è più un elemento di sicurezza all'interno del design.

    
risposta data 18.03.2014 - 18:51
fonte

Leggi altre domande sui tag