Protezione della password principale in memoria

5

Supponendo che voglio inserire la master password una sola volta all'inizio del programma, come è possibile che questa password principale venga solitamente protetta in memoria? La chiave di crittografia è nuovamente derivata dalla password crittografata? Se si, da cosa? È immagazzinato in più parti e messo insieme solo prima di essere utilizzato?

Come si fa di solito questo tipo di cose? Vale anche la pena?

    
posta graywolf 10.06.2016 - 14:54
fonte

1 risposta

5

Penso che avere dati sensibili (che si tratti della password, o chiave derivata, ecc.) in memoria sia non qualcosa che la maggior parte dei sistemi gestisce con .

Detto questo, qui ci sono diversi possibili metodi di mitigazione per proteggere dati privati in memoria . Questo potrebbe applicarsi a una varietà di argomenti, Server, Mobile o Desktop. I principi sono gli stessi. Non sono nemmeno sicuro di quali siano i vettori di attacco a cui sei più interessato. (Virus, attacchi fisici)

  1. Un primo passo ovvio sarebbe disabilitare swap , una funzionalità che prende le "pagine" di memoria meno utilizzate e le scrive in uno spazio sul disco rigido. Sarebbe frammentato, ma abbastanza possibile per l'hacker di ottenere dati con questo metodo.

    È possibile che alcuni sistemi operativi forniscano un modo per memorizzare memoria appositamente contrassegnata a cui è vietato l'archiviazione in swap. Non l'ho mai studiato, e sono sicuro che è più complesso della tua tipica variabile di runtime. Se l'hai fatto in questo modo, non dovrai più disabilitare lo swap su tutta la macchina prendendo il colpo di performance associato.

    @Stephane commenta che Windows ha un'opzione chiamata CryptProtectMemory che crittografa la memoria. Penso che questo sia intelligente in quanto solo la chiave dovrebbe essere proibita dallo swap, invece di ogni singola informazione sensibile.

  2. Come per la memoria stessa (scambiata o meno), se hai eseguito il login come root o come lo stesso account utente il processo è in esecuzione, c'è un mezzo per scaricare tutto memoria per quel determinato processo. Molti dei linguaggi di programmazione di alto livello forniscono questa funzionalità internamente con le stesse condizioni dell'account utente.

    • Android risolve questo problema fornendo a ciascuna app il proprio account utente nel sistema operativo, il che offre molti vantaggi aggiuntivi.
    • Gli ambienti server spesso dispongono di servizi separati in account utente alternativi per aiutare a contenere potenziali violazioni, sia dalla memoria che dal punto di vista dello storage del file system. (mai eseguire un servizio pubblico come root!)
    • In un ambiente desktop tradizionale, non c'è molto che potresti fare per proteggere i processi in esecuzione nello stesso account utente.
  3. L'ultima possibilità sarebbe un modulo hardware speciale (o per memorizzare i dati, o una chiave di crittografia per i dati) che è separato dal sistema operativo principale. Suggerirei di dare una breve occhiata a Trusted Execution Environment (TEE) e / o Secure Element (SE). Vedi Sistema Android Keystore .

    Esiste anche il metodo più estremo di utilizzare un computer completamente separato (piccolo), ad esempio Raspberry PI.

    Contenuti correlati: link

  4. In particolare per l'esempio di una password master, ovviamente non è possibile memorizzare la password generale generale, ma solo la password finale che è stata estratta dallo store. In questo modo l'utente deve reinserire la password principale quando visita un nuovo sito.

risposta data 10.06.2016 - 15:18
fonte

Leggi altre domande sui tag