Esta semana, cubriremos un nuevo espécimen de malware llamado Sysjoker y una guía para el análisis forense de la memoria de Linux. Aunque la guía forense no es exhaustiva y ciertamente no tiene todos los detalles, podría ayudar a entender los fundamentos de un proceso de extracción y análisis de memoria utilizando Volatility.
Sysjoker Backdoor
En un reciente publicado por IntezerLos autores analizaron un nuevo backdoor capaz de ejecutarse en múltiples sistemas operativos. Según el análisis, "Sysjoker" puede ejecutarse en macOS, Linux y Windows. Sysjoker se esconde como una actualización del sistema y utiliza diferentes métodos para ocultar y cambiar la dirección IP de su servidor de Comando y Control (C2).
También es preocupante que la muestra haya salido limpia de los análisis de VirusTotal, lo que puede indicar que el backdoor es bastante nuevo. Aunque los métodos que utiliza para infectar un sistema son diferentes en los distintos sistemas operativos, una vez que consigue persistir en un sistema, comienza a comunicarse con el servidor C2. En el análisis, Intezer afirma que todavía no han visto una instrucción de la siguiente fase del servidor C2. La publicación sugiere el uso de escáneres de memoria para detectar el malware.
Otra forma de hacer un análisis forense es volcar la memoria y analizarla con una herramienta conocida como Volatility. En las versiones más antiguas del kernel de Linux, el volcado de la memoria podía lograrse copiando la memoria virtual desde /dev/mem utilizando una herramienta de línea de comandos como dd; sin embargo, este método fue obviado debido a las potenciales implicaciones de seguridad.
Forense de la memoria de Linux
Podemos resumir el análisis forense como los diferentes métodos utilizados en la adquisición de pruebas, el análisis de las mismas y la documentación de las consecuencias de un incidente de seguridad. Tras la confirmación de una violación de la seguridad, suele realizarse un análisis forense para comprender mejor lo que ha ocurrido en un sistema comprometido. Hay numerosas fuentes de evidencia que puedes analizar para hacer afirmaciones defendibles sobre el origen de un incidente; sin embargo, sólo haremos un análisis práctico de la memoria de un sistema Linux comprometido para demostrar algunas de las metodologías y herramientas que puedes utilizar.
Memoria
La RAM, por naturaleza, es volátil. Requiere que la energía pase constantemente por ella para funcionar, y se restablece cada vez que el sistema se reinicia. Linux mantiene los datos almacenados en la memoria bajo el directorio /dev/mem; sin embargo, es imposible extraer artefactos de la memoria usando esta partición directamente en las distribuciones más recientes. Esto se debe a que a partir del kernel de Linux 4.16, una opción(CONFIG_STRICT_DEVMEM) se activa por defecto para no permitir el acceso a esta partición sensible.
Aunque esto dificulta la adquisición de la imagen de memoria, también hace más difícil que los adversarios (y los usuarios inexpertos) causen daños devastadores en el sistema. Un atacante con acceso de root al sistema puede utilizar el dispositivo de memoria para inyectar código directamente en el kernel si esta opción está desactivada.
Hemos puesto en marcha un Debian 9 Linode con el nombre de host "forensics" en uno de nuestros centros de datos para esta demostración. Hemos configurado la caja forense para que sea un ejemplo de un entorno de construcción y análisis. Aunque no es necesario hacer esto en una máquina externa, no es aconsejable manipular un ordenador que contiene pruebas. Estos son los pasos de nuestro análisis:
- Cree un perfil de Volatility para un sistema comprometido utilizando una máquina con el mismo sistema operativo y construcción/versión del kernel.
- Vuelca la memoria con la herramienta que elijas (AVML en esta demo).
- Inspeccione la memoria volcada utilizando el perfil que ha creado para Volatility con la ayuda de los plugins.
Advertencia
Utilizaremos el repositorio Python 2 de Volatility para fines de demostración debido a los problemas de compatibilidad que se están produciendo actualmente con Volatility 3. Somos conscientes de que el soporte para Python 2 terminó en 2020; esto es estrictamente para demostrar el uso de la herramienta en un entorno controlado. Si quieres seguir la guía, por favor hazlo bajo tu propio riesgo.
Requisitos
Por defecto, Debian 9 Linodes carecerá de algunas de las herramientas que vamos a utilizar en esta demostración. Se recomienda instalarlas todas con el siguiente comando antes de continuar con otras instrucciones:
sudo apt install make git zip dwarfdump linux-headers-$(uname -r) python-pip python-distorm3 python-crypto
Volatilidad
El Volatility Framework es una colección completamente abierta de herramientas implementadas en Python bajo la licencia pública general de GNU para extraer artefactos digitales de muestras de memoria volátil (RAM).
Es importante asegurarse de que se utiliza el perfil correcto de Volatility cuando se analiza un volcado de memoria. Un perfil es un archivo que contiene información sobre la estructura de datos de un kernel y símbolos de depuración que pueden ser utilizados para analizar una imagen de memoria correctamente. Por suerte, crear un perfil con Volatility es bastante sencillo. También puede consultar el repositorio de perfiles de Volatility para obtener algunos perfiles preconstruidos.
Construir un perfil
Después de instalar las herramientas necesarias, podemos empezar a construir nuestro perfil de Volatility para la máquina en la que se está ejecutando.
1. git clone https://github.com/volatilityfoundation/volatility ~/volatility
2. cd ~/volatility/tools/linux/
3. make
4. zip ~/$(lsb_release -i -s)_$(uname -r).zip ./module.dwarf /boot/System.map-$(uname -r)
5. cp ~/$(lsb_release -i -s)_$(uname -r).zip ~/volatility/volatility/plugins/overlays/linux/
6. python ~/volatility/vol.py --info
La línea inicial (1) clonará el repositorio de Volatility en el directorio principal del usuario. Entrando en el directorio (2) ~/volatility/tools/linux, podemos usar make (3) para recompilar los módulos del kernel. Es importante tener las cabeceras del kernel descargadas de antemano, de lo contrario este proceso podría fallar.
Esto resulta en un módulo .dwarf. Entonces el siguiente comando (4) usa este módulo para leer el mapa del sistema desde /boot para generar el perfil que necesitamos usar en Volatility. A continuación, podemos copiar este perfil (5) en el directorio correcto, para que Volatility pueda utilizarlo. Finalmente, para verificar que nuestro perfil se ha cargado correctamente en Volatility, podemos ejecutar Volatility una vez con la bandera de información (6). Si todos los pasos son exitosos, deberíamos ver nuestro perfil personalizado en la sección de Perfiles de la salida.
Instalación de un módulo del núcleo oculto
Para este ejemplo hemos utilizado HiddenWall para generar un Módulo del Núcleo de Linux (LKM) oculto, lo hemos llamado 'cantfindme', y lo hemos cargado en otro Debian 9 Linode con la misma construcción/versión del núcleo que la máquina 'forense'. Aunque el módulo está cargado, no se puede ver cuando se ejecuta lsmod o modprobe en el sistema:

Adquisición de memoria
Hay grandes herramientas que puedes usar para volcar la memoria en Linux; sin embargo, en esta guía, iremos con AVML (Acquire Volatile Memory for Linux) ya que LiME es cubierto frecuentemente en la web. AVML es una herramienta de adquisición de memoria de código abierto para Linux hecha por Microsoft. Puedes encontrar la última versión aquí y descargar el binario a la máquina desde la que quieres volcar la memoria. Recuerda que el ordenador desde el que vamos a volcar la memoria debe tener la misma compilación y versión del kernel/OS que el perfil de Volatility que hemos generado previamente.
En un escenario de la vida real, es importante no manipular un sistema comprometido para garantizar que las pruebas que recojamos puedan ser admisibles en un tribunal. También es importante no comprimir ninguna imagen siempre que sea posible, ya que la adquisición bit a bit puede proporcionar datos que una imagen comprimida no puede proporcionar.
Después de descargar el binario AVML en el directorio principal, puede utilizar el siguiente comando para volcar la memoria del sistema en el directorio principal.
sudo ~/avml ~/output.lime
AVML volcará la memoria en formato LiME, para que podamos empezar nuestro análisis con el perfil Volatility que hemos creado. También puedes comprobar el tamaño del volcado para asegurarte de que coincide con la memoria RAM total del dispositivo. Volatility no debería manipular el volcado de memoria, pero es mejor hacer una copia del archivo y analizar los datos copiados en lugar del original después de asegurarse de que sus hashes coinciden.
Después de volcar la memoria de la caja 'pwnd', la hemos transferido a la caja 'forense' para su análisis.
Plugins de volatilidad
Volatility ofrece numerosos plugins para ayudar al analista forense. Puedes encontrar una lista de estos plugins en su página de Github. Utilizando los plugins de Volatility podemos obtener una visión rápida de la imagen de memoria. El formato del comando para analizar una imagen de memoria se puede encontrar a continuación:
python ~/volatility/vol.py -f <path_to_memory_dump> --profile=<profile>
<plugin_name> <plugin_options>
Aquí está la salida del plugin linux_hidden_modules que lista los módulos del kernel cargados ocultos de la imagen de memoria:

Este plugin puede ayudarle a encontrar módulos ocultos del Kernel de Linux que pueden ser maliciosos. Incluso cuando estos módulos no pueden ser vistos cuando se ejecuta lsmod en el sistema, pueden ser detectados y extraídos de un volcado de memoria. Puedes usar el plugin linux_moddump para volcar los módulos del kernel, ya sea especificando su nombre en un patrón regex o especificando la dirección base del módulo en la imagen de memoria:

Hay más cosas que se pueden hacer con Volatility que simplemente no podemos cubrir en este post. Siéntase libre de dejar un comentario abajo para compartir sus pensamientos y sugerencias.
Comentarios