Memorizzazione di Username e Password nella memoria dell'applicazione (ram)

0

Ho creato un'applicazione utente in esecuzione su desktop Windows 7. Questa applicazione consente agli utenti di immettere il nome utente e la password per un altro sistema. La mia applicazione lo fa con una semplice casella di testo.

Attualmente, sto memorizzando questi dati in memoria per l'applicazione. L'applicazione successivamente crittografa e trasmette le credenziali tramite TLS https. La mia domanda è, posso memorizzare il nome utente e la password nella mia memoria delle applicazioni non criptata? Quali regole devo seguire accettando e trattenendo (in memoria) le credenziali dell'utente?

    
posta Steve Short 04.09.2017 - 22:45
fonte

3 risposte

1

È consigliabile crittografare questi dettagli in memoria, ma è necessario intraprendere una sorta di processo di modellazione delle minacce e vedere se giustifica il sovraccarico.

Sembrerebbe che il tuo rischio principale sia che gli utenti leggano la memoria usando strumenti appropriati, questo richiede intenzioni malevole e un utente abbastanza sofisticato. È uno scenario di probabile rischio? A cosa possono accedere se compromettono le credenziali? Sono solo dati sul computer locale?

I dump della memoria sono un altro potenziale problema, se si verifica un errore o un utente malintenzionato costringe un errore e la memoria viene scaricata nei registri, i dati potrebbero essere recuperabili da questi registri.

I file di swap e di ibernazione possono contenere anche questi dati quando la memoria viene scambiata o se il dispositivo va in ibernazione mentre le credenziali sono in memoria.

Ci sono più strumenti disponibili per proteggere contro questi casi, tipi come SecureString in .Net framework, ci sono anche API di protezione dei dati fornite dai sistemi operativi MS. Secure String, come già confermato da un utente, è immutabile e crittografato e viene anche memorizzato in più posizioni in memoria. Userei costrutti come questo fornito dai framework e dal sistema operativo ed eviterò di far ruotare il tuo codice per proteggere i dati nella RAM.

    
risposta data 05.09.2017 - 10:56
fonte
0

Non dovresti tenerli non crittografati, dal momento che è facile prendere copie di memoria e cercare i token noti lì dentro.

A seconda della lingua utilizzata, raccomanderei un'applicazione di stringa sicura come . NET SecureString class . Ciò garantisce un immutabile, crittografato e una garbage collection di sicurezza quando non è più necessario.

Oltre a ciò, assicurati che non finisca nei file di registro o nei dump di gestione delle eccezioni, ecc.

    
risposta data 04.09.2017 - 22:55
fonte
-2

Tutto si riduce a una valutazione del rischio : qual è il rischio di fare ciò che proponi? Qual è l'impatto di avere quelle credenziali rubate?

Qualsiasi processo con accesso a quella memoria potrebbe copiare le credenziali.

Stai bene con quel rischio? I tuoi utenti staranno bene?

In secondo luogo, se ne parlassi ai tuoi utenti, quanto sarebbero comodi? Rischia di perdere clienti o reputazione?

    
risposta data 04.09.2017 - 22:55
fonte

Leggi altre domande sui tag