Software Crypto: sovrascrive il buffer sensibile

4

È comune implementare il software di crittografia in modo tale che i buffer sensibili vengano sovrascritti prima di liberare memoria? Ad esempio quando contengono una chiave privata o il messaggio in chiaro.

    
posta firefexx 24.04.2014 - 19:50
fonte

2 risposte

3

È comune ma anche un po 'mito. Nei giorni precedenti , la sovrascrittura è stata ritenuta importante a causa di quanto segue:

  • Alcuni sistemi operativi ampiamente distribuiti (in particolare Windows dalla linea "3.1", fino a Windows 98 e Millenium inclusi) non azzerarono le pagine di memoria prima di assegnarle alle applicazioni, quindi un'applicazione potrebbe ottenere estratti di vecchia memoria da un'altra applicazione.
  • I dati nella RAM possono perdere sul disco attraverso memoria virtuale .
  • A un certo punto si è creduto che la "perdita parziale" potesse essere prevalente, ad es. che un overflow del buffer di sola lettura potrebbe rivelare parte della RAM ma non tutto.

Al giorno d'oggi queste proprietà sono diventate piuttosto stantie. In particolare, i moderni sistemi operativi (inclusi Windows 2000, XP e successori) azzerano sistematicamente le pagine. Inoltre, l'utilizzo del file di scambio è diminuito; dispositivi come smartphone e tablet non usano affatto lo swap e sono contenti (e lo faccio anche sui miei computer portatili). Ancora più importante, le persone hanno iniziato a capire che il problema dei dati trapelati ha un ampio campo di applicazione: quando decifri un messaggio privato, la chiave privata è effettivamente una parte di dati sensibili, ma lo è anche il messaggio stesso. E i buffer di memoria usati per visualizzare anche il messaggio indicato sullo schermo. Così come tutti i buffer temporanei dell'algoritmo che calcolavano come il testo privato doveva essere scomposto in paragrafi correttamente giustificati per la visualizzazione. E così via.

Allo stesso tempo, l'ecosistema software si è evoluto e ora utilizziamo molti più linguaggi di programmazione che allocano memoria attraverso un garbage collector (es. Java, C #, Python, PHP, Javascript, Perl, Ruby ... tutti usano un GC). Gli algoritmi GC efficient spostano gli oggetti nella RAM, in modo trasparente. E con "move" intendo davvero "copy". Una conseguenza è che la "cancellazione" della memoria dal programma stesso non garantisce più che non rimanga alcuna traccia dei dati.

La conclusione sintetica è che la cancellazione dei dati dal codice dell'applicazione è una scarsa risposta al problema generale della perdita di dati. È comune , ma non è lo stesso di raccomandato . Se il modello di sicurezza locale richiede tale cancellazione, allora dovrebbe essere fatto in modo sistematico e sistemico, dall'allocatore di memoria (ad esempio il GC, per le lingue basate su GC), non ingombrando l'applicazione codice con chiamate esplicite a memset() .

Un primo passo, che è abbastanza facile da applicare, è vedere se non è possibile disattivare completamente lo spazio di swap. Ciò eliminerebbe la fonte delle perdite più gravi (perdite nei supporti fisici).

    
risposta data 24.04.2014 - 20:37
fonte
1

Sì, e non solo software crittografico, anche un normale software che salva in memoria informazioni insensibili come la chiave privata e la password.

Si consiglia di conservare questi dati per breve tempo in memoria e quindi sovrascriverli (non solo eliminare).

I rischi dietro questo sono le possibilità di ibernazione, dumping di memoria e copia della memoria nel file di scambio.

Pertanto, si raccomanda di sovrascrivere la memoria e usarla per un tempo molto breve possibile.

Si prega di consultare questo progetto: Buffer con protezione da sovrascrittura e allocazione di memoria su richiesta ha anche ulteriori spiegazioni e un esempio reale.

    
risposta data 24.04.2014 - 20:20
fonte

Leggi altre domande sui tag