Herramienta Volatility2/3 + LAB (Windows)

Fase 1

Lo primero a la hora de sacar la principal informacion de un archivo de la imagen del sistema para realizar el análisis forense es lo siguiente.

Utilizaremos la herramienta Volatility la cual nos podremos descargar en el siguiente repositorio de GitHub.

URL = Download Volatility

Una vez descargado, podremos probarla ejecutando el siguiente comando.

./vol.py -h

Info:

Volatility 3 Framework 2.26.2
usage: vol.py [-h] [-c CONFIG] [--parallelism [{processes,threads,off}]] [-e EXTEND] [-p PLUGIN_DIRS] [-s SYMBOL_DIRS] [-v] [-l LOG] [-o OUTPUT_DIR] [-q]
              [-r RENDERER] [-f FILE] [--write-config] [--save-config SAVE_CONFIG] [--clear-cache] [--cache-path CACHE_PATH] [--offline | -u URL]
              [--filters FILTERS] [--hide-columns [HIDE_COLUMNS ...]] [--single-location SINGLE_LOCATION] [--stackers [STACKERS ...]]
              [--single-swap-locations [SINGLE_SWAP_LOCATIONS ...]]
              PLUGIN ...

An open-source memory forensics framework

options:
  -h, --help            Show this help message and exit, for specific plugin options use 'vol.py <pluginname> --help'
  -c, --config CONFIG   Load the configuration from a json file
  --parallelism [{processes,threads,off}]
                        Enables parallelism (defaults to off if no argument given)
  -e, --extend EXTEND   Extend the configuration with a new (or changed) setting
  -p, --plugin-dirs PLUGIN_DIRS
                        Semi-colon separated list of paths to find plugins
  -s, --symbol-dirs SYMBOL_DIRS
                        Semi-colon separated list of paths to find symbols
  -v, --verbosity       Increase output verbosity
  -l, --log LOG         Log output to a file as well as the console
  -o, --output-dir OUTPUT_DIR
                        Directory in which to output any generated files
  -q, --quiet           Remove progress feedback
  -r, --renderer RENDERER
                        Determines how to render the output (quick, none, csv, pretty, json, jsonl)
  -f, --file FILE       Shorthand for --single-location=file:// if single-location is not defined
  --write-config        Write configuration JSON file out to config.json
  --save-config SAVE_CONFIG
                        Save configuration JSON file to a file
  --clear-cache         Clears out all short-term cached items
  --cache-path CACHE_PATH
                        Change the default path (/root/.cache/volatility3) used to store the cache
  --offline             Do not search online for additional JSON files
  -u, --remote-isf-url URL
                        Search online for ISF json files
  --filters FILTERS     List of filters to apply to the output (in the form of [+-]columname,pattern[!])
  --hide-columns [HIDE_COLUMNS ...]
                        Case-insensitive space separated list of prefixes to determine which columns to hide in the output if provided
  --single-location SINGLE_LOCATION
                        Specifies a base location on which to stack
  --stackers [STACKERS ...]
                        List of stackers
  --single-swap-locations [SINGLE_SWAP_LOCATIONS ...]
                        Specifies a list of swap layer URIs for use with single-location

Plugins:
..................................<RESTO_HELP>.....................................

Vemos que esta funcionando de forma correcta, por lo que ya podremos utilizarla.

Si por ejemplo queremos utilizar la de Volatility2 o Volatility, podremos descargarnoslo en este repositorio de GitHub tambien del mismo creador, pero ya esta un poco desactualizado.

URL = Download Volatility2 GitHub

Una vez descargado, le daremos permisos de ejeccion ya que viene sin ellos.

Ahora entraremos a nivel de codigo con nano y cambiaremos la siguiente linea:

Por esta:

Lo guardamos y ahora la probaremos de esta forma:

Info:

Vemos que funciona de forma correcta.

Tambien podemos ver como se utiliza en esta pagina:

