Técnicas: Uso Actual de Métodos de Detección de Máquinas Virtuales

febrero 27, 2024
G DATA Blog

 

Técnicas: Uso Actual de Métodos de Detección de Máquinas Virtuales

Un enfoque común para analizar software potencialmente malicioso es el análisis dinámico en una máquina virtual. Por lo tanto, los autores de malware utilizan técnicas para alterar el comportamiento del malware cuando se ejecuta en una máquina virtual. ¿Pero cómo lo hacen realmente?

Un enfoque común para analizar software potencialmente malicioso es el análisis dinámico. El binario se ejecuta en un entorno de análisis, normalmente una Máquina Virtual (VM), y se inspecciona su comportamiento en el sistema.

Los desarrolladores de malware son conscientes de esto e intentan impedirlo ocultando sus intenciones maliciosas cuando son analizados. Para poder hacerlo, el malware necesita detectar que se está ejecutando dentro de una VM. Para ello, existen varios métodos de detección que analizaremos más a fondo en esta publicación de blog. Teniendo esto en cuenta, también realizamos un análisis de 50.000 muestras de malware sobre el uso de métodos de detección de VM.

Métodos de Detección de Máquinas Virtuales

Un método sencillo es utilizar la instrucción CPUID. Cuando se usa con el valor de entrada 0x0, devuelve la cadena de identificación del fabricante de la CPU. En el caso de una máquina virtual Xen , esto es “XenVMMXenVMM”. De manera similar, cuando se usa con los valores de entrada 0x80000002, 0x80000003 y 0x80000004, devuelve la cadena de marca de la CPU, que generalmente es algo así como “CPU Intel(R) Core(TM) i7-6700 a 3,40 GHz”. Pero, por ejemplo, en el caso del emulador Qemu , esto devuelve “CPU virtual QEMU”. Además, el valor de entrada 0x40000000 se puede utilizar de la misma manera. Curiosamente, este valor de entrada específico no se implementa en las CPU físicas sino en las virtuales. Aquí también devuelve la cadena de marca de la CPU que luego se puede verificar fácilmente.

Además de este y muchos más métodos de bajo nivel, se pueden utilizar métodos de alto nivel que utilizan la API de Windows. Por ejemplo, se pueden buscar claves de registro obvias como HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT\VBOX__ usando la función RegOpenKey(), lo que indicaría la presencia de una máquina virtual VirtualBox , como se puede ver en el siguiente ejemplo de código. Si la clave existe en el sistema, se detectará la VM.

Otra tendencia es utilizar clases de Instrumental de administración de Windows (WMI) para recuperar información sobre el sistema. La consulta SELECT * FROM MSAcpi_ThermalZoneTemperature con la propiedad CurrentTemperature se puede utilizar para identificar una máquina virtual. En un sistema físico, esto devuelve información sobre la temperatura de sus componentes de hardware. Si esta propiedad no es compatible, la verificación probablemente se ejecutó en una máquina virtual, porque una VM no tiene ningún hardware del cual se pueda medir la temperatura. Fortuna observó recientemente que el troyano de acceso remoto GravityRAT utiliza este método [1]. También se pueden utilizar muchas más consultas para comprobar si hay artefactos en el sistema que indiquen la presencia de un hipervisor.

Prevalencia Actual de Detección de VM

Con esto en mente, intentamos analizar la prevalencia de la detección de VM en el malware actual. Utilizamos una técnica llamada Introspección de Máquina Virtual (VMI). Permite rastrear el uso de llamadas a la API de Windows y llamadas al sistema. Con este método, también buscamos ciertas instrucciones que provoquen salidas de VM . Una salida de VM es el recorrido desde la VM al hipervisor. Esto ocurre si la VM intenta ejecutar una instrucción que necesita privilegios elevados. Un ejemplo de esto es CPUID. Necesita información sobre la CPU que sólo el hipervisor puede recuperar, por lo que sólo este último puede manejar esta instrucción. A medida que nuestro análisis se realiza en el hipervisor, estas instrucciones se pueden analizar.

Inspeccionamos 50.000 muestras aleatorias a principios de julio de 2019. Descubrimos que al menos el 2,77 % de los archivos binarios analizados utilizaban al menos un método que indica claramente el uso de la detección de VM. El método más utilizado fue utilizar la instrucción CPUID con la entrada 0x40000000.

A primera vista esto no parece mucho, pero cabe destacar que sólo pudimos detectar el uso de determinadas funciones con sus respectivos valores de entrada, pero no si esa era la intención real del malware. Por ejemplo, descubrimos que casi todas las muestras usaban la instrucción CPUID con valores de entrada 0x0 y 0x1. Ambas variantes recuperan información general sobre la CPU y son métodos válidos para la detección de VM. Sin embargo, debido a que un compilador probablemente los use para comprobaciones de compatibilidad, es difícil detectar si realmente se usó para detectar una VM si todos los demás programas benignos también los usan. Por lo tanto, es muy posible que una cantidad mucho mayor de muestras estuviera utilizando la detección de máquinas virtuales.

Teniendo esto en cuenta, dado que un mínimo del 2,77 % de las muestras utilizan descaradamente métodos de detección de VM, existe una buena posibilidad de que la detección de VM siga siendo bastante común para el malware actual. Muchas comprobaciones podrían pasar desapercibidas para los sistemas de análisis típicos. A menudo, estas comprobaciones son similares a las de un instalador de software benigno, como simplemente comprobar las capacidades del hardware del sistema. ¿Cuántos núcleos de CPU hay disponibles? ¿Cuánta memoria del sistema está instalada? ¿Qué tamaño es el disco duro principal? Si esas comprobaciones devuelven valores inferiores a los típicos de un sistema físico, la posibilidad de que se ejecuten en una máquina virtual es alta. Con métodos como estos, es difícil detectar el malware antes de que detecte el análisis y se oculte del análisis dinámico.

Posibles Contramedidas y Trabajo Futuro

Un método para contrarrestar la detección de VM es desarrollar un sistema de análisis que no pueda distinguirse de un sistema no virtual. Para lograr esto, un sistema virtual tendría que alterar los valores de retorno para realizar controles que, de otro modo, revelarían su verdadera naturaleza. Esto podría hacerse, por ejemplo, utilizando VMI porque puede interceptar todas las funciones que regresan. También puede distinguir entre los procesos que utilizan los métodos que deben cambiarse. Por lo tanto, sólo la muestra analizada se vería afectada y no se producirían problemas con el sistema operativo debido a información falsa sobre el sistema. Por ejemplo, el sistema de análisis podría devolver que hay instalado un disco duro de 2 TB, aunque en realidad sólo tenga 20 GB disponibles.

Un buen enfoque para estudios adicionales sería analizar si un sistema reforzado aumenta la cantidad de malware detectado. Comparar los resultados de un conjunto de pruebas de muestras de este sistema con los resultados de un sistema no reforzado podría brindar más información sobre la prevalencia real de la detección de VM. Idealmente, se podría utilizar un sistema realmente físico en lugar de un sistema reforzado para obtener resultados que sean aún más confiables. Lindorfer et al. [2] probó un enfoque similar en 2011.

También se debe analizar más a fondo el potencial de VMI para proteger las máquinas virtuales contra la detección. Algunas comprobaciones siempre pueden ser imposibles de falsificar, como las diferencias de tiempo entre un sistema virtual y uno no virtual. No obstante, descubrimos que las comprobaciones sencillas, por ejemplo utilizando la instrucción CPUID, son populares y podrían contrarrestarse de forma eficaz. VMI es una técnica que podría suponer una gran ventaja en la lucha contra el malware consciente del entorno.

Con todo, descubrimos que existen varias técnicas para detectar un entorno virtual. Los que son más notorios se utilizan actualmente hasta cierto punto. Los más discretos podrían usarse aún más. El impacto de esto aún no está claro. Esto deja espacio para mucha más investigación. Esto es especialmente interesante en lo que respecta al creciente mercado de la computación en la nube. Cada vez se virtualizan más sistemas, incluso estaciones de trabajo. ¿Disminuirá el uso de la detección de VM en malware para no perder posibles víctimas?
También se puede contactar a Phillip a través de su cuenta personal de Twitter .

Referencias

[1] Andrea Fortuna. “Evolución de las técnicas de detección de malware VM: un análisis de GravityRAT ” . 2018.

https://www.andreafortuna.org/2018/05/21/malware-vm-detection-techniques-evolving-an-analysis-of-gravityrat/

[2] Martina Lindorfer, Clemens Kolbitsch y Paolo Milani Comparetti. «Detección de malware sensible al entorno». En: Taller internacional sobre avances recientes en la detección de intrusiones . Saltador. 2011, págs. 338-357.

https://publik.tuwien.ac.at/files/publik_273621.pdf

Enlace: https://www.gdatasoftware.com/blog/2020/05/36068-current-use-of-virtual-machine-detection-methods Blog de G DATA Phillip Kemkes