Post

Volatility 2 & 3

Volatility 2 & 3

Concepto

En esta sección vamos a realizar un ejemplo de uso medio/avanzado de la herramienta Volatility 2 y 3.

En el proceso vamos a ir obteniendo diferentes datos sobre el sistema a partir de un volcado de memoria ram.

Instalación

Volatility 2

Github oficial de volatility 2

Volatility 3

Github oficial de volatility 3

1
pip install volatility3

Recursos

Volcado de memoria utilizado

En el link anterior encontramos el volcado de memoria utilizado en esta sección.

Perfil del sistema operativo

1
2
3
4
5
6
7
8
-Vol3

vol -f "/path/to/file" windows.info

-Vol2

vol.py -f "/path/to/file" imageinfo
vol.py -f "/path/to/file" kdbgscan

Vol3

![Identifica el sistema como 7601.17514.amd64fre.win7sp1rtm.](/assets/img/posts/volatility_2_3/20250114_172936_2025-01-14_18-29.png) _Identifica el sistema como 7601.17514.amd64fre.win7sp1_rtm.

Vol2

Aqui de igual forma indica windows 7 sp1 Aqui de igual forma indica windows 7 sp1

Procesos en ejecución

1
2
3
4
5
6
7
8
9
10
11
12
-Vol3

vol.py -f "/path/to/file" windows.pslist
vol.py -f "/path/to/file" windows.psscan
vol.py -f "/path/to/file" windows.pstree

-Vol2

vol.py -f "/path/to/file" ‑‑profile <profile> pslist
vol.py -f "/path/to/file" ‑‑profile <profile> psscan
vol.py -f "/path/to/file" ‑‑profile <profile> pstree
vol.py -f "/path/to/file" ‑‑profile <profile> psxview

Vol3

Procesos en ejecución Vol3

Vol2

Procesos en ejecución Vol2

Total de 42 procesos

Árbol de procesos

1
2
3
4
5
6
7
-Vol3

vol.py -f "/path/to/file" windows.pstree

-Vol2

vol.py -f "/path/to/file" ‑‑profile <profile> pstree

Vol3

Vol3 árbol de procesos (Como vemos no parsea demasiado bien el contenido)

Vol2

Vol2 árbol de procesos Por ejemplo podemos ver con más claridad el PPID de cada uno de los procesos.

Registro de Windows

Lista de hives

1
2
3
4
5
6
7
8
9
-Vol3

vol.py -f "/path/to/file" windows.registry.hivescan
vol.py -f "/path/to/file" windows.registry.hivelist

-Vol2

vol.py -f "/path/to/file" ‑‑profile <profile> hivescan
vol.py -f "/path/to/file" ‑‑profile <profile> hivelist

Vol3

Hives Vol3

Vol2

Hives Vol2

En ambos coincide que existen 12 hives en el registro

Claves de registro

1
2
3
4
5
6
7
8
9
-Vol3

vol.py -f "/path/to/file" windows.registry.printkey
vol.py -f "/path/to/file" windows.registry.printkey ‑‑key "Software\Microsoft\Windows\CurrentVersion"

-Vol2

vol.py -f "/path/to/file" ‑‑profile <profile> printkey
vol.py -f "/path/to/file" ‑‑profile <profile> printkey -K "Software\Microsoft\Windows\CurrentVersion"

Vol3

Claves Vol3 Por ejemplo vemos que en SYSTEM existen 9 claves incluyendo las volátiles

Vol2

Claves Vol2

Claves especificas

1
2
3
4
5
6
7
-Vol3

vol.py -f "/path/to/file" windows.registry.printkey ‑‑key"Software\Microsoft\Windows\CurrentVersion"

- Vol2

vol.py -f "/path/to/file" ‑‑profile <profile> printkey -K "Software\Microsoft\Windows\CurrentVersion"

Vol3

Claves específicas Vol3

Vol2

Claves específicas Vol2

Hash de contraseñas

1
2
3
4
5
6
7
-Vol3

vol.py -f <ruta_a_la_imagen> windows.hashdump

- Vol2

vol.py -f "/path/to/file" ‑‑profile <profile> hashdump

Vol3

Hash Vol3

Vol2

Hash Vol2

Hash cracked En este caso la contraseña es sencilla

Conexiones externas

1
2
3
4
5
6
7
-Vol3

vol.py -f <ruta_a_la_imagen> windows.netstat

- Vol2

vol.py  -f <ruta_a_la_imagen> --profile=<perfil_de_sistema> netscan

Vol3

Conexiones Vol3

Vol2

Conexiones Vol2 En este caso volatility 2 es más capaz

Estructuras FILE_OBJECT

1
2
3
4
5
6
7
-Vol3

vol.py -f <ruta_a_la_imagen> windows.filescan

- Vol2

vol.py  -f <ruta_a_la_imagen> --profile=<perfil_de_sistema> filescan

Vol3

Estructuras Vol3 Extrae 3420 resultados

Vol2

Estructuras Vol2 Extrae 3423 resultados

Extracción de ficheros

1
2
3
4
5
6
7
-Vol3

vol.py -f [ImageName] -o "dump" windows.dumpfile --pid 1328 --virtaddr 0xbf0f6abe9740

- Vol2

vol.py -f "/path/to/file" ‑‑profile <profile> dumpfiles ‑‑dump-dir="/path/to/dir" -p <PID>

Localizar un fichero

Localizar fichero Localizamos el proceso

Vol3

Extracción Vol3

Vol2

Extracción Vol2

Rutas de ficheros

1
2
3
4
5
6
7
-Vol3

vol.py -f "/path/to/file" windows.filescan

- Vol2

vol.py -f "/path/to/file" ‑‑profile <profile> filescan

Vol3

Rutas Vol3

Vol2

Rutas Vol2

Tabla MFT

1
2
3
4
5
6
7
-Vol3

vol.py -f <ruta_a_la_imagen> windows.mftscan.MFTScan

- Vol2

vol.py -f <ruta_a_la_imagen> --profile=<perfil_de_sistema> mftparser

Vol3

MFT Vol3

Vol2

MFT Vol2

Aqui podemos ver las fechas de acceso, modificacion, etc de los archivos de los que tengamos interés

URLs en memoria

1
2
3
4
5
6
7
-Vol3

vol.py -f "/path/to/file" windows.vadyarascan --yara-rules "https://" | grep -A 5 -B 5 "Process firefox"

- Vol2

vol.py -f <imagen_memoria> --profile=<perfil> yarascan -Y "https://" | grep -A 5 -B 5 "Process firefox"

Vol2

URLs en memoria Podemos ver diferentes URL almacenadas en la memoria

Fechas de ejecución

1
2
3
4
5
6
7
-Vol3

vol.py -f <imagen_memoria> windows.registry.printkey --key "Software\\Mozilla\\Firefox"

- Vol2

vol.py -f <imagen_memoria> --profile=<perfil> printkey -K "Software\\Mozilla\\Firefox"

Vol3

Fechas Vol3

Vol2

Fechas Vol2

Mas o menos podemos deducir las ultimas fechas en función de las ultimas modificaciones de las llaves en el registro de windows

Fechas de navegación a URLs

Si necesitamos visualizar la fecha y hora en la que se visualizó una URL podemos acceder a la base de datos sqlite que genera el navegador.

En este caso firefox genera varias bases de datos en las que almacena cookies, bookmarks, historiales, etc por lo que deberían estar en memoria ya que el proceso está en ejecución.

Proceso Firefox Localizamos el proceso principal del navegador

Volcado Firefox Volcamos toda los datos del proceso. En este caso se ha usado volatility 2 pero es indiferente

Podemos verificar que en el volcado podemos encontrar estas bases de datos gestionadas por el navegador

Bases de datos

Ahora que sabemos que los documentos están en uso por el proceso vamos a volcar toda los datos en memoria cargados pero de forma individual

Volcado individual Esto nos va a generar muchos archivos que tendremos que filtrar ahora

Por ejemplo podemos filtrar los archivos por tipo ya que el nombre que le asigna volatility es la dirección de memoria que ocupa y el proceso del que viene.

En este caso simplemente con un explorador de archivos organizamos por tipo de fichero y nos quedamos los sqlite.

Vamos a tener que comprobar el contenido a mano de cada uno pero lo más normal es que el fichero sqlite más grande sea el que contiene el historial, bookmarks y otros datos.

Renombrar SQLite Le podemos cambiar el nombre para que sea más fácil de referenciar

Ahora que tenemos el documento podemos abrir la base de datos con sqlite y acceder a los datos

SQLite datos En este caso podemos la URL que vimos anteriormente mediante YARA

La fecha de visita es el número en la tercera columna pero no es visible. Esto es por cómo son almacenadas las fechas en sqlite pero es un cálculo sencillo.

Fecha SQLite 2020-06-12 14:18:23

Bonus

Contexto

En esta sección bonus vamos a realizar un analisis más profundo sobre un proceso en concreto.

El objetivo es sencillo; anteriormente conseguimos encontrar un fichero 7z en memoria, el problema es que viene conmprimido con contraseña por lo que tenenmos dos opciones.

1- Intentar crackear el fichero 2- Buscar en el dump de memoria si la contraseña puede estar en algún proceso abierto

Podemos proceder de la siguiente forma:

Mientras dejamos algun software de crackeo intentar descifrar el archivo vamos a indagar en el dump.

En este apartado vamos a estar utilizando únicamente volatility 3.

Listar procesos

1
vol.py -f <imagen_memoria> windows.pslist

Procesos de interés Vemos los dos procesos que nos pueden interesar, de uno ya tenemos el 7z y ahora podemos ver que hay contenido en el proceso del notepad

Para este proceso existen numerosos comandos que nos pueden dar más información sobre el contenido en memoria del proceso notepad.exe

1
2
3
vol -f dump.raw windows.memmap --pid <PID_notepad> --dump

vol -f dump.raw windows.vadinfo --pid <PID_notepad>

Estos comandos nos proporcionarán bastante información e incluso es posible que el contenido del fichero que estuviese editando el usuario en el momento de la captura pero analizar el dump puede ser tedioso y alargarse demasiado, es por eso que existen plugins ya hechos por la comunidad para ciertas tareas y es lo que vamos a estar utilizando aquí.

Enlace al plugin

Github

Este plugin lo debemos mover a la ruta donde tengamos localizado nuestro volatility.

En este caso como lo instalamos mediante pip y en linux la ruta debería ser:

1
/home/kali/.local/lib/python3.12/site-packages/volatility3/framework/plugins/windows/

Ahora si podemos ejecutar el plugin de la siguiente forma

1
vol.py -f dump.raw windows.notepad

Plugin notepad

Aunque el contenido es algo lioso quizás la mejor manera de proceder es identificar la zona que el usuario podría estar viendo en pantalla, es decir la interfaz de usuario.

Cuando identifiquemos el posible texto que necesitamos podemos proceder a intentar descifrar el fichero obtenido anteriormente.

Extracción archivos En este caso vamos 4 ficheros porque anteriormente realizamos la extración con volatility 2 y 3

This post is licensed under CC BY 4.0 by the author.