URL = Info Uso de Volatility

Ahora vamos a entrar en un repositorio de GitHub donde descargarnos imagenes ya preparadas para parcticar esto mismo.

URL = GitHub Labs Analisis Forense

Vamos a irnos a Lab 0 y dentro clicaremos el link del drive que nos descarga dicho archivo, lo descomprimiremos y ahora vamos a empezar con el analisis forense con la herramienta Volatility3 con dicho archivo.

Obtener información del sistema de la imagen

Vamos a probarlo tanto para la v2 como para la v3 ya que cambian en las dos versiones de volatility.

Volatility2

Info:

Volatility3

Info:

Con esto sabremos el profile determinado (El S.O. especifico que es) para posteriormente poder ejecutar los comandos correctos respecto al sistema que sea.

Obtener información de la memoria RAM

Volatility2

Info:

Volatility3

Para Volatility3 al realizar el comando anterior de obtener informacion, ya de forma automatica hace lo del kdbgscan de volatility2, por lo que seria el mismo comando que el anterior de esta version.

Con esto obtenemos informacion respecto al dump de la memoria RAM solo que no se suele utilizar mucho si no es un caso real.

Esta seria la primera fase de informacion que siempre tendremos que hacer para recopilar la informacion esencial desde la memoria RAM del dump.

Fase 2

Obtener los procesos activos de cuando se realizo el dump del archivo

Vamos a ejecutar el parametro de pstree que nos muestra todos los procesos de memoria RAM en formato de árbol (Proceso padre, hijo, subprocesos, etc...).

Volatility2

El --profile=... vamos a obtenerlo del anterior comando que ejecutamos en la linea llamada Suggested Profile(s) mismamente el primer nombre sirve.

Info:

Volatility3

En este caso no hace falta especificar el profile ya que lo detecta de forma automatica.

Info:

Hay una pagina en la que podemos consultar para detectar procesos no maliciosos que estan recogidos en una pagina de hacking etico llamada HackTricks en la que podremos investigar respecto a la informacion que nos haya volcado la herramienta si hay algun proceso sospechoso en el dump.

URL = Info Procesos HackTricks

URL2 = Info Procesos Medium

Con esto lo que podemos hacer es descartar los procesos que vengan en estas paginas, por que van a ser lo que vienen por defecto en el sistema de un Windows.

En la lista de procesos ya podemos ver alguno sospechoso como este:

Tiene un nombre bastante raro y no es muy comun, o desde Volatility3 esta linea:

Ahora utilizaremos el parametro pslist que es como el anterior pero en este caso te muestra simplemente los procesos, con su PID identificativo, etc... Tambien super importante si se tuviera el Offset Virtual se mostraria.

Volatility2

Info:

Volatility3

Info:

Con este listado podremos ver en mas profundidad procesos que a lo mejor no veiamos antes de forma un poco mas detallada y clara.

Con el parametro psscan podremos obtener los procesos que en ese momento se estaban ejecutando en memoria, es decir, los procesos con mayor importancia (Procesos grandes) se estaban ejecutando en ese momento.

Volatility2

Info:

Volatility3

Info:

En este caso con la v2 de volatility no nos detecto ningun proceso asi grande, pero con la v3 si nos detecto unos cuantos procesos, pero siguen siendo practicamente los mismos que antes, por lo que no pasa nada.

Con el parametro psxview podremos ver si algun proceso que hemos listado antes con los anteriores parametros, estaba de forma oculta, es decir, con este parametro podremos visualizar procesos que estaban ocultos cuando se realizo el dump.

Volatility2

Info:

Volatility3

Info:

Si en la parte de los comandos que hemos lanzado anteriormente como por ejemplo psscan, pslist, etc... aparece como True significa que no tienen ningun subproceso oculto, por lo que con esta vista no hay nada oculto cuando se realizo el dump en la parte de la v2 de volatility en la columna de psscan vemos todo en False ya que no detecto nada anteriormente eso es un falso positivo.

Pero en la v3 si esta detectando algunos subprocesos ocultos, que tambien pueden ser falsos positivos, pero nunca esta demas investigarlo.

Fase 3

Obtener informacion de las conexiones (IPs) dentro de los procesos

Con el parametro connscan para la v2, pero para la v3 seria con netscan, lo que podremos ver sera las conexiones que ha realizado el sistema clasificando la IP local hacia la IP remota (IP publica) de cualquier conexion que se haya echo, con esto podremos ver si hay alguna conexion remota sospechosa o no.

Volatility2

Info:

Aqui por lo que se ve en este tipo de perfil da un error, pero si lo hacemos en la v3 de Volatility...

Volatility3

Info:

En este caso no veremos nada raro, ni extraño, pero imaginemos que este proceso nos parece extraño o sospechoso:

Podremos filtrarlo con el pstree y con grep de esta forma.

Volatility2

Info:

Con esto veremos que podremos filtrar en la seccion de PID y despues utilizar pstree para mostrarnos el proceso que tiene ese PID junto con su árbol de procesos.

Volatility3

Info:

De la misma forma que el anterior, pero en este caso en la v3.

Con el parametro sockets podremos ver las conexiones a nivel de procesos que ha tenido el sistema en ese momento, para investigar mas a fondo esto, pero como en la v2 da un fallo o no tiene directamente la imagen sockets no veremos nada.

Volatility2

Info:

Volatility3

En este caso para la v3 con el parametro windows.netscan ya te muestra lo del comando anterior de v2 como hemos visto antes en el de v3.

Obtener información de las instrucciones que se ha realizado en el sistema

Con el parametro cmdscan podremos ver todas las instrucciones que se ha realizado en el sistema, tanto los comandos que se hayan ejecutado, como las ventanas de consola que se haya abierto, etc... Podremos ver todo lo que se haya ejecutando a nivel de comandos con dicho parametro.

Volatility2

Info:

Volatility3

Con este comando dara error pero por que no soporta perfiles tan bajos a nivel de sistema operativo, en este caso es recomendable la de v2, ya que al tratarse de un Windows de versiones tan bajas el de v3 nos dara un error, pero para versiones altas si nos sirve.

Por lo que vemos en la salida de v2 veremos que se han registrado varios comandos a nivel de sistema y veremos bastante raro estas lineas:

Por lo que ya vamos obteniendo informacion mucho mas valiosa que antes.

Con el parametro consoles podremos ver todas las instrucciones que el usuario a ejecutado en la terminal del sistema, absolutamente todas, por lo que con ese parametro nos detalla mas la busqueda.

Volatility2

Info:

Volatility3

En esta parte de aqui pasa lo mismo de antes, si no es compatible con el profile dara un error.

Con esta linea de la v2 podemos ver mejor que se trata del dump de la memoria por lo que no es malicioso:

Pero en esta linea de aqui si es bastante sospechosa:

Con el parametro cmdline podremos ver como una especie de agrupacion o combinacion de los comandos anteriores mostrando directamente toda la informacion de lo que se ha estado ejecutando en el sistema.

Volatility2

Info:

Volatility3

Info:

En este caso funciona para las 2 versiones el parametro cmdline con este tipo de profile.

Obtener informacion de las DLLs que estan ejecutandose dentro del sistema en ese momento

Con el parametro dlllist podremos obtener la informacion de todas las DLLs que se estaban ejecutando en ese momento, con esto podremos ver de forma mas detallada que procesos pueden ser maliciosos respecto a las DLLs que estaban activas en ese momento.

Volatility2

Info:

Volatility3

Info:

Con esto podremos ver que nos muestra muchisima informacion sobre las DLLs.

Obtener información de un proceso malicioso dumpeando dicho proceso entero

Con el parametro memdump junto con el PID del proceso y la ruta donde queremos que se nos descargue la informacion, podremos volcar la informacion de ficheros o de lo que conlleve dicho proceso a nuestro host para poder analizarlo de forma mas detallada.

Con el parametro que utilizamos de cmdline pongamos que el proceso con PID 2096 (cmd.exe) creemos que puede ser sospechoso, por lo que vamos a volcarlo de esta forma.

Volatility2

Info:

Con esto veremos que ya se nos ha realizado el dump de dicho proceso.

Volatility3

Info:

Con esto veremos que en la v3 sera con este comando, el cual nos habra volcado la informacion de dicho proceso a la carpeta dumps.

En la parte de v2 podremos investigar el archivo dumpeado de esta forma:

Y en la parte de v3 sera de la misma forma pero con los archivos separados uno por uno.

Y ya con esto ir viendo irregularidades dentro del proceso dumpeado.

Obtener información de los hashes de los usuarios logueados/registrados en el sistema

Con el parametro hashdump podremos obtener un listado de hashes NTLM de los usuarios que estan registrados o logueados en el sistema, esto en tal caso de que la imagen del dump tuviera estos hashes inyectados, si no, no veremos nada.

Pero para comprobar que nos va a funcionar el hashdump podremos hacer un hivelist para ver todos los registros que tenemos disponibles en nuestro dump, si aparece el SAM sabremos que si podremos obtener dichos hashes.

Volatility2

Info:

Por lo que vemos en este caso si tenemos el SAM por lo que podremos obtener los hashes de los usuarios.

En este caso nos da un error, por que a lo mejor no es compatible, pero con ese comando tiene que funcionar.

Instalar snap volatility2

Pero si lo instalamos desde snap en Kali Linux.

El dump lo tenemos que copiar a nuestra carpeta /home ya que snap no puede acceder a ningun sitio extra de nuestra carpeta /home.

Ahora vamos a ejecutar la herramienta de esta forma:

Info:

Con esto veremos que ha funcionado de forma correcta.

Volatility3

Info:

Ahora para obtener el SAM haremos lo siguiente:

En este caso tambien nos dara un error, por que a lo mejor es incompatible la memoria dumpeada o cualquier otro factor, pero con eso deberia de funcionar, tambien tenemos este otro:

En este caso es para el LSA.

Resolver el Lab 0

Siguiendo todo lo que tenemos descubierto, ya dijimos que el proceso de demon.py.txt era bastante sospechoso, si realizamos de nuevo el parametro consoles para ver lo que nos muestra, veremos esta linea interesante.

Estamos viendo este numero codificado:

Esto esta en Hexadecimal si lo intentamos decodificar veremos esto:

Veremos esto tan raro, por lo que ya dudamos en que pueda ser ese tipo de decodificacion, vamos a investigar un poco mas en las variables de entorno.

Info:

Si vemos en esos primeros procesos nos viene uno bastante raro llamado Thanos como variable de entorno y que contiene lo siguiente:

Vemos que esta mencionando la codificacion de XOR por lo que vamos a probar a decodificar el numero de antes en XOR, a ver que vemos.

Vamos a montarnos un script.

decode_XOR.py

Hay que probar las 255 posibilidades de resultados y quedarnos con la que tenga un texto aparentemente normal.

Info:

Vemos que la mas clara es esta linea de aqui:

Pertenece al final de una flag, tendremos que obtener la primera parte que es lo que falta, por lo que vamos a obtener los hashes de los usuarios, a ver si esta por ahi lo que falta de forma codificada.

Si hacemos como antes para dumpearnos todos los hashes NTLM de esta forma:

Info:

Veremos que hay un usuario que no viene por defecto llamado hello, vamos a intentar crackear dicha contraseña con el hash NTLM.

URL = Crack Hash Page

Si metemos simplemente el NT para ver que encuentra, veremos lo siguiente:

Ahora si juntamos las 2 partes que tenemos para formar la flag nos quedara asi:

Con esto ya habremos obtenido bien toda la informacion.

Last updated