viernes, 16 de septiembre de 2016

Volcado de memoria #RAM en #Linux - #LiME

Hola secuaces:

En primer lugar, igual que hice en la entrada anterior “Volcado de memoria RAM en Windows – OSForensics”, voy a recordar la importancia de las buenas prácticas, recordando la necesidad de conocer y seguir la RFC 3227, que lleva por título “Guidelines for Evidence Collection and Archiving”, (Directrices para la recolección y archivo de la Evidencia). Vuelvo a decir: recomiendo encarecidamente su lectura.

En esta ocasión, vamos a realizar un volcado de memoria de un sistema Linux.

Para ello, vamos a usar LiME, (Linux Memory Extractor). LiME es una herramienta desarrollada por 504ensics Labs, de código abierto, que permite la adquisición de la memoria volátil de sistemas Linux y dispositivos basados en Linux, como Android, y que trabaja a nivel de kernel.

Como viene siendo habitual en mí, y como pienso que la documentación de una aplicación se ha hecho para ser leída, pierdo unos minutos en leer el doc de esta maravillosa herramienta ;)

Para su uso, lo primero que vamos a hacer es clonar, (o descargar), la herramienta. Ello se hace con

git clone https://github.com/504ensicsLabs/LiME.git


Una vez que se ha descargado, procedemos a verificar que se ha realizado correctamente, mediante la línea

ls -R -l LiME


LiME precisa de tres paquetes, (make, build-essential y linux-headers). Los instalamos mediante

sudo apt-get install make build-essential linux-headers


Con la instalación de linux-headers será necesario conocer qué versión de kernel estamos usando.


Podemos averiguarlo con la orden

uname -r


Hecho esto, nos dirigimos a ‘src’ porque toca compilar y generar el módulo

cd LiME/src
make


Tras esta orden, se ha compilado y se ha generado un nuevo fichero, con nombre ‘lime-versiondekernel-generic’, con extensión ‘.ko’, “Kernel Objet”. En mi caso es ‘lime-3.16.0-77-generic.ko’.

Vale. Ya tenemos la herramienta lista para ser usada. Fácil, ¿Verdad?

Pero, ¿Ahora qué? ¿Adquisición en local o en remoto? Pues depende del caso, podría interesar adquirir la memoria en local, o por el contrario, debiéramos proceder en remoto. Personalmente, si puedo, trabajo en remoto y me evito sustos innecesarios.

Vamos a volcar la memoria de las dos formas.

Para realizar el volcado de la memoria en modo local, basta con ejecutar

sudo insmod lime-3.16.0-77-generic.ko “path=/home/marcos/Evidencias/MemLub1404 format=raw”


Verificamos que se ha generado correctamente el fichero del volcado, a través de

ls -l /home/marcos/Evidencias


Ahora vamos con la adquisición en remoto, que es mi método favorito. La adquisición remota se realiza en dos fases, la ejecución de LiME en la máquina objeto de la extracción y la ejecución de nc o de ncat en la máquina forense.

Para ello, igual que en caso anterior, clonamos la herramienta en el sistema objeto de la extracción de memoria, mediante

git clone https://github.com/504ensicsLabs/LiME.git


Hecho esto, seguimos igual que en caso anterior, compilando con

cd LiME/src
make


Vale. Estamos listos para trabajar.

Lo primero que tenemos que saber es la dirección IP de la máquina. Para ello ejecutamos un

ifconfig


Tras averiguar la IP de la máquina, procedemos con LiME, que permanece a la escucha, con

sudo insmod LiME/src/lime-3.16.0-77-generic.ko “path=tcp:4444 format=raw”


Hecho esto, mientras la máquina objeto de la extracción de memoria permanece a la escucha, tenemos que irnos a la máquina forense, la que va a adquirir el volcado.

En este punto, tenemos dos opciones para realizar el volcado. A través de nc, (netcat), o a través de ncat, (nmap). Vamos a realizarlo con los dos.

Para el caso de ncat debemos instalar nmap y ejecutar ncat para realizar así la extracción a través de

sudo apt-get install nmap


ncat 192.168.1.33 4444 > MemLubuntu1404


Para el caso de nc debemos instalar netcat y ejecutar nc para realizar así la extracción a través de

sudo apt-get install netcat


nc 192.168.1.33 4444 > MemLubuntu1404.raw


Y con esto, se adquiere un volcado de memoria RAM en Linux.

Ahora bien, ¿Ya está? ¿Eso es todo? como este proceso suele ser largo, y Linux da muchísimo juego, yo tengo por costumbre ejecutar algunas órdenes más.

¿Qué es lo que quiero y qué es lo que hago?

Como soy un paranoico de los tiempos, la primera orden que doy es time; después, realizo el volcado de la memoria; después, realizo un backup del fichero generado, (no me gusta marcharme del sitio sin una copia de la adquisición hecha); después, calculo la firma en SHA-1; después, muestro en pantalla ese cálculo; y por último, realizo una captura de pantalla de todo este proceso, que adjunto al informe pericial. Todo ello con


time ncat 192.168.1.33 && cp MemLubuntu1404 MemLubuntu1404.bak && ls -l && sha1sum MemLubuntu1404 MemLubuntu1404.bak > HashMemLubuntu.txt && cat HashMemLubuntu.txt


Después de esto, me voy a tomar un café y a hacer algo de networking, y cuando vuelvo, me encuentro con todo hecho.

Esto es todo, por ahora. Nos leemos en la siguiente entrada. Se despide este minion, entregado y leal, de vosotros… por ahora.

Marcos

1 comentario:

  1. Para evitarse el paso de tener que mirar qué kernel nos corresponde para instalar linux-headers, podemos usar la orden 'sudo apt-get install linux-headers-$(uname -r)' en lugar de emplear 'uname -r' y 'sudo apt-get install linux-headers'

    ResponderEliminar

Google Analytics