In che modo i programmi impediscono la perdita di dati?

6

Ci sono molti programmi là fuori che offrono crittografia e gestione delle chiavi.

Da quanto ho capito quando un file viene salvato su un disco rigido, a volte ci sono (spesso?) copie del file nella memoria e forse anche in altri punti del disco rigido. Quando si inserisce una password / frase chiave in un programma per sbloccare un database, suppongo che la password viva nella memoria per almeno un breve periodo di tempo. Avevo sentito parlare del controllo di VeraCrypt e che un problema era l'uso di memset durante la cancellazione di dati sensibili dalla memoria ( pagina 9 qui ) .

La mia domanda generale è: come fanno i programmi VeraCrypt , 1password , keepass , GPG , LastPass , AES Crypt e molti altri si occupano di questi problemi di copie multiple di file e di avere una copia della password / chiave / dati nella memoria o in altri luoghi di un disco rigido? Queste cose sono anche un problema di sicurezza?

Come, VeraCrypt, si tratta di un problema generale che si presenta negli audit?

(Sto solo chiedendo per curiosità.)

    
posta Thomas 20.10.2016 - 15:48
fonte

3 risposte

6

Stai mescolando cose separate qui, ovvero software di crittografia e gestori di password . Per entrambi, non c'è modo di memorizzare la chiave in memoria e i problemi possono essere ridotti a uno:

  • Se vuoi memorizzare password come in KeePassX, devi sbloccare il database delle password una volta e tenerlo aperto (in modo che tu possa autoteggerle tramite i tasti di scelta rapida).
  • Se decidi di crittografare i file, devi inserire la tua password principale una volta e mantenere i file aperti.

In entrambi i casi la password sarà in memoria per un tempo limitato ed è necessario sovrascrivere dopo averla utilizzata per assicurarsi che non rimanga lì. Se si rialloca semplicemente la memoria, non è garantito che venga sovrascritta sempre.

memset può impostare un blocco di memoria su qualunque cosa tu voglia che sia, quindi potrebbe aiutarci qui. Problema : se usi le ottimizzazioni del compilatore, il compilatore potrebbe pensare che memset sia inutile e rimuoverlo per una maggiore efficienza.

Questo è il motivo per cui VeraCrypt include funzioni speciali come RtlSecureZeroMemory e il suo metodo wrapper burn per garantire che la memoria venga ripristinata, come questa:

BootArgs = *bootArguments;
BootArgsValid = TRUE;
burn (bootArguments, sizeof (*bootArguments));

Ovviamente questo non rende la cancellazione garantita al 100%, perché ora devi assicurarti che non ci sia un percorso di esecuzione che dimentica di chiamare questa funzione.

Nel ultimo controllo di VeraCrypt è stato rivelato che c'è un'occasione in cui burn è chiamato dopo un segmento di codice in cui è possibile generare un TC_THROW_FATAL_EXCEPTION , portando così a dati sensibili che rimangono in memoria.

Questo è generalmente uno dei problemi nella progettazione di programmi sicuri e sicuri, se si implementano metodi per prevenire perdite di memoria, è necessario assicurarsi che non ci sia modo di impedire che vengano richiamati.

    
risposta data 20.10.2016 - 17:41
fonte
0

How do programs like VeraCrypt, 1password, keepass, GPG, LastPass, AES Crypt, and many others deal with these issues of multiple copies of files and having a copy of the password/key/data in the memory or other places of a hard drive?

Varia da prodotto a prodotto. Questo è il motivo per cui gli audit di terze parti sono preziosi - per verificare che l'approccio sia sicuro e implementato correttamente.

Are these things even a security concern?

Sì e no. È spesso importante inserire le domande sulla sicurezza nel contesto. Avere copie aggiuntive di un database di password non è l'ideale, poiché rende più probabile la divulgazione di informazioni, ma se sono presenti protezioni appropriate per i file e il database è crittografato, è improbabile che venga sfruttato.

Su una nota simile, avere le password in memoria non è facoltativo se si sta utilizzando un archivio password. Vale la pena correre il rischio? Probabilmente.

    
risposta data 24.10.2016 - 20:11
fonte
0

Isolamento processo

Avere dati sensibili in memoria non è un problema di sicurezza da solo: in qualsiasi sistema "corretto" non è accessibile ad altri processi e può essere utilizzato solo in modo appropriato e sicuro.

Ciò implica un certo rischio di divulgare quei dati, ovvero di lasciare una copia temporanea dopo che la memoria è stata deallocata e quindi eventualmente assegnata a un altro processo; oppure se l'area di memoria viene scambiata su disco, ma questi possono essere mitigati con misure tecniche ragionevolmente semplici, ad es. sovrascrivendo l'area di memoria dopo l'uso e prima della deallocazione e contrassegnando la pagina di memoria in modo che non sia disponibile per lo scambio rispettivamente. Durante lo sviluppo di tale software, è necessario assicurarsi che tali misure siano state prese e che i dati sensibili non "perdano" in questo modo.

Al di fuori di questo, il sistema operativo impone l'isolamento dei processi in modo tale che questi dati sensibili (come tutti gli altri dati) non siano accessibili per altri processi. Dovresti comunque prendere le misure necessarie per ridurre al minimo il tempo in cui i dati sensibili sono in memoria per ridurre i rischi in caso di compromissione del tuo software o del sistema operativo (ad es. La vulnerabilità openssl "heartbleed"), quindi è una preoccupazione di sicurezza ma è pratica accettabile e sicura mantenere i dati sensibili in memoria quando necessario .

    
risposta data 24.10.2016 - 20:54
fonte

Leggi altre domande sui tag