Vasilek Backdoor Hidden in VMware Tools (Partisan Zmiy / Cyber Partisans)

About two years of access to a Russian medical organization, held through a service that impersonates VMware and a Telegram-controlled backdoor · espionage and trusted-relationship access, no destructive action observed · single originating source
Threat
Vasilek backdoor and loader-scheduler (Partisan Zmiy, Cyber Partisans)
Severity
HIGH
Type
Nation-state style espionage / living in trusted software
Access
Entry vector not established; legitimate RDP and SMB command execution for movement
Dwell
Early 2024 to December 2025 (about two years)
Version
v0.1 · 2026-10-25
Author
HuntPack
Confidence
High on behavior, medium on atomic indicators (single originating source)
01

Executive Summary

Attacker objective. Solar 4RAYS reports that the Belarus-aligned group it tracks as Partisan Zmiy, also known as the Cyber Partisans, held access to a Russian medical organization for about two years (earliest traces in early 2024, discovered December 2025) without any destructive action [1][2]. Solar assesses the access was kept for espionage and for trusted-relationship attacks against the organization's subsidiary medical institutions, and notes the actors reached domain controllers and central management systems [1][4]. The entry vector was not established [3].

What the intrusion looks like on a host. The actors used a trusted but unused VMware Tools installation as a hiding place. A new custom loader-scheduler, authd.exe, runs as the Windows service vmauad (display name VMware Auth Adapter) and launches other tools from fixed paths on a cron-style schedule: a GOST tunnel every Saturday 22:00 to 23:00, and, once, 480 minutes after the service starts, the Vasilek backdoor (internal version 1.5.8) and a second GOST [1]. Shortly before discovery the genuine vmtools.dll was replaced with an unsigned library and the original kept as vmtoolsd.dll [1]. Vasilek takes commands from, and returns results to, a Telegram group through the public Bot API; DNS tunnels (DNSCat2 and PartisanDNS) and a GOST plus 3proxy chain gave the actors fallback channels [1].

Highest-value defensive angle. Behavior beats indicators here: the actors rotated different tools through the same paths, bind payloads to the host name, and run on a delayed or nightly schedule. The cheapest durable detections are an Authenticode check on every executable in the VMware Tools folder (Solar says this alone would have exposed the loader, GOST and Vasilek binaries and the swapped library), the five masquerading service names, children of the loader, and a Telegram Bot API lookup from a server or an unsigned binary. Atomic indicators (twelve file hashes, nine network domains, nineteen generated domains, three IPs) all trace to Solar's appendix and ship as detect only.

Defender priority. Run Q1, Q2 and Q8 today on every Windows host and server that has VMware Tools or any unused virtualization software installed, and on domain controllers regardless. Solar's own conclusion is that Vasilek on a host almost always means a multi-tool intrusion: also hunt DNS tunnels, proxy chains, lateral movement tools and delayed destructive payloads, because this group is otherwise known for wipers [1].

Scope note. Solar's report mentions the Pryanik wiper, the Evlx event-log clearer, a FortiClient VPN decoy installer and an unrelated phishing malware named HypeAgent in other activity [2]. Those are background only; none of their indicators are in this pack.

02

Source Review & Web Hunter Notes

#SourceTierWhat it contributedCarry forward
1Solar 4RAYS: Partisan Zmiy: снова на радаре (Russian language, page date 02.10.2026)T1Primary report. Services, file paths, loader behavior and configuration, schedule, Vasilek command table, MITRE matrix, and the IOC appendices (all hashes, domains, IPs). Translated by the analyst from Russian; every indicator copied from the saved snapshotyes
2The Hacker News: Hackers Hid Vasilek Backdoor in VMware Tools During 2-Year Russian Healthcare Intrusion (2026-10-21)T2English summary of the Solar report; corroborates loader, schedule, version 1.5.8, move_cursor, and names other tools of the group as backgroundpartial
3Cyber Security News: Hackers Hide Vasilek Backdoor Inside VMware Tools (2026-10-07)T2Reprints Solar's indicator appendix and notes that Solar's narrative and appendix disagree on what vmtools.dll loads. States the entry vector was not establishedpartial
4Cyberpress: Partisan Zmiy Hackers Use Telegram-Controlled Vasilek Backdoor to Spy on Healthcare Networks (2026-10-07)T2Corroborates incident background (antivirus alerts for Vasilek and GOST, domain controller access, no destructive action)partial
5Kaspersky ICS CERT: TTPs of Cyber Partisans activity aimed at espionage and disruption (2025-06-05)T1Background only: first public description of Vasilek (Telegram group control, token impersonation loader). No indicator from this page is usedbackground
-SC Media brief (scworld.com)T2Fetch returned HTTP 403 (a bot-challenge page) on two attempts and the page was not retrievable; not cited and nothing depends on itno

Web hunter decisions and discrepancies

  • Publication date. The Solar page itself shows 02.10.2026 and Cyber Security News and Cyberpress covered it on 7 October 2026; The Hacker News ran its summary on 21 October 2026. Reports dated "20 or 21 October" reflect the later press coverage, not the Solar publication date.
  • Corroboration is thin. Sources 2 to 4 all derive from Solar and source 3 reprints its appendix, so the indicators have one originating source. That is why nothing ships at prevent or critical severity (Section 10).
  • Solar contradicts itself on vmtools.dll. The narrative says the replaced library is the Vasilek backdoor; the appendix labels the same hash as loading PartisanDNS. Both are preserved [1][3]. Hunt the file by path and signature, not by assumed payload.
  • The same path hosted different tools. rpctool32.exe appears with two hashes (3proxy and Vasilek) and msadcs32.dll with two PartisanDNS hashes, so a hash alone is not a complete test for a path [1].
  • Solar's ATT&CK label T1574.004 is named "Dylib Hijacking" in the matrix, which is a macOS-oriented technique; for a Windows DLL swap T1574.001 or T1574.002 may fit better. The pack carries Solar's ID and flags this as analyst inference.
  • Excluded as not part of this intrusion: four earlier-known domains Solar lists only for comparison (each differs by one leading character from an incident domain) and the other-campaign tools named in the scope note in Section 1.
03

Hunt Brief & Attack Chain

Hunt hypotheses (ordered by fidelity)

  1. H1, high. A service named vmauad (or one of four System32 DLL services) exists and runs a binary from the VMware Tools folder or System32 with an odd display name. Techniques T1543.003, T1036.004. Queries Q1, Q2.
  2. H2, high. Unsigned executables with the names authd, vmtoolsd32 or rpctool32 run from the VMware Tools folder, or WsusService.exe runs from UpdateServicesPackages. T1036.005. Q2, Q4.
  3. H3, high. The loader or the masquerade tools spawn children: a shell, a tunnel, a proxy. T1059.003, T1090. Q8.
  4. H4, medium. Files are written into the VMware Tools folder by something other than the installer, including the vmtools.dll swap and Vasilek self-update files. T1574.004 (as labelled by Solar), T1105. Q3.
  5. H5, high. Hosts resolve the published C2 and PartisanDNS domains; non-browser processes query the Telegram Bot API. T1071.004, T1568.002, T1102.002. Q5, Q6, Q7.
  6. H6, medium. Earlier lateral movement used WMI remote execution with output to ADMIN$, and the AppMgmt service parameters were temporarily swapped. T1047, T1021.002, T1569.002. Q9, Q10.

Attack chain

StepBehavior (source)Telemetry in plain termsHunt angle
1 AccessEntry vector not established; legitimate RDP and SMB command execution used inside the network [1][3]Logon events with logon type (CrowdStrike: UserLogon. SentinelOne: Login. Defender: DeviceLogonEvents)Not queried: unscoped, high volume. See Section 7
2 Remote executionImpacket wmiexec style: cmd.exe with output to \\127.0.0.1\ADMIN$\__<ts>.<us>, earliest 2024 trace [1]Process creation with command line, path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Q9
3 Service swapAppMgmt service parameters temporarily overwritten to run a payload, then restored [1]Registry value set, autostart (CrowdStrike: AsepValueUpdate, RegGenericValueUpdate. SentinelOne: Registry Value Modified. Defender: DeviceRegistryEvents)Q10
4 PersistenceFive services: vmauad, tpvmmon, aweman32, msadcs32, uplay_r164; System log event 7045 [1]Service created (CrowdStrike: CreateService. SentinelOne: see Section 7. Defender: confirm the service-installed action in DeviceEvents)Q1, Section 7
5 Hijackvmtools.dll replaced by an unsigned DLL, original kept as vmtoolsd.dll (December 2025) [1]Executable or file written (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents)Q3, Q4. Module load of the DLL is a gap (see Section 15)
6 Loader startvmauad runs authd.exe; optional host-name SHA-256 check (token was empty in the sample); three scheduled tasks [1]Process creation with command line, path and parentQ2, Q8
7 TunnelGOST (vmtoolsd32.exe) Saturday 22:00 to 23:00, second GOST (WsusService.exe) and 3proxy; gost.yml configuration [1]Process creation; outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)Q2, Q8, Q4
8 Backdoorrpctool32.exe (Vasilek 1.5.8) once at service start plus 480 minutes; commands include shell, file transfer, screenshots, keylogger, runas elevation, mute, self-update, self-delete [1]Process creation with parent; DNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse)Q8, Q7
9 C2 and exfilTelegram Bot API (api.telegram.org); backup DNS tunnels to listed domains and generated domains; proxy settings inherited [1]DNS lookup; outbound network connectionQ5, Q6, Q7
10 Anti-forensicsTimestomping to VMware Tools dates, file rotation across paths, outgoing-message mute, self-delete [1]No dedicated telemetry for timestamps (gap); file writes and process creation partly coverQ3, Q8; timestamp gap
04

Consolidated IOC Table

All values below were read from the saved Solar snapshot (source 1) and re-checked against the Cyber Security News reprint (source 3). Domains are shown defanged. Importable rows are in Section 10; every one is detect except the two Cloudflare IPs (no_action), and nothing ships at prevent or critical severity because the originating source is single. A hash on a path that Solar says hosted several tools is reliable for that sample only.

File hashes (SHA256)

