Para aquellos que os habéis enfrentado alguna vez a un análisis forense de memoria RAM, lo más seguro es que conozcáis Volatility. Esta potente herramienta desarrollada en Python permite obtener hasta la marca de café que beben los usuarios/atacantes que han hecho uso de un determinado equipo.
Como todo en la vida, se puede utilizar la mejor raqueta del mercado, pero uno no golpeará como Nadal, o se puede disponer de las mejores zapatillas de running pero uno nunca será Carl Lewis. Con Volatility pasa un poco lo mismo: no es una herramienta sencilla y tratar de encontrar un “bicho” o hallar evidencias de una intrusión no es trivial. Sí que es verdad que listar los procesos, obtener sus DLLs o incluso ver las conexiones establecidas en un momento determinado por la máquina es relativamente sencillo. Lo que ya no lo es tanto es la interpretación de la información que Volatility nos devuelve.
Es por eso que tras bucear por la estupenda wiki del proyect, e ir leyendo los diferentes posts o artículos recopilados por sus autores uno puede ir aprendiendo pequeños “trucos” sobre cómo detectar contextos anómalos y comportamientos específicos del malware. Con esta idea nace VolWrapper, una envolvente para Volatility escrita en Python que permite analizando la salida de los diferentes comandos de esta, identificar posibles anomalías presentes en la captura.
¿Cómo funciona VolWrapper? Pues simplemente redirigiendo la salida de la aplicación a la entrada de VolWrapper mediante una pipe.
root@hal9000:/home/ramado volatility -f imagecapture.raw --profile Win7SP1x86 dlllist | ./volWrapperV0.1.py
En estos momentos la envolvente soporta tan solo 3 comandos identificando situaciones anómalas para cada una de ellas: dlllist, psscan, pslist:
- Dlllist lista las librerías dll cargadas en cada uno de los procesos de la máquina. A menudo el malware pude trabajar en user space, inyectándose en un determinado proceso a través de estos métodos, por lo que durante la acción forense es recomendable revisar las diferentes librerías residentes en memoria. Este trabajo puede ser tedioso, por lo que en este punto entra en acción VolWrapper mostrando mediante una leyenda de colores información sobre las diferentes Dlls identificadas. Puede alertarnos de librerías fuera de los directorios tradicionales como system32, de capacidades de comunicación o de cifrado, incluso proporcionarnos una descripción de la funcionalidad de la dll.
Esto no quiere decir que mágicamente no señale donde está el problema, pero sí que puede ser un soporte para cribar un montón de información que de otra manera podría suponer mucho tiempo de estudio. Ejemplo de ejecución (pinchar en la imagen para verla a tamaño completo):
#volatility –f imagecapture.raw –profile Win7SP1x8 dlllist | ./volWrapperV0.1.py –c
Por ejemplo, de esta manera podemos identificar rápidamente si un proceso que aparentemente tiene una funcionalidad concreta como es notepad.exe está utilizando librerías de cifrado de datos o de comunicación, situación en un principio anómala. A su vez permite también centrarnos en todas aquellas librerías que a priori no están presentes en una instalación por defecto de un entorno Windows (listadas de color negro), centrando nuestra atención en ellas.
- Pslist permite obtener los procesos en ejecución en un momento determinado de la captura analizada. Una posible anomalía en cuanto a los resultados listados por Volatility puede ser procesos huérfanos, es decir sin PID padre aparente. Esta situación puede deberse a que un rootkit puede estar ocultando el verdadero proceso padre. VolWrapper permite identificar mediante un código de colores los procesos sospechosos.
- Psscan es similar al anterior, siendo un apoyo a psxview.
Resumiendo, la idea de la herramienta es ir ampliándola incorporando todas aquellas situaciones anómalas que identifiquen la presencia de algún artefacto. Por ahora tan solo soporta estos tres métodos pero irá creciendo, permitiendo a gente con menos conocimientos realizar un forense de RAM de forma más sencilla. Tenéis la herramienta en el siguiente enlace https://github.com/ramado78/volWrapper y en breve la añadiremos a la sección de herramientas “self-made” en SAW ;)