2013-10-03 17 views
5

Sto creando un programma in Python che coinvolgerà l'hashing di una password. Supponendo che io uso questo per ottenere la password:Sovrascrivere in modo sicuro le variabili Python nella RAM?

import getpass 
password = getpass.getpass("Password: ") 

E poi hash di esso, non v'è alcun modo per rimuovere in modo sicuro tutte le tracce di password unhashed dalla RAM?

+0

penso che questo post può aiutare: [http://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python][1] [1]: http://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python –

+3

Perché vorresti farlo? Per essere in grado di leggere (davvero molto difficile) la tua memoria, un hacker avrebbe dovuto comunque ottenere l'accesso come root. Per favore focalizza la tua energia su più sensibili/comuni [vettori di attacco] (https://www.owasp.org) che creare questo falso senso di sicurezza. – RickyA

+0

@RickyA Non hai idea di cosa tkbx stia cercando di fare, in realtà è una buona domanda. – Joe

risposta

3

Come già discusso non esiste un metodo infallibile per farlo in python anche se si dispone di un'implementazione personalizzata (anche se questo potrebbe essere un modo).

Ora non so cosa dovrebbe fare la tua applicazione ma quello che posso dirti senza alcun dubbio è che i tuoi dati sono più sicuri nella RAM che nel tuo database, anche dopo l'hash.

Il modo in cui la memoria funziona è così complesso. Ogni processo ha il proprio spazio di memoria virtuale che non deve essere contiguo. I blocchi di memoria completi vengono scambiati sul disco e reinseriti in un altro blocco di memoria. L'intera memoria è solo un insieme di byte ed è quasi impossibile distinguere tra una serie di numeri interi, una stringa, un gatto o semplici dati casuali.

Alcuni blocchi di dati vengono parzialmente riallocati creando una grande quantità di dati parziali. Immagina cosa vorrebbe, 1, 2, 8 o anche 16 GB di dati casuali, e il potenziale hacker dovrebbe trovare una password in tutti quegli 0 e 1.

Se qualcuno volesse modificare la password durante l'esecuzione del processo, avrebbe bisogno di avere accesso in tempo reale alla macchina come root; non può farlo semplicemente guardando lo swap in seguito per i motivi che ho affermato prima.

Ma se qualcuno ha questo tipo di accesso ci sono tanti altri modi per ottenere la password. Ad esempio, basta eseguire il debug del programma, o meglio, basta cambiare la fonte e fargli stampare la password :)

La maggior parte degli hacker non si preoccuperà di affrontare una tale seccatura. L'hacking è per lo più su social engineering, che fondamentalmente sta facendo all'utente dare l'hacker la sua password volentieri. Phishing è uno di questi metodi.

+0

Dovresti votare per chiudere questa domanda in quanto è un duplicato piuttosto che risponderti. Se hai una nuova risposta, puoi metterla sulla domanda originale. – Joe

+0

Questo ragazzo ha senso! – RickyA

+1

"il potenziale hacker dovrebbe trovare una password in tutti questi 0 e 1". In primo luogo, l'idea che gli hacker * non possono mai * farlo è una grande affermazione da fare. Ci sono un sacco di exploit pratici che si basano sulla ricerca di particolari cose in memoria o in swap in cui non penseresti che ci fosse molto da cui iniziare. In secondo luogo, ciò che effettivamente fai è scansionare il file di swap per qualcosa che assomigli al testo. Trovi molto più della semplice password, quindi usala come una lista di ipotesi. Cioè, puoi trovare un ago in un pagliaio cercando di cucire con ogni pezzetto di fieno a turno finché non si lavora. –