TypeValueConfidenceActionContext
sha256cc8c707bf49c0cdb79b806d41df6254efc0e9f566a02d223871550f414469d13mediumdetectmsadcs32.dll (System32): PartisanDNS
sha256e5c6b6d37ff168def37dfd86c636e512be3ed7ead9a2dc93d5c741c42b47c1f1mediumdetecttpvmmon.dll and omega.dll (System32): DNSCat2 packed with UPX
sha25607381d79670129277211a4373e5518799a54b427946602539463ec2dd9cdb5e7mediumdetectaweman32.dll (System32): DNSCat2 packed with UPX
sha2564f0e23a83d83d901c76353d8b9b6ee2940eb63d531ad15f736193903b5c7c8c3mediumdetectmsadcs32.dll and msadcs32.bak (System32): PartisanDNS
sha2568c37c4b1f168219a1ce495c9822730981b20ff03d937ddcd8795fca14a9b7869mediumdetectuplay_r164.dll (System32): DNSCat2 packed with UPX
sha2565bc4fa9916c0883d45cb85639e328ed484dc75f4dfda294eb52f4b8b612889f2mediumdetectVMware Tools\authd.exe: custom loader-scheduler (service vmauad)
sha256c499fab59acbb1750e1e0e5a3c51d119ccd6374e5f0b45639f29598720222766mediumdetectVMware Tools\rpctool32.exe: 3proxy
sha25687e713f9b6ae14d97d3fa4d1a882c029e7e963d844d9c93ea383cab3d46a949cmediumdetectVMware Tools\rpctool32.exe: Vasilek backdoor
sha256d7aedc020ce832334abf0d03986da31f41cb2191355f25b17989dcfa8bb2775bmediumdetectVMware Tools\vmtoolsd32.exe: GOST tunnel
sha256e55431d6f15aa78ada3f60ed30a3f32b444b952bdc53a652546c1820f8bfa513mediumdetectC:\Windows\fstab.exe: PartisanDNS
sha2565076286c26f2a5c7dd7f507365fe404db2b05d39b350c463faa053baa37b3742mediumdetectE:\WSUS\UpdateServicesPackages\WsusService.exe: GOST tunnel (deleted before analysis)
sha256125ead2c3b1d0f7aee03d13b927744ec8dc1d046912ce73efc9c5a10243b99dcmediumdetectVMware Tools\vmtools.dll: substituted library that loads PartisanDNS per Solar appendix

Domains

TypeValueConfidenceActionContext
domainc0ce[.]orgmediumdetectNamed by Solar as C2 for the incident DNSCat2 tunnels, or reused infrastructure (gov-by[.]com)
domainp7cp[.]orgmediumdetectNamed by Solar as C2 for the incident DNSCat2 tunnels, or reused infrastructure (gov-by[.]com)
domainf91j[.]orgmediumdetectNamed by Solar as C2 for the incident DNSCat2 tunnels, or reused infrastructure (gov-by[.]com)
domainw3a01[.]netmediumdetectNamed by Solar as C2 for the incident DNSCat2 tunnels, or reused infrastructure (gov-by[.]com)
domaingov-by[.]commediumdetectNamed by Solar as C2 for the incident DNSCat2 tunnels, or reused infrastructure (gov-by[.]com)
domainokkgb[.]commediumdetectNetwork indicator listed by Solar with no role stated
domainc-oh[.]commediumdetectNetwork indicator listed by Solar with no role stated
domain89e[.]orgmediumdetectNetwork indicator listed by Solar with no role stated
domainparker-inc[.]commediumdetectNetwork indicator listed by Solar with no role stated
domain (generated)vpnosljjk[.]prolowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]toplowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]linklowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]cyoulowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]prolowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]melowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]mylowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]buzzlowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]infolowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]spacelowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]inlowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]sbslowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]worklowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]casalowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]lollowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]latlowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]netlowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]orglowdetectPartisanDNS generated-domain set
domain (generated)vfvnfaq[.]comlowdetectPartisanDNS generated-domain set

IP addresses

TypeValueConfidenceActionContext
ipv4172[.]67[.]210[.]25lowno_actionLabelled Cloudflare by Solar: shared CDN address, pivot only
ipv4104[.]21[.]34[.]242lowno_actionLabelled Cloudflare by Solar: shared CDN address, pivot only
ipv4199[.]59[.]243[.]228lowdetectLabelled Amazon by Solar; role not stated, may be reassigned

Host and behavioral indicators (not importable as atomic IOCs)

TypeValueContext
service namevmauad, tpvmmon, aweman32, msadcs32, uplay_r164Display names: VMware Auth Adapter, Windows Insiders Service, Windows Channels Service, Sybase Inc. Product File, Access FT Imager Service [1]
file pathC:\Program Files\VMware\VMware Tools\{authd.exe, vmtoolsd32.exe, rpctool32.exe, vmtools.dll, vmtoolsd.dll, gost.yml}Loader, GOST, Vasilek or 3proxy, swapped library, retained original, GOST configuration [1]
file pathE:\WSUS\UpdateServicesPackages\WsusService.exe, C:\Update\169\WSUSSCAN.exeGOST disguised as WSUS (deleted before analysis); unknown file known only by SHA1 c4e623ab0a15db0896bf8a68eb9b45ebe6ae2f28 [1]
file pathC:\Windows\System32\{tpvmmon, aweman32, msadcs32, uplay_r164}.dll, omega.dll, msadcs32.bak, C:\Windows\fstab.exeDNSCat2 and PartisanDNS carriers [1]
file namenew.bak, old-<timestamp>.bak, [HOSTNAME]-tun.yml, MySong.mp3Vasilek self-update, GOST config upload name, debug command artifact [1]
file patternC:\Windows\__<unix timestamp>.<microseconds>Residual wmiexec-style output file [1]
scheduleSaturday 22:00 to 23:00; +480 minutes once after service startLoader configuration [1]
telegramapi.telegram.org bot methods getUpdates, sendMessage, sendDocument, getFile, getChat, deleteMessage, answerCallbackQuery; recovered group chat id -1002113172843 (not visible in network telemetry)Vasilek C2 [1]
registryHKLM\SYSTEM\CurrentControlSet\Services\AppMgmt (Parameters subkey), Policies\System\ConsentPromptBehaviorAdmin readService swap; UAC check before runas [1]
05

Affected Surface & Telemetry Matrix

SurfaceTelemetry in plain termsPriorityGap
Windows servers and workstations with VMware Tools (VMs and hosts that carry an unused install)Process creation with command line, path and parent (CrowdStrike: ProcessRollup2, SyntheticProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); file written (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents)highAuthenticode population must be validated per tenant; module load of vmtools.dll is not queried
Windows service control managerService created (CrowdStrike: CreateService. SentinelOne: confirm the event name in your tenant. Defender: confirm the service-installed action in DeviceEvents); System log 7045 and Security 4697 as native sourceshighNative log is the authoritative record; Solar says 7045 survived file rotation
Domain controllers and central management serversSame process, service and registry telemetry; logon events (CrowdStrike: UserLogon. SentinelOne: Login. Defender: DeviceLogonEvents)highSolar states DC access was obtained; sensor coverage on DCs is the first thing to verify
DNS resolvers and egress proxyDNS lookup with requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); resolver and proxy logs for api.telegram.org and tunnel trafficmediumOutside endpoint telemetry: JA3 or JA4 of the embedded TLS stack and DNS tunnel volume analytics live on network sensors
RegistryRegistry value set, autostart (CrowdStrike: AsepValueUpdate, RegGenericValueUpdate. SentinelOne: Registry Value Modified. Defender: DeviceRegistryEvents)mediumKey last-write time ordering (Solar's AppMgmt clue) is a forensic check, not an event
Trusted-subsidiary linksAuthentication and remote-access logs on both sides of trust relationshipsmediumOutside endpoint telemetry; needs the partner organizations' cooperation
Screenshots, keylogging, clipboard, runas, cursor movementNo dedicated endpoint events for these Vasilek capabilitieslowNo mappable telemetry; covered only through the process and network behavior that surrounds them
06

ATT&CK Mapping

TacticTechniqueObserved behavior (Solar)Query or control
ExecutionT1047 WMIRemote command with output to ADMIN$Q9
ExecutionT1569.002 Service ExecutionPayload run by temporarily swapping AppMgmt parametersQ10
ExecutionT1059.003 Windows Command ShellVasilek commands c, ci, cl, cil, cr, resetQ8
ExecutionT1106 Native APICreateProcessA in loader, ShellExecuteA in VasilekNo telemetry (gap)
PersistenceT1543.003 Windows Servicetpvmmon, aweman32, msadcs32, uplay_r164, vmauadQ1, Q2
PersistenceT1574.004 as labelled by Solar (analyst note: T1574.001 or .002 may fit a DLL swap)vmtools.dll replaced; original kept as vmtoolsd.dllQ3, Q4; Hardening 2 and 4
Privilege escalationT1548.004 Elevated Execution with Promptcadmin and force_cadmin check ConsentPromptBehaviorAdmin and relaunch with runasPartial via Q8 and Q2
Defense evasionT1480.001 Environmental KeyingSHA-256 of host name in loader and VasilekNo detection (gap); explains sandbox silence
Defense evasionT1036.004 and T1036.005 MasqueradingService display names; tools named for VMware and WSUS componentsQ1, Q2, Q3
Defense evasionT1070.006 TimestompFile dates set to VMware Tools dates (2020)Gap; forensic timeline check in Section 7
Defense evasionT1070.004 File DeletionVasilek self-delete through cmd /c delQ8
Defense evasionT1027, T1027.002, T1140OLLVM obfuscation, UPX-packed DNSCat2, XOR and Vigenere string encryptionQ4 (hashes); static, no behavior query
Defense evasionT1112 Modify Registry; T1497.001 System ChecksAppMgmt parameter swap; working-set size checkQ10; none
DiscoveryT1082, T1016, T1010System report (v, vv), proxy settings, active window trackingNo telemetry (gap)
Lateral movementT1021.001 RDP; T1021.002 SMB and Admin SharesLegitimate RDP access; output collected through ADMIN$Section 7 native hunt; Q9
CollectionT1113 Screen Capture; T1056.001 Keyloggingscreenshot, ss, key_on, key_off, key_flushNo telemetry (gap)
Command and controlT1102.002 Bidirectional Web ServiceTelegram Bot API group chatQ7, Section 7
Command and controlT1071.004 DNS; T1568.002 DGAPartisanDNS and DNSCat2 over DNS; generated domainsQ5
Command and controlT1573.002 Encrypted Channel; T1090 Proxy; T1105 Ingress Tool TransferEmbedded TLS stack, GOST and 3proxy, wget and #UPLOADQ2, Q3, Q4, Q8; JA3 or JA4 outside endpoint telemetry
ExfiltrationT1041 Exfiltration Over C2dwl uploads files to the Telegram groupQ7
07

Native Audit-Log Hunts

7.1 Service creation (System log 7045 and Security 4697)

Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} |
  Where-Object { $_.Message -match 'vmauad|tpvmmon|aweman32|msadcs32|uplay_r164|VMware Auth Adapter|Windows Insiders Service|Windows Channels Service|Sybase Inc\. Product File|Access FT Imager Service' } |
  Select-Object TimeCreated, MachineName, Message

Solar says these creation events remained in the System log after the actors rotated files [1]. Run the same filter against forwarded logs for the longest retention you have.

7.2 Signature sweep of the VMware Tools folder (read-only)

Get-ChildItem 'C:\Program Files\VMware\VMware Tools' -Include *.exe,*.dll -Recurse -ErrorAction SilentlyContinue |
  ForEach-Object { $s = Get-AuthenticodeSignature $_.FullName
    [pscustomobject]@{ File=$_.FullName; Status=$s.Status; Signer=$s.SignerCertificate.Subject; Modified=$_.LastWriteTime; Created=$_.CreationTime } } |
  Where-Object { $_.Status -ne 'Valid' -or $_.Signer -notmatch 'VMware' }

Solar states that signature checking trusted-software folders would have exposed authd.exe, vmtoolsd32.exe, rpctool32.exe and the swapped vmtools.dll [1]. Also list vmtoolsd.dll and *.bak.

7.3 Services whose DLL or binary sits in System32 under an odd name

Get-CimInstance Win32_Service | Where-Object { $_.PathName -match 'VMware Tools\\authd|tpvmmon|aweman32|msadcs32|uplay_r164' } |
  Select-Object Name, DisplayName, PathName, StartMode, State
# Also inspect HKLM\SYSTEM\CurrentControlSet\Services\*\Parameters ServiceDll for unsigned DLLs

7.4 Timestomp and registry timeline checks

Compare file creation time with last-write time and with the installer date for VMware Tools files (Solar saw 29.05.2020 stamped on vmtoolsd32.exe) [1]. Compare the last-write time of HKLM\SYSTEM\CurrentControlSet\Services\AppMgmt with its Parameters subkey: a service key newer than its parameters is the pattern Solar used to infer the swap-and-restore [1].

7.5 SMB and WMI remote execution

Search the Microsoft-Windows-SMBServer/Security log for event ID 1015, which Solar says preserved traces of remote command execution [1]. Search for an empty C:\Windows\__<digits>.<digits> file, the leftover of wmiexec-style output.

7.6 Network, proxy and DNS

  • Resolver and proxy logs: lookups of api.telegram.org from servers and domain controllers; long-poll style requests (about 60 seconds) from non-browser user agents.
  • Solar notes the embedded TLS stack (TLSe with LibTomCrypt) makes the TLS ClientHello likely distinct from browsers and Windows components, so a JA3 or JA4 baseline can single it out [1]. No fingerprint value is published, so build your own from a known sample.
  • DNS analytics: high-volume lookups of one label across many suffixes (the vfvnfaq pattern) and tunnel-like TXT or long-label traffic.

7.7 Sysmon, if deployed

Event ID 7 (image loaded) for vmtools.dll with an invalid signature, event ID 1 for the masquerade process names, event ID 11 for file creation in the VMware Tools folder, and event ID 12 or 13 on the AppMgmt service key. Module load is the one stage the CQL queries below do not cover.

08

Hunt Queries: CrowdStrike CQL, SentinelOne PowerQuery and Defender XDR KQL

Show all queries in
Pick your tenant's cloud first: every "Open in Falcon" button below uses this selection.

Honest limits. authd.exe and vmtools.dll are also genuine VMware file names, so no query here trusts a name alone: each one adds an unsigned test, an installer-writer exclusion or a parent test, and carries an FP note. Module loads of the swapped DLL, screenshots, keylogging, the host-name check and timestomping have no query (Section 15). Two field notes: AuthenticodeHashData, ServiceDisplayName, ServiceImagePath and ContextBaseFileName should be confirmed on one real row in your tenant before you rely on a zero result. Backslashes in regex are written as \\ and no regex contains an unescaped forward slash.

Q1 · Services masquerading as VMware, Windows and vendor components (vmauad and the four System32 DLL services)
CONF HIGHFP LOWCOST LOW

Looks for: Solar found five malicious Windows services: vmauad (display name VMware Auth Adapter, running the loader authd.exe from the VMware Tools folder) and four services that run DLLs from System32 (tpvmmon, aweman32, msadcs32, uplay_r164). Solar notes the creation events survived in the System log (event ID 7045) even after the actors swapped files. This query matches the creation by the odd display names or by the image paths.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analyticProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A service created through an API that never writes the DisplayName or ImagePath values to the registry is not seen.
  • PowerQuery: Rows are registry writes, so a later edit of an existing service value matches as well as a new install.
  • PowerQuery assumes: A service install writes DisplayName and ImagePath values that surface as Registry Value Modified events.
  • PowerQuery assumes: Image paths are matched with a literal backslash separator, as Windows reports them.
  • PowerQuery assumes: Matching is case-insensitive, which reproduces the CQL /i intent.
  • KQL – Defender XDR: A service created through an API that never writes the DisplayName or ImagePath values to the registry is not seen.
  • KQL – Defender XDR assumes: A service install writes DisplayName and ImagePath values that surface as RegistryValueSet rows.
  • KQL – Defender XDR assumes: Image paths are matched with a literal backslash separator, as Windows reports them.
// HUNT: Service creation with a masquerading display name or the loader and DLL service paths
// MITRE: T1543.003, T1036.004
// CONF: high
// FP: low
// COST: low
// REQUIRES: CreateService (service installed) with service fields; ServiceDisplayName and ServiceImagePath are the standard field names but ⚠ validate in tenant against one real CreateService row
// FALSE POSITIVES: none expected for these exact display names and paths; a genuine product with an identical display name is the only collision
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=CreateService
| ServiceDisplayName=/^(VMware Auth Adapter|Windows Insiders Service|Windows Channels Service|Sybase Inc\. Product File|Access FT Imager Service)$/i or ServiceImagePath=/VMware Tools\\authd\.exe/i or ServiceImagePath=/\\System32\\(tpvmmon|aweman32|msadcs32|uplay_r164)\.dll/i
| table([@timestamp, aid, ComputerName, UserName, ServiceDisplayName, ServiceImagePath, ContextBaseFileName])
| sort(@timestamp, order=desc)
Q2 · Unsigned masquerade binaries executing from the VMware Tools folder or the WSUS package store
CONF HIGHFP MEDIUMCOST LOW

Looks for: The loader authd.exe and the tools it schedules (vmtoolsd32.exe GOST, rpctool32.exe Vasilek or 3proxy) sit in C:\Program Files\VMware\VMware Tools\, and a second GOST copy ran as WsusService.exe from E:\WSUS\UpdateServicesPackages\. Solar states these files were unsigned while genuine VMware binaries are signed. authd.exe is also a name genuine VMware products can use, so the signature test is the discriminator, not the name. FP: a genuine signed VMware binary named authd.exe (excluded by the unsigned filter), an unsigned in-house tool that happens to carry one of these names, and sensors that do not populate the authenticode field on a given host.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analytic, equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: If the sensor leaves tgt.process.publisher empty for signed binaries the hunt also returns the genuine signed copies.
  • PowerQuery assumes: tgt.process.publisher is empty for an unsigned binary and populated for a signed one; this field is attested by symmetry only, so verify it on a tenant.
  • PowerQuery assumes: The package-store test is a substring of the image path rather than a path-segment match.
  • PowerQuery assumes: Names and folders match case-insensitively, which reproduces the CQL /i intent.
  • KQL – Defender XDR: A masquerade that forges a company name in its version information is not caught, and a signed copy with no version information is.
  • KQL – Defender XDR: The CQL's signature test has no created-process equivalent in this table.
  • KQL – Defender XDR assumes: An implant that carries no version information has an empty ProcessVersionInfoCompanyName.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process.
// HUNT: Masquerade executables (authd, vmtoolsd32, rpctool32, WsusService) running unsigned from VMware Tools or UpdateServicesPackages
// MITRE: T1036.005, T1543.003, T1090
// CONF: high
// FP: medium
// COST: low
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2 with ImageFileName and AuthenticodeHashData (absent on unsigned files per the v3 reference); ⚠ validate in tenant that AuthenticodeHashData is populated for signed VMware binaries before trusting a zero result
// FALSE POSITIVES: genuine VMware authd.exe (signed), unsigned in-house tool reusing a name, sensors without authenticode population
// TUNING: keep the unsigned filter; exclude only after confirming the SHA256HashData against the vendor package for your VMware Tools version; never exclude by file name or folder alone
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| (FileName=/^(authd|vmtoolsd32|rpctool32)\.exe$/i and ImageFileName=/\\VMware Tools\\[^\\]+$/i) or (FileName=/^WsusService\.exe$/i and ImageFileName=/\\UpdateServicesPackages\\/i)
| AuthenticodeHashData!=*
| table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
| sort(@timestamp, order=desc)
Q3 · Executable or DLL written into the VMware Tools folder by something other than the VMware installer (loader, DLL swap, self-update files)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: In December 2025 the actors replaced vmtools.dll and kept the original beside it as vmtoolsd.dll; Vasilek self-update drops new.bak and renames the running file to old-<timestamp>.bak. This looks for those names being written inside the VMware Tools folder by any writer except the usual VMware installers. Solar says these paths were reused for different tools over time, so a hit on the same path with a new hash is expected. FP: legitimate VMware Tools install, upgrade or repair writes (excluded by writer name), and software deployment tools that stage VMware Tools packages.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analyticProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The CQL only fires on files the sensor classified as executable; here a non-executable file with one of these names also matches.
  • PowerQuery: A rename onto one of these names may report the old path, so a swap by rename can be missed.
  • PowerQuery assumes: A single dot in the path pattern stands for one backslash.
  • PowerQuery assumes: File Modification is included because a swapped DLL may be overwritten in place.
  • PowerQuery assumes: Matching is case-insensitive, which reproduces the CQL /i intent.
  • KQL – Defender XDR: The CQL only fires on files the sensor classified as executable; here a non-executable file with one of these names also matches.
  • KQL – Defender XDR assumes: FolderPath holds a path that contains the VMware Tools folder, whether or not the sensor appends the file name.
// HUNT: PE file written to VMware Tools folder under attacker file names by a non-installer writer
// MITRE: T1574.004, T1036.005, T1105, T1070.006
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: NewExecutableWritten or PeFileWritten with TargetFileName and ContextBaseFileName (writer process); ⚠ validate ContextBaseFileName in tenant. Non-PE .bak copies appear only if the sensor classifies the content as a PE
// FALSE POSITIVES: VMware Tools upgrade or repair, deployment agents staging the package
// TUNING: extend the writer exclusion with your own deployment agent (for example your software distribution client) after confirming it on real rows; do not exclude msiexec.exe and then forget that an attacker can also run msiexec
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=/^(NewExecutableWritten|PeFileWritten)$/
| TargetFileName=/\\VMware Tools\\(authd\.exe|vmtoolsd32\.exe|rpctool32\.exe|vmtools\.dll|vmtoolsd\.dll|new\.bak|old-[^\\]*\.bak)$/i
| ContextBaseFileName!=/^(msiexec|VMwareToolsUpgrader|setup|setup64)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, ContextBaseFileName, SHA256HashData])
| sort(@timestamp, order=desc)
Q4 · Published file hashes: loader, Vasilek, PartisanDNS, DNSCat2, GOST, 3proxy and the swapped vmtools.dll
CONF HIGHFP LOWCOST LOW

Looks for: Exact match on the twelve SHA256 values Solar published for this intrusion, across process starts and file writes. Because actors rotated different tools through the same paths, a hash miss on a masquerade path is not clearance: run Q2 and Q3 as well. All twelve ship as detect only (see Section 10).

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptions, telemetry-gapProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A file that was neither written nor executed inside the lookback window is not seen.
  • PowerQuery assumes: SHA-256 is populated on process-creation and file events on the tenant; a sensor that records only SHA-1 returns nothing.
  • PowerQuery assumes: Hash values are lower-case hex and are compared case-insensitively.
  • KQL – Defender XDR: Files that were written but never executed are not covered: that half needs a file-event table.
  • KQL – Defender XDR: SHA256 is often unpopulated in DeviceProcessEvents and the CQL carries no SHA1 values, so a tenant with sparse SHA256 sees fewer hits than the CQL tab.
  • KQL – Defender XDR assumes: SHA256 is populated on the tenant's process-creation rows; Microsoft documents it as usually not populated.
// HUNT: SHA256 match on Solar-published files for this intrusion
// MITRE: T1543.003, T1574.004, T1090, T1071.004
// CONF: high
// FP: low
// COST: low
// REQUIRES: ProcessRollup2, SyntheticProcessRollup2, NewExecutableWritten or PeFileWritten carrying SHA256HashData
// FALSE POSITIVES: none expected; GOST and 3proxy are open-source tools, so a hit on those two hashes is the attacker-built copy, but hits should still be reviewed by an analyst rather than auto-actioned
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|NewExecutableWritten|PeFileWritten)$/
| in(field=SHA256HashData, values=["cc8c707bf49c0cdb79b806d41df6254efc0e9f566a02d223871550f414469d13", "e5c6b6d37ff168def37dfd86c636e512be3ed7ead9a2dc93d5c741c42b47c1f1", "07381d79670129277211a4373e5518799a54b427946602539463ec2dd9cdb5e7", "4f0e23a83d83d901c76353d8b9b6ee2940eb63d531ad15f736193903b5c7c8c3", "8c37c4b1f168219a1ce495c9822730981b20ff03d937ddcd8795fca14a9b7869", "5bc4fa9916c0883d45cb85639e328ed484dc75f4dfda294eb52f4b8b612889f2", "c499fab59acbb1750e1e0e5a3c51d119ccd6374e5f0b45639f29598720222766", "87e713f9b6ae14d97d3fa4d1a882c029e7e963d844d9c93ea383cab3d46a949c", "d7aedc020ce832334abf0d03986da31f41cb2191355f25b17989dcfa8bb2775b", "e55431d6f15aa78ada3f60ed30a3f32b444b952bdc53a652546c1820f8bfa513", "5076286c26f2a5c7dd7f507365fe404db2b05d39b350c463faa053baa37b3742", "125ead2c3b1d0f7aee03d13b927744ec8dc1d046912ce73efc9c5a10243b99dc"])
| table([@timestamp, aid, ComputerName, UserName, #event_simpleName, SHA256HashData, FileName, ImageFileName, TargetFileName, CommandLine])
| sort(@timestamp, order=desc)
Q5 · DNS lookups for the incident C2 domains and the PartisanDNS generated domains
CONF HIGHFP LOWCOST LOW

Looks for: Matches the nine domains Solar lists as network indicators (five are named as C2 for the DNSCat2 tunnels or as reused infrastructure) plus the PartisanDNS generated-domain set (vpnosljjk and the vfvnfaq label under eighteen suffixes). It matches the domain and any subdomain, which is how DNS tunnels carry data. Only the listed generated domains are covered; the generation algorithm itself is not published.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The CQL also collects the process id behind each lookup; this card shows one process name per group instead.
  • PowerQuery assumes: event.dns.request holds the queried name; the vendor field documentation also names dns.request, so confirm which one your tenant populates.
  • PowerQuery assumes: Matching is case-insensitive, which reproduces the CQL /i intent.
  • PowerQuery assumes: The three hyphenated names (gov-by.com, c-oh.com, parker-inc.com) are matched with the hyphen in a character class, so the labels by.com, inc.com and oh.com read as the CQL writes them.
  • KQL – Defender XDR: The CQL also collects the process id behind each lookup; this card does not.
  • KQL – Defender XDR assumes: The queried name is in AdditionalFields under DnsQueryString or QueryName; the readiness test prints the field so you can see which key your tenant populates.
  • KQL – Defender XDR assumes: The DnsQueryResponse action type is attested in Microsoft hunting-query repositories rather than on the Learn table page.
  • KQL – Defender XDR assumes: The three hyphenated names (gov-by.com, c-oh.com, parker-inc.com) are matched with the hyphen in a character class, so the labels by.com, inc.com and oh.com read as the CQL writes them.
// HUNT: DnsRequest for published C2 and PartisanDNS domains (including subdomains used for tunnelling)
// MITRE: T1071.004, T1568.002, T1090
// CONF: high
// FP: low
// COST: low
// REQUIRES: DnsRequest with DomainName; host must resolve through a path the sensor sees
// FALSE POSITIVES: none expected for these names
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=DnsRequest
| DomainName=/(^|\.)(c0ce\.org|p7cp\.org|f91j\.org|w3a01\.net|gov\-by\.com|okkgb\.com|c\-oh\.com|89e\.org|parker\-inc\.com|vpnosljjk\.pro|vfvnfaq\.(top|link|cyou|pro|me|my|buzz|info|space|in|sbs|work|casa|lol|lat|net|org|com))$/i
| groupBy([aid, ComputerName, DomainName], function=[count(as=Lookups), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen), collect([ContextProcessId])], limit=500)
| sort(Lookups, order=desc, limit=200)
Q6 · Connections to the three published IP addresses (shared hosting, treat as a pivot)
CONF LOWFP MEDIUMCOST LOW

Looks for: Solar lists three IPs without roles: two labelled Cloudflare and one labelled Amazon. Cloudflare addresses front many unrelated sites, so a connection alone proves nothing. This hunt keeps browsers out and returns the initiating process so an analyst can judge whether a backdoor, service or tunnel tool made the call. FP: any non-browser application that uses a Cloudflare-fronted service (updaters, collaboration clients, security agents) can connect to those two addresses; the Amazon-labelled address may be reassigned.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The addresses are shared hosting, so a hit is a pivot and not a verdict.
  • PowerQuery assumes: IP Connect covers outbound connections from the endpoint.
  • PowerQuery assumes: The browser exclusion matches the process name case-insensitively.
  • KQL – Defender XDR: The addresses are shared hosting, so a hit is a pivot and not a verdict.
  • KQL – Defender XDR: Failed or blocked connection attempts are not included.
  • KQL – Defender XDR assumes: A completed outbound connection is recorded as ConnectionSuccess.
// HUNT: NetworkConnectIP4 to the published IPs from a non-browser process
// MITRE: T1071.001, T1090
// CONF: low
// FP: medium
// COST: low
// REQUIRES: NetworkConnectIP4 with RemoteAddressIP4 and ContextBaseFileName
// FALSE POSITIVES: updaters and SaaS clients behind the same CDN addresses
// TUNING: treat as a pivot, not a detection: escalate only when the initiating process is unsigned, sits in a VMware Tools or System32 masquerade path, or also appears in Q1 to Q5; expire the IP list after 30 days
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=NetworkConnectIP4
| in(field=RemoteAddressIP4, values=["172.67.210.25", "104.21.34.242", "199.59.243.228"])
| ContextBaseFileName!=/^(chrome|msedge|firefox|iexplore|brave)\.exe$/i
| groupBy([aid, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], function=[count(as=Connections), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=500)
| sort(Connections, order=desc, limit=200)
Q7 · Telegram Bot API lookups from a process that is not a browser or the Telegram client (Vasilek C2 and exfiltration channel)
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: Vasilek builds https://api.telegram.org/bot<token>/<method> and calls getUpdates (60 second long poll), sendMessage, sendDocument and getFile. Telegram itself is a legitimate service, so this ships as a hunt only and never as an IOC prevent. The query resolves each lookup to its process and drops browsers and the desktop client, leaving servers and unusual binaries. Corporate proxy settings are inherited by the backdoor, so the host may query through the proxy rather than directly. FP: admin scripts and monitoring bots that alert through Telegram, the Telegram desktop updater, and chat integrations that use the Bot API.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A lookup made through a system resolver service may be attributed to that service rather than the real caller.
  • PowerQuery assumes: On a DNS Resolved event the acting process is src.process.* and its parent is src.process.parent.*.
  • PowerQuery assumes: event.dns.request holds the queried name; the vendor field documentation also names dns.request, so confirm which one your tenant populates.
  • PowerQuery assumes: Process names match case-insensitively.
  • KQL – Defender XDR: A lookup made through a system resolver service may be attributed to that service rather than the real caller.
  • KQL – Defender XDR assumes: The queried name is in AdditionalFields under DnsQueryString or QueryName; the readiness test prints the field so you can see which key your tenant populates.
  • KQL – Defender XDR assumes: The DnsQueryResponse action type is attested in Microsoft hunting-query repositories rather than on the Learn table page.
// HUNT: DnsRequest for api.telegram.org resolved to a non-browser, non-Telegram process
// MITRE: T1102.002, T1041, T1071.001
// CONF: medium
// FP: medium
// COST: medium
// REQUIRES: DnsRequest plus ProcessRollup2 or SyntheticProcessRollup2 joined on aid and process id; a long-running process started before the lookback window needs the Synthetic event; if a proxy resolves DNS for the host, run this against proxy logs instead
// FALSE POSITIVES: admin bots, Telegram desktop updater, chat integrations
// TUNING: allowlist the specific hashes of approved automation and keep the rest; servers and domain controllers should never need this lookup, so raise severity there
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=DnsRequest
| DomainName=/^api\.telegram\.org$/i
| rename(field=ContextProcessId_decimal, as=TargetProcessId_decimal)
| join(query={#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName!=/^(chrome|msedge|firefox|iexplore|brave|Telegram|Update)\.exe$/i}, field=[aid, TargetProcessId_decimal], include=[FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
| table([@timestamp, aid, ComputerName, DomainName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
| sort(@timestamp, order=desc)
Q8 · Children of the loader or of the masquerade tools (scheduled GOST launch, Vasilek command execution, self-delete)
CONF HIGHFP MEDIUMCOST LOW

Looks for: The loader starts vmtoolsd32.exe (GOST) every Saturday 22:00 to 23:00 and, once, 480 minutes after the service starts, launches rpctool32.exe (Vasilek) and a second GOST. Vasilek then runs operator commands through the Windows shell and removes itself with cmd /c del. Any process whose parent is one of these names is a strong lead, and the weekday and hour columns let you check the Saturday window. FP: a genuine signed authd.exe from a VMware product spawning its own helpers; confirm with Q2 (unsigned) and the parent path before escalating.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The CQL's weekday and hour-of-day columns are not derived here; read them from event.time.
  • PowerQuery assumes: On a Process Creation event src.process.* is the creator of tgt.process.*.
  • PowerQuery assumes: src.process.name carries no path, so the unsigned test lives on the Q2 card.
  • PowerQuery assumes: Names match case-insensitively.
  • KQL – Defender XDR: The initiating-process name carries no path, so the unsigned test lives on the Q2 card.
  • KQL – Defender XDR assumes: Weekday is a number from 0 (Sunday) to 6 (Saturday), in UTC.
// HUNT: Process creation with parent authd.exe, vmtoolsd32.exe or rpctool32.exe, with weekday and hour in UTC
// MITRE: T1059.003, T1090, T1070.004, T1548.004
// CONF: high
// FP: medium
// COST: low
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2 with ParentBaseFileName; ParentBaseFileName carries no path, so pair with Q2 for the unsigned test
// FALSE POSITIVES: genuine VMware authd.exe helpers
// TUNING: if your estate legitimately runs a signed authd.exe, keep the vmtoolsd32 and rpctool32 parents (never genuine VMware names per Solar) and join Q2 to restrict authd.exe to unsigned copies
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^(authd|vmtoolsd32|rpctool32)\.exe$/i
| Weekday := formatTime("%a", field=@timestamp)
| HourUtc := formatTime("%H", field=@timestamp)
| table([@timestamp, Weekday, HourUtc, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData])
| sort(@timestamp, order=desc)
Q9 · Remote command execution with output redirected to the ADMIN$ share (Impacket wmiexec style, earliest 2024 evidence)
CONF HIGHFP LOWCOST LOW

Looks for: The earliest 2024 traces were antivirus records of cmd.exe redirecting output to \\127.0.0.1\ADMIN$\__<unix timestamp>.<microseconds>. Solar ties that file name pattern to Impacket wmiexec.py: the command runs through WMI and the output is read back over SMB. This is lateral movement tradecraft that is not specific to this actor, so a hit means remote execution, not necessarily this campaign.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A command line that reaches the share through a different spelling of the loopback address is not matched.
  • PowerQuery assumes: The share path is matched with literal backslashes, as the sensor reports the command line.
  • PowerQuery assumes: Matching is case-insensitive, which reproduces the CQL /i intent.
  • KQL – Defender XDR: A command line that reaches the share through a different spelling of the loopback address is not matched.
  • KQL – Defender XDR assumes: The share path is matched with literal backslashes, as the sensor reports the command line.
// HUNT: cmd.exe redirecting output to the loopback ADMIN$ share with an underscore-timestamp file name
// MITRE: T1047, T1021.002
// CONF: high
// FP: low
// COST: low
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2 with FileName and CommandLine
// FALSE POSITIVES: none expected; some security assessment tools reproduce the same pattern, which is itself worth knowing
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^cmd\.exe$/i
| CommandLine=/\\\\127\.0\.0\.1\\ADMIN\$\\__[0-9]+\.[0-9]+/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, CommandLine])
| sort(@timestamp, order=desc)
Q10 · Temporary tampering with the AppMgmt service parameters (service start by registry swap)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Solar found the registry key timestamps of the legitimate AppMgmt service out of order (the service key newer than its Parameters subkey), which suggests the actors overwrote the service parameters, ran a payload through the service and restored the original value. It names StealthyWMIExec and NimExec as public tools that start code this way. This query catches changes to the values that decide what the service runs. FP: Windows servicing and some management agents touch service keys; AppMgmt itself rarely changes outside updates.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A set-then-restore pair shows as two rows; pairing them by time is left to the analyst.
  • PowerQuery assumes: registry.keyPath may or may not end in the value name on this tenant; the pattern accepts both.
  • PowerQuery assumes: Key paths are matched with a literal backslash separator.
  • PowerQuery assumes: Matching is case-insensitive, which reproduces the CQL /i intent.
  • KQL – Defender XDR: A set-then-restore pair shows as two rows; pairing them by time is left to the analyst.
  • KQL – Defender XDR assumes: RegistryKey holds the key path without the value name, as the table documents.
  • KQL – Defender XDR assumes: Key paths are matched with a literal backslash separator.
// HUNT: Registry value changes on the AppMgmt service key (ServiceDll, ImagePath, ObjectName, Start)
// MITRE: T1569.002, T1112, T1543.003
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: AsepValueUpdate or RegGenericValueUpdate with RegObjectName, RegValueName and RegStringValue; an immediate set-then-restore may produce two rows seconds apart, which is the signal
// FALSE POSITIVES: Windows servicing, management agents
// TUNING: allowlist the servicing parent processes you observe on real rows; escalate set-then-restore pairs under a minute apart and any ServiceDll or ImagePath value that is not the stock AppMgmt value
// LOOKBACK: 7d (set with the console time picker)
#event_simpleName=/^(AsepValueUpdate|RegGenericValueUpdate)$/
| RegObjectName=/\\Services\\AppMgmt(\\Parameters)?$/i
| RegValueName=/^(ServiceDll|ImagePath|ObjectName|Start)$/i
| table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue, ContextBaseFileName])
| sort(@timestamp, order=desc)
09

Detection Rules by Platform

Three behaviors are specific enough to promote. Everything is action Detect: the file names involved are shared with genuine VMware software, Telegram and GOST are legitimate software, and the indicators have a single originating source.

CrowdStrike: Custom IOA

IOA namePromotesPatternExclusionsDeployment Path
DETECT-VT-UnsignedMasqueradeExePromote Q2Process creation where the image is authd.exe, vmtoolsd32.exe or rpctool32.exe under a VMware Tools folder, or WsusService.exe under UpdateServicesPackagesConfirmed signed VMware binaries by hash; the IOA builder cannot test the signature, so pair it with the Q2 hunt and keep severity Medium until baselinedCustom IOA (process creation), Detect only
DETECT-VT-LoaderChildLaunchPromote Q8Process creation whose parent image is authd.exe, vmtoolsd32.exe or rpctool32.exeGenuine signed authd.exe helpers if present in your estateCustom IOA (process creation), severity High, Detect only
DETECT-VT-AdminShareOutputRedirectPromote Q9cmd.exe command line redirecting to loopback ADMIN$ with an underscore-timestamp file nameAuthorized security assessment toolsCustom IOA (process creation), severity High, Detect only

Do not promote Q1, Q3, Q5, Q6, Q7 or Q10 to IOAs yet. Q3 and Q10 fire on legitimate installers and servicing, Q6 on shared CDN addresses, and Q7 on any approved Telegram automation. Q1, Q4 and Q5 are indicator matches better served by IOC Management (Section 10). No IOA here uses a prevent action, and Telegram, GOST and genuine VMware binaries must never be blocked on name or path.

SentinelOne: custom detection rules

RuleSource queryRun asNotes
DETECT-VT-UnsignedMasqueradeExeQ2, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
DETECT-VT-LoaderChildLaunchQ8, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
DETECT-VT-AdminShareOutputRedirectQ9, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"

Create the rule with POST /web/api/v2.1/cloud-detection/rules, queryType: "scheduled" and queryLang: "2.0", with the query in data.scheduledParams.query. Use 2.0 operator spellings: a rule written with the 1.0 token ContainsCIS was accepted and never fired on a tenant. The API does not warn, so lint the body before deploying.

Microsoft Defender: custom detection rules

RuleSource queryRun asNotes
DETECT-VT-UnsignedMasqueradeExeQ2, KQL – Defender XDR tabHunt only until the gap is closedQ2 is only an approximation here. Same masquerade names and folders on process creation, but DeviceProcessEvents has no signature column for the created process, so the unsigned test becomes an empty company name in the version info.
DETECT-VT-LoaderChildLaunchQ8, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
DETECT-VT-AdminShareOutputRedirectQ9, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself

Q1, Q3, Q4, Q5, Q6, Q7 and Q10 stay a hunt in this pack, not a rule. A rule can generate only 150 alerts per run. Continuous (NRT) frequency needs a single table and no comment lines, so delete the generated comment header from the query first.

10

Machine-Readable IOC Appendix

Grouped quick-copy blocks. Of the 43 importable atomic indicators (12 SHA256, 28 domains, 3 IPs), 41 are action=detect, 0 are prevent and 2 are no_action. Nothing is prevent or critical: the indicators come from one originating source (Solar 4RAYS; the other outlets reprint its appendix), the GOST and 3proxy samples are open-source tools, and the two Cloudflare addresses are shared CDN space. Name and path indicators are not importable and ship as hunt lists.

Falcon IOC Management CSVbulk import, detect only
type,value,action,severity,expiration,description,tags
sha256,cc8c707bf49c0cdb79b806d41df6254efc0e9f566a02d223871550f414469d13,detect,high,2027-04-25,PartisanDNS at msadcs32.dll (System32) (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,e5c6b6d37ff168def37dfd86c636e512be3ed7ead9a2dc93d5c741c42b47c1f1,detect,medium,2027-04-25,DNSCat2 packed with UPX at tpvmmon.dll and omega.dll (System32) (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,07381d79670129277211a4373e5518799a54b427946602539463ec2dd9cdb5e7,detect,medium,2027-04-25,DNSCat2 packed with UPX at aweman32.dll (System32) (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,4f0e23a83d83d901c76353d8b9b6ee2940eb63d531ad15f736193903b5c7c8c3,detect,high,2027-04-25,PartisanDNS at msadcs32.dll and msadcs32.bak (System32) (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,8c37c4b1f168219a1ce495c9822730981b20ff03d937ddcd8795fca14a9b7869,detect,medium,2027-04-25,DNSCat2 packed with UPX at uplay_r164.dll (System32) (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,5bc4fa9916c0883d45cb85639e328ed484dc75f4dfda294eb52f4b8b612889f2,detect,high,2027-04-25,custom loader-scheduler (service vmauad) at VMware Tools\authd.exe (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,c499fab59acbb1750e1e0e5a3c51d119ccd6374e5f0b45639f29598720222766,detect,medium,2027-04-25,3proxy at VMware Tools\rpctool32.exe (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,87e713f9b6ae14d97d3fa4d1a882c029e7e963d844d9c93ea383cab3d46a949c,detect,high,2027-04-25,Vasilek backdoor at VMware Tools\rpctool32.exe (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,d7aedc020ce832334abf0d03986da31f41cb2191355f25b17989dcfa8bb2775b,detect,medium,2027-04-25,GOST tunnel at VMware Tools\vmtoolsd32.exe (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,e55431d6f15aa78ada3f60ed30a3f32b444b952bdc53a652546c1820f8bfa513,detect,high,2027-04-25,PartisanDNS at C:\Windows\fstab.exe (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,5076286c26f2a5c7dd7f507365fe404db2b05d39b350c463faa053baa37b3742,detect,medium,2027-04-25,GOST tunnel (deleted before analysis) at E:\WSUS\UpdateServicesPackages\WsusService.exe (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
sha256,125ead2c3b1d0f7aee03d13b927744ec8dc1d046912ce73efc9c5a10243b99dc,detect,high,2027-04-25,substituted library that loads PartisanDNS per Solar appendix at VMware Tools\vmtools.dll (single source Solar 4RAYS),campaign:Vasilek-PartisanZmiy
domain,c0ce.org,detect,high,2027-01-25,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,campaign:Vasilek-PartisanZmiy
domain,p7cp.org,detect,high,2027-01-25,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,campaign:Vasilek-PartisanZmiy
domain,f91j.org,detect,high,2027-01-25,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,campaign:Vasilek-PartisanZmiy
domain,w3a01.net,detect,high,2027-01-25,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,campaign:Vasilek-PartisanZmiy
domain,gov-by.com,detect,high,2027-01-25,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,campaign:Vasilek-PartisanZmiy
domain,okkgb.com,detect,medium,2027-01-25,network indicator listed by Solar 4RAYS with no role stated,campaign:Vasilek-PartisanZmiy
domain,c-oh.com,detect,medium,2027-01-25,network indicator listed by Solar 4RAYS with no role stated,campaign:Vasilek-PartisanZmiy
domain,89e.org,detect,medium,2027-01-25,network indicator listed by Solar 4RAYS with no role stated,campaign:Vasilek-PartisanZmiy
domain,parker-inc.com,detect,medium,2027-01-25,network indicator listed by Solar 4RAYS with no role stated,campaign:Vasilek-PartisanZmiy
domain,vpnosljjk.pro,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.top,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.link,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.cyou,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.pro,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.me,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.my,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.buzz,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.info,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.space,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.in,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.sbs,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.work,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.casa,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.lol,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.lat,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.net,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.org,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
domain,vfvnfaq.com,detect,medium,2027-01-25,PartisanDNS generated domain published by Solar 4RAYS,campaign:Vasilek-PartisanZmiy
ipv4,172.67.210.25,no_action,low,2026-11-25,Cloudflare-labelled address from Solar 4RAYS (shared CDN so track only),campaign:Vasilek-PartisanZmiy
ipv4,104.21.34.242,no_action,low,2026-11-25,Cloudflare-labelled address from Solar 4RAYS (shared CDN so track only),campaign:Vasilek-PartisanZmiy
ipv4,199.59.243.228,detect,low,2026-11-25,Amazon-labelled address from Solar 4RAYS with no role stated,campaign:Vasilek-PartisanZmiy
sha256,REPLACE_WITH_SHA256_FOR_WSUSSCAN_EXE,no_action,low,2026-11-25,unknown file C:\Update\169\WSUSSCAN.exe only a SHA1 is published so no importable hash,campaign:Vasilek-PartisanZmiy
Microsoft Defender indicators CSVSettings, Endpoints, Indicators, Import: audit only
indicatorType,indicatorValue,action,title,description,expirationTime,severity,recommendedActions,rbacGroups,category,mitretechniques,GenerateAlert
FileSha256,cc8c707bf49c0cdb79b806d41df6254efc0e9f566a02d223871550f414469d13,Audit,PartisanDNS at msadcs32.dll,PartisanDNS at msadcs32.dll (System32) (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,e5c6b6d37ff168def37dfd86c636e512be3ed7ead9a2dc93d5c741c42b47c1f1,Audit,DNSCat2 packed with UPX at tpvmmon.dll and omega.dll,DNSCat2 packed with UPX at tpvmmon.dll and omega.dll (System32) (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,07381d79670129277211a4373e5518799a54b427946602539463ec2dd9cdb5e7,Audit,DNSCat2 packed with UPX at aweman32.dll,DNSCat2 packed with UPX at aweman32.dll (System32) (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,4f0e23a83d83d901c76353d8b9b6ee2940eb63d531ad15f736193903b5c7c8c3,Audit,PartisanDNS at msadcs32.dll and msadcs32.bak,PartisanDNS at msadcs32.dll and msadcs32.bak (System32) (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,8c37c4b1f168219a1ce495c9822730981b20ff03d937ddcd8795fca14a9b7869,Audit,DNSCat2 packed with UPX at uplay_r164.dll,DNSCat2 packed with UPX at uplay_r164.dll (System32) (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,5bc4fa9916c0883d45cb85639e328ed484dc75f4dfda294eb52f4b8b612889f2,Audit,custom loader-scheduler,custom loader-scheduler (service vmauad) at VMware Tools\authd.exe (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,c499fab59acbb1750e1e0e5a3c51d119ccd6374e5f0b45639f29598720222766,Audit,3proxy at VMware Tools\rpctool32.exe,3proxy at VMware Tools\rpctool32.exe (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,87e713f9b6ae14d97d3fa4d1a882c029e7e963d844d9c93ea383cab3d46a949c,Audit,Vasilek backdoor at VMware Tools\rpctool32.exe,Vasilek backdoor at VMware Tools\rpctool32.exe (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,d7aedc020ce832334abf0d03986da31f41cb2191355f25b17989dcfa8bb2775b,Audit,GOST tunnel at VMware Tools\vmtoolsd32.exe,GOST tunnel at VMware Tools\vmtoolsd32.exe (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,e55431d6f15aa78ada3f60ed30a3f32b444b952bdc53a652546c1820f8bfa513,Audit,PartisanDNS at C:\Windows\fstab.exe,PartisanDNS at C:\Windows\fstab.exe (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,5076286c26f2a5c7dd7f507365fe404db2b05d39b350c463faa053baa37b3742,Audit,GOST tunnel,GOST tunnel (deleted before analysis) at E:\WSUS\UpdateServicesPackages\WsusService.exe (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,125ead2c3b1d0f7aee03d13b927744ec8dc1d046912ce73efc9c5a10243b99dc,Audit,substituted library that loads PartisanDNS per Solar appendi,substituted library that loads PartisanDNS per Solar appendix at VMware Tools\vmtools.dll (single source Solar 4RAYS),2027-04-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,c0ce.org,Audit,C2 or reused infrastructure named by Solar 4RAYS for the inc,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,2027-01-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,p7cp.org,Audit,C2 or reused infrastructure named by Solar 4RAYS for the inc,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,2027-01-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,f91j.org,Audit,C2 or reused infrastructure named by Solar 4RAYS for the inc,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,2027-01-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,w3a01.net,Audit,C2 or reused infrastructure named by Solar 4RAYS for the inc,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,2027-01-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,gov-by.com,Audit,C2 or reused infrastructure named by Solar 4RAYS for the inc,C2 or reused infrastructure named by Solar 4RAYS for the incident DNSCat2 tunnels,2027-01-25T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,okkgb.com,Audit,network indicator listed by Solar 4RAYS with no role stated,network indicator listed by Solar 4RAYS with no role stated,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,c-oh.com,Audit,network indicator listed by Solar 4RAYS with no role stated,network indicator listed by Solar 4RAYS with no role stated,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,89e.org,Audit,network indicator listed by Solar 4RAYS with no role stated,network indicator listed by Solar 4RAYS with no role stated,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,parker-inc.com,Audit,network indicator listed by Solar 4RAYS with no role stated,network indicator listed by Solar 4RAYS with no role stated,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vpnosljjk.pro,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.top,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.link,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.cyou,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.pro,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.me,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.my,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.buzz,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.info,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.space,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.in,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.sbs,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.work,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.casa,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.lol,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.lat,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.net,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.org,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,vfvnfaq.com,Audit,PartisanDNS generated domain published by Solar 4RAYS,PartisanDNS generated domain published by Solar 4RAYS,2027-01-25T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,199.59.243.228,Audit,Amazon-labelled address from Solar 4RAYS with no role stated,Amazon-labelled address from Solar 4RAYS with no role stated,2026-11-25T00:00:00.0Z,Low,Investigate the device and pivot into the pack's queries,,,,True

Column names and allowed values are from Microsoft's documented parameter table. Left out because they are context rows, not detections: no_action 3. Check each expirationTime before importing: an indicator whose date has passed is already expired. Download the sample CSV from the Import page to confirm the column order before a bulk import. Each file takes at most 500 indicators. Learn describes the import per entity type, so if a mixed file is rejected, split it by indicatorType. An imported indicator does nothing unless the matching Advanced features are on (for example Custom network indicators and Allow or block file).

SentinelOne IOC importnot included

This pack does not ship a SentinelOne import block: the import format could not be verified against SentinelOne's own documentation. Export a sample from your console and the block can be added with confidence.

Behavioral Signatureshunt list, not importable
services:  vmauad | tpvmmon | aweman32 | msadcs32 | uplay_r164
display:   VMware Auth Adapter | Windows Insiders Service | Windows Channels Service | Sybase Inc. Product File | Access FT Imager Service
loader:    C:\Program Files\VMware\VMware Tools\authd.exe (unsigned) modes: (none) | run <command> | test
tools:     VMware Tools\vmtoolsd32.exe (GOST) | VMware Tools\rpctool32.exe (Vasilek or 3proxy) | E:\WSUS\UpdateServicesPackages\WsusService.exe (GOST)
dll swap:  VMware Tools\vmtools.dll unsigned, original kept as vmtoolsd.dll
schedule:  Saturday 22:00-23:00 (GOST); service start +480 minutes once (Vasilek and GOST)
selfupdate:new.bak | old-<timestamp>.bak ; selfdelete: cmd /c del "<path>" > nul
wmiexec:   cmd.exe ... \\127.0.0.1\ADMIN$\__<unixts>.<us>  and C:\Windows\__<unixts>.<us>
registry:  HKLM\SYSTEM\CurrentControlSet\Services\AppMgmt (Parameters) set then restored
c2:        api.telegram.org bot API: getUpdates (60 s long poll) sendMessage sendDocument getFile getChat deleteMessage answerCallbackQuery
vasilek:   59 commands incl. move_cursor (new vs 1.5.4); report template starts "Version: [" and "Hostname: ["
Named Malware and Toolingcontext
Vasilek      32-bit backdoor, internal version 1.5.8, Telegram Bot API C2, OLLVM obfuscated, host-name SHA-256 keyed
(loader)     authd.exe loader-scheduler, service vmauad, three-mode CLI, cron-style schedule, undescribed before this report
PartisanDNS  DNS tunnel tool with generated domains (msadcs32.dll, fstab.exe, swapped vmtools.dll per appendix)
DNSCat2      open-source DNS tunnel, UPX packed (tpvmmon.dll, aweman32.dll, uplay_r164.dll)
GOST         open-source tunnel (vmtoolsd32.exe, WsusService.exe) config gost.yml
3proxy       open-source proxy (rpctool32.exe, earlier sample)
Impacket     wmiexec.py output pattern (dual-use, not specific to this actor)
Background only, NOT in this pack: other tools of the same group named in the sources (wiper, log clearer, VPN decoy installer)
Audit Blockread-only
# 1) Unsigned or non-VMware-signed files in the VMware Tools folder
Get-ChildItem 'C:\Program Files\VMware\VMware Tools' -Include *.exe,*.dll,*.bak -Recurse -ErrorAction SilentlyContinue |
  ForEach-Object { $s = Get-AuthenticodeSignature $_.FullName; [pscustomobject]@{File=$_.FullName; Status=$s.Status; Signer=$s.SignerCertificate.Subject; Modified=$_.LastWriteTime} }
# 2) Services with the published names
Get-CimInstance Win32_Service | Where-Object { $_.Name -match '^(vmauad|tpvmmon|aweman32|msadcs32|uplay_r164)$' } | Select-Object Name, DisplayName, PathName, State
# 3) Is VMware Tools installed on a host that is not a VMware guest?
(Get-CimInstance Win32_ComputerSystem).Model; Get-Service vmtoolsd -ErrorAction SilentlyContinue

The WSUSSCAN.exe row is a labelled placeholder: Solar publishes only a SHA1 for the unknown WSUSSCAN.exe (c4e623ab0a15db0896bf8a68eb9b45ebe6ae2f28), and Falcon IOC Management takes MD5 and SHA256, so there is nothing honest to import. Search it by that SHA1 in a file inventory instead. The four earlier-known domains Solar lists for comparison are deliberately omitted.

11

Detection Validation Gates

GateQ1 servicesQ2 unsigned exeQ3 file writesQ4 hashesQ5 DNSQ6 IPsQ7 TelegramQ8 childrenQ9 ADMIN$Q10 AppMgmt
Telemetry readyPending service created (CrowdStrike: CreateService. SentinelOne: confirm in tenant. Defender: confirm action)Pending process creation with signature field; confirm authenticode is populated for signed VMware binariesPending file written with writer process (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents)Ready process creation and file written with hashesPending DNS lookup (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse)Ready outbound connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)Pending DNS lookup plus process join; use proxy logs if resolvers hide the hostReady process creation with parentReady process creation with command linePending registry value set (CrowdStrike: AsepValueUpdate, RegGenericValueUpdate. SentinelOne: Registry Value Modified. Defender: DeviceRegistryEvents)
Benign baselineList all service display names once; expect none of the fiveHash the genuine VMware Tools set per version and record signerCapture one VMware Tools upgrade cycle and the deployment agent writerRun 30 days; expect noneRun 30 days; expect noneBaseline Cloudflare-using updaters per host groupInventory approved Telegram automation by hashCheck whether any signed authd.exe exists on your estateRun 30 days; note security toolingCapture one Windows servicing cycle
Positive-control testNot yet run. In a lab, create a service named like a published one that points at a harmless executable, then delete itNot yet run. Copy a harmless unsigned test binary as authd.exe into a lab VMware Tools folder and run itNot yet run. Write a harmless PE named rpctool32.exe into a lab VMware Tools folder from a scriptNot yet run. Substitute the hash of a harmless lab file for one value, test, then restoreNot yet run. Resolve one published domain from a lab host (a lookup only)Not yet run. Connect to a listed address from a lab host with a non-browser toolNot yet run. Resolve api.telegram.org from a lab test binaryNot yet run. Launch cmd.exe from a renamed lab binary called vmtoolsd32.exeNot yet run. Run a lab cmd.exe line that redirects to the loopback admin share file patternNot yet run. Set and restore a harmless value on a lab copy of a service key
PromotionIOC and huntIOA candidate (Section 9)Hunt onlyIOC detect (Section 10)IOC detect (Section 10)Hunt onlyHunt onlyIOA candidate (Section 9)IOA candidate (Section 9)Hunt only

Run every positive control in an isolated lab, never on production, with benign files only. Never run real malware or tunnel tools to test a query. For Q2, Q3 and Q8 the test must include a signed genuine file to prove the exclusion works.

12

Hardening: Tiered

The threat lands on Windows servers, workstations and domain controllers, on the VMware Tools install path, on DNS and web egress, and on inter-organization trusts. Each control cites a MITRE mitigation (the why) and a benchmark or vendor source (the what). Controls marked best-practice have no formal benchmark. Playbook numbers refer to Section 13.

Immediate (this week)

1. Baseline signatures in trusted-software folders. M1047 Audit; Solar recommendation [1]; CIS Control 2.3 Address Unauthorized Software. Check every executable and DLL under the VMware Tools folder (and other vendor folders on servers) for a valid vendor signature. Playbook 1. Verify: the script returns no unsigned file on a clean host.

2. Remove unused virtualization software. M1042 Disable or Remove Feature or Program; CIS Control 2.3. Solar's actors chose VMware Tools because it was installed long ago and unused, a blind spot [1]. Remove it where the host is not a VMware guest. Playbook 2. Verify: no vmtoolsd service on physical hosts.

3. Capture service installs. M1047 Audit; Microsoft Windows security baseline, Advanced Audit Policy, Security System Extension. The System log 7045 records survived in this case [1]; forward them and 4697 centrally. Playbook 3. Verify: auditpol /get shows success logging.

4. Alert on Telegram Bot API from servers. M1037 Filter Network Traffic. best-practice, no formal benchmark Add a proxy or resolver alert, not a block, for api.telegram.org from domain controllers and servers; move to a block only for host groups with no business need after 14 days of alert data. This is a network control and does not change the IOC actions (Section 10). Verify: resolver or proxy test lookup from a lab server alerts.

Near term (1 to 4 weeks, pilot first)

5. Application control on the VMware Tools folder. M1038 Execution Prevention; Microsoft application control guidance (WDAC or AppLocker). Allow only VMware-signed publisher rules in that folder, in audit mode first. Playbook 4. Verify: audit events (AppLocker EXE and DLL log) show would-block for an unsigned test file.

6. Restrict remote-execution paths between workstations. M1030 Network Segmentation, M1035 Limit Access to Resource Over Network; CIS Windows Firewall benchmark settings. Block inbound SMB and RPC to workstations from other workstation ranges so wmiexec-style execution and ADMIN$ output retrieval need a jump host [1]. Playbook 5. Verify: Get-NetFirewallRule readback and a failed lab connection from a peer workstation.

7. Force DNS through internal resolvers. M1037 Filter Network Traffic. best-practice, no formal benchmark Block outbound 53 and 853 from endpoints to anything except your resolvers and log lookups, so DNSCat2 and PartisanDNS traffic is visible and a direct tunnel is refused [1]. Verify: lab host cannot resolve through an external server.

Strategic (1 to 3 months)

8. Tiered administration and domain-controller protection. M1026 Privileged Account Management, M1032 Multi-factor Authentication; Microsoft enterprise access model. Solar reports the actors reached domain controllers and central management systems [1][4]; keep tier-0 credentials off every other tier and require MFA for administrative access.

9. Harden inter-organization trusts. M1030 Network Segmentation, M1018 User Account Management; Microsoft guidance on selective authentication for AD trusts. The prize in this intrusion was two-way trust with subsidiary medical institutions [1]. Use selective authentication, scope the allowed servers, and agree a shared incident contact with each partner.

10. File integrity monitoring and fleet software inventory. M1047 Audit. Monitor the VMware Tools and WSUS package folders for new executables and keep an inventory that flags installed-but-unused software; Solar's closing advice is that detections must be triaged, not only deployed [1].

13

Deployable Playbooks

Playbook 1: Signature and service audit of VMware Tools (read-only)

Prerequisites: Windows PowerShell 5.1 or later, local administrator, run from your management host over remoting or locally; M1047, Solar recommendation
Reboot required: No
Rollback: none required, this playbook only reads state

# Step 1: signature status of every binary in the VMware Tools folder
$root = 'C:\Program Files\VMware\VMware Tools'
Get-ChildItem $root -Include *.exe,*.dll,*.bak -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
  $s = Get-AuthenticodeSignature $_.FullName
  [pscustomobject]@{ File=$_.FullName; Status=$s.Status; Signer=$s.SignerCertificate.Subject; Sha256=(Get-FileHash $_.FullName).Hash; Modified=$_.LastWriteTime }
} | Export-Csv "$env:TEMP\vmtools-audit.csv" -NoTypeInformation
# Step 2: services that point at the folder or at the published System32 DLL names
Get-CimInstance Win32_Service | Where-Object { $_.PathName -match 'VMware Tools\\authd|tpvmmon|aweman32|msadcs32|uplay_r164' } |
  Select-Object Name, DisplayName, PathName, State
# Verify: expect no row with Status other than Valid and no service named in Step 2 on a clean host

Playbook 2: Find and remove unused VMware Tools on non-VMware hosts

Prerequisites: Playbook 1 clean; change ticket; the host is not a VMware guest (model check below); M1042, CIS Control 2.3
Reboot required: Possibly (installer may request one); schedule in a maintenance window
Rollback: reinstall the same VMware Tools package from your software repository; the uninstall command below is the only state change

# Step 1: identify non-VMware hosts that carry VMware Tools (read-only)
$model = (Get-CimInstance Win32_ComputerSystem).Model
$app = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction SilentlyContinue |
  Where-Object { $_.DisplayName -like 'VMware Tools*' } | Select-Object DisplayName, DisplayVersion, PSChildName
"Model: $model"; $app
# Step 2: only if Model does not contain VMware and the install is unused, uninstall (PSChildName is the product code)
# Start-Process msiexec.exe -ArgumentList "/x $($app.PSChildName) /qn /norestart" -Wait
# Verify
Get-Service vmtoolsd -ErrorAction SilentlyContinue; Test-Path 'C:\Program Files\VMware\VMware Tools'
# Preserve any unexpected files for forensics BEFORE uninstalling; do not delete evidence on a suspected host

Playbook 3: Audit service installs (Security 4697) and confirm System 7045

Prerequisites: Local administrator or GPO; Windows 10, 11 or Server 2016 and later; M1047, Microsoft security baseline (Advanced Audit Policy)
Reboot required: No
Rollback: restore the saved audit policy with the command in the last block

# Step 1: back up the current audit policy
auditpol /backup /file:C:\Windows\Temp\auditpol-backup.csv
# Step 2: enable success logging for service installs (event 4697)
auditpol /set /subcategory:"Security System Extension" /success:enable
# Step 3: verify
auditpol /get /subcategory:"Security System Extension"
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} -MaxEvents 5 | Select-Object TimeCreated, Message
# Rollback
# auditpol /restore /file:C:\Windows\Temp\auditpol-backup.csv

Playbook 4: AppLocker audit-only publisher rule for the VMware Tools folder

Prerequisites: Playbook 1 shows ONLY valid VMware-signed files on a reference host (a rule built from a compromised host would trust the loader); Application Identity service available; piloted on a ring; M1038
Reboot required: No
Rollback: re-apply the exported backup policy (last block); audit-only mode blocks nothing in the meantime

# Step 1: back up the effective local policy
Get-AppLockerPolicy -Local -Xml | Out-File C:\Windows\Temp\applocker-backup.xml -Encoding utf8
# Step 2: build a publisher rule from the verified reference folder
Get-AppLockerFileInformation -Directory 'C:\Program Files\VMware\VMware Tools' -Recurse -FileType Exe,Dll |
  New-AppLockerPolicy -RuleType Publisher -User Everyone -Optimize -Xml | Out-File C:\Windows\Temp\vmtools-rule.xml -Encoding utf8
# Step 3: force AUDIT ONLY on the generated collections, then merge
[xml]$x = Get-Content C:\Windows\Temp\vmtools-rule.xml
$x.AppLockerPolicy.RuleCollection | ForEach-Object { $_.SetAttribute('EnforcementMode','AuditOnly') }
$x.Save('C:\Windows\Temp\vmtools-rule-audit.xml')
Set-AppLockerPolicy -XmlPolicy C:\Windows\Temp\vmtools-rule-audit.xml -Merge
Start-Service AppIDSvc
# Verify: unsigned test file in that folder logs would-block in Microsoft-Windows-AppLocker/EXE and DLL
# Rollback
# Set-AppLockerPolicy -XmlPolicy C:\Windows\Temp\applocker-backup.xml

Playbook 5: Block workstation-to-workstation SMB and RPC (apply through GPO to the workstation OU only)

Prerequisites: Inventory of legitimate SMB and RPC flows between workstations; jump hosts defined; pilot ring; M1030, M1035; the REPLACE_WITH_ placeholders must be filled with your workstation address ranges
Reboot required: No
Rollback: remove the two rules with the Remove-NetFirewallRule line at the end; export the existing firewall policy first

# Step 1: export the current firewall policy
netsh advfirewall export "C:\Windows\Temp\firewall-backup.wfw"
# Step 2: block inbound SMB and RPC endpoint mapper from peer workstation ranges
$peers = 'REPLACE_WITH_WORKSTATION_SUBNET_1','REPLACE_WITH_WORKSTATION_SUBNET_2'
New-NetFirewallRule -DisplayName 'HP-Block-Peer-SMB' -Direction Inbound -Protocol TCP -LocalPort 445 -RemoteAddress $peers -Action Block -Profile Domain
New-NetFirewallRule -DisplayName 'HP-Block-Peer-RPC' -Direction Inbound -Protocol TCP -LocalPort 135 -RemoteAddress $peers -Action Block -Profile Domain
# Verify
Get-NetFirewallRule -DisplayName 'HP-Block-Peer-*' | Get-NetFirewallPortFilter
# Rollback
# Remove-NetFirewallRule -DisplayName 'HP-Block-Peer-SMB','HP-Block-Peer-RPC'
# Do not apply to file servers, print servers or jump hosts: block rules override allow rules
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-isolate hosts with a hit on Q1, Q2, Q4 or Q8 using your EDR containment. Do NOT reboot before collecting memory: Solar recovered Vasilek exchanges from the memory of legitimate processes that code was injected into from vmtools.dll [1]. Preserve the VMware Tools folder, the System32 DLLs, the service keys and event logs first. Remember the schedule: tunnels start on Saturdays 22:00 to 23:00 and Vasilek starts 480 minutes after the service starts, so a quiet host is not clean.IRMemory image, folder copy, service export, System and Security logs
Isolate: by platformCrowdStrike: network-contain the host. SentinelOne: network quarantine (Disconnect from Network; confirm the label in your console version). Microsoft Defender: Isolate device (full network isolation). Keep the host powered on for memory capture on all of them.IRMemory image, folder copy, service export, System and Security logs
EradicateAfter preservation: disable the vmauad service and any of the five named services, remove the unsigned files, and restore the genuine vmtools.dll only from the vendor package after verifying its signature (do not trust the retained vmtoolsd.dll without a signature check). Hunt for the other tools on the same host: GOST (gost.yml), 3proxy, DNSCat2 and PartisanDNS services in System32, and the AppMgmt service parameters.IRFile hashes, signature output, service list before and after
ScopeRun Q1 to Q10 for the full retention window and Section 7 natively. Assume multi-tool intrusion: search DNS for tunnels and generated domains, search servers for api.telegram.org, and review every domain controller and management server. Check delayed or scheduled destructive payloads, since the group is known for wipers [1].IR and threat huntingPer-host findings table, DNS and proxy extracts
RecoverReset credentials broadly where domain controllers or management servers were touched (all privileged accounts, service accounts, and the directory service account that protects Kerberos tickets, twice, per your directory team's procedure). Rebuild affected servers from known-good images rather than cleaning in place where feasible. Notify subsidiary and partner organizations on both sides of each trust and review the trust relationships.Identity and infrastructureReset log, rebuild tickets, partner notification record
Prevent recurrenceHardening 1 to 10 in Section 12 and Playbooks 1 to 5; keep Q1, Q2 and Q8 scheduled, and review every antivirus verdict for Vasilek or GOST rather than closing it (Solar saw them flagged long before the investigation) [1].Security engineeringControl verification output
15

Detection Coverage Map

TechniqueBehaviorCQLIOACrowdStrike coverageSentinelOneDefender XDR
T1543.003Five masquerading services createdQ1, Q2n/aGood (needs CreateService fields validated)Partial: Q1 approximatePartial: Q1 approximate, Q2 approximate
T1036.004, T1036.005VMware and WSUS lookalike names and display namesQ1, Q2, Q3Q2Partial (name-based; relies on unsigned test)Partial: Q1 approximate, Q3 approximatePartial: Q1 approximate, Q2 approximate, Q3 approximate
T1574.004 (Solar ID)vmtools.dll swapped, original retainedQ3, Q4n/aPartial (file write only; module load of the DLL is a gap)Partial: Q3 approximatePartial: Q3 approximate, Q4 telemetry gap
T1090GOST and 3proxy tunnels, weekly windowQ2, Q4, Q8Q8Partial (tunnel traffic itself is outside endpoint telemetry)Partial: same limit as CrowdStrikePartial: Q2 approximate, Q4 telemetry gap
T1059.003, T1070.004Vasilek shell commands and self-deleteQ8Q8Good for children of the masquerade parentsGood, with assumptionsGood, with assumptions
T1102.002, T1041Telegram Bot API C2 and exfiltrationQ7n/aPartial (proxy-resolved DNS hides the host; legitimate Telegram use collides)Partial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1071.004, T1568.002DNSCat2 and PartisanDNS tunnels, generated domainsQ5n/aPartial (published domains only; algorithm unknown; analytics are outside endpoint telemetry)Partial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1071.001Published IPsQ6n/aPartial (shared CDN addresses)Partial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1047, T1021.002wmiexec-style remote execution with ADMIN$ outputQ9Q9GoodGood, with assumptionsGood, with assumptions
T1569.002, T1112AppMgmt service parameter swapQ10n/aPartial (a fast set-and-restore may be missed)Partial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1021.001Legitimate RDP used for movementnonen/aGAP (unscoped, needs logon baselining; Section 7)GAPGAP
T1548.004runas elevation via cadmin and force_cadminQ8 (child lineage only)n/aGAP (the policy read and relaunch are not distinguishable)GAP: same limit as CrowdStrikeGAP: same limit as CrowdStrike
T1480.001, T1497.001Host-name keyed payloads, sandbox checksnonen/aGAP (evasion by design; explains silent sandboxes)GAPGAP
T1070.006Timestomping to 2020 VMware datesnonen/aGAP (no timestamp telemetry; use the Section 7 timeline check)GAPGAP
T1113, T1056.001, T1010, T1082, T1016Screenshots, keylogging, window tracking, discovery inside Vasileknonen/aGAP (no mappable endpoint events)GAPGAP
T1573.002Embedded TLS stack ClientHellononen/aGAP (outside endpoint telemetry; JA3 or JA4 on network sensors)GAPGAP

Honest gaps. No query sees the module load of the swapped vmtools.dll, Vasilek's own capabilities, the host-name keying or timestomping. A zero result from Q2, Q3 or Q8 is meaningful only if the authenticode field is populated and the sensor ran on that host during the window. The hash and domain queries (Q4, Q5) miss anything the actors rotated since Solar's snapshot. Validation gates are in Section 11; none has been run yet, and every positive control is marked Not yet run.

16

Hunt Summary Ticket

TITLE:      Hunt for Vasilek backdoor and loader hidden in VMware Tools (Partisan Zmiy / Cyber Partisans)
SEVERITY:   High (about two years of dwell, domain controller access reported; destructive payloads possible)
SCOPE:      Windows servers, workstations and domain controllers, especially hosts with VMware Tools installed or unused
HYPOTHESIS: A service named vmauad (or four System32 DLL services) runs an unsigned authd.exe from the VMware Tools folder,
            which schedules GOST (Saturday 22:00-23:00) and Vasilek (480 minutes after service start); Vasilek talks to a
            Telegram group through the Bot API while DNS tunnels and proxy chains give fallback access.
QUERIES:    Q1-Q10 (Section 8); native log, signature and timeline hunts (Section 7)
DO FIRST:   1) Run Q1, Q2 and Q8 across all Windows hosts and domain controllers.
            2) Run the Playbook 1 signature sweep on hosts with VMware Tools.
            3) Import the Section 10 CSV (detect only) and run Q4, Q5.
FINDINGS:   [fill in after execution]
GAPS:       Module load of the swapped DLL, screenshots and keylogging, host-name keying and timestomping have no endpoint
            telemetry mapping; DNS tunnel analytics and TLS fingerprints are outside endpoint telemetry.
ACTIONS:    Promote Q2, Q8, Q9 to Custom IOA (detect only) after the Section 11 gates pass. Deploy Playbooks 1-5 on a pilot ring.
            No prevent actions: single-source indicators and legitimate-software collisions.
OWNER:      HuntPack
VERSION:    v0.1 -- 2026-10-25
17

Changelog

v0.12026-10-25Initial HuntPack (draft). Built from the Solar 4RAYS report plus three press reports and one background page, all saved verbatim. 43 importable atomic indicators (41 detect, 0 prevent, 2 no_action) and one labelled placeholder; every indicator was read from the saved Solar snapshot. Ten queries, three IOA candidates, five read-only or reversible playbooks. Publication date taken from the Solar page (2 October 2026), not from later press dates. SentinelOne PowerQuery and Microsoft Defender KQL tabs added to Q1-Q10: SIEM Query Rosetta release 0.1.0 (public-beta; static-reviewed translations).
18

References

TierSourceUsed ForAccess Date
1Solar 4RAYS: Partisan Zmiy: снова на радареIntrusion facts, loader behavior and schedule, Vasilek commands, MITRE matrix, all indicators2026-10-25
2The Hacker News: Hackers Hid Vasilek Backdoor in VMware Tools During 2-Year Russian Healthcare IntrusionCorroboration, move_cursor, background on other tools2026-10-25
2Cyber Security News: Hackers Hide Vasilek Backdoor Inside VMware Tools to Target Medical OrganizationsAppendix reprint, vmtools.dll discrepancy, unknown entry vector2026-10-25
2Cyberpress: Partisan Zmiy Hackers Use Telegram-Controlled Vasilek Backdoor to Spy on Healthcare NetworksCorroboration of incident background2026-10-25
1Kaspersky ICS CERT: TTPs of Cyber Partisans activity aimed at espionage and disruptionBackground on Vasilek first description (no indicators used)2026-10-25
3MITRE ATT&CK mitigations M1026, M1030, M1032, M1035, M1037, M1038, M1042, M1047, M1018Hardening citations (mitigation IDs from the threat-hardening reference, not fetched in this run)not fetched

The first five sources are saved verbatim to Vasilek-PartisanZmiy-VMwareTools-Hunt-sources/ as 01 to 05 for provenance re-verification. The Solar page is in Russian; the English quotations and summaries in this pack are the analyst's translation. A sixth outlet (SC Media) could not be retrieved and is not cited. Indicators are perishable: re-verify against the Solar report before acting.