Sponsored by Hudson Rock Use Hudson Rock's free cybercrime intelligence tools to learn how Infostealer infections are leading to ransomware attacks

Enjoying ransomware.live? Help us keep tracking ransomware gangs and shipping new features. Support us

YARA Rule: payload2.yar

Group: Payload
Valid Rule

rule payload_ransomware
{
    meta:
        description      = "Payload ESXi Ransomware"
        author           = "Abdullah Islam @0x3oBAD"
        date             = "2026-04-07"
        md5              = "f91cbdd91e2daab31b715ce3501f5ea0"
        sha256           = "bed8d1752a12e5681412efbb8283910857f7c5c431c2d73f9bbc5b379047a316"
        malware_family   = "Payload Ransomware"
        target_platform  = "Linux / VMware ESXi"
        detection_phases = "pre-install dropper, execution, lateral-movement artifact"

    strings:
        $curve25519_clamp = { C0 ?? F8 ?? ?? ?? ?? 40 }
        $chacha20_const   = "expand 32-byte k" ascii

        $proc_status      = "/proc/self/status" ascii
        $tracer_field     = "TracerPid:" ascii
        $proc_exe         = "/proc/self/exe" ascii

        $esxi_note        = "/usr/lib/vmware/hostd/docroot/ui/welcome.txt" ascii
        $urandom          = "/dev/urandom" ascii

        $vim_cmd          = "vim-cmd vmsvc/power.off %d > /dev/null 2>&1" ascii
        $esxi_inventory   = "/etc/vmware/hostd/vmInventory.xml" ascii
        $xpath_query      = "//ConfigEntry" ascii
        $vmx_field        = "vmxCfgPath" ascii

        $ext              = ".xx0001" ascii nocase
        $footer_magic     = { 70 61 79 6C 6F 61 64 00 }

        $thread_name      = "FBIthread-pool-%d" ascii
        $thpool_init_oom  = "thpool_init(): Could not allocate memory for thread pool" ascii
        $thpool_job_oom   = "thpool_add_work(): Could not allocate memory for new job" ascii
        $thpool_sigusr    = "thread_do(): cannot handle SIGUSR1" ascii
        $bsem_err         = "bsem_init(): Binary semaphore can take only values 1 or 0" ascii

        $pubkey_1         = "TnJqU2F5RFFYREpPTURkUGx5Q3NMem0yNlZKM0s1aks=" ascii
        $pubkey_2         = "Pmep+UUmeFwxxUO+P03HA558P3ZPZWN8bCK4XzNXtXU=" ascii
        $pubkey_head      = "W2M6q8YwDKCcSvBj7YRjVNtSI/PO22G+" ascii

        $key_err_1        = "[!] invalid key size" ascii
        $key_err_2        = "[!] base64 pubkey decode failed" ascii

        $libxml2          = "libxml2.so.2" ascii
        $b64_alpha        = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ascii

        $segment_loop_5   = { B? 05 00 00 00 [0-16] 3? 05 }
        $flock_lockex     = { B? 02 00 00 00 [0-8] E8 ?? ?? ?? ?? }

    condition:
        uint32(0) == 0x464C457F
        and uint8(4)  == 2
        and uint8(5)  == 1
        and uint16(0x12) == 0x3E

        and (
            (
                filesize == 39904
                and all of ($pubkey_1, $pubkey_2, $pubkey_head)
            )
            or (
                $proc_status
                and $tracer_field
                and $proc_exe
                and (
                    any of ($pubkey_1, $pubkey_2, $pubkey_head)
                    or ($key_err_1 and $key_err_2)
                )
                and 1 of ($chacha20_const, $curve25519_clamp, $b64_alpha)
            )
            or (
                $vim_cmd
                and $esxi_inventory
                and $xpath_query
                and (
                    $esxi_note
                    or ($thpool_init_oom and $thread_name)
                    or ($flock_lockex and $ext)
                )
                and (
                    #esxi_note + #vmx_field + #xpath_query + #ext
                    + #thread_name + #thpool_init_oom + #thpool_job_oom
                    + #thpool_sigusr + #bsem_err + #key_err_1
                    + #key_err_2 + #proc_exe + #urandom + #libxml2 >= 5
                )
            )
            or (
                $chacha20_const
                and $curve25519_clamp
                and $urandom
                and 2 of ($vim_cmd, $esxi_inventory, $thread_name, $xpath_query)
            )
            or (
                $segment_loop_5
                and $flock_lockex
                and $footer_magic
                and 1 of ($esxi_inventory, $vim_cmd, $ext)
            )
            or (
                $footer_magic at (filesize - 56 + 24)
            )
        )
}