¿Qué es la introspección de máquinas virtuales?
La palabra «introspección» generalmente se refiere a la observación y examen del propio estado mental y emocional. Se considera como el acto de mirarse a uno mismo. Sin embargo, la introspección de las máquinas virtuales es el arte de monitorear las actividades de las máquinas virtuales desde el hipervisor y acceder a ellas sin estar dentro. No hay ningún agente instalado en la máquina virtual; Todo se hace desde fuera.
¿Por qué la introspección de máquinas virtuales?
Una de las principales razones para utilizar la introspección en la detección de malware es que los malware que utilizan técnicas avanzadas como los Rootkits no se detectan mediante los sistemas automatizados tradicionales de detección de malware. La otra razón son las funciones avanzadas que proporciona esta tecnología, que permiten al usuario tener una visión profunda de cada acción que ocurre en la máquina virtual.
Gracias a la tecnología de introspección, no es necesario formar parte del entorno del malware para analizarlo: el comportamiento de los procesos a monitorizar se realizará fuera de la máquina virtual, desde el hipervisor. Además de eso, los malwares que utilizan técnicas de detección de depuradores no detectarán ningún depurador, porque el sistema de introspección sólo interactúa con la memoria de la máquina virtual y de ninguna manera se adjuntará a los procesos iniciados en la máquina. De manera similar, es posible engañar a un malware empleando técnicas de detección de espacio aislado.
Como resultado, no se puede negar que la aplicación de la introspección al análisis de malware es mucho mejor que las tecnologías tradicionales de análisis automatizado.
Analicemos algunos aspectos de la introspección de máquinas virtuales.
Arquitectura de la introspección
Tipos de hipervisores
Generalmente consideramos dos tipos de hipervisores:
- Hipervisor nativo: también conocido como hipervisor tipo 1 o «Bare Metal». Este tipo de hipervisor trabaja directamente en el hardware de la máquina para controlar y administrar máquinas virtuales. Ejemplos de hipervisores de tipo 1 incluyen Xen y KVM.
- Hipervisor alojado: también conocido como hipervisor tipo 2 o «alojado». Este tipo de hipervisor se ejecuta dentro de otro sistema operativo. Ejemplos de hipervisores de tipo 2 incluyen VMware y VirtualBox.
Fig1: Ejemplo de un hipervisor nativo y alojado
La siguiente ilustra cómo funciona la introspección en un hipervisor tipo 1. Las herramientas de introspección instaladas en el hipervisor permiten monitorear y controlar todo lo que sucede en la máquina virtual (actividad del sistema, red, aplicación, etc.).
2. Introspección en hipervisor nativo
Mapeo de memoria
En general, existen dos niveles de memoria: memoria virtual y memoria física de la máquina física. Pero hay tres niveles de memoria cuando hablamos de hipervisores: memoria virtual y memoria física de la máquina virtual, y memoria física de la máquina host. En este caso se abstrae la memoria virtual de la máquina host.
Tenga en cuenta que los hipervisores sólo asignan memoria a la máquina virtual. De forma predeterminada, los hipervisores no tienen conocimiento de lo que sucede en la memoria virtual de la máquina virtual. Para obtener esa información, es necesario instalar herramientas adicionales. A continuación se muestra un ejemplo simplificado de cómo compartir memoria con la máquina virtual.
Fig. 3. Ejemplo de los tres niveles de direccionamiento de memoria bajo hipervisor.
Uno de los objetivos de las herramientas de introspección es traducir las direcciones de memoria de la memoria virtual de la máquina virtual: primero, de la memoria virtual a la física de la máquina virtual, luego a la memoria física de la máquina host. Esto ayudará al hipervisor a acceder al área de memoria correcta durante la introspección.
Introspección en el análisis de malware
Hoy en día, las tecnologías tradicionales de análisis de malware ya no son eficaces a la hora de detectar los últimos ataques de malware. Pero gracias a los hipervisores, la supervisión del malware se puede realizar a nivel del kernel. También ofrece varias formas de crear compatibilidad con componentes de seguridad que bloquean técnicas de monitoreo como Kernel API Hooking (Patch Guard, por ejemplo, activará una pantalla azul de la muerte en Windows) si se han alterado componentes de bajo nivel. Además de eso, la introspección puede ayudar al usuario a abarcar el análisis de todo tipo de malware, incluidos los Rootkits.
Gracias a la memoria que asigna el hipervisor a las diferentes máquinas virtuales, es posible que accedamos a ella desde el hipervisor para obtener la información que nos interesa. Esto se puede hacer de diferentes maneras:
Monitoreo a través de puntos de interrupción
La idea es colocar puntos de interrupción (a menudo utilizados en ingeniería inversa) en las API que queremos monitorear en la máquina virtual durante la inicialización del sistema de introspección. Hacemos esto mientras mantenemos una tabla de búsqueda de compensaciones de puntos de interrupción y bytes modificados. Después de la instalación y el lanzamiento del sistema de introspección, el malware que llama a las API en las que hemos colocado puntos de interrupción se interrumpirá y se enviará una notificación al hipervisor que nos permitirá encontrar qué ejecutable ha alcanzado el punto de interrupción.
Una vez recuperada la información deseada (la función, sus argumentos), continuamos la ejecución del malware (para no cambiar su comportamiento) hasta el siguiente punto de interrupción. Gracias a esta información podemos entender el comportamiento del malware analizado.
El uso de esta técnica por sí sola tiene dos debilidades. Primero, en los casos en que el malware realiza una suma de verificación sobre sí mismo para detectar si su código ha sido alterado. Si este es el caso (dado que los puntos de interrupción modifican el contenido), el malware puede dejar de ejecutarse y no revelar su comportamiento malicioso. En segundo lugar, en los casos en los que queremos monitorear las API del Kernel: es posible causar un BSOD en Windows, ya que Windows realiza una verificación de integridad de la parte del Kernel y puede fallar si se ha modificado.
Monitoreo a través de páginas de memoria
Con esta técnica no es necesario colocar puntos de interrupción y así alterar la memoria. La idea sería colocar un monitoreo con eventos de memoria en cada página de memoria ejecutable y calcular la dirección de las API que se desean monitorear. Cada vez que se accede a una región de la página marcada en ejecución, se recupera la información y se realiza una comparación con la dirección de la API monitoreada.
¡Conviértete en un ingeniero inverso certificado!
Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender
Esta técnica resuelve el problema de alterar la memoria con puntos de interrupción pero crea otro. La monitorización de cada página ejecutable resultaría costosa en términos de recursos y provocaría una ralentización considerable de la máquina virtual. No olvidemos que la máquina virtual no tendrá muchos recursos con los que trabajar, sobre todo si queremos automatizar el análisis en varias máquinas virtuales en paralelo.