Yoba: Fake ChatGPT and Claude Desktop Apps, Signed-Binary DLL Sideload

Check Point Research's Yoba campaign: attacker GitHub repositories and Pages sites advertise desktop apps named GPT-5.6 Sol, GPT-6 Astra and Claude Opus; each ZIP pairs a legitimate signed Setup.exe with a malicious winmm.dll (YobaDropper) that deploys YobaLoader, which fetches an XMRig miner through Telegram, Google DNS-over-HTTPS and Catbox. Built on the Check Point report of 2026-10-27. No compromise of OpenAI or Anthropic is indicated.
Threat
Yoba (YobaDropper, YobaLoader; observed payload XMRig 6.26.0)
Severity
HIGH · GENERIC LOADER, MINER OBSERVED
Type
Fake AI desktop apps, signed-binary DLL sideload, DGA and DoH tasking, cryptominer
Access Vector
User downloads a ZIP from an attacker GitHub release and runs the signed Setup.exe as administrator
Version
v0.1 (Draft) · 2026-11-02
Author
HuntPack
Confidence
High on the chain and indicators (one detailed vendor report); no second independent source, so all indicators ship detect
01

Executive Summary

Attacker objective. Yoba is a Windows malware chain that Check Point Research tracked for about two months and published on 2026-10-27. The operator creates GitHub repositories and GitHub Pages sites that advertise desktop apps for new AI products (lure names GPT-5.6 Sol, GPT-6 Astra and Claude Opus), ranks them in Google by what Check Point assesses as SEO poisoning, and hosts the malware as an unprotected ZIP release. Each ZIP pairs a legitimate, signed OpenAI or Anthropic Setup.exe with a malicious winmm.dll that the signed program loads (DLL sideloading). [#1] [#2]

The chain. The DLL (YobaDropper) checks that its host is named Setup.exe, skips CIS keyboard layouts (Ukrainian is not excluded), and needs administrator rights. It then writes a copy of the Windows file WMPDMC.exe and the loader (YobaLoader, saved as wmpdui.dll) into ProgramData\WMProcess and registers a SYSTEM scheduled task that starts the copy 3 minutes after boot. The loader reads the profile picture of a Telegram channel, derives a domain from the image, asks Google DNS-over-HTTPS for a signed and encrypted TXT record, and downloads the payload from Catbox. The payload observed was XMRig 6.26.0 injected into svchost.exe, mining through Tor and pausing while the user is active. [#1] [#2]

Why it matters. The loader is generic: it can run any Windows executable or PowerShell script the operator signs and sends, so the miner is only the first payload seen. Check Point advises treating a Yoba infection as a broader compromise, not a cryptominer cleanup. The signed OpenAI and Anthropic files are real vendor binaries; Check Point found no sign that OpenAI, Anthropic, ChatGPT or Claude were compromised. A valid signature vouches for one file, not for the DLL sitting next to it. [#1] [#2] [#3]

What is different from the common summary. The roughly 12.73 day delay (200,000 iterations of Sleep(5500)) runs when the host process is not named Setup.exe, which is the sandbox and standalone-run branch, not the normal path. In a real infection the dropper and the loader's first callback are separated by the time to the next reboot, because the task fires 3 minutes after boot. The pack therefore hunts the stage pairing (Q11), not a fixed 12 day gap. [#1] [#2]

Defender priority. (1) Alert on any winmm.dll outside the Windows system folders next to a Setup.exe, and on any WMPDMC.exe or wmpdui.dll outside the Windows and Media Player folders (Q2, Q3, Q5, Q6, Q12). (2) Never block on the signed OpenAI or Anthropic executables, on winmm.dll or WMPDMC.exe by name, on svchost.exe, on Telegram, Google DoH or Catbox, or on stock XMRig: all are legitimate software or services that Yoba abuses. (3) Every indicator comes from one vendor report, so everything ships as detect.

02

Source Review & Web Hunter Notes

Five sources were fetched and saved verbatim as text snapshots for the provenance gate, in Yoba-FakeAIApps-Sideload-Hunt-sources/. Every atomic indicator in this pack was parsed by script from snapshot 01 and then checked against the snapshot text; none was typed from memory or from a search summary.

#TierSourceKey findingCarry forward
1T1Check Point Research: Tricks from the Past deployed via signed ChatGPT and Claude binaries, 2026-10-27 (snapshot 01)Primary technical report by Eli Smadja. Full chain, the DJB2 checks and the 200,000 x Sleep(5500) loop, WMProcess and WMPDMC.exe persistence, Telegram + DGA + DoH + Catbox tasking, XMRig 6.26.0 configuration, hashes (SHA-1 only), network indicators, YARA rules.yes
2T1Check Point Blog: Yoba Malware Abuses Signed ChatGPT and Claude Binaries to Target AI Users, 2026-10-27 (snapshot 02)Same vendor, plain-language companion. States the signed binaries are legitimate, that nothing at OpenAI or Anthropic was compromised, and that Yoba should be treated as a broader compromise. Not an independent source: it summarises report 1.yes (context)
3T3Help Net Security, 2026-10-29 (snapshot 03)Press coverage of report 1. Used only to cross-check the scheduled-task description and the Cursor.exe earlier variant. No indicator taken from it.partial
4T3Security Affairs, 2026-10-30 (snapshot 04)Press coverage of report 1. Confirms that the 12.73 day sleep happens on the failed host-name check. No indicator taken from it.partial
5T3Infosecurity Magazine, 2026-10-28 (snapshot 05)Press coverage of report 1. Confirms the signed Setup.exe loads the DLL and the checks run before the second stage. No indicator taken from it.partial

Decisions

  • No independent second source. Sources 2 to 5 all derive from source 1. A search for a second vendor analysis of Yoba returned only press coverage of the Check Point report. Under the two-independent-sources rule nothing in this pack ships as prevent or critical: every indicator is detect or hunt.
  • Legitimate software stays out of the block list. The signed OpenAI and Anthropic executables, winmm.dll, WMPDMC.exe, svchost.exe, Telegram, Google DNS-over-HTTPS, Catbox, GitHub, dedyn.io and stock XMRig are real software or services. They appear as hunt context only.
  • SHA-1 only. Check Point publishes SHA-1 hashes and no SHA-256. Falcon IOC Management does not import SHA-1, so the hashes are in their own copy block (section 10) and in Q1.
  • Names. The names Yoba, YobaDropper, YobaLoader and XMRig are Check Point's own and appear in the snapshots. No actor or cluster name is used. Check Point says the actor shows indicators of Russian origin and works mostly in UTC-4; that is its assessment, not an attribution, and the pack does not name a group.
  • Fetched content was treated as data. No instruction-like text was found in any cited snapshot.
03

Hunt Brief & Attack Chain

Eight hypotheses, ordered by fidelity. Telemetry is named in plain terms first, then by platform.

  1. H1 (high): a published YobaDropper or YobaLoader hash, or the XMRig payload hash, ran or was written (Q1). T1204.002, T1574.002. FP: none expected. Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Executable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents); File hash (CrowdStrike: SHA1HashData. SentinelOne: tgt.process.image.sha1. Defender: SHA1, because SHA256 is usually not populated).
  2. H2 (high): the persistence host exists: WMPDMC.exe or wmpdui.dll outside the Windows and Media Player folders, or a task for it (Q5, Q6, Q12). T1574.002, T1036.005, T1053.005. FP: very few: a portable media kit. Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Executable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents); Scheduled task creation (CrowdStrike: ScheduledTaskRegistered. SentinelOne: Task Register, confirm the spelling on a tenant. Defender: DeviceEvents ScheduledTaskCreated).
  3. H3 (high): the loader runs inside WMPDMC.exe and talks to Telegram, Google DoH, Catbox or a generated domain (Q7, Q8, Q12). T1102.001, T1568.002, T1071.004, T1105. FP: chat clients and developer tools for Q7 only. DNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents).
  4. H4 (high): a host connects to the two reported Tor bridge addresses, or to the local SOCKS5 port 9550 (Q9, Q10). T1090.003, T1573.002, T1496. FP: none expected. Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents); Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents).
  5. H5 (medium): the signed Setup.exe and a user-path winmm.dll are present together, written by an archive or shell process (Q2, Q3, Q4). T1574.002, T1204.002. FP: games and audio tools that bundle winmm.dll; every Setup.exe in Downloads. Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Executable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents).
  6. H6 (medium): a host shows two or more Yoba stages, so the stage pairing ranks above a single event (Q11). T1574.002, T1053.005, T1102.001. FP: low. Executable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents); Scheduled task creation (CrowdStrike: ScheduledTaskRegistered. SentinelOne: Task Register, confirm the spelling on a tenant. Defender: DeviceEvents ScheduledTaskCreated); DNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse).
  7. H7 (medium): the loader delivered a second payload as a random-named TEMP executable or hidden PowerShell script (Q13). T1059.001, T1553.005. FP: installers and management tools. Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents).
  8. H8 (low): the WinRing0 driver service was registered for MSR mining tuning (Q14). T1543.003, T1496. FP: hardware tools that bundle WinRing0. Service creation (CrowdStrike: CreateService. SentinelOne: no listed event type, use Windows event 7045. Defender: DeviceRegistryEvents on the Services key).

Attack chain

StepWhat happensTelemetryQuery
1 LureSEO-poisoned GitHub repositories and GitHub.io pages; ZIP downloaded from a GitHub releaseWeb proxy and DNS logs (outside endpoint telemetry); file write of the ZIPN1; hardening T1
2 ExecutionUser unzips and runs the signed Setup.exe from Downloads or an extraction folderProcess creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Q4
3 SideloadThe signed binary loads winmm.dll from its own folder; DLL has 180 empty exportsExecutable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents). DLL-load events are not queried here.Q2, Q3
4 Pre-checksDJB2 hash of host name must equal Setup.exe or the DLL sleeps 200,000 x 5.5 s (12.73 days); CIS keyboard layouts skipped; admin required (message shown if not)Little endpoint telemetry. A long-lived Setup.exe on the failure branch is a gap (section 15).Q11 note; gap
5 DeployCreates ProgramData\WMProcess, copies WMPDMC.exe from System32, writes the decrypted loader as wmpdui.dllExecutable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents); Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Q5
6 PersistScheduled task, author Microsoft Corporation, description about Windows Media Player metadata, Local System, boot delay PT3MScheduled task creation (CrowdStrike: ScheduledTaskRegistered. SentinelOne: Task Register, confirm the spelling on a tenant. Defender: DeviceEvents ScheduledTaskCreated)Q6
7 TaskingLoader runs only in WMPDMC.exe; Telegram channel picture seeds a DGA; Google DoH TXT lookup; Ed25519-checked, AES-decrypted URL to CatboxDNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)Q7, Q8, Q12
8 PayloadMethod 1 inject into svchost.exe; method 2 TEMP random-name exe after removing Zone.Identifier; method 3 hidden PowerShell scriptProcess creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Q13, Q12
9 MiningXMRig 6.26.0 in svchost.exe, bundled Tor 0.4.9.12 and lyrebird 0.8.1, SOCKS5 on 127.0.0.1 port 9550, obfs4 bridges, pauses while the user is active, optional WinRing0 driverOutbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents); Service creation (CrowdStrike: CreateService. SentinelOne: no listed event type, use Windows event 7045. Defender: DeviceRegistryEvents on the Services key)Q9, Q10, Q14

[#1] [#2]

04

Consolidated IOC Table

Nothing here is prevent. Every atomic indicator is single-sourced to one vendor report, and several rows are legitimate software or services abused by the actor (signed OpenAI and Anthropic binaries, winmm.dll, WMPDMC.exe, svchost.exe, Telegram, Google DoH, Catbox, dedyn.io, stock XMRig). Both IP rows were read from the Check Point IOC table and are IPv4 addresses, not version numbers.

TypeValueConfidenceActionContext
Domaincalm-piano-floats-313.dedyn[.]iomediumdetectThe one DGA output Check Point lists. The name rotates with the Telegram picture, so treat it as a sample. The apex dedyn.io is a legitimate service and is never blocked. [#1]
Domaingpt-5-6.github[.]iomediumdetectOperator GitHub Pages host for the ChatGPT lure. Subdomain only; github.io itself is legitimate. [#1]
Domaingpt-6-astra.github[.]iomediumdetectOperator GitHub Pages host for the GPT-6 Astra lure. [#1]
Domainopus-5-0.github[.]iomediumdetectOperator GitHub Pages host for the Claude Opus lure. [#1]
IPv451.89.231[.]85 port 24526mediumdetectTor obfs4 bridge in the payload configuration. Bridge addresses rotate. [#1]
IPv451.89.228[.]250 port 21668mediumdetectTor obfs4 bridge in the payload configuration. [#1]
Onion3zciedc3enu4muwc5adxciyk6u3juhvhvbv6bfrk2arawlvb7k7ovxad[.]onion port 443mediumhuntTLS mining endpoint reached through the local Tor client. Not importable as a domain row; hunt in proxy or firewall logs only. [#1]
Repositorygithub.com/gpt-5-6/sol-free-desktop, github.com/gpt-5-6/gpt-5-6.github.io, github.com/gpt-6-astra/gpt-6-astra.github.io, github.com/opus-5-0/opus-5-0.github.iomediumhuntAttacker-created repositories. Search proxy logs for downloads; never block github.com. [#1]
Release ZIPsol-setup.zip, Setup-Claude.zip, GPT-6-Astra-Setup.zipmediumhuntRelease asset names. [#1]
Telegramt.me/yoba_fanclubmediumhuntChannel whose profile picture seeds the DGA. Telegram is legitimate; hunt for non-browser, non-Telegram processes fetching it. [#1]
DoH URLdns.google/resolve?name=<generated name>&type=TXTmediumhuntGoogle DoH query form used by the loader. Google DNS is legitimate. [#1]
URLfiles.catbox.moe/z5zpy9.datmediumhuntPayload URL seen in the wild. Catbox is a legitimate file host; the URL path is the indicator. [#1]
Hash (SHA-1)5 YobaDropper, 9 YobaLoader, 1 injected XMRig payloadmediumdetectMalicious DLLs and payload. Full values in the grab-sha1 block (section 10) and Q1. [#1]
Hash (SHA-1)2 release ZIPs, 1 Telegram image, 1 encrypted payload filemediumhuntContainer and data files, not executed images. grab-sha1 block. [#1]
Hash (SHA-1)2 signed OpenAI and Anthropic binarieslegitimatehuntLegitimate signed vendor files. Detect or hunt only, never prevent. Use them to recognise the lure, not to alert. [#1]
PathProgramData\WMProcess\WMPDMC.exe, ProgramData\WMProcess\wmpdui.dllhighdetectPersistence host and loader. WMPDMC.exe in System32 is legitimate. [#1] [#3] [#4]
Version stringXMRig 6.26.0, Tor 0.4.9.12, lyrebird 0.8.1contextnoneSoftware version numbers, not addresses. Not in any IP row. [#1]
05

Affected Surface & Telemetry Matrix

SurfaceTelemetryPriorityGap risk
Windows endpoints where staff download AI desktop apps (developer and power-user workstations first)Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Executable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents); File hash (CrowdStrike: SHA1HashData. SentinelOne: tgt.process.image.sha1. Defender: SHA1, because SHA256 is usually not populated)CriticalSigned vendor binary plus a DLL beside it looks normal to reputation checks. The 12.73 day sleep branch leaves a long-lived Setup.exe that process telemetry does not show well.
Persistence host under ProgramDataScheduled task creation (CrowdStrike: ScheduledTaskRegistered. SentinelOne: Task Register, confirm the spelling on a tenant. Defender: DeviceEvents ScheduledTaskCreated); Executable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents)HighTask fields vary by sensor version. Test that Q6 returns a benign test task (section 11).
Loader tasking and payload downloadDNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)HighThe DoH request is HTTPS to Google and is invisible as DNS content. Only the lookup of dns.google, t.me and files.catbox.moe is visible. Telegram page fetches need a proxy or TLS log, outside endpoint telemetry.
Miner and Tor egressOutbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents); Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)HighInjected code inside svchost.exe has no process of its own. Loopback connections may not be logged by the sensor.
Web proxy, DNS server and firewall logsProxy URL and user-agent logs; DNS resolver logs; firewall flows (outside endpoint telemetry)MediumCovers unmanaged hosts and the lure stage, which endpoint telemetry cannot see.
GitHub release downloads and search referralsProxy logs for github.com release downloads and github.io page visits (outside endpoint telemetry)MediumOnly visible where the proxy sees the download.
06

ATT&CK Mapping

TacticTechniqueObserved behaviorQuery or control
Resource DevelopmentT1608.006 SEO PoisoningFake GitHub projects and Pages sites rank in Google results (Check Point assessment)N1; Hardening T1
ExecutionT1204.002 User Execution: Malicious FileUser opens the ZIP and runs the signed Setup.exeQ4; Hardening T1, T3
Defense EvasionT1574.002 DLL Side-LoadingSigned Setup.exe loads winmm.dll from its own folder; later WMPDMC.exe loads wmpdui.dllQ2, Q3, Q5, Q12; Hardening T3, T6
Defense EvasionT1497.003 Time Based Evasion200,000 x Sleep(5500) (12.73 days) when the host name check failsQ11 note; gap
Defense EvasionT1480 Execution GuardrailsDJB2 host-name check, CIS keyboard-layout check, administrator checkgap (no telemetry)
DiscoveryT1614.001 System Language DiscoveryKeyboard-layout bitmask test for CIS-region languages, Ukrainian exceptedgap (no telemetry)
Defense EvasionT1036.005 Match Legitimate Name or LocationCopy of WMPDMC.exe in ProgramData\WMProcess; task author Microsoft CorporationQ5, Q6
PersistenceT1053.005 Scheduled TaskSYSTEM task, boot trigger delayed PT3M, launches the copied WMPDMC.exeQ6; Hardening T4
Defense EvasionT1140 Deobfuscate/Decode Files or InformationXOR-decrypted strings and embedded payload; AES-ECB responseQ1
Command and ControlT1102.001 Dead Drop ResolverTelegram channel picture read for seed data; Google DoH TXT record read for taskingQ7, Q12
Command and ControlT1568.002 Domain Generation Algorithmsadjective-noun-verb-number names under dedyn.io from the last 50 bytes of the pictureQ8
Command and ControlT1071.004 Application Layer Protocol: DNSTXT record fetched through Google DNS-over-HTTPSQ7; Hardening T7
Command and ControlT1105 Ingress Tool TransferEncrypted payload downloaded from CatboxQ7, Q12
ExecutionT1059.001 PowerShellMethod 3 runs a script with -WindowStyle Hidden -ExecutionPolicy Bypass -FileQ13
Defense EvasionT1553.005 Mark-of-the-Web BypassZone.Identifier stream removed before method 2 runs the payloadQ13
Defense EvasionT1055 Process InjectionMethod 1 writes the payload into svchost.exe (NtWriteVirtualMemory, NtCreateThreadEx)gap (no injection telemetry); Q9, Q10 indirect
Command and ControlT1090.003 Multi-hop ProxyBundled Tor client with obfs4 bridges; SOCKS5 on 127.0.0.1 port 9550Q9, Q10
ImpactT1496 Resource HijackingXMRig 6.26.0 at about 85 percent CPU threads, pauses while the user is activeQ9, Q10, Q14; Hardening T3
PersistenceT1543.003 Windows ServiceOptional WinRing0 driver service for MSR tuningQ14

[#1]

07

Native Audit-Log Hunts

IDSourceWhat to look forPass condition
N1Web proxy or secure web gateway logsDownloads from github.com/<user>/<repo>/releases/download/... of sol-setup.zip, Setup-Claude.zip or GPT-6-Astra-Setup.zip; visits to gpt-5-6.github.io, gpt-6-astra.github.io, opus-5-0.github.io; the four repository paths in section 4. Last 90 days.No match. Any match: identify the user and host and run Q1 to Q6 on it.
N2Web proxy or TLS inspection logsUser agent Mozilla/5.0 (Windows NT 10.0; Win64;) (as the loader sends it) fetching t.me/yoba_fanclub; requests to dns.google/resolve with type=TXT from a non-browser client; requests to files.catbox.moe ending .dat.No match. A Telegram, dns.google and Catbox sequence from one client within minutes is the loader.
N3Windows Security log event 4698 and Task Scheduler Operational event 106 (enable both first, playbook P3)A task whose action runs an executable under ProgramData\WMProcess; task author Microsoft Corporation with an action outside the Windows folders; description about collecting device metadata for Windows Media Player; boot trigger delay PT3M; principal SYSTEM.No match.
N4Sysmon (event 1 process create, 7 image load, 11 file create)Event 7: winmm.dll loaded from a path outside the Windows system folders by Setup.exe; wmpdui.dll loaded by a WMPDMC.exe outside System32. Event 11: winmm.dll or wmpdui.dll created in a user or ProgramData folder.No match. Image-load events are the direct view of the sideload that Falcon CQL here does not query.
N5Sysmon event 8 (CreateRemoteThread) and event 10 (ProcessAccess), or EDR injection alertsA source image under ProgramData\WMProcess or a WMPDMC.exe writing into svchost.exe (method 1 uses NtWriteVirtualMemory and NtCreateThreadEx).No match.
N6Firewall, NGFW application-ID or NetFlowOutbound to 51.89.231.85 port 24526 or 51.89.228.250 port 21668; obfs4 or Tor application signatures from servers and workstations that have no Tor use; sustained TLS to an unknown endpoint from svchost.exe.No Tor traffic outside approved research hosts.
N7Windows System log event 7045 and Sysmon event 6 (driver loaded)A service or driver with WinRing0 in its name or path (the payload can load it conditionally).No match, or a reviewed hardware tool.

[#1]

08

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

Show all queries in

Fourteen queries. Set the time window with the Falcon time picker. Q1 to Q6, Q8, Q9 and Q12 are the high-fidelity set; Q2, Q3, Q4, Q7, Q13 and Q14 are broader and carry tuning lines inside the query.

Pick your tenant's cloud first: every "Open in Falcon" button below uses this selection.
Q1 · Published Yoba sample hashes ran or were written
CONF HIGHFP LOWCOST LOW

Looks for: a published YobaDropper or YobaLoader DLL, or the injected XMRig payload, executed or was written to disk, matched on SHA-1 (the only hash type the report publishes).

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: A sample that is neither started nor written during the window, or whose hash the sensor did not record, is not captured.
  • PowerQuery assumes: tgt.process.image.sha1 and tgt.file.sha1 are populated on this tenant.
  • PowerQuery assumes: File Creation and File Modification cover the executable-write population the CQL reads.
  • KQL – Defender XDR: A sample that is started but never written to disk in the window is not captured: the CQL's process-start hash match has no place in a single-table query.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; the CQL tab covers 90 days.
  • KQL – Defender XDR assumes: SHA1 is populated for file events on this tenant.
// HUNT: Published Yoba sample hashes (YobaDropper, YobaLoader, injected XMRig payload) executed or written
// MITRE: T1204.002, T1574.002, T1496
// CONF: high  FP: low  COST: low
// REQUIRES: process creation with hash (ProcessRollup2, SyntheticProcessRollup2) or executable write with hash (PeFileWritten, NewExecutableWritten)
// FALSE POSITIVES: none expected; each value is a Check Point sample hash of a malicious DLL or of the injected payload
// SOURCE: SHA-1 values copied by script from snapshot 01 (one vendor only, so this is a detect, never a block)
// LOOKBACK: 90d. Set the window with the Falcon time picker.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(SHA1HashData, values=[
    "17e8639a00bb32b10cb9cf0d292e9441456ce4bb",
    "20238b36645fc63139a76b19a480c6a9166472fa",
    "4ea5b71202b69fc27b06ef9ee3f6f51d6f7b8586",
    "60aece343959a2e1840f6aaeffa38b73ed21af2c",
    "8777db31d8df78f36e4544a132d843dfb2a0f026",
    "22661f4bada8167fa0f410b75e53184998990abb",
    "2ecb5548e9774a3d05e8669e8414dcc366929b79",
    "3fef1af3664429e621d3e0f9408cb5102ef02b84",
    "55043ea6d102670c014e2be5a8197e70b7c201cb",
    "79e87a6df59d68b2dbd2c43950df5663d671007c",
    "7dfcee02732ed89f1ddf25d1689863c26de3df15",
    "bead5748d813a9828ddb7603a32e52aa15349768",
    "cf90c4599257e76984a199d98b1fd082b820a54d",
    "eeedc5c9007d7f01808285e0ae0c0b451bdba003",
    "ea16728f6928dc77deaddee74a6e736dd5f24fc5"
  ], ignoreCase=true)
| table([@timestamp, aid, ComputerName, UserName, #event_simpleName, FileName, ImageFileName, TargetFileName, SHA1HashData, ParentBaseFileName, ContextBaseFileName, CommandLine], limit=500)
| sort(@timestamp, order=desc)
Q2 · Setup.exe and winmm.dll together in a user-writable path on one host
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: a host where both a user-path Setup.exe and a user-path winmm.dll appear, which is the shape of the ZIP Check Point describes (a signed Setup.exe beside a malicious winmm.dll). The signed binary is a legitimate vendor file, so this query never alerts on the executable alone. FP: a game or audio tool that bundles its own winmm.dll beside a Setup.exe. Exclude the reviewed folder by full path and confirm with Q3 and Q4.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analyticProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The path is a single sample per host (no collect aggregate), so a host with several folders shows only one of them.
  • PowerQuery assumes: Process Creation, File Creation and File Modification cover the CQL's process and executable-write events.
  • PowerQuery assumes: matches and contains are case-insensitive by default, which reproduces the CQL /i intent.
  • KQL – Defender XDR: A Setup.exe that is started but whose file write is outside the window is not counted.
  • KQL – Defender XDR assumes: FolderPath holds the folder of the file; contains is case-insensitive, which reproduces the CQL /i intent.
// HUNT: Setup.exe and winmm.dll seen together in a user-writable path on one host (Yoba DLL sideload pairing)
// MITRE: T1574.002, T1204.002
// CONF: medium  FP: medium  COST: medium
// REQUIRES: process creation (ProcessRollup2) and executable write (PeFileWritten, NewExecutableWritten)
// FALSE POSITIVES: games and audio tools that ship their own winmm.dll next to an installer named Setup.exe; software packagers staging both files
// TUNING: exclude a reviewed installer by full path, for example | path_seen!=/\\YourVendorFolder\\/i ; then require a hit from Q3 or Q4 before escalating. Grouping is per host, not per folder, so read the collected paths to confirm the two files share a folder.
// LOOKBACK: 30d. Set the window with the Falcon time picker.
#event_simpleName=/^(ProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| FileName=/^(winmm\.dll|setup\.exe)$/i
| path_seen := coalesce([TargetFileName, ImageFileName])
| path_seen=/\\(Users|ProgramData)\\/i
| path_seen!=/\\(Windows|Program Files)\\/i
| lower(FileName, as=NameLc)
| groupBy([aid, ComputerName], function=[count(NameLc, distinct=true, as=distinct_names), collect([path_seen]), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=1000)
| distinct_names = 2
| table([ComputerName, aid, distinct_names, path_seen, FirstSeen, LastSeen], limit=200)
Q3 · winmm.dll written to a user path by an archive or shell process
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: a winmm.dll PE file landing in a profile or ProgramData folder from an archive tool, Explorer or a browser. Check Point reports the malicious DLL ships inside the GitHub release ZIP, so unpacking is how it reaches disk. FP: game mods and audio wrappers unpacked by Explorer. Exclude the reviewed folder by full path (see the TUNING line in the query).

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A DLL written by a process outside the listed writer names is not captured.
  • PowerQuery assumes: File Creation and File Modification cover the CQL's executable-write events.
  • PowerQuery assumes: src.process.name is the writer on a file event.
  • PowerQuery assumes: in:anycase reproduces the CQL case-insensitive writer-name match.
  • KQL – Defender XDR: A DLL written by a process outside the listed writer names is not captured.
  • KQL – Defender XDR: SHA256 is often unpopulated in DeviceFileEvents; SHA1 is the safer pivot.
  • KQL – Defender XDR assumes: FolderPath holds the folder of the written file.
  • KQL – Defender XDR assumes: ActionType FileCreated and FileModified cover the CQL's executable-write events.
// HUNT: winmm.dll written outside the Windows system folders by an archiver, Explorer or a browser (ZIP from a GitHub release unpacked)
// MITRE: T1574.002, T1204.002
// CONF: medium  FP: medium  COST: low
// REQUIRES: executable write with writer process (PeFileWritten, NewExecutableWritten)
// FALSE POSITIVES: game mods and audio wrappers unpacked by Explorer or an archiver; legitimate winmm.dll is only in the Windows system folders
// TUNING: exclude a reviewed game or tool folder by full path, for example | TargetFileName!=/\\YourGameFolder\\/i . The bare file name winmm.dll is a real Windows DLL name, so never alert on the name alone; the user-path and writer-process conditions are what make this useful.
// LOOKBACK: 30d. Set the window with the Falcon time picker.
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| FileName=/^winmm\.dll$/i
| TargetFileName=/\\(Users|ProgramData)\\/i
| TargetFileName!=/\\Windows\\(System32|SysWOW64|WinSxS)\\/i
| ContextBaseFileName=/^(explorer|7zfm|7zg|7z|winrar|winzip32|winzip64|peazip|bandizip|tar|chrome|msedge|firefox|brave)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA1HashData, SHA256HashData], limit=500)
| sort(@timestamp, order=desc)
Q4 · Setup.exe run from a ZIP extraction, Downloads or Desktop folder
CONF LOWFP HIGHCOST LOW

Looks for: the execution step of the lure: a signed installer started from the place a downloaded ZIP is opened. Check Point names the ZIPs sol-setup.zip, Setup-Claude.zip and GPT-6-Astra-Setup.zip; a folder with the same stem is a stronger lead. FP: every ordinary installer called Setup.exe that runs from Downloads. Treat a hit as a lead and confirm with Q2 or Q3 on the same host.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Low confidence and high false-positive risk, as on the CQL tab: a triage lead, not an alert.
  • PowerQuery assumes: tgt.process.name holds the bare file name of the started process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i intent.
  • KQL – Defender XDR: Low confidence and high false-positive risk, as on the CQL tab: a triage lead, not an alert.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process.
// HUNT: Setup.exe launched from a ZIP extraction folder, Downloads or Desktop, or from a folder named after a Yoba lure ZIP
// MITRE: T1204.002, T1574.002
// CONF: low  FP: high  COST: low
// REQUIRES: process creation with image path, parent and hash (ProcessRollup2, SyntheticProcessRollup2)
// FALSE POSITIVES: any legitimate installer named Setup.exe that a user runs from Downloads or an unpacked ZIP; this is a triage lead, not an alert
// TUNING: join the hit to Q3 on the same aid and folder before escalating; exclude installers whose SHA1HashData matches an approved package, for example | SHA1HashData!=/^(REPLACE_WITH_APPROVED_SHA1)$/i ; the two signed binaries Check Point lists are legitimate vendor files, so their hashes alone are not a verdict.
// LOOKBACK: 30d. Set the window with the Falcon time picker.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^setup\.exe$/i
| ImageFileName=/\\(Downloads|Desktop)\\|\\Temp\\Temp[0-9]+_[^\\]+\.zip\\|\\(sol-setup|gpt-6-astra-setup|setup-claude)\\/i
| table([@timestamp, aid, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, SHA1HashData], limit=500)
| sort(@timestamp, order=desc)
Q5 · WMPDMC.exe or wmpdui.dll outside the Windows and Media Player folders
CONF HIGHFP LOWCOST LOW

Looks for: the persistence host: a copy of the Windows Media Player metadata executable, or a wmpdui.dll, in a folder such as ProgramData\WMProcess. YobaLoader only runs when its host process is WMPDMC.exe.

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: A wmpdui.dll that is loaded but neither written nor started in the window is not captured.
  • PowerQuery assumes: The image path of a started process and the path of a written file include the file name.
  • PowerQuery assumes: Process Creation, File Creation and File Modification cover the CQL's process and executable-write events.
  • KQL – Defender XDR: A copy of wmpdmc.exe that is started but whose write is outside the window is not captured.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; the CQL tab covers 90 days.
  • KQL – Defender XDR assumes: FolderPath holds the folder of the file.
// HUNT: WMPDMC.exe copy or wmpdui.dll written or run outside the Windows system and Media Player folders (YobaLoader sideload host)
// MITRE: T1574.002, T1036.005, T1053.005
// CONF: high  FP: low  COST: low
// REQUIRES: process creation (ProcessRollup2, SyntheticProcessRollup2) and executable write (PeFileWritten, NewExecutableWritten)
// FALSE POSITIVES: very few; a portable media-player kit or a lab copy of the Windows file. Both names are real Windows files, so the folder condition is the signal, never the name.
// SOURCE: Check Point (snapshot 01): the dropper copies WMPDMC.exe from System32 into ProgramData\WMProcess and writes the loader there as wmpdui.dll
// LOOKBACK: 90d. Set the window with the Falcon time picker.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| FileName=/^(wmpdmc\.exe|wmpdui\.dll)$/i
| path_seen := coalesce([ImageFileName, TargetFileName])
| path_seen!=/\\Windows\\(System32|SysWOW64|WinSxS)\\/i
| path_seen!=/\\Program Files( \(x86\))?\\Windows Media Player\\/i
| table([@timestamp, aid, ComputerName, UserName, #event_simpleName, FileName, path_seen, ParentBaseFileName, ContextBaseFileName, SHA1HashData], limit=500)
| sort(@timestamp, order=desc)
Q6 · Scheduled task launching WMPDMC.exe from ProgramData WMProcess
CONF HIGHFP LOWCOST LOW

Looks for: the scheduled task the dropper creates so the copied WMPDMC.exe starts three minutes after every boot and sideloads the loader. The task is dressed up with Microsoft as author, so match on the executable path, not the author.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: telemetry-gapProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The task registration, the author field and the delayed boot trigger are not visible; a task that never fires in the window is not captured.
  • PowerQuery assumes: The image path of a started process includes the file name.
  • KQL – Defender XDR: The task registration, the author field and the delayed boot trigger are not visible.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; the CQL tab covers 90 days.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process.
// HUNT: Scheduled task registered to launch WMPDMC.exe from ProgramData\WMProcess (YobaDropper persistence)
// MITRE: T1053.005, T1036.005
// CONF: high  FP: low  COST: low
// REQUIRES: scheduled task registration with task executable (ScheduledTaskRegistered)
// FALSE POSITIVES: none expected; no Windows component registers a task for a WMPDMC.exe outside System32
// SOURCE: Check Point (snapshot 01): task author set to Microsoft Corporation, runs as Local System, boot trigger delayed 3 minutes (PT3M)
// LOOKBACK: 90d. Set the window with the Falcon time picker.
#event_simpleName=ScheduledTaskRegistered
| TaskExecutable=/\\ProgramData\\WMProcess\\|%ProgramData%\\WMProcess\\|\\wmpdmc\.exe$/i
| TaskExecutable!=/^(C:)?\\Windows\\System32\\wmpdmc\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, TaskName, TaskExecutable, TaskAuthor], limit=500)
| sort(@timestamp, order=desc)
Q7 · Telegram, Google DoH and Catbox lookups from one non-browser process
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: the loader's three-service chain seen from a single non-browser process: Telegram channel page, Google DNS-over-HTTPS TXT lookup, Catbox payload host. The DoH request itself is HTTPS, so DNS telemetry shows only the lookup of dns.google. FP: chat clients and developer tools that legitimately reach these services. Add the reviewed process to the exclusion list (see TUNING in the query).

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Only one of the matching names is shown per row; the count of distinct services is exact.
  • PowerQuery assumes: event.dns.request is populated on DNS Resolved events (the vendor docs also name dns.request; check which one your tenant fills).
  • PowerQuery assumes: estimate_distinct is exact at this cardinality, and the request name arrives in one letter case.
  • PowerQuery assumes: domain_sample shows one of the names, not the full set (no collect aggregate).
  • KQL – Defender XDR: DnsQueryResponse events are not recorded for every resolver path, so a lookup the sensor did not log is not captured.
  • KQL – Defender XDR assumes: DnsQueryResponse events carry the queried name under DnsQueryString or QueryName in AdditionalFields; the readiness test prints both so a reader can see which key the tenant fills.
// HUNT: One non-browser process resolving two or more of t.me, dns.google and files.catbox.moe (YobaLoader Telegram, DoH, Catbox chain)
// MITRE: T1102.001, T1071.004, T1105
// CONF: medium  FP: medium  COST: medium
// REQUIRES: DNS lookup with requesting process name (DnsRequest)
// FALSE POSITIVES: chat clients, download managers and developer tools that use Telegram, Google DNS-over-HTTPS or Catbox legitimately
// TUNING: add the reviewed process to the exclusion list, for example | ContextBaseFileName!=/^(YourChatClient)\.exe$/i ; raise the threshold to three distinct names to cut noise further. Q12 is the higher-fidelity variant for the WMPDMC.exe host.
// LOOKBACK: 30d. Set the window with the Falcon time picker.
#event_simpleName=DnsRequest
| DomainName=/^(t\.me|dns\.google|files\.catbox\.moe)$/i
| ContextBaseFileName!=/^(chrome|msedge|msedgewebview2|firefox|brave|opera|vivaldi|iexplore|telegram|teams|slack|discord|code)\.exe$/i
| lower(DomainName, as=Svc)
| groupBy([aid, ComputerName, ContextBaseFileName], function=[count(Svc, distinct=true, as=ServicesSeen), collect([DomainName]), count(as=Lookups), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=1000)
| ServicesSeen >= 2
| table([ComputerName, aid, ContextBaseFileName, ServicesSeen, DomainName, Lookups, FirstSeen, LastSeen], limit=200)
Q8 · Yoba DGA-shaped dedyn.io domain lookup
CONF MEDIUMFP LOWCOST LOW

Looks for: the loader's generated domain. The name is adjective-noun-verb-number from three fixed lists, so the pattern is far narrower than a generic dynamic-DNS hunt. The apex dedyn.io is a legitimate free DNS service and is never blocked here.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A domain built from word lists outside the reported ones is not captured.
  • PowerQuery assumes: event.dns.request is populated on DNS Resolved events (the vendor docs also name dns.request; check which one your tenant fills).
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i intent.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; the CQL tab covers 90 days.
  • KQL – Defender XDR: A domain built from word lists outside the reported ones is not captured.
  • KQL – Defender XDR assumes: DnsQueryResponse events carry the queried name under DnsQueryString or QueryName in AdditionalFields; the readiness test prints both so a reader can see which key the tenant fills.
// HUNT: Lookup of a domain built from the Yoba DGA word lists under dedyn.io, or the early-variant aber.ir suffix, or the one reported sample domain
// MITRE: T1568.002, T1102.001
// CONF: medium  FP: low  COST: low
// REQUIRES: DNS lookup with requesting process name (DnsRequest)
// FALSE POSITIVES: near none; the pattern needs three specific dictionary words and a number under a dynamic-DNS suffix. The operator can change the word lists, so a miss does not clear a host.
// SOURCE: word lists and name format from the DGA snippet in Check Point (snapshot 01); calm-piano-floats-313 is the one sample the report lists
// LOOKBACK: 90d. Set the window with the Falcon time picker.
#event_simpleName=DnsRequest
| DomainName=/^(silver|amber|wild|tiny|brave|lucky|calm|sharp|swift|bright|quiet|bold|gentle|fierce|royal|mystic|username|degenerate|allblack|kizta|graf)-(tiger|river|stone|cloud|wolf|ocean|forest|mountain|eagle|raven|ember|comet|fox|dragon|piano|viper|yoba|yyoba|static|cpp|example)-(runs|jumps|sings|sleeps|flies|hunts|burns|floats|shines|whispers|roars|dreams|strikes|glides|watches|hides|duty|free)-[0-9]{1,3}\.(dedyn\.io|aber\.ir)$/i
| table([@timestamp, aid, ComputerName, UserName, DomainName, ContextBaseFileName], limit=500)
| sort(@timestamp, order=desc)
Q9 · Connection to the two reported Tor bridge addresses
CONF HIGHFP LOWCOST LOW

Looks for: the miner's Tor egress. The payload starts a bundled Tor client and reaches its onion pool through these two bridges; a hit from svchost.exe fits the injected-payload design.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Only the two reported addresses are matched; rotated bridges are not captured.
  • PowerQuery assumes: IP Connect events record outbound connections with the destination address in dst.ip.address.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; the CQL tab covers 90 days.
  • KQL – Defender XDR: Only the two reported addresses are matched; rotated bridges are not captured.
  • KQL – Defender XDR assumes: DeviceNetworkEvents records the outbound connection with the destination in RemoteIP.
// HUNT: Outbound connection to the two obfs4 Tor bridge addresses reported for the Yoba XMRig payload
// MITRE: T1090.003, T1573.002, T1496
// CONF: high  FP: low  COST: low
// REQUIRES: outbound connection with process name (NetworkConnectIP4)
// FALSE POSITIVES: none expected; both addresses are listed as the payload's bridge configuration in Check Point (snapshot 01). Bridge addresses rotate, so absence of a hit is weak evidence.
// LOOKBACK: 90d. Set the window with the Falcon time picker.
#event_simpleName=NetworkConnectIP4
| in(RemoteAddressIP4, values=["51.89.231.85", "51.89.228.250"])
| table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, LocalPort], limit=500)
| sort(@timestamp, order=desc)
Q10 · Embedded torbundle folder or local SOCKS5 on port 9550
CONF MEDIUMFP LOWCOST MEDIUM

Looks for: the miner talking to its own Tor client on the loopback address, or Tor components started from a torbundle folder in the user temp directory. If the sensor does not log loopback connections the second half will be silent; test that first (section 11).

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 loopback connections are not logged, only the torbundle branch can fire.
  • PowerQuery assumes: IP Connect records loopback connections on this tenant's policy.
  • PowerQuery assumes: dst.port.number is numeric.
  • PowerQuery assumes: contains is case-insensitive by default, which reproduces the CQL /i intent.
  • KQL – Defender XDR: A torbundle process that makes no connection in the window is not captured: the CQL's process-start branch has no place in a single-table query.
  • KQL – Defender XDR assumes: DeviceNetworkEvents records loopback connections on this tenant.
  • KQL – Defender XDR assumes: InitiatingProcessFolderPath holds the full image path of the connecting process.
// HUNT: Process running from a torbundle folder, or any process connecting to the local SOCKS5 port 9550 (Yoba XMRig payload through its bundled Tor)
// MITRE: T1090.003, T1496, T1055
// CONF: medium  FP: low  COST: medium
// REQUIRES: process creation (ProcessRollup2, SyntheticProcessRollup2) and outbound connection (NetworkConnectIP4); loopback connections are not logged in every sensor policy
// FALSE POSITIVES: a developer running a local Tor client from a folder that happens to be called torbundle; the Tor Browser uses different folders and ports
// SOURCE: Check Point (snapshot 01): Tor data directory %TEMP%\torbundle\data, SOCKS5 proxy on 127.0.0.1 port 9550
// LOOKBACK: 30d. Set the window with the Falcon time picker.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|NetworkConnectIP4)$/
| (ImageFileName=/\\torbundle\\/i or CommandLine=/torbundle/i or (RemoteAddressIP4="127.0.0.1" and RemotePort=9550))
| table([@timestamp, aid, ComputerName, UserName, #event_simpleName, FileName, ContextBaseFileName, ImageFileName, CommandLine, RemoteAddressIP4, RemotePort], limit=500)
| sort(@timestamp, order=desc)
Q11 · Yoba chain correlation per host (sideload, loader, task, lookups)
CONF MEDIUMFP LOWCOST HIGH

Looks for: the pairing across the chain, so one host with a sideloaded DLL and later loader activity ranks above a single noisy event. It is deliberately not tied to a 12 day gap (see the NOTE in the query).

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: telemetry-gapProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The scheduled-task registration stage is approximated by a process start from the WMProcess folder.
  • PowerQuery: The span in hours between the first and last stage is not computed; read first_seen and last_seen.
  • PowerQuery assumes: File Creation, File Modification, Process Creation and DNS Resolved cover the CQL's write, task and lookup stages as far as SentinelOne records them.
  • PowerQuery assumes: event.dns.request is populated on DNS Resolved events (the vendor docs also name dns.request; check which one your tenant fills).
  • KQL – Defender XDR: The scheduled-task stage and the loader lookups of t.me, dns.google, files.catbox.moe and dedyn.io by wmpdmc.exe are not covered; they live in other tables.
  • KQL – Defender XDR assumes: FolderPath holds the folder of the written file.
// HUNT: Host showing two or more distinct Yoba stages in the window: winmm.dll in a user path, wmpdui.dll in WMProcess, the WMProcess task, loader lookups
// MITRE: T1574.002, T1053.005, T1102.001
// CONF: medium  FP: low  COST: high
// REQUIRES: executable write (PeFileWritten, NewExecutableWritten), scheduled task registration (ScheduledTaskRegistered), DNS lookup with process (DnsRequest)
// FALSE POSITIVES: low; two different Yoba-specific stages on one host is rare in clean estates
// NOTE: SpanHours shows the gap between the first and last stage. Check Point reports the roughly 12.73 day Sleep loop only on the branch where the host process is NOT named Setup.exe (a sandbox or standalone run). A real infection is therefore expected to span the time to the next reboot (the task fires 3 minutes after boot), not 12 days. Hunt the pairing, not a fixed gap.
// LOOKBACK: 30d. Set the window with the Falcon time picker.
#event_simpleName=/^(PeFileWritten|NewExecutableWritten|ScheduledTaskRegistered|DnsRequest)$/
| case {
    #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ and FileName=/^winmm\.dll$/i and TargetFileName=/\\(Users|ProgramData)\\/i | stage := "1-winmm-dll-in-user-path";
    #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ and FileName=/^wmpdui\.dll$/i and TargetFileName=/\\ProgramData\\WMProcess\\/i | stage := "2-loader-dll-in-WMProcess";
    #event_simpleName=ScheduledTaskRegistered and TaskExecutable=/\\WMProcess\\/i | stage := "3-task-for-WMProcess";
    #event_simpleName=DnsRequest and ContextBaseFileName=/^wmpdmc\.exe$/i and DomainName=/^(t\.me|dns\.google|files\.catbox\.moe|.+\.dedyn\.io)$/i | stage := "4-loader-lookups";
    * | stage := "none";
  }
| stage != "none"
| groupBy([aid, ComputerName], function=[count(stage, distinct=true, as=StagesSeen), collect([stage]), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=1000)
| StagesSeen >= 2
| SpanHours := (LastSeen - FirstSeen) / 3600000
| table([ComputerName, aid, StagesSeen, stage, SpanHours, FirstSeen, LastSeen], limit=200)
Q12 · WMPDMC.exe making network or DNS calls, or spawning children
CONF HIGHFP LOWCOST LOW

Looks for: the loader at work. YobaLoader only continues when its host is WMPDMC.exe, so Telegram, DoH and Catbox traffic (and the payload processes it starts) will carry that process name or parent.

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 lookup or connection made by a process other than wmpdmc.exe itself (for example after injection into another host process) is not captured.
  • PowerQuery assumes: event.dns.request is populated on DNS Resolved events (the vendor docs also name dns.request; check which one your tenant fills).
  • PowerQuery assumes: in:anycase reproduces the CQL case-insensitive name match.
  • KQL – Defender XDR: Network connections made by wmpdmc.exe (DeviceNetworkEvents) and processes it starts (DeviceProcessEvents) are not covered.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days; the CQL tab covers 90 days.
  • KQL – Defender XDR assumes: DnsQueryResponse events carry the queried name under DnsQueryString or QueryName in AdditionalFields; the readiness test prints both so a reader can see which key the tenant fills.
// HUNT: WMPDMC.exe doing DNS or network connections, or parenting another process (YobaLoader running inside the sideload host)
// MITRE: T1574.002, T1102.001, T1105, T1055
// CONF: high  FP: low  COST: low
// REQUIRES: DNS lookup (DnsRequest), outbound connection (NetworkConnectIP4), process creation (ProcessRollup2, SyntheticProcessRollup2)
// FALSE POSITIVES: low; the Windows Media Player device-metadata helper does not normally browse, resolve Telegram names or start child processes
// LOOKBACK: 90d. Set the window with the Falcon time picker.
#event_simpleName=/^(DnsRequest|NetworkConnectIP4|ProcessRollup2|SyntheticProcessRollup2)$/
| ContextBaseFileName=/^wmpdmc\.exe$/i or ParentBaseFileName=/^wmpdmc\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, #event_simpleName, ContextBaseFileName, DomainName, RemoteAddressIP4, RemotePort, FileName, ImageFileName, CommandLine, ParentBaseFileName], limit=500)
| sort(@timestamp, order=desc)
Q13 · Payload run from a random 10-character TEMP folder and file name
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: what the loader does when the operator tasks something other than the in-memory miner. Check Point states the loader can deliver any Windows executable or PowerShell script, so this is the hunt for the next payload, not just XMRig. FP: installers that unpack to random-named TEMP folders, and management tools that run hidden bypass PowerShell. Exclude by parent or full path (see TUNING in the query).

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A script run with a different flag order is not captured, as on the CQL tab.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i intent.
  • PowerQuery assumes: The command line is recorded in full in tgt.process.cmdline.
  • KQL – Defender XDR: A script run with a different flag order is not captured, as on the CQL tab.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process.
  • KQL – Defender XDR assumes: The command line is recorded in full in ProcessCommandLine.
// HUNT: Executable or hidden PowerShell script run from TEMP\<10 random chars>\<10 random chars> (YobaLoader deployment methods 2 and 3)
// MITRE: T1059.001, T1204.002, T1553.005
// CONF: medium  FP: medium  COST: low
// REQUIRES: process creation with command line and image path (ProcessRollup2, SyntheticProcessRollup2)
// FALSE POSITIVES: installers and updaters that unpack to a random-named TEMP folder; hidden, execution-policy-bypass PowerShell used by some management tools
// TUNING: exclude a reviewed vendor by full path or by parent, for example | ParentBaseFileName!=/^(YourDeploymentTool)\.exe$/i ; the strongest variant also has ParentBaseFileName of wmpdmc.exe (see Q12).
// SOURCE: Check Point (snapshot 01): method 2 saves %TEMP%\<10 random chars>\<10 random chars>.exe after removing Zone.Identifier; method 3 saves a .ps1 and runs it with -WindowStyle Hidden -ExecutionPolicy Bypass -File
// LOOKBACK: 30d. Set the window with the Falcon time picker.
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ImageFileName=/\\Temp\\[A-Za-z0-9]{10}\\[A-Za-z0-9]{10}\.exe$/i or CommandLine=/-WindowStyle Hidden -ExecutionPolicy Bypass -File .*\\Temp\\[A-Za-z0-9]{10}\\[A-Za-z0-9]{10}\.ps1/i
| table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA1HashData], limit=500)
| sort(@timestamp, order=desc)
Q14 · WinRing0 driver service registered
CONF LOWFP MEDIUMCOST LOW

Looks for: the optional driver step. WinRing0 is a real, widely bundled hardware-access driver, so on its own this is context, not a verdict; pair it with a Q9, Q10 or Q12 hit. FP: hardware monitoring and RGB tools that ship WinRing0. Exclude by full path (see TUNING in the query).

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analyticProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A service whose display name alone says WinRing0, with neither key name nor image path matching, is not captured.
  • PowerQuery assumes: The service key name and the ImagePath value are visible in registry.keyPath and registry.value.
  • PowerQuery assumes: contains is case-insensitive by default, which reproduces the CQL /i intent.
  • KQL – Defender XDR: A service whose display name alone says WinRing0, with neither key name nor image path matching, is not captured.
  • KQL – Defender XDR assumes: The service key name and the ImagePath value are visible in RegistryKey and RegistryValueData.
// HUNT: Service registered with WinRing0 in its name or image path (Yoba XMRig payload can load the WinRing0 driver for MSR mining tweaks)
// MITRE: T1543.003, T1496
// CONF: low  FP: medium  COST: low
// REQUIRES: service creation (CreateService); on tenants without that event use Windows System event 7045
// FALSE POSITIVES: hardware monitoring and RGB or fan-control tools that bundle a WinRing0 driver legitimately
// TUNING: exclude the reviewed tool by full path, for example | ServiceImagePath!=/\\Program Files\\YourHardwareTool\\/i ; a WinRing0 service created from a user-writable path, or on a host with a Q9 or Q10 hit, is the real lead.
// SOURCE: Check Point (snapshot 01): the payload can conditionally load the WinRing0 driver service for MSR-based mining optimization
// LOOKBACK: 30d. Set the window with the Falcon time picker.
#event_simpleName=CreateService
| ServiceDisplayName=/winring0/i or ServiceImagePath=/winring0/i
| table([@timestamp, aid, ComputerName, UserName, ServiceDisplayName, ServiceImagePath], limit=200)
| sort(@timestamp, order=desc)
09

Detection Rules by Platform

No IOA is set to prevent. Every pattern here either rests on one vendor report or sits on a legitimate Windows file name. Move an IOA to prevent only after a clean week in detect and a second independent source for the indicator.

CrowdStrike: Custom IOA

IOA namePromotesPatternExclusionsAction
IOA-1: Yoba persistence taskPromote Q6Scheduled task registered with an executable path containing \ProgramData\WMProcess\, or wmpdmc.exe outside System32None expectedDetect. Review within 1 hour; contain the host on confirmation.
IOA-2: Yoba sideload hostPromote Q5, Q12WMPDMC.exe running with an image path outside \Windows\System32\, \Windows\SysWOW64\ and the Windows Media Player folders; or any child process / network connection from such a copyA portable media-player kit, by full pathDetect. Review within 1 hour.
IOA-3: winmm.dll created in a user pathPromote Q3File creation of winmm.dll under a user profile or ProgramData by an archiver, Explorer or a browserReviewed game or audio folders, by full pathDetect only. Never prevent: winmm.dll is a real Windows DLL name and many tools ship their own.
IOA-4: Reported Tor bridge addressesPromote Q9Network connection to 51.89.231.85 or 51.89.228.250Approved Tor research hostsDetect. Single-sourced and the addresses rotate, so no prevent.

SentinelOne: custom detection rules

RuleSource queryRun asNotes
IOA-1: Yoba persistence taskQ6, PowerQuery tabHunt only until the gap is closedQ6 is only an approximation here. No task-registration event is attested for SentinelOne here, so this is a partial pivot: it finds wmpdmc.exe started from the ProgramData WMProcess folder, which is what the registered task eventually runs. The registration itself, its author and its boot trigger are not visible.
IOA-2: Yoba sideload hostQ5, Q12, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
IOA-3: winmm.dll created in a user pathQ3, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
IOA-4: Reported Tor bridge addressesQ9, 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
IOA-1: Yoba persistence taskQ6, KQL – Defender XDR tabHunt only until the gap is closedQ6 is only an approximation here. Defender Advanced Hunting has no scheduled-task registration table with a task executable, so this is a partial pivot: it finds wmpdmc.exe started from the ProgramData WMProcess folder, which is what the registered task eventually runs. The registration itself is not visible.
IOA-2: Yoba sideload hostQ5, Q12, KQL – Defender XDR tabHunt only until the gap is closedQ5, Q12 is only an approximation here. Same folder-based predicate over file events: wmpdmc.exe or wmpdui.dll written outside the Windows system and Media Player folders. The CQL also matches a started process; one query reads one table, so the process-start half is left to the CQL tab.
IOA-3: winmm.dll created in a user pathQ3, 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
IOA-4: Reported Tor bridge addressesQ9, 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, Q2, Q4, Q7, Q8, Q10, Q11, Q13 and Q14 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

6 importable indicators ship, all detect: 2 IPv4 and 4 domains. 22 SHA-1 values are in their own block because Falcon IOC Management does not import SHA-1; they are also in Q1. Every value was copied by script from the saved Check Point snapshot, not typed. No row is prevent because every indicator comes from one vendor report.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
ipv4,51.89.231.85,detect,medium,2027-02-02,Yoba XMRig payload Tor obfs4 bridge port 24526 (Check Point only),campaign:Yoba
ipv4,51.89.228.250,detect,medium,2027-02-02,Yoba XMRig payload Tor obfs4 bridge port 21668 (Check Point only),campaign:Yoba
domain,calm-piano-floats-313.dedyn.io,detect,high,2027-02-02,Yoba DGA sample domain; rotates with the Telegram picture (Check Point only),campaign:Yoba
domain,gpt-5-6.github.io,detect,high,2027-02-02,Yoba lure GitHub Pages host (Check Point only),campaign:Yoba
domain,gpt-6-astra.github.io,detect,high,2027-02-02,Yoba lure GitHub Pages host (Check Point only),campaign:Yoba
domain,opus-5-0.github.io,detect,high,2027-02-02,Yoba lure GitHub Pages host (Check Point only),campaign:Yoba
# NOT imported: 22 SHA-1 hashes. Falcon IOC Management does not take SHA-1. They are in the grab-sha1 block and Q1.
# NOT imported: t.me, dns.google, files.catbox.moe, github.com and the dedyn.io apex are legitimate services. Hunt them with Q7 and Q8; never block.
# NOT imported: the onion mining endpoint (egress is inside Tor) and the signed OpenAI and Anthropic binaries (legitimate vendor files).
# No row is prevent: every indicator comes from one vendor report (Check Point). Do not raise any to prevent without a second independent source.
Microsoft Defender indicators CSVSettings, Endpoints, Indicators, Import: audit only
indicatorType,indicatorValue,action,title,description,expirationTime,severity,recommendedActions,rbacGroups,category,mitretechniques,GenerateAlert
IpAddress,51.89.231.85,Audit,Yoba XMRig payload Tor obfs4 bridge port 24526,Yoba XMRig payload Tor obfs4 bridge port 24526 (Check Point only),2027-02-02T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,51.89.228.250,Audit,Yoba XMRig payload Tor obfs4 bridge port 21668,Yoba XMRig payload Tor obfs4 bridge port 21668 (Check Point only),2027-02-02T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,calm-piano-floats-313.dedyn.io,Audit,Yoba DGA sample domain; rotates with the Telegram picture,Yoba DGA sample domain; rotates with the Telegram picture (Check Point only),2027-02-02T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,gpt-5-6.github.io,Audit,Yoba lure GitHub Pages host,Yoba lure GitHub Pages host (Check Point only),2027-02-02T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,gpt-6-astra.github.io,Audit,Yoba lure GitHub Pages host,Yoba lure GitHub Pages host (Check Point only),2027-02-02T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,opus-5-0.github.io,Audit,Yoba lure GitHub Pages host,Yoba lure GitHub Pages host (Check Point only),2027-02-02T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True

Column names and allowed values are from Microsoft's documented parameter table. 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.

SHA-1 hashes by roleDefender or hunt
# SHA-1 values copied by script from Check Point snapshot 01. Defender indicators accept SHA-1; Falcon IOC Management does not.
# Detect or hunt only. The two signed OpenAI and Anthropic binaries are legitimate vendor files: never block them.

# YobaDropper (winmm.dll) (5)
17e8639a00bb32b10cb9cf0d292e9441456ce4bb
20238b36645fc63139a76b19a480c6a9166472fa
4ea5b71202b69fc27b06ef9ee3f6f51d6f7b8586
60aece343959a2e1840f6aaeffa38b73ed21af2c
8777db31d8df78f36e4544a132d843dfb2a0f026

# YobaLoader (wmpdui.dll) (9)
22661f4bada8167fa0f410b75e53184998990abb
2ecb5548e9774a3d05e8669e8414dcc366929b79
3fef1af3664429e621d3e0f9408cb5102ef02b84
55043ea6d102670c014e2be5a8197e70b7c201cb
79e87a6df59d68b2dbd2c43950df5663d671007c
7dfcee02732ed89f1ddf25d1689863c26de3df15
bead5748d813a9828ddb7603a32e52aa15349768
cf90c4599257e76984a199d98b1fd082b820a54d
eeedc5c9007d7f01808285e0ae0c0b451bdba003

# Injected XMRig payload (1)
ea16728f6928dc77deaddee74a6e736dd5f24fc5

# Encrypted payload file (Catbox .dat) (1)
7467b6980440ec27c4e0a8d940672c9f24e14216

# Telegram channel image (1)
e7c0e981f81447892995d01ed986c0b462a6f0c5

# Release ZIPs (2)
332e3b685e375aa44a5ec98511fc53be821df46a
c2b986704406d47dd88ee4e2fcffebc854ff2ce4

# Signed OpenAI and Anthropic binaries (LEGITIMATE, hunt only) (2)
163c81187d8024123912c3c12d905fd5210afcb3
65a3ac8f341ae04982005fd2c4e83627a68793a3
Behavioral Signatureshunt starters
# Behavioral signatures (not atomic indicators). Source: Check Point, snapshot 01.
Folder:        ProgramData\WMProcess\
Files:         WMPDMC.exe (copy of the System32 file), wmpdui.dll (loader), winmm.dll (dropper, beside Setup.exe)
Task:          author "Microsoft Corporation"; description "Collects device metadata for Windows Media Player."; boot delay PT3M; principal Local System (S-1-5-18)
Host process:  DLL expects the host to be named Setup.exe (DJB2 0xE6C2F326); loader expects WMPDMC.exe (0x552751E3)
Delay branch:  200,000 iterations of Sleep(5500), about 12.73 days, when the host name check fails
Dropper text:  message "Please run this program as Administrator." if not elevated
Telegram:      channel yoba_fanclub; page fetched with user agent "Mozilla/5.0 (Windows NT 10.0; Win64;)"; element class tgme_page_photo_image
DGA:           adjective-noun-verb-number under dedyn.io (early variant: aber.ir); last 50 bytes of the picture are the seed
DoH:           dns.google/resolve?name=<generated name>&type=TXT, then Ed25519 check and AES decrypt
Payload:       url in the decrypted record; first character 1 = inject into svchost.exe, 2 = TEMP\<10 chars>\<10 chars>.exe, 3 = TEMP\<10 chars>\<10 chars>.ps1 (-WindowStyle Hidden -ExecutionPolicy Bypass -File)
Miner:         XMRig 6.26.0 in svchost.exe; TLS onion pool; socks5 on 127.0.0.1 port 9550; donation level 0; mutex Local\WindowsSecurity; Tor data in %TEMP%\torbundle\data; resumes after 240 seconds idle
Earlier build: host Cursor.exe (0x56221573); Startup shortcut msdefender_scheduler{7940-8490-6670-1081}.lnk; folder %APPDATA%\Microsaft Difendir\ with msdtc.exe and mswsock.dll
Named Malware and Toolingcontext
# Named tooling, lure and packaging names (hunt context, not blocks)
Check Point names:  Yoba (campaign), YobaDropper (winmm.dll), YobaLoader (wmpdui.dll)
Lure app names:     GPT-5.6 Sol, GPT-6 Astra, Claude Opus
Release ZIPs:       sol-setup.zip, Setup-Claude.zip, GPT-6-Astra-Setup.zip
ZIP contents:       Setup.exe (signed vendor file), winmm.dll (malicious), owl-shell-runtime.json, snapshot_blob.bin, v8_context_snapshot.bin, vk_swiftshader.dll, vk_swiftshader_icd.json, vulkan-1.dll, D3dx9_41.dll
Legitimate abused:  Setup.exe (OpenAI or Anthropic, signed), WMPDMC.exe (Windows), svchost.exe (Windows), XMRig (open source), Tor, lyrebird, WinRing0 driver
Never block on:     the names above that are legitimate software, the bare name winmm.dll, t.me, dns.google, files.catbox.moe, github.com, dedyn.io
Patch, ASR and Admin Auditread-only
# Read-only audit starters (Windows). Nothing here changes a setting.
# 1. Any winmm.dll outside the Windows system folders, with signature state
Get-ChildItem -Path "$env:SystemDrive\Users","$env:ProgramData" -Recurse -Force -File -Filter winmm.dll -ErrorAction SilentlyContinue | ForEach-Object { [pscustomobject]@{ Path=$_.FullName; Signature=(Get-AuthenticodeSignature $_.FullName).Status } }
# 2. The persistence footprint
Test-Path "$env:ProgramData\WMProcess"
Get-ScheduledTask | Where-Object { ($_.Actions.Execute -join ' ') -match 'ProgramData\\WMProcess' } | Select-Object TaskName, TaskPath, Author
# 3. ASR prevalence rule state (2 = audit, 1 = block, empty = not set)
$p = Get-MpPreference; for ($i=0; $i -lt $p.AttackSurfaceReductionRules_Ids.Count; $i++) { if ($p.AttackSurfaceReductionRules_Ids[$i] -eq '01443614-cd74-433a-b99e-2ecdc07bfc25') { $p.AttackSurfaceReductionRules_Actions[$i] } }
# 4. Who is a local administrator
Get-LocalGroupMember -Group Administrators
11

Detection Validation Gates

GateCheckPass condition
Telemetry readyProcess creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Executable or file write (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents); DNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents); Scheduled task creation (CrowdStrike: ScheduledTaskRegistered. SentinelOne: Task Register, confirm the spelling on a tenant. Defender: DeviceEvents ScheduledTaskCreated); Service creation (CrowdStrike: CreateService. SentinelOne: no listed event type, use Windows event 7045. Defender: DeviceRegistryEvents on the Services key). Q10 also needs loopback connections to be logged.Q1 to Q5, Q12, Q13 depend on common events and should return rows for a test host. For Q6 register the harmless test task below and confirm a row. For Q10 run Test-NetConnection 127.0.0.1 -Port 9550 on a test host and check whether a loopback row arrives; if not, the loopback half of Q10 is blind and the coverage map must say so.
Benign baselineRun Q2, Q3, Q4, Q7, Q13 and Q14 over 30 days before alerting.Record every legitimate hit (game mods, audio tools, chat clients, hardware tools, installers with random TEMP folders) and add a full-path or parent exclusion. Q5, Q6, Q8, Q9 and Q12 should return nothing in a clean estate.
Positive testsUse harmless stand-ins on an isolated test host; never run the malware.Q3: copy C:\Windows\System32\winmm.dll to a new folder under Downloads using Explorer, then delete it. Q5: copy C:\Windows\System32\wmpdmc.exe to C:\ProgramData\WMProcess-test\ and start it, then delete it. Q6: schtasks /create /tn YobaTest /sc once /st 23:59 /tr C:\ProgramData\WMProcess\wmpdmc.exe (a path that does not exist), then schtasks /delete /tn YobaTest /f. Q7: nslookup t.me and nslookup dns.google from a command prompt. Q8: nslookup calm-piano-floats-313.dedyn.io.
PromotionA query becomes an IOA or scheduled search only after the baseline.IOA-1 to IOA-4 go to detect with a named owner. None goes to prevent in this version (see section 9). Review again when a second independent report appears.
12

Hardening: Tiered & Deployable

Immediate (this week)
  • T1. Install AI desktop apps only from the vendor. Check Point's first recommendation: get software from vendor-controlled channels, not search results, GitHub Pages or third-party links. Publish an approved-source list for AI tools and route requests through your software catalog. Framework: ATT&CK T1204.002, T1608.006; M1017 User Training, M1038 Execution Prevention. Verify: proxy report for github.com/*/releases/download executables and ZIPs (N1).
  • T2. Alert on the lure and the loader chain; do not block legitimate services. Load the CSV rows from section 10 as detect, run Q7 and Q12, and alert on Telegram plus Google DoH plus Catbox from one non-browser process. Do not block t.me, dns.google, files.catbox.moe, github.com or dedyn.io. Framework: M1031 Network Intrusion Prevention. Verify: the Q7 positive test in section 11.
  • T3. Attack Surface Reduction prevalence rule in audit. The rule "Block executable files from running unless they meet a prevalence, age, or trusted list criterion" catches fresh unsigned executables such as the TEMP payloads and a copied WMPDMC.exe. Start in audit mode. Framework: M1038; Microsoft Defender ASR rules reference. Verify: playbook P2.
  • T4. Turn on scheduled-task creation auditing. Yoba persists through a SYSTEM task. Event 4698 and the Task Scheduler Operational log give a second view next to Q6. Framework: M1047 Audit; ATT&CK T1053.005. Verify: playbook P3.
Near term (1 to 4 weeks, pilot first)
  • T5. Remove standing administrator rights and tighten the elevation prompt. The dropper stops unless it runs elevated and shows a message asking the user to rerun it as administrator. Standard users without an admin path break the chain at that point. Framework: M1026 Privileged Account Management, M1052 User Account Control; CIS Microsoft Windows Benchmark, User Account Control settings (section 2.3.17). Verify: Get-LocalGroupMember -Group Administrators and Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System | Select-Object EnableLUA, ConsentPromptBehaviorAdmin, ConsentPromptBehaviorUser.
  • T6. Application control that checks the whole folder, not just the signed EXE. A signature on Setup.exe does not cover the DLL beside it. Use Windows Defender Application Control or AppLocker (EXE and DLL rules) in audit mode first, with rules that allow Program Files and Windows and flag user-writable paths. Framework: M1038 Execution Prevention; ATT&CK T1574.002; Microsoft WDAC design guidance. Verify: Get-AppLockerPolicy -Effective | Select-Object -ExpandProperty RuleCollections and the audit events.
  • T7. Control DNS-over-HTTPS and Tor egress for non-browser processes. Force name resolution through your resolver, block anonymizer categories at the proxy, and use application-aware rules to stop non-browser clients reaching public DoH endpoints. Framework: M1031, M1037 Filter Network Traffic; best-practice, no formal benchmark. Verify: Q7 and Q9 stay quiet after the change.
Strategic (1 to 3 months)
  • T8. Deploy AI tools through a managed catalog with an application-control policy that trusts the catalog. Use Intune or your software distribution tool as the managed installer so tools installed any other way are not trusted. Framework: M1038; Microsoft WDAC managed installer. Verify: an unmanaged installer from Downloads is blocked in the pilot ring.
  • T9. Treat any Yoba hit as a loader compromise. Check Point warns the loader can run any executable or script. Build the response rule into your playbooks: contain, look for second payloads and credentials exposure, and reimage rather than removing only the miner. Verify: tabletop with the containment runbook (section 14).
  • T10. Developer and power-user awareness. New-model names (version numbers that do not exist yet) are bait. Teach staff to check the publisher and the official download page. Framework: M1017 User Training; best-practice, no formal benchmark.
13

Deployable Playbooks

P1 · Find an off-path winmm.dll and check its signature

Playbook P1: find winmm.dll beside an executable in user-writable folders and check its signature (read-only audit)
Prerequisites: PowerShell 5.1 or later; run elevated to read every profile, or as the user for one profile. The script reads file names, signature state and hashes only.
Reboot required: no
1. List every winmm.dll outside the Windows folders with its signature and the executables beside it:
   $roots = @("$env:SystemDrive\Users", "$env:ProgramData")
   foreach ($r in $roots) {
     Get-ChildItem -Path $r -Recurse -Force -File -Filter winmm.dll -ErrorAction SilentlyContinue | ForEach-Object {
       $sig = Get-AuthenticodeSignature -FilePath $_.FullName
       $exe = (Get-ChildItem -Path $_.DirectoryName -File -Filter *.exe -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Name) -join ', '
       [pscustomobject]@{ Path = $_.FullName; Signature = $sig.Status; Signer = $sig.SignerCertificate.Subject; ExecutablesBeside = $exe; SHA1 = (Get-FileHash -Algorithm SHA1 -Path $_.FullName).Hash }
     }
   }
2. Triage: a NotSigned or HashMismatch winmm.dll beside a Setup.exe is the Yoba shape. Compare SHA1 with the grab-sha1 block in section 10. Some legitimate software ships its own signed winmm.dll, so never delete on the name alone.
Rollback: none required. The script is read-only.

P2 · ASR prevalence rule, audit first

Playbook P2: Defender ASR rule for executables that fail prevalence, age and trusted-list checks (audit first)
Prerequisites: Microsoft Defender Antivirus in active mode (ASR does not enforce when another antivirus is primary); local admin. On hosts that run only Falcon, use the Falcon prevention policy for unknown executables instead.
Reboot required: no
1. Turn the rule on in audit mode:
   Add-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25 -AttackSurfaceReductionRules_Actions AuditMode
2. Verify:
   $p = Get-MpPreference
   for ($i = 0; $i -lt $p.AttackSurfaceReductionRules_Ids.Count; $i++) { if ($p.AttackSurfaceReductionRules_Ids[$i] -eq '01443614-cd74-433a-b99e-2ecdc07bfc25') { "Action: $($p.AttackSurfaceReductionRules_Actions[$i])" } }
   # Expect: 2 (Audit). 1 means Block.
3. Review the audit events (Microsoft-Windows-Windows Defender/Operational, event 1122) for 14 days, allow-list approved installers, then switch the action to Block for a pilot ring.
Rollback:
   Remove-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25
   # Removes the rule from local policy. Policy pushed by Intune or Group Policy returns at the next refresh.

P3 · Log scheduled-task creation

Playbook P3: log scheduled-task creation (Security event 4698 and Task Scheduler Operational log)
Prerequisites: local admin; a log forwarder that collects the Security and Task Scheduler Operational logs; free space on the log. Record the current state first so the rollback restores it.
Reboot required: no
1. Save the current audit policy and log state:
   auditpol /backup /file:"$env:ProgramData\audit-before-p3.csv"
   wevtutil gl Microsoft-Windows-TaskScheduler/Operational
2. Enable the audit subcategory and the operational log:
   auditpol /set /subcategory:"Other Object Access Events" /success:enable /failure:enable
   wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:true
3. Verify:
   auditpol /get /subcategory:"Other Object Access Events"
   Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4698 } -MaxEvents 5
4. Search the collected events for a task whose action runs under ProgramData\WMProcess (N3).
Rollback:
   auditpol /restore /file:"$env:ProgramData\audit-before-p3.csv"
   wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:false
   # Run the second command only if step 1 showed the log was disabled before.

P4 · Check one host for the Yoba footprint

Playbook P4: check one host for the Yoba footprint (read-only triage)
Prerequisites: PowerShell 5.1 or later; run elevated. Reads folders, tasks and services only; changes nothing. Run from the Falcon real-time response shell or locally.
Reboot required: no
1. Persistence folder and task:
   Test-Path "$env:ProgramData\WMProcess"
   Get-ChildItem "$env:ProgramData\WMProcess" -Force -ErrorAction SilentlyContinue | Select-Object Name, Length, LastWriteTime
   Get-ScheduledTask | Where-Object { ($_.Actions.Execute -join ' ') -match 'ProgramData\\WMProcess' } | Select-Object TaskName, TaskPath, Author, Description
2. Miner footprint (the payload runs as SYSTEM, so also check the system TEMP folder):
   Test-Path "$env:TEMP\torbundle"
   Test-Path "$env:SystemRoot\Temp\torbundle"
   Get-Service | Where-Object { $_.Name -match 'WinRing0' -or $_.DisplayName -match 'WinRing0' }
3. Record findings and hashes for the ticket (section 16). Do not delete anything here; use the containment runbook (section 14).
Rollback: none required. The script is read-only.
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host in Falcon. Keep it powered on (the miner is injected into svchost.exe in memory; a power-off loses it). Do not reimage yet. Disable the user's sessions at the identity provider as a precaution, because the loader can run any payload.SOC / IRContainment timestamp, host and user, session-revocation record
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.SOC / IRContainment timestamp, host and user, session-revocation record
Isolate: by platformCrowdStrike: network-contain the host. SentinelOne: network quarantine. Microsoft Defender: Isolate device. Keep the host powered on for memory capture on all of them.SOC / IRContainment timestamp
PreserveCapture memory if your tooling allows it, then copy ProgramData\WMProcess\, the Setup.exe folder with its winmm.dll, the ZIP from Downloads, the scheduled task XML (Export-ScheduledTask) and the browser download history. Hash everything with SHA-1 and compare to the grab-sha1 block.IREvidence bundle with hashes
ScopeRun Q1 to Q14 over 90 days for the aid, then environment-wide for each hash, domain and address in section 10. Run N1 and N2 for the download source and other users. Check Q13 and Q12 for any second payload the loader delivered; Check Point says the loader can run any executable or PowerShell script.IRProcess tree, first-seen file, list of other hosts
EradicatePreferred: reimage, because the payload ran inside svchost.exe and later payloads are unknown. If reimage is delayed: unregister the task, stop and remove the Tor and miner processes and the WinRing0 service if present, remove ProgramData\WMProcess and the Setup.exe folder, and reboot. Do this only after the Preserve step.IR / EndpointTask removal output, reboot time, clean re-scan
RecoverRebuild from the golden image. Reset credentials for accounts used on the host (conservative: later payloads could be credential stealers). Reinstall the AI desktop app only from the vendor's official page.IT / IdentityRebuild ticket, credential reset list
Prevent recurrenceClose the intake path: block the lure hosts at DNS or proxy, remove local admin, enable ASR in audit, and roll out T1 to T7 in section 12. Add the user and team to awareness follow-up.SOC / ITChange tickets
15

Detection Coverage Map

TechniqueBehaviorCQLIOACrowdStrike coverageSentinelOneDefender XDR
T1204.002 / T1574.002Known sample hashesQ1None (hash lists age quickly)PartialPartial: same limit as CrowdStrikePartial: Q1 approximate
T1574.002winmm.dll beside Setup.exe in a user pathQ2, Q3IOA-3PartialPartial: Q2 approximatePartial: Q2 approximate
T1204.002Setup.exe launched from a ZIP or Downloads folderQ4NonePartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1574.002 / T1036.005WMPDMC.exe or wmpdui.dll outside system foldersQ5, Q12IOA-2GoodGood, with assumptionsPartial: Q5 approximate, Q12 telemetry gap
T1053.005SYSTEM task for the WMProcess copyQ6IOA-1GoodPartial: Q6 telemetry gapPartial: Q6 telemetry gap
T1102.001 / T1071.004Telegram, Google DoH and Catbox from a non-browser processQ7NonePartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1568.002DGA-shaped dedyn.io lookupQ8NonePartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1090.003 / T1496Tor bridges, torbundle and local SOCKS5Q9, Q10IOA-4PartialPartial: same limit as CrowdStrikePartial: Q10 approximate
T1574.002 / T1053.005 / T1102.001Multi-stage correlation on one hostQ11NonePartialPartial: Q11 telemetry gapPartial: Q11 telemetry gap
T1059.001 / T1553.005Second payload from a random TEMP folderQ13NonePartialPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1543.003WinRing0 driver serviceQ14NonePartialPartial: Q14 approximatePartial: Q14 approximate
T1055Injection of the payload into svchost.exeNoneNoneGAPGAPGAP
T1497.003 / T1480Sleep loop, host-name, language and admin checksNoneNoneGAPGAPGAP
T1608.006SEO poisoning and the GitHub lureNoneNoneGAPGAPGAP

Gaps. Injection into svchost.exe, the sleep and environment checks, and the web lure stage have no endpoint query here. DLL-load (image-load) events are not queried; the sideload is inferred from file placement and process path, with Sysmon event 7 in N4 as the direct view. Q10 depends on loopback connections being logged. Validation gates are in section 11.

16

Hunt Summary Ticket

TITLE:        Yoba fake ChatGPT and Claude desktop apps, signed-binary DLL sideload to XMRig (Check Point Research, 2026-10-27)
SEVERITY:     High. A generic loader runs any payload; the observed payload is a cryptominer. Treat a hit as a broader compromise.
SCOPE:        Windows endpoints where users download AI desktop apps from GitHub or search results; any host with ProgramData\WMProcess
HYPOTHESIS:   A user ran a signed Setup.exe from a downloaded ZIP; its winmm.dll deployed a copied WMPDMC.exe and loader under ProgramData\WMProcess, a SYSTEM task restarts it at boot, and the loader pulls a payload through Telegram, Google DoH and Catbox.
QUERIES:      14 CQL queries (Q1-Q14). High confidence: Q1, Q5, Q6, Q9, Q12. Medium: Q2, Q3, Q7, Q8, Q10, Q11, Q13. Low: Q4, Q14. N1-N7 cover proxy, DNS, task, Sysmon, firewall and service logs.
DO FIRST:     1) Run Q5, Q6, Q12 and Q1 over 90 days. 2) Run Q2, Q3, Q7, Q8 over 30 days. 3) Run N1 and N2 for hosts without a sensor. 4) On any hit: contain, preserve, then reimage (runbook section 14).
FINDINGS:     [fill in after the hunt]
GAPS:         Injection into svchost.exe, the sleep and environment checks, and the web lure are outside endpoint telemetry or not queried; DLL-load events are not queried; loopback connections may not be logged.
ACTIONS:      All indicators detect (single vendor report); ASR prevalence rule in audit; scheduled-task auditing; remove standing admin; vendor-only AI app installs; control non-browser DoH and Tor egress.
OWNER:        REPLACE_WITH_OWNER
VERSION:      v0.1 (Draft) 2026-11-02
17

Changelog

v0.12026-11-02Initial draft. 14 CQL queries, 4 IOA rules (all detect), 7 native hunts, tiered hardening with 4 playbooks. 5 sources fetched and saved as snapshots (1 vendor report, 1 vendor blog, 3 press articles). 28 atomic values parsed by script from the snapshots: 6 importable detect rows (2 IPv4, 4 domains) and 22 SHA-1 values in a separate block. No indicator from any other family or cluster is included. SentinelOne PowerQuery and Microsoft Defender KQL tabs added to Q1-Q14: SIEM Query Rosetta release 0.1.0 (public-beta; static-reviewed translations).
18

References

TierSourceUsed forAccess date
T1Check Point Research: Tricks from the Past deployed via signed ChatGPT and Claude binaries (2026-10-27)Whole chain, hashes, network indicators, XMRig configuration, DGA word lists2026-11-02
T1Check Point Blog: Yoba Malware Abuses Signed ChatGPT and Claude Binaries to Target AI Users (2026-10-27)Signed-binary framing, nothing compromised at the vendors, broader-compromise advice2026-11-02
T3Help Net Security: Yoba malware hides in fake desktop versions of ChatGPT and Claude (2026-10-29)Cross-check of the task disguise and the earlier Cursor.exe variant2026-11-02
T3Security Affairs: Yoba malware hides a crypto miner behind legitimate OpenAI and Anthropic binaries (2026-10-30)Cross-check that the sleep loop runs on the failed host-name check2026-11-02
T3Infosecurity Magazine: Attackers Hide Malware Behind Signed ChatGPT and Claude Binaries (2026-10-28)Cross-check of the pre-checks and persistence description2026-11-02
RefMITRE ATT&CK T1574.002 DLL Side-LoadingTechnique mapping and mitigations2026-11-02
RefMicrosoft: Attack surface reduction rules referenceASR prevalence rule in playbook P22026-11-02

Generated 2026-11-02 by HuntPack. Defensive content only.