La RAM, ¿es volátil?: Si pero..
Una de esas máximas que todo usuario un poco avanzado de ordenador da por hecho es que la memoria del ordenador es volátil, esto es, si apago el ordenador todo con lo que estaba trabajando se pierde, y esto es así.. pero no siempre.
Es cierto que por su diseño, los chips de memoria DRAM deben estar siendo constantemente "recargados" con pulsos eléctricos, y si estos pulsos dejan de llegar, el contenido de la memoria se borra, pero esto no es inmediato, sino que pasa después de un tiempo que puede variar entre unos pocos segundos y unos minutos.
En 2008 se publicó un paper de la Universidad de Princeton que habla sobre como recuperar claves de cifrado después de un "cold reboot", es decir, dejar al ordenador sin alimentación y volver a dársela para reiniciarlo. Se puede encontrar el paper
aquí
Un ejemplo muy revelador sobre como la información en los módulos de memoria se va deteriorando a medida que pasa el tiempo es el ejemplo de este BMP:
Aquí se muestra una imagen recuperada de la memoria RAM tras 5 segundos, 30, 60 y 5 minutos.
En el resto del estudio se muestran distintas pruebas que, dependiendo de la memoria y otros parámetros arrojan resultados similares.
La conclusión es clara, un reinicio no borra inmediatamente los datos, sino que hay un periodo ventana en el que es posible la extracción de datos de la RAM previos al mismo.
Consecuencias
En principio este tema técnico no parece de mucha importancia, pero si nos paramos a pensar en las medidas de seguridad física que adoptamos para proteger un dispositivo, la gran mayoría de ellas se basan en :
a) Si un usuario accede al sistema de forma física, el sistema operativo no le dejará realizar operaciones (control de usuarios) y/o se las dejará realizar pero de forma limitada
b) Si existen varios usuarios que comparten un ordenador, un usuario no puede acceder a los datos de otro (protección de memoria)
c) Las herramientas de cifrado pueden proteger de forma adicional los datos de un usuario, por ejemplo BitLocker, Truecrypt, o similares, para que en caso de acceso físico no autorizado, el atacante no pueda acceder a los datos cifrados.
Pues bien, el pequeño detalle de la persistencia de datos en RAM puede hacer que nos replanteemos la veracidad de esas premisas.
Voy a poner un ejemplo para que se entienda a donde quiero llegar.
Un profesor de instituto tiene un ordenador en su mesa, donde guarda los exámenes para los alumnos.
Como es un tipo desconfiado, guarda los exámenes cifrados en una unidad de Truecrypt cifrada con AES128, como contraseña usa una frase 20 caracteres mixtos y cuando se va de clase deja el pc bloqueado o cierra sesión con una contraseña desproporcionadamente compleja, el resto de usuarios del equipo están deshabilitados, el sistema está actualizado, etc.. ¡es un profesor precavido!
De entrada, aunque los alumnos pudieran llevarse el disco a casa, no podrían acceder a los datos que el profesor guarda en el disco, y todo intento de adivinar la contraseña por fuerza bruta fracasaría por cuestiones de tiempo.
Aquí aparece el problema.
Uno de los alumnos se ha leído el paper de Princeton y ha encontrado esta utilidad:
msramdmp
En realidad la utilidad no es más que un pequeño kernel, y un sistema que únicamente tiene una utilidad que vuelca el contenido de la RAM en una partición de un disco USB. La utilidad + el kernel tienen un tamaño de apenas unos 5MB, por lo cual, salvando esa zona de memoria y lo que pueda degradarse por el tiempo que tarda en reiniciar el ordenador (ver otra vez el paper, con 1-2 segundos que puede tardar el reinicio, apenas se perderán datos si es que se pierden)
Así que en cuanto el profesor se va de clase el alumno mete el USB en el PC, reinicia, y se puede llevar a casa en su disco una bonita imagen de la RAM que luego puede analizar con calma en casa.
¿Y que puede encontrar ahí?
Pues estas son unas pequeñas pruebas que he hecho con una imagen de RAM obtenida aquí en el lab con un ordenador de pruebas tras un reinicio:
Contraseñas de Truecrypt y otras contraseñas AES, que obviamente, están en memoria cuando se usa rl programa
Búsquedas en google/bing, etc...
Y así, en mis pruebas he recuperado casi 30 MB de información útil, historial, búsquedas, archivos, etc.. que se puede extraer con programas de análisis como
bulk_extractor,
aesfind, o muchas de las
herramientas de análisis de memoria disponibles públicamente
Sería más sencillo el análisis con herramientas como
volatility framework, sin embargo en las pruebas realizadas no ha sido posible usarla, porque los plugins de vol.py esperan una estructura en memoria que no se corresponde a ninguno de los perfiles disponibles al estar sobreescrita un área de la memoria con la propia herramienta de volcado y tener algunas zonas con datos degradados debido al reinicio.
De todas formas el profesor puede dar los exámenes por perdidos y de paso su privacidad también, igual si hubiera apagado el ordenador..
Soluciones.
La solución más simple creo que es bastante evidente: apagar el ordenador cuando no vamos a estar delante durante un tiempo, además tratar de no dejar aplicaciones que manejen datos sensibles abiertas, vamos, tratar el ordenador como si la siguiente persona con acceso físico a el pudiera acceder a todos nuestros datos sin más.
Por supuesto no estaría de más impedir el arranque desde dispositivos extraibles en la BIOS del PC, y después proteger el cambio de los valores de la BIOS con contraseña, aunque esto es fácilmente salvable (por ejemplo quitando la pila de la placa) en este caso en donde cada segundo que el pc esté apagado y cada reinicio juega en contra de la conservación de los datos, es una medida interesante.