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, generalmente 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 su intención maliciosa cuando se analiza. Para poder hacerlo, el malware debe detectar que se está ejecutando dentro de una máquina virtual. Para esto, existen varios métodos de detección que discutiremos más 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 máquinas virtuales.

Sistemas virtuales – seguridad real. | G DATA

Métodos de detección de VM

Un enfoque sencillo es utilizar la instrucción CPUID. Cuando se utiliza 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 , se trata de «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 “Intel (R) Core (TM) i7-6700 CPU @ 3.40GHz”. Pero, por ejemplo, en el caso del emulador Qemu , este devuelve “QEMU Virtual CPU”. 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 CPU físicas sino en 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, las claves de registro obvias como HKEY_LOCAL_MACHINE \ HARDWARE \ ACPI \ DSDT \ VBOX__ se pueden buscar usando la función RegOpenKey (), que indicaría la presencia de una VM VirtualBox como se puede ver en el siguiente ejemplo de código. Si la clave existe en el sistema, se detectará la máquina virtual.

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 utilizaba este método [1]. También se pueden utilizar muchas más consultas para comprobar si hay artefactos del sistema que indiquen la presencia de un hipervisor.

Prevalencia actual de detección de VM

Con esto en mente, intentamos analizar la prevalencia de 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 causan salidas de VM . Una salida de VM es el cruce de 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 solo el hipervisor puede recuperar, por lo tanto, solo 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 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 solo 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, encontramos 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 usa para verificaciones de compatibilidad, es difícil detectar si realmente se usó para detectar una VM si todos los demás programas benignos también lo usan. Por lo tanto, es muy plausible que una cantidad mucho mayor de muestras utilizara realmente 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 máquinas virtuales, es muy probable que la detección de máquinas virtuales siga siendo bastante común para el malware actual. Muchas comprobaciones podrían pasar desapercibidas en los sistemas de análisis típicos. A menudo, estas verificaciones son similares a las de un instalador de software benigno, como simplemente verificar las capacidades del hardware del sistema. ¿Cuántos núcleos de CPU hay disponibles? ¿Cuánta memoria del sistema está instalada? ¿Qué tamaño tiene el disco duro principal? Si esas comprobaciones devuelven valores inferiores a los típicos de un sistema físico, la probabilidad 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 se pueda distinguir de un sistema no virtual. Para lograr esto, un sistema virtual tendría que alterar los valores de retorno de los controles que de otro modo revelarían su verdadera naturaleza. Esto podría hacerse, por ejemplo, utilizando VMI porque puede interceptar todas las funciones de retorno. También puede distinguir entre los procesos que utilizan los métodos que deben cambiarse. Por lo tanto, solo 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 un disco duro de 2 TB instalado, aunque en realidad solo tiene 20 GB disponibles.

Un buen enfoque para estudios posteriores sería analizar si un sistema reforzado aumenta la cantidad de malware detectado. La comparación de 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 usar un sistema realmente físico en lugar de un sistema reforzado para recopilar resultados que son aún más confiables. Lindorfer y col. [2] probó un enfoque similar en 2011.

También se debe estudiar más a fondo el potencial de VMI para fortalecer las máquinas virtuales contra la detección. Algunas verificaciones 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 simples, por ejemplo, que utilizan la instrucción CPUID, son populares y podrían contrarrestarse eficazmente. VMI es una técnica que podría ser una gran ventaja en la lucha contra el malware consciente del medio ambiente.

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

Referencias

[1] Andrea Fortuna. “Técnicas de detección de máquinas virtuales de malware en evolución: un análisis de GravityRAT  . 2018.

[2] Martina Lindorfer, Clemens Kolbitsch y Paolo Milani Comparetti. «Detección de software malicioso sensible al medio ambiente». En: Taller Internacional sobre Avances Recientes en Detección de Intrusos . Saltador. 2011, págs. 338-357.

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

Blog G DATA