Hoy en día, ante cualquier incidente relacionado con la seguridad informática, se suelen utilizar en mayor o menor medida técnicas de análisis forense, bien para recopilar evidencias de las acciones realizadas por el atacante, para recuperar indicadores de compromiso con el fin de contener y bloquear la amenaza o para ambas cosas.
La memoria RAM es uno de los lugares donde podemos encontrar mayor cantidad de artefactos que nos serán de gran utilidad durante la respuesta a un incidente o en el análisis posterior. Podemos encontrar los procesos en ejecución con sus estructuras de datos que nos aportan muchos y valiosos detalles: puertos de comunicaciones abiertos en el sistema, claves de cifrado que se escriben en memoria durante la ejecución de los programas que las utilizan, etc. Ya sean programas legítimos o maliciosos, todos pasan por la memoria durante su ejecución.
La intención de este artículo es dar unas pequeñas pinceladas sobre una herramienta utilizada en el ámbito del análisis forense por la mayoría de los equipos a nivel internacional y una de las principales herramientas que utilizamos en Sothis cuando realizamos análisis forenses.
¿Qué es Volatility?
La primera versión de Volatility se presentó públicamente en la BlackHat DC de 2007. El software estaba basado en años de investigación académica publicada sobre análisis forense y análisis avanzado de memoria.
En aquel momento en que las investigaciones forenses de los incidentes se centraban en el análisis de los datos obtenidos de los discos duros, Volatility facilitó a los investigadores nuevas herramientas para examinar el almacenamiento volátil (RAM) de las computadoras.
La memoria RAM es uno de los lugares donde podemos encontrar mayor cantidad de artefactos que nos serán de gran utilidad durante la respuesta a un incidente o en el análisis posterior
Escrito en Python, se concibió como un framework extensible para ayudar a los investigadores en análisis de memoria y desde hace años es un referente en este campo. Hoy en día, el desarrollo de Volatility lo gestiona una fundación independiente y sin ánimo de lucro llamada The Volatility Foundation, creada para promocionar su uso dentro de la comunidad de analistas forenses y para que continúe siendo una herramienta libre y de código abierto.
Cómo utilizar Volatility
Volatility funciona en varios entornos: Windows, Linux y MacOS. Una vez instalado, para empezar a utilizar esta herramienta, lo primero que necesitamos es una imagen de la memoria RAM de un dispositivo compatible. Esta parte no la cubriremos en este artículo, pero existen distintas herramientas open source que nos pueden ayudar en esta tarea.
Una vez tengamos el fichero con la imagen de memoria RAM, tendremos que obtener lo que Volatility llama el «perfil de la imagen de memoria». Este perfil ayuda a la herramienta a saber dónde se ubican en memoria las estructuras de datos de las que posteriormente extraeremos la información. La opción «imageinfo» es la que nos ayudará a identificar el perfil de la imagen de memoria (ver imagen 1).
En este caso, la aplicación nos sugiere varios perfiles que podrían ser aplicables: Win2003SP0x86, Win2003SP1x86, etc. Una vez determinado el perfil que utilizaremos para el análisis, ya podemos comenzar a extraer información.
Ejecutando «vol.py» con la opción «–info» nos mostrará todas las posibilidades de la herramienta. Para analistas más avanzados, existe la opción de utilizar la opción «volshell», con la que podremos interactuar directamente sobre el espacio de memoria contenido en el fichero.
Una de las primeras opciones que se suelen utilizar es «pslist» con la que obtenemos un listado de procesos en ejecución en el momento de la captura de la imagen de memoria (ver imagen 2).
Con la opción «sockets» obtendremos un listado de las conexiones de red del sistema, con información de dirección IP destino, puerto y protocolo de comunicaciones utilizado. Esto nos puede ayudar a identificar posibles puertos a la escucha abiertos por software malicioso o conexiones realizadas por atacantes (ver imagen 3).
Una vez identificado el proceso sospechoso, con «procdump» podemos extraer de memoria la imagen de dicho ejecutable y analizarlo para determinar qué acciones realiza sobre el sistema.
Qué beneficios aporta Volatility
De cara a una investigación, la capacidad de contar con la memoria volátil del dispositivo en el momento en el que se está desarrollando el incidente (aunque no siempre es posible obtenerla) nos proporciona muchas ventajas a la hora de determinar con éxito sus causas y su alcance. Volatility es una de las mejores herramientas que se pueden utilizar en este caso.
Es una herramienta extensible, lo que nos permite crear complementos e implementar funcionalidades que cubran nuestras necesidades específicas. Es multiplataforma, por lo que puede ejecutarse en máquinas con sistema operativo Windows, Linux, Mac OS. También es multiplataforma en lo referente al tipo de imágenes de memoria que puede analizar (Windows, Linux, MacOS).
Con ella podemos analizar varios formatos de datos, desde memoria RAM, archivos de paginación de Windows (pagefil.sys) o el fichero de memoria cuando hibernamos el portátil (hiberfil.sys).
Otros de los artefactos de memoria que podemos analizar son:
- Obtener la línea temporal de artefactos creados en memoria.
- Extraer la MFT (Master File Table) para realizar una línea temporal de los ficheros del sistema.
- Visualizar, listar y extraer las claves de registro del sistema Windows.
- Identificar procesos sospechosos.
- Analizar librerías DLL y los ficheros abiertos por procesos en ejecución.
- Investigar si existen evidencias de inyección de código malicioso.
- Investigar si existen signos de presencia Rootkits en el sistema.
- Extraer ficheros ejecutables, drivers y objetos creados en memoria.
- Utilizar reglas yara para realizar búsquedas en el espacio de memoria.
Además de todas las funcionalidades que ofrece esta herramienta, otra de las ventajas es que esta soportada por una comunidad muy activa, que mantiene la herramienta actualizada y en continua evolución.
Volatility v3
Con toda probabilidad, la versión de Volatility más utilizada hasta el momento sea la v2.6. Sin embargo, la Volatility Foundation publica desde 2019 una nueva versión reescrita desde cero y con varios cambios respecto a la versión v2.6 de la herramienta, dándola a conocer como Volatility v3.0.
Esta nueva versión se ha diseñado para ser una librería, lo que significa que los componentes son independientes y los plugins son autocontenidos. Volatility v3 ya no utiliza la directiva profile para definir el tipo de imagen utilizada, ahora incluye librerías de tablas de símbolos que cumplen la misma función. También permite generar nuevas tablas de símbolos a partir de la imagen de memoria a analizar.
La velocidad de procesamiento ha sido también mejorada en esta nueva versión. Volatility 2 estaba diseñado con la premisa de poder analizar memoria en tiempo real, por lo que la memoria se leía múltiples veces dentro de una misma ejecución del comando. En esta versión v3 se sacrifica esta característica haciendo una única lectura durante la creación de las estructuras de datos.
Referencias
https://www.volatilityfoundation.org/
https://digital-forensics.sans.org/media/volatility-memory-forensics-cheat-sheet.pdf