Volcado de memoria con LiME y análisis con Volatility

Un volcado de memoria consiste en almacenar todo lo que está en la RAM de nuestro sistema a un fichero para poder analizarlo posteriormente.

En la RAM se almacena toda aquella información volátil (que se destruye al apagar el sistema) y que contiene información útil sobre la ejecución de los procesos en funcionamiento en nuestro sistema operativo. Ahí también se almacenan contraseñas que están en uso para desbloquear por ejemplo ficheros o particiones cifradas. Así que la opción de “tirar del cable del servidor” para mitigar el problema, puede ser el peor error cometido. ¿Como demuestras quien estaba conectado a la máquina en el momento que ocurrió el problema? ¿Qué procesos se estaban ejecutando?

Nos puede interesar realizar un volcado de memoria por ejemplo si un ransomware está en ejecución y está cifrando los datos de nuestro sistema, para localizar datos se acceso a programas y servicios, identificar fallos y problemas con un software o analizar el funcionamiento de nuestro sistema.
Hay varias formas de realizar un dump de la memoria, todas se basan en el dispositivo “/dev/mem”. La más conocida es memdump, pero en algunos sistemas ejecutar memdump > fichero.dump implica un fallo total de nuestro sistema (¡Vamos! Que se reinicia solo). En resumen: “NO HAGAS ESTO!” (y aún menos en un sistema en producción). La mejor opción si queremos exportar el contenido de “/dev/mem” es hacer uso de dd

# dd if=/dev/mem of=volcado.mem bs=1M 

Si esto nos devuelve un fichero de un tamaño mucho inferior al total de RAM disponible en el sistema, es posible que esté activada una restricción del kernel.

# cat /usr/src/linux-headers-`uname -r`/.config |grep “CONFIG_STRICT_DEVMEM”
CONFIG_STRICT_DEVMEM=y

En el caso que esté activada, podemos desactivarla y volver a recompilar el kernel o quizás otra opción a valorar es usar otro programa llamado LiME (Linux Memory Extractor).

LiME, es una herramienta opensource que permite la adquisición de la memoria RAM de sistemas basados en Linux. LiME trabaja a nivel de kernel. La forma de hacerlo es mediante la insercción de un módulo en el kernel de Linux (insmod). Vamos a ver como hacemos la extracción en un fichero en local del sistema o opción mucho mas recomendable, abriendo una “puerta” (puerto) para poder realizar la extracción de forma remota. Tengo LiME instalado en una máquina (carboni) y voy a realizar la extracción en este PC en el que estoy (melatonina).

Para instalar LiME he usado

root@carboni:~# git clone https://github.com/504ensicsLabs/LiME.git
root@carboni:~# cd LiME/src
root@carboni:~/LiME/src# make
root@carboni:~/LiME/src# ls |grep amd
lime-4.9.0-3-amd64.ko

Para una extracción en local

root@carboni:~/LiME/src# insmod lime-4.9.0-3-amd64.ko "path=/root/2022_06_24-memdump_carboni format=lime"
root@carboni:~/LiME/src# cd
root@carboni:~# ls -lh |grep memdump
r-r—r-- 1 root root 7,8G jun 24 19:42 2022_06_24-memdump_carboni

Para una extracción en remoto

root@carboni:~/LiME/src# rmmod lime
root@carboni:~/LiME/src# insmod lime-4.9.0-3-amd64.ko "path=tcp:444 format=lime"
root@carboni:~/LiME/src# ifconfig |grep 192.168
     inet 192.168.1.149   netmask 255.255.255.0  broadcast 192.168.1.255

root@melatonina:~# nc 192.168.1.149 4444 > 2022_06_24-memdump_carboni_remote
root@melatonina:~# ls -lh |grep memdump
-rw-r--r--   1 root  root  7,8G 24 juny 20:45 2022_06_24-memdump_carboni_remote

En el segundo volcado, cuando hacemos el insmod se va a quedar esperando (no volverá al promt del sistema) y en la otra máquina, el dump tardará en pasar lo que tarde en pasar los Gb de RAM de la máquina origen. Recuerdo que si has hecho previamente el volcado en local, será necesario “descargar” el módulo con rmmod lime

Una vez tenemos el fichero de dump, podremos analizarlo con volatility.

Volatility tiene una versión 2 y una versión 3. Para el ejemplo, vamos a hacer uso de la versión 2 que funciona con python2.7. La 3 funciona con python3 pero me ha dado algunos problemas (algunas veces la última versión no es la mejor al no estar disponible tanta documentación -como es el caso-, además, si alguna cosa no funciona en una máquina, prueba con otra con una instalación “limpia”).

Para instalar volatility

root@melatonina:~# git clone https://github.com/volatilityfoundation/volatility.git
root@melatonina:~# chmod +x volatility/vol.py
root@melatonina:~# mv volatility /opt/
root@melatonina:~# ln -s /opt/volatility/vol.py /usr/bin/vol.py
root@melatonina:~# apt -y install python2.7
root@melatonina:~# ln -s /usr/bin/python2.7 /usr/bin/python
root@melatonina:~# pip install distorm3==3.4.4

Para comprobar que funciona y ver los módulos disponibles para Linux, usar

root@melatonina:~# vol.py --info |grep linux

Para ver información sobre la imagen del volcado de memoria (en el dump de casi 8Gb va a tomar un rato a analizar todo el fichero)

root@melatonina:~# vol.py imageinfo -f 2022_06_24-memdump_carboni_remote

Ahora, para analizar el volcado, será necesario crear un perfil dwarf del sistema el cuál hemos hecho el volcado (carboni). Por ello, nos vamos al directorio de herramientas de volatility y ejecutamos lo siguiente

root@carboni:~# apt -y install dwarfdump
root@carboni:~# cd /opt/volatility/tools/linux
root@carboni:/opt/volatility/tools/linux# make
root@carboni:/opt/volatility/tools/linux# zip -j $(lsb_release -i -s)_$(uname -r)_profile.zip module.dwarf /boot/System.map-$(uname -r)
root@carboni:~# mv Debian_5.10.0-14-amd64_profile.zip /opt/volatility/volatility/plugins/overlays/linux/

Para inspeccionar que se ha cargado el profile haremos uso de la opción –info

root@carboni:~# ./vol.py --info |grep Debian
LinuxDebian_4_9_0-3-amd64_profilex64 – A Profile for Linux Debian_4.9.0-3-amd64_profile x64

Para ver los procesos que estaban en ejecución mientras se estaba realizando el dump de la memoria (recuerda usar vol.py –info |grep linux para visualizar e inspeccionar los módulos disponibles)

root@carboni:~# vol.py --profile=LinuxDebian_4_9_0-3-amd64_profilex64 -f 2022_06_24-memdump_carboni linux_pslist

A continuación muestro varias capturas de pantalla de cosas interesantes que podemos encontrar al analizar el dump de la memoria.

Figura 5. volatility + plugin limeinfo
Figura 5. volatility + plugin limeinfo
Figura 6. volatility + plugin linux_check_tty
Figura 6. volatility + plugin linux_check_tty
Figura 7. volatility + plugin linux_ifconfig
Figura 7. volatility + plugin linux_ifconfig
Figura 8. volatility + plugin linux_pslist
Figura 8. volatility + plugin linux_pslist
Figura 8. volatility + plugin linux_pslist (2)
Figura 8. volatility + plugin linux_pslist (2)
Figura 9. volatility + plugin linux_mount
Figura 9. volatility + plugin linux_mount

Referencias

Volcado de memoria RAM en Linux Lime
Como analizo un volcado de memoria en Linux?
Linux memory analysis, how to start and what you need to know
Volatility download
Análisis de memoria RAM en Ubuntu 20.10 con LiME
Volatility Memory Samples

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.