Virtualization hypervisors what the heck...
Tags: virtualmachines, malware, beginners
Published: 2022-10-09 23:20:35

_For my English friends, I will translate this in a few days, don't panic!_

Debido a mi trabajo como Threat Hunter, y a veces analista de inteligencia, me veo en la situación de tener que realizar análisis malware en dinámico.

El análisis dinámico del malware permite averiguar de forma sencilla las acciones que este ejecuta. Además de que si tenemos nuestro laboratorio provisto de agentes EDR (Endpoint Detection and Response) podremos generar fácilmente reglas de detección basadas en los comportamientos detectados.

No obstante, como es evidente, estas ejecuciones conllevan ciertos riesgos para el analista. Por lo que es necesario recrear entornos lo más realistas posibles pero que estén controlados.

En este contexto surgen varias soluciones [2], siendo las más relevantes las siguientes:

**Bare Metal methods:** En estos casos se hace uso de una máquina sobre la que se ejecuta directamente el malware. De esta forma se evita la instalación de software de virtualización y por consiguiente utilizando un entorno más realista.

No obstante también tiene algún pero, y es que la extracción de información es más complicada ya que el software de análisis debe estar instalado en la propia máquina. Lo cual puede ser detectado por el malware, o inclusive ser corrompido si se ejecutara un ransomware. 

Además de el coste de revertir la máquina a un estado previo a la infección no es trivial ya que requiere de tiempo para o bien reinstalar o bien restaurar una copia previa del disco.

**Hooking methods:** Este método consiste en insertar un módulo de código directamente en la memoria del proceso [3] que sobrescriba el contenido de las API que utiliza el malware. De esta forma que cada vez que llame a una de estas APIs sea interceptado, monitorizado y si es preciso, redirigido a una función distinta.

No obstante este método tiene algunos puntos flojos:

- Es detectable, ya que modifica directamente la memoria del proceso. El malware podría comprobar contenido de la APIs contra una base de datos con datos de las APIs legítimas.

- El malware puede modificar, o eliminar el código "hooked" escribiendo encima. (Se encuentra cargado en su memoria).

- El malware puede saltarse las llamadas a las APIs de Windows y realizar directamente llamadas al sistema. A pesar de que las syscall puedan variar entre versiones, el atacante podría obtener de forma sencilla la versión del sistema operativo..

**Emulation methods:** Un emulador es un programa que simula las funcionalidades de otro programa, sistema operativo o pieza de hardware.  De esta forma podríamos ejecutar un programa A sobre un hardware completamente emulado distinto al del sistema anfitrión. El emulador,se encarga de interpretar las instrucciones del sistema invitado y traducirlas a comandos del sistema anfitrión. 

En el caso de emular unicamente el sistema operativo, encontraríamos algunos de los siguientes problemas [4]:

- Al no ejecutarse directamente en el hardware anfitrión las ejecuciones son más lentas.
- En el caso de emular el sistema operativo Windows, podrían haber problemas al interpretar las llamadas a la API de windows menos frecuentes. Esta API no está documentada, por tanto, los desarrolladores se centran en las llamadas más habituales, descuidando aquellas que prácticamente no se utilizan. Esto podría llevar a respuestas inesperadas en caso de ser utilizadas.

Por otro lado, la emulación de hardware o "emulación completa" proporciona múltiples ventajas:
- Permite instalar el sistema operativo por encima del emulador, de esta forma es mucho más difícil de detectar por el malware.
- La traducción de instrucciones del procesador es mucho más simple que la traducción de llamadas a la API de Windows.

Sin embargo igual que con el método anterior, la emulación completa sigue añadiendo cierto retraso en el procesamiento que podría ser detectado por el malware. 

**Hypervisor methods:**  El método más utilizado por los analistas de malware (al menos que yo he podido conocer), las máquinas virtuales.

En este método se hace uso de un hypervisor que se encarga de gestionar los recursos disponibles para un sistema operativo invitado. Estos recursos se proporcionarán directamente del hardware existente. 

De esta forma, el "overhead" que se añade al sistema operativo o programa ejecutado es mucho menor que en el resto de casos. Siendo una experiencia casi idéntica a la **Bare Metal**.

No obstante, el uso de sistemas de virtualización es ampliamente conocido por los desarrolladores de malware, que desde hace años van apareciendo lo que se conoce como malware "VM-Aware", es decir, malware con la capacidad de detectar el entorno sobre el que se está ejecutando. Un ejemplo de esto es trickbot, el cual habitualmente viene acompañado de múltiples técnicas de detección de máquinas virtuales.

Además hay estudios de múltiples compañías en los que se enumeran aquellas trazas que deja el virtualizador en el sistema operativo invitado y que pueden ser utilizadas para detectarlo [1].

Algunos de estos estudios han sido reutilizados por otros analistas para desarorollar proyectos que permiten mejorar la invisibilidad de la máquinas virutales. Algunos de los más reconocidos son:
- [https://github.com/hfiref0x/VBoxHardenedLoader](https://github.com/hfiref0x/VBoxHardenedLoader)
- [https://github.com/hzqst/VmwareHardenedLoader](https://github.com/hzqst/VmwareHardenedLoader)

Por otro lado, también hay múltiples proyectos enfocados a mostrar que evidencias tiene un sistema sobre si está virtualizado o no. De esta forma se pueden ir resolviendo esos casos concretos uno a uno.
- [https://github.com/a0rtega/pafish](https://github.com/a0rtega/pafish)
- [https://github.com/LordNoteworthy/al-khaser](https://github.com/LordNoteworthy/al-khaser)

Finalmente, cabe destacar la posibilidad de creación de puntos de restauración (snapshots), los cuales permiten volver a un estado previo a la infección en cuestión de segundos.

Esta capacidad de ocultación, facilidad de uso y facilidad de recuperación convierten este método en el más recomendado para el análisis de malware.

**Referencias:**
1. T. Raffetseder, C. Kruegel & E. Kirda. (2007, 10). Detecting System Emulators. _Springer Link_. Retrieved from [https://link.springer.com/chapter/10.1007/978-3-540-75496-1_1](https://link.springer.com/chapter/10.1007/978-3-540-75496-1_1)

1. R. S. Leon, M. Kiperberg, A. A. Leon Zabag & N. J. Zaidenberg. (2021, 06 02). Hypervisor-assisted dynamic malware
analysis. _SpringerOpen_. Retrieved from [https://cybersecurity.springeropen.com/track/pdf/10.1186/s42400-021-00083-9.pdf](https://cybersecurity.springeropen.com/track/pdf/10.1186/s42400-021-00083-9.pdf)

1. C. Willems, T. Holz & F. Freiling. (2007, 04 02). Toward Automated Dynamic Malware Analysis Using CWSandbox. _IEEE Xplore_. Retrieved from [https://ieeexplore.ieee.org/document/4140988](https://ieeexplore.ieee.org/document/4140988)

1. C. Kruegel. (2014) Full System Emulation: Achieving Successful Automated Dynamic Analysis of Evasive Malware. _Black Hat_. Retrieved from [https://www.blackhat.com/docs/us-14/materials/us-14-Kruegel-Full-System-Emulation-Achieving-Successful-Automated-Dynamic-Analysis-Of-Evasive-Malware-WP.pdf](https://www.blackhat.com/docs/us-14/materials/us-14-Kruegel-Full-System-Emulation-Achieving-Successful-Automated-Dynamic-Analysis-Of-Evasive-Malware-WP.pdf)