Técnica Anti-VM con MSAcpi_ThermalZoneTemperature

Hoy en día es extremadamente fácil escribir muestras de malware utilizando técnicas anti-VM diseñadas para detectar entornos virtuales o de sandboxing. Como estamos en verano y en plena ola de calor (al menos por estos lares), qué mejor manera que ver un técnica que se basa en comprobar si el sistema nos devuelve la temperatura del procesador...

Se trata una de las técnicas más comunes, que es usar WMI para consultar la clase Win32_BIOS para interactuar con los atributos de la máquina física. Concretamente la clase WMI Win32_TemperatureProbe representa las propiedades de un sensor de temperatura (termómetro electrónico).

Con el siguiente comando obtendremos la temperatura en décimas de grados Kelvin (si queremos grados centígrados simplemente /10 - 273) :

wmic /namespace:\\root\WMI path MSAcpi_ThermalZoneTemperature get CurrentTemperature


Y con la siguiente función/implementación en Powershell de Ialle Teizeira (@teixeira0xfffff) obtendremos el mismo resultado:
function Get-AntiVMwithTemperature {
    $t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi"

    $valorTempKelvin = $t.CurrentTemperature / 10
    $valorTempCelsius = $valorTempKelvin - 273.15

    $valorTempFahrenheit = (9/5) * $valorTempCelsius + 32

    return $valorTempCelsius.ToString() + " C : " + $valorTempFahrenheit.ToString() + " F : " + $valorTempKelvin + "K"  
}
#resource https://medium.com/@DebugActiveProcess


Pero veamos qué ocurre si ejecutamos lo mismo en una VM:


Como veis la función no es soportada en procesadores virtuales, así que es relativamente fácil evadir una sandbox usando simplemente esto. Buena cuenta de ello nos dio hace unos años Cisco Talos al analizar GravityRAT:


Y no es el único, por ejemplo el troyano OopsIE usado por el actor OilRig también lo implementa y dada la facilidad de incluir este tipo de comprobaciones seguramente un buen número de muestras más...

¿Solución para una sandbox? Pues en una VM evitarlo se me antoja interesante, pero por ahora correr el malware en bare metal y mostrar que la CPU está "calentita" es la opción más plausible.


Fuente: Anti-VM Technique with MSAcpi_ThermalZoneTemperature

Comentarios

  1. Los kelvins NO son grados; son kelvins (a secas). Los celsius y los fahrenheit sí que son grados. ;-)

    ResponderEliminar

Publicar un comentario