AntiVM: sensor de temperatura

El sensor que mide la temperatura actual de una máquina es también una buena manera para saber si un programa está ejecutándose en un entorno virtualizado, algo normalmente útil para un código malicioso porque será indicativo de que probablemente esté siendo analizado en una sandbox. En un entorno no virtualizado la función devuelve una salida válida como: "25.05C: 77.09F: 298.2K". Pero para un entorno totalmente virtualizado lo que devuelve es "MSAcpi_ThermalZoneTemperature not supported" porque esta función no es compatible con procesadores virtualizados. 

Pero para decepción de los autores de malware este método no siempre es válido: no todas las máquinas con Windows lo admitirán debido a la incompatibilidad con algunos sensores térmicos. Es una función de BIOS. A veces, el fabricante del BIOS proporciona DLLs a las que se puede hacer referencia para llamar a la función requerida y devolver el detalle, pero muchas otras veces no existe ese soporte del fabricante y simplemente no es posible obtener la temperatura en una máquina física tampoco. En cualquier caso no deja de ser una técnica anti-VM bastante importante: 

Powershell

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"  
}

Referencia: https://gist.github.com/teixeira0xfffff/36293713c254c69a7ba2353e8d64afce#file-msacpi_thermalzonetemperature-ps1 

Yara

rule Detect_AntiVMWithTemperature {
    meta:
        description = "Rue to detect AntiVMwithTemperature technique"
        author = "Thibault Seret"
        date = "2020-09-26"
    strings:
        $s1 = {72 6f 6f 74 5c 57 4d 49}
        // root\WMI
        $s2 = {53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 4d 53 41 63 70 69 5f 54 68 65 72 6d 61 6c 5a 6f 6e 65 54 65 6d 70 65 72 61 74 75 72 65}
        // SELECT * FROM MSAcpi_ThermalZoneTemperature
        $s3 = {43 75 72 72 65 6e 74 54 65 6d 70 65 72 61 74 75 72 65}
        //  CurrentTemperature
    
    condition:
    all of them

Recursos adicionales: 

Fuente: https://search.unprotect.it/map/sandbox-evasion/temperature-sensor/

Comentarios