it-swarm.dev

Le password archiviate nella memoria sono sicure?

Mi sono appena reso conto che, in qualsiasi lingua, quando si salva una password in una variabile, questa viene memorizzata come testo normale nella memoria.

Penso che il sistema operativo faccia il suo lavoro e proibisca ai processi di accedere reciprocamente alla memoria allocata. Ma penso anche che questo sia in qualche modo aggirabile. Quindi mi chiedo se sia davvero sicuro e se esiste un modo più sicuro per archiviare le password per garantire che i processi stranieri non possano accedervi.

Non ho specificato il sistema operativo o la lingua perché la mia domanda è piuttosto generale. Si tratta piuttosto di una questione di alfabetizzazione informatica che di una finalità specifica.

452
Antoine Pinsard

Dato che ciò potrebbe applicarsi a diversi sistemi operativi con diversi livelli di protezione, alcune cose da tenere a mente:

  1. Indipendentemente da ciò, non è possibile impedire a una password di essere in memoria ad un certo punto. Se qualcuno ha accesso in tempo reale alla memoria della tua applicazione, non puoi impedirgli di vederla.

  2. Le password sono generalmente più preziose di quelle che proteggono: gli utenti riutilizzano le password e, accettando l'accesso con password, ti assumi un certo livello di responsabilità per mantenere segreta la password, anche se i dati che protegge sono compromessi. Puoi in qualche modo mitigare il danno di un attacco alla memoria fredda (azoto liquido o ibernazione) eseguendo l'hashing della password dell'utente con una funzione di hash lenta (PBKDF, scrypt, bcrypt) e usando l'hash per l'autenticazione.

  3. Cancellare la password degli utenti dalla memoria è una buona pratica. Esistono molte insidie ​​nel fare questo correttamente, quindi assicurati di usare una libreria appropriata: WindowsEsempio Linux

0
Charles Munger