16 marzo 2012



En algunas ocasiones, cuando se está desarrollando un programa que accede a información sensible, como por ejemplo una contraseña o algún dato que provenga de una operación de descifrado, es conveniente asegurarnos que ese dato está suficientemente protegido en memoria.

Un problema clásico con la memoria y la seguridad son los sistemas de paginamiento (swap) que extienden la memoria física del sistema empleando el HD del equipo. Es obvio que cuando vamos a gestionar un dato sensible se debería evitar a toda costa que ese dato fuese copiado a la memoria swap del equipo.

Para asegurarnos de estar usando variables que se almacenan sus datos en memoria RAM, vamos a usar dos funciones, en el caso de Linux mlock() y en el caso de Windows VirtualLock()

Ejemplo de como usar mlock() en Linux



Como se puede ver se crean dos funciones lock_memory y unlock_memory que sirven para 'meter' y 'sacar' variables en memoria RAM

Ejemplo de uso de VirtualLock() en Windows:



Es interesante mantener estas buenas prácticas a la hora de diseñar programas que gestionan contraseñas o datos sensibles.

3 comments :

Román Ramírez dijo...

Hacía tiempo que no me encontraba con una publicación tan simple y tan concreta que me resuelva una duda. Siempre he tenido la curiosidad sobre cómo pueden funcionar ataques "en caliente"/"en frío" a programas de cifrado de disco etc. y que "no haya estrategias de defensa".

Muy chulo, me has dado cosas en las que pensar el fin de semana.

vnico dijo...

Coincido con Román, simple y concreto. Muy buen post

Carlos dijo...

Una pequeña duda que me surge al leer el código: al hacer el lock, la función lock_memory, como dice, busca el principio de la página donde está el dato a bloquear y le dice a mlock que bloquee desde el principio de la página hasta el final del dato. Lo que no me queda claro es porqué es esto necesario si el manual de mlock dice que se bloquea la página completa donde se encuentre el dato, osea, que me parece que la función lock_memory hace algo que ya hace el propio mlock.
¿ Se hace por elegancia, es realmente necesario ?

Un saludo y bravo por el blog !