UAC-0145 ClickFix Campaign — Sandworm / APT44 Sub-Cluster

Compromised-website fake-CAPTCHA lures delivering GHETTOVIBE, SCOUTCURL, FLUIDLEECH, LOADLOOP, FREAKYPOLL, SMARTAXE and COWARDDUCK
Threat
UAC-0145 (sub-cluster of UAC-0002 / Sandworm / APT44 / Seashell Blizzard)
Severity
NATION-STATE · ACTIVE
Type
Social-engineering initial access → multi-stage implant
Access
User-executed PowerShell (ClickFix) from compromised sites
Version
v0.2 · 2026-07-20
Author
HuntPack
Confidence
High (national CERT primary source + 3 corroborating)
01

Executive Summary

CERT-UA published a consolidated advisory on the initial-access vectors used by UAC-0145, a sub-cluster of UAC-0002 (Sandworm / APT44 / Seashell Blizzard), the GRU-linked destructive-operations actor. The attacker objective is durable footholds on Ukrainian government, defence and military-adjacent endpoints, with at least one historical case where a consumer-grade compromise was pivoted into lateral movement and a destructive attack against a central executive authority's infrastructure.

The newly-detailed vector is ClickFix: during spring and summer 2026, victims visiting legitimate but compromised websites were shown a fake CAPTCHA that instructed them to copy a PowerShell command and run it in the Windows Run dialog or Windows Terminal. CERT-UA analysed the ClickFix implementation on more than ten compromised web resources during June–July 2026. Two cloaking mechanisms are in play: the commodity Cloaking.House traffic-filtering service, and a bespoke script named SMARTAXE which resolves its remote domain by calling an Ethereum smart contract (an eth_call against a hardcoded contract address and function selector) — an EtherHiding pattern that makes takedown of the resolver effectively impossible.

Post-execution the chain is deliberately low-tech and high-yield: the pasted command downloads a VBS file into the user's Startup autorun directory (GHETTOVIBE), which pulls down SCOUTCURL, a PowerShell recon script that inventories hardware, installed software, files and browser data to triage the victim's value. Loaders FLUIDLEECH (masquerading as an antivirus-removal utility) and LOADLOOP follow, and responded-to incidents also yielded FREAKYPOLL, a Python backdoor shipped as compiled .pyc bytecode. A parallel Android track distributes COWARDDUCK as an APK disguised as security software over messengers, exfiltrating contacts, files and live geolocation via the Dropbox API while retrieving commands from images hosted on legitimate services (including steamcommunity.com) proxied through proxy.duckduckgo.com.

Highest-value defensive angle: every Windows variant of this chain crosses two behavioural chokepoints that are cheap to monitor and rare in benign use — explorer.exe spawning a shell interpreter (the Run-dialog paste), and a script file landing in the per-user Startup autorun directory. Neither depends on an atomic indicator, so both survive infrastructure rotation. Atomic IOCs in this pack come directly from the CERT-UA advisory and are worth deploying, but the behavioural hunts are the durable coverage.

Defender priority: Hunt explorer.exe → powershell.exe and writes to …\Start Menu\Programs\Startup\ across the last 90 days before importing indicators. The lure is user-consented execution — EDR prevention policy will not stop a user who was told to paste the command, so detection and Run-dialog hardening (GPO NoRun / ASR script rules) carry the load.

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry fwd
T1CERT-UA advisory 6318437 (2026-07-19)Primary. Full narrative of the ClickFix vector, all seven malware codenames, the SMARTAXE eth_call resolver mechanism, Cloaking.House usage, and the complete file / network / host indicator list.yes
T2The Hacker News (2026-07-19)Corroborates actor attribution (Sandworm sub-cluster, GRU), the ten-plus compromised sites figure, and the role of each named implant.yes
T2SOC Prime (2026-07-16)Corroborates the wider initial-access set: torrented trojanised Windows/Office installers and Signal-delivered "antivirus" lures alongside ClickFix.partial
T3The Cyber ExpressGeneral-audience corroboration of the ClickFix flow and victimology. No unique technical detail.partial

Research decisions

  • Indicator source of truth is CERT-UA only. Every hash and domain in this pack is transcribed from the advisory's indicator block; no indicator was carried from a secondary outlet.
  • Correction applied: the C2 domain is offlce366[.]com — an L-for-i typosquat of "office366" — not office366[.]com. Several early write-ups render it as the latter. Blocking the wrong string yields zero coverage; the advisory's literal spelling is used throughout this pack.
  • Not carried forward as atomic IOCs: Cloaking.House (a third-party service, not attacker-owned infrastructure), the SMARTAXE Ethereum contract address and function selector (not published), and any Dropbox API endpoint (the advisory names the service, not a host). These appear as behavioural signals instead.
  • proxy[.]duckduckgo[.]com, images[.]stockmemory[.]site, images[.]stockmemory[.]space and steamcommunity.com are flagged by CERT-UA as legitimate resources abused for C2/dead-drop. They are shipped as hunt/enrich only — blocking them will generate business impact and will not stop the actor.
  • Perishability: hashes are durable; the ten-plus compromised sites and the SMARTAXE-resolved domains rotate on the order of days-to-weeks. Re-pull the advisory before relying on network indicators past ~30 days.

Provenance: every atomic indicator in this pack traces back to the CERT-UA primary advisory; the corroborating sources supply narrative and attribution only.

03

Hunt Brief & Attack Chain

Attack chain

#StepTelemetryHunt angle
1User visits a compromised legitimate website; Cloaking.House and/or SMARTAXE decide whether to serve the lure. SMARTAXE resolves its remote domain via an Ethereum eth_call.Proxy / DNS logs, browser historyWeb-tier only. No endpoint telemetry — this is a declared coverage gap (see §15).
2Fake CAPTCHA instructs the victim to copy a PowerShell command and run it via Win+R or Windows Terminal.RegGenericValueUpdate (RunMRU), ProcessRollup2Q1, Q2explorer.exe parenting a shell; RunMRU values containing interpreter strings.
3The pasted command downloads a VBS file into the user's Startup autorun directory. One variant is codenamed GHETTOVIBE (Copilot Agent.vbs; a related sample is Work Copilot.vbs).ProcessRollup2, FileCreateInfo, NewScriptWrittenQ3, Q5 — download cradle referencing Startup; script file created in the autorun path.
4GHETTOVIBE executes at next logon via wscript.exe and beacons to its staging hosts.ProcessRollup2, DnsRequestQ4, Q8 — wscript/cscript with a Startup path in the command line; DNS for the GHETTOVIBE staging domains.
5SCOUTCURL (reshV1_2.ps1) is staged for triage recon: hardware, installed software, files, browser data — then exfiltrated.ProcessRollup2Q11 — PowerShell combining system inventory with browser-credential-store paths.
6Loaders deploy: FLUIDLEECH (ESET AV Remover.exeupdatus.exe, posing as virus-removal software) and LOADLOOP (sl3.exe).ProcessRollup2, PeFileWrittenQ6, Q10 — named-artifact and hash sweeps; unsigned "AV remover" spawning a child.
7FREAKYPOLL Python backdoor establishes persistent remote access, deployed as .pyc bytecode with a private interpreter under %LOCALAPPDATA%\SystemHelper\python\.ProcessRollup2, FileCreateInfoQ7 — python interpreter executing from a non-standard user-writable directory.
8Android track: COWARDDUCK APK (ESET.apk) delivered over messengers; exfiltrates contacts, documents and live geolocation via the Dropbox API, retrieving tasking from images on legitimate hosts.MDM / mobile telemetryOut of Falcon Windows scope. Native mobile hunts in §7; declared gap in §15.
9Dead-drop C2 and exfil over legitimate services (Dropbox API, steamcommunity.com, DuckDuckGo proxy).DnsRequest, NetworkConnectIP4Q9 — these destinations reached by a process that is not a browser or the vendor's own client.

Hunt hypotheses (fidelity-ordered)

#HypothesisMITREEventsExpected FPConf
H1A user was socially engineered into pasting an interpreter command into the Run dialog, so explorer.exe directly parents powershell.exe/cmd.exe with download or encoding flags.T1204.004, T1059.001ProcessRollup2Admins and helpdesk scripts launched from RunHIGH
H2The Run-dialog paste is recorded in the user's RunMRU registry key, leaving forensic evidence even if the process rolled off retention.T1204.004RegGenericValueUpdateLegitimate admin use of RunHIGH
H3A script file (.vbs/.js/.ps1/.hta/.lnk) was written into a per-user Startup autorun directory by a non-installer process.T1547.001FileCreateInfo, NewScriptWrittenLegacy LOB installers, IT logon-script deploymentHIGH
H4wscript.exe/cscript.exe is executing a script located in a Startup autorun directory.T1059.005, T1547.001ProcessRollup2Legacy enterprise VBS logon scriptsHIGH
H5A PowerShell download cradle writes its output into the Startup directory in a single command line.T1105, T1547.001ProcessRollup2Very rare benign; software-deployment toolingHIGH
H6A binary named as security/AV-removal software (FLUIDLEECH, LOADLOOP) executes from a user-writable path and spawns a child.T1036.005, T1204.002ProcessRollup2Genuine ESET AV Remover runs during migrationsMED
H7A Python interpreter runs from a non-standard user-writable directory executing compiled bytecode (FREAKYPOLL).T1059.006, T1027.011ProcessRollup2Embedded Python in dev tooling and vendor appsMED
H8An endpoint resolved one of the CERT-UA-published campaign domains.T1071.001DnsRequestNear-zero; sinkhole and researcher trafficHIGH
H9A non-browser, non-vendor process is reaching Dropbox API, steamcommunity.com or the DuckDuckGo proxy — dead-drop C2 or exfil.T1102.002, T1567.002DnsRequestBackup agents, game launchers, sync clientsMED
H10A file matching a published campaign hash exists or executed in the estate.T1204.002ProcessRollup2, PeFileWrittenNoneHIGH
H11PowerShell is performing system inventory and touching browser credential stores in one session (SCOUTCURL).T1082, T1217, T1539ProcessRollup2Asset-inventory and browser-migration toolingMED
H12A campaign-named artifact appears in any command line (GHETTOVIBE / SCOUTCURL / LOADLOOP / SMARTAXE filenames).T1204.002ProcessRollup2NoneHIGH
04

Consolidated IOC Table

All indicators transcribed verbatim from CERT-UA advisory 6318437. Domains are shown defanged.

Files

FilenameFamilySHA256MD5ConfAction
Copilot Agent.vbsGHETTOVIBE78e31b518516fd5b11f63dbe91f96aece7d95f027a612b9a8baf9989a0598693df586c8f8bb6f3fda68d0f60345613f3highdetect
Work Copilot.vbsVBS dropper (related)0abaae3054d6dc5bee1f17684df98bf427e5c73eb3a0febb123f9ce670dbde78a7ee9222e0e1856f8c1fe341c669ed9bhighdetect
reshV1_2.ps1SCOUTCURL157aca11cdd3482728e1f687cb643f6c063025aebaf488159b4d3bf6aa9aa46da35fc74528f0a03692288ba86dc92960highdetect
ESET AV Remover.exeFLUIDLEECH carrier (contains updatus.exe)45ec265667be203aa552744cbb1c3d10f04f91d8de513eaf8f0ff99817e2b66020ee4a5c6422fef7f22b26bac3c1b7f2highdetect
updatus.exeFLUIDLEECH carrier8bd8ab9eef9ebfa683a37c0bcd8a1e29ec032861e01f15bc3488586b400b0982ee85ed7f5d366d84001db0be6c340984highdetect
updatus.truncated.exeFLUIDLEECH6065f5541d4c5e70d7ae821e275856755c900df2971e20d51314d738933bc81e65eb40ec0156e2ef0e9732e6fa6fe002highdetect
sl3.exeLOADLOOPa000fd4ab4c951d246f9db7e9d77dd3f3e91bbafbb93499cadf4ac5e31b77ed6c1e7c4304ba17f77856e8cc809cd69a8highdetect
update.cpython-314.pycFREAKYPOLL488b2b1b5434db7a47471220c0bac940bc5900c258ed076589d45468c4f838c62b21e2c6ccb1645f45890baf07590600highdetect
ESET.apkCOWARDDUCK (Android)0c6095acf2e075db839872a0a74000cfb8a3984fff719ac7e5cc11115eefedadb674f1c1b941b6fa1373207a1d1431dehighdetect
wp-header.jsSMARTAXE (server-side)25606f1239350b2c93d72bfbd63aa165b922326a50a1c79fc9556e74731b673a5d176e6eb88ccfe7d48945fec4262817highhunt

Network

DomainAttributionConfActionExpiry
update-requirements[.]comFREAKYPOLLhighdetect2027-01-20
entouchnetworks[.]comSMARTAXEhighdetect2027-01-20
static[.]diagnostics-monitoring[.]comGHETTOVIBEhighdetect2027-01-20
static[.]opennetworkconnect[.]comGHETTOVIBEhighdetect2027-01-20
softupdater[.]orgFLUIDLEECHhighdetect2027-01-20
soft[.]softchecker[.]orgFLUIDLEECHhighdetect2027-01-20
pack[.]softpacker[.]orgFLUIDLEECHhighdetect2027-01-20
smartlinkupload[.]comCampaign infrastructurehighdetect2027-01-20
delta[.]smartlinkupload[.]comCampaign infrastructurehighdetect2027-01-20
offlce366[.]comCampaign infrastructure (typosquat — note the letter L)highdetect2027-01-20
365softupdate[.]comCampaign infrastructurehighdetect2027-01-20
images[.]stockmemory[.]siteLegitimate service abused as COWARDDUCK C2 dead-dropmediumhunt2026-10-20
images[.]stockmemory[.]spaceLegitimate service abused as COWARDDUCK C2 dead-dropmediumhunt2026-10-20
proxy[.]duckduckgo[.]comLegitimate service used by COWARDDUCK for relaylowenrich2026-08-20

Host

ArtifactMeaningAction
%LOCALAPPDATA%\SystemHelper\python\Private Python interpreter directory staged for FREAKYPOLLdetect
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\Copilot Agent.vbsGHETTOVIBE autorun persistencedetect

Not published, do not invent: the SMARTAXE Ethereum contract address and function selector, the Dropbox API tokens/endpoints, and the identities of the ten-plus compromised websites. Those slots ship as REPLACE_WITH_ placeholders in §10, not as guesses.

05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk
Windows workstations (all users with browser + Run dialog)Falcon ProcessRollup2 / SyntheticProcessRollup2CRITICALLow — default sensor coverage
Per-user Startup autorun directoriesFileCreateInfo, NewScriptWritten, NewExecutableWrittenCRITICALLow
Run-dialog / RunMRU registryRegGenericValueUpdate, AsepValueUpdateHIGHMedium — registry-value telemetry is sometimes trimmed by policy
Endpoint DNS resolutionDnsRequestHIGHMedium — encrypted DNS (DoH) in the browser bypasses sensor DNS visibility
Egress to Dropbox / Steam / DuckDuckGoDnsRequest, NetworkConnectIP4, proxy logsMEDIUMMedium — TLS-inspection-dependent for full fidelity
Android devices (BYOD and corporate)MDM / mobile threat defence; Falcon for Mobile if licensedHIGHHIGH — usually no telemetry at all on BYOD
Externally-hosted web properties you ownWeb-server file-integrity monitoring, CMS audit logsHIGHHIGH — SMARTAXE lives server-side; EDR on the client never sees it
Web proxy / secure web gatewayFull URL + referrer loggingMEDIUMMedium — needed to identify which compromised site served the lure
06

ATT&CK Mapping

TacticTechniqueObserved behaviourQuery / control
Resource DevelopmentT1584.004 — Compromise Infrastructure: ServerTen-plus legitimate websites compromised to host the lureHardening §12 (web tier)
Initial AccessT1189 — Drive-by CompromiseFake CAPTCHA served conditionally by Cloaking.House / SMARTAXEProxy hunts §7
ExecutionT1204.004 — User Execution: Malicious Copy and PasteVictim pastes the supplied command into Run / TerminalQ1, Q2
ExecutionT1059.001 — PowerShellDownload cradle stages the VBS payloadQ1, Q5, Q11
ExecutionT1059.005 — Visual BasicGHETTOVIBE VBS executed by wscriptQ4, Q12
ExecutionT1059.006 — PythonFREAKYPOLL runs as compiled bytecodeQ7
PersistenceT1547.001 — Registry Run Keys / Startup FolderVBS dropped into the per-user Startup directoryQ3, Q4, Q5
Defense EvasionT1036.005 — Masquerading: Match Legitimate Name or LocationFLUIDLEECH poses as ESET AV Remover; COWARDDUCK APK poses as security softwareQ6, Q10
Defense EvasionT1027.011 — Fileless / compiled bytecode payloadFREAKYPOLL shipped as .pycQ7
Defense EvasionT1568.003 — Dynamic Resolution: DNS CalculationSMARTAXE resolves its C2 domain from an Ethereum smart contract (EtherHiding)§7 web-tier hunt; declared gap §15
DiscoveryT1082 — System Information DiscoverySCOUTCURL inventories hardware and installed softwareQ11
Credential AccessT1539 / T1555.003 — Browser cookies and credentialsSCOUTCURL collects browser dataQ11
Command and ControlT1071.001 — Application Layer Protocol: WebBeaconing to campaign domains over HTTP/SQ8
Command and ControlT1102.002 — Web Service: Bidirectional CommunicationTasking retrieved from images on legitimate hosts incl. steamcommunity.comQ9
Command and ControlT1090.002 — External ProxyCOWARDDUCK relays via proxy.duckduckgo.comQ9
ExfiltrationT1567.002 — Exfiltration to Cloud StorageFile upload via the Dropbox APIQ9
CollectionT1430 / T1636 — Mobile location and protected dataCOWARDDUCK collects contacts, documents, live geolocation§7 mobile hunts
07

Native Audit-Log Hunts (non-CQL)

Windows event log / Sysmon

  • Sysmon Event ID 1 — process create where ParentImage ends in explorer.exe and Image is powershell.exe, pwsh.exe, cmd.exe, wt.exe or mshta.exe. This is the ClickFix signature in a Sysmon-only estate.
  • Sysmon Event ID 11 — file create where TargetFilename contains \Start Menu\Programs\Startup\. Baseline this for a week; in most estates the benign set is a handful of vendor shortcuts.
  • PowerShell Operational 4104 (script-block logging) — script blocks containing both a download cradle and a Startup path, or containing Get-ComputerInfo alongside browser profile paths (SCOUTCURL shape).
  • Security 4688 with command-line auditing enabled — same parent/child pattern as Sysmon ID 1 if Sysmon is not deployed.

Offline / forensic triage

  • Dump HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU on any suspect host — this key retains what the user typed or pasted into the Run dialog, and survives long after process telemetry has aged out. It is the single highest-value artifact for confirming or ruling out ClickFix on a specific machine.
  • List the contents of %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\ and the machine-wide equivalent under %ProgramData%.
  • Check for the existence of %LOCALAPPDATA%\SystemHelper\python\ — this directory has no legitimate reason to exist and its presence alone warrants escalation.

Web proxy / SWG

  • Pull full-URL logs for the 90 days preceding any confirmed endpoint hit and identify the referring site — that site is compromised and its owner should be notified.
  • Hunt for requests to Ethereum JSON-RPC endpoints (eth_call payloads to public RPC providers) originating from user browsers; this is the SMARTAXE resolver step and is unusual outside of Web3 development work.

Web properties you own (SMARTAXE server-side)

  • File-integrity check on CMS theme and plugin JavaScript. CERT-UA names wp-header.js as a SMARTAXE artifact — a WordPress-shaped filename that blends into a theme directory. Compare all deployed JS against version control or a clean vendor archive.
  • Review CMS user accounts, installed plugins and any webshells; CERT-UA notes explicitly that use of a site in this campaign is itself proof the site is compromised.

Mobile (COWARDDUCK)

  • MDM inventory query for any installed package whose display name impersonates a security vendor but was sideloaded (installer package not the managed store).
  • Alert on newly-granted ACCESS_FINE_LOCATION, READ_CONTACTS and storage permissions on sideloaded apps.
  • Advise users that legitimate antivirus vendors never distribute APKs over Signal, WhatsApp or Telegram.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · ClickFix — explorer.exe spawning a shell interpreter
CONF HIGHFP LOWCOST LOW

Looks for: the defining ClickFix artifact — the Windows Run dialog and Windows Terminal are children of explorer.exe, so a user pasting an attacker-supplied command produces explorer.exe → powershell.exe carrying download or encoding flags. FP: administrators and helpdesk staff legitimately launch scripts from Run; exclude your known admin accounts and any deployment tooling before promoting.

// HUNT: ClickFix Run-dialog paste — explorer.exe parenting an interpreter
// MITRE: T1204.004, T1059.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: admin/helpdesk use of Win+R; software deployment agents
// TUNING: exclude UserName in your admin group and known deployment service accounts
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^explorer\.exe$/i
| FileName=/^(powershell|pwsh|cmd|wt|mshta)\.exe$/i
| CommandLine=/(-enc|-EncodedCommand|-w hidden|-windowstyle hidden|iex|Invoke-Expression|DownloadString|DownloadFile|Invoke-WebRequest|Start-BitsTransfer|FromBase64String|curl |certutil)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData], limit=200)
Q2 · RunMRU registry — pasted interpreter command
CONF HIGHFP LOWCOST LOW

Looks for: the forensic residue of the paste. Windows records every Run-dialog entry in RunMRU, so this fires even when the process itself has aged out of retention — and it recovers the full original string the user was told to type. FP: genuine admin use of the Run dialog; scope to non-admin users first.

// HUNT: RunMRU value containing an interpreter or download cradle
// MITRE: T1204.004
// CONF: high  FP: low  COST: low | REQUIRES: RegGenericValueUpdate
// FALSE POSITIVES: admins typing powershell/cmd into Run
// TUNING: filter to standard-user accounts; a paste is typically long, so triage by string length first
#event_simpleName=/^(RegGenericValueUpdate|AsepValueUpdate)$/
| RegObjectName=/RunMRU/i
| RegStringValue=/(powershell|pwsh|mshta|curl|certutil|iex|Invoke-Expression|Invoke-WebRequest|DownloadString|FromBase64String|conhost)/i
| table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue], limit=200)
Q3 · Script or executable written into a Startup autorun directory
CONF HIGHFP LOWCOST LOW

Looks for: GHETTOVIBE's persistence step — a VBS (or any script/executable) landing in …\Start Menu\Programs\Startup\. In most estates the benign population of this directory is a handful of vendor shortcuts, which makes it one of the cleanest autorun hunts available. FP: legacy line-of-business installers and IT logon-script deployment; baseline for one week and allowlist by writing process.

// HUNT: GHETTOVIBE — script/PE written to the Startup autorun directory
// MITRE: T1547.001
// CONF: high  FP: low  COST: low | REQUIRES: FileCreateInfo / NewScriptWritten
// FALSE POSITIVES: LOB installers, IT logon-script deployment
// TUNING: allowlist by ContextBaseFileName once your benign writers are baselined
#event_simpleName=/^(FileCreateInfo|NewScriptWritten|NewExecutableWritten|PeFileWritten)$/
| TargetFileName=/Start Menu\\Programs\\Startup/i
| TargetFileName=/\.(vbs|vbe|js|jse|wsf|wsh|hta|ps1|psm1|lnk|bat|cmd|scr|exe|dll|pyc)$/i
| table([@timestamp, ComputerName, UserName, TargetFileName, ContextBaseFileName, SHA256HashData], limit=200)
Q4 · wscript / cscript / mshta executing from Startup
CONF HIGHFP LOWCOST LOW

Looks for: GHETTOVIBE actually firing at logon. Catches the persistence even if the original drop predates your retention window. FP: some enterprises still run legacy VBS logon scripts from Startup; those are a small, stable, easily-allowlisted set.

// HUNT: Script host executing a payload located in a Startup autorun directory
// MITRE: T1059.005, T1547.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: legacy enterprise VBS logon scripts
// TUNING: allowlist the specific script names your IT team deploys
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(wscript|cscript|mshta|powershell|pwsh)\.exe$/i
| CommandLine=/Start Menu\\Programs\\Startup/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData], limit=200)
Q5 · PowerShell download cradle writing into Startup
CONF HIGHFP LOWCOST LOW

Looks for: the exact command CERT-UA describes — one PowerShell invocation that both retrieves a remote file and saves it into the autorun directory. Download-plus-autorun in a single command line is essentially never benign.

// HUNT: Single-command download-to-Startup (the ClickFix payload stage)
// MITRE: T1105, T1547.001, T1059.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: rare; some software-deployment scripting
// TUNING: allowlist your deployment tool's service account if it stages shortcuts this way
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(powershell|pwsh|cmd)\.exe$/i
| CommandLine=/Startup/i
| CommandLine=/(DownloadFile|DownloadString|Invoke-WebRequest|Start-BitsTransfer|WebClient|OutFile|curl |certutil|bitsadmin)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Q6 · FLUIDLEECH / LOADLOOP — fake AV-removal tooling
CONF HIGHFP MEDCOST LOW

Looks for: the loader stage by artifact name — CERT-UA names ESET AV Remover.exe (carrier), updatus.exe (FLUIDLEECH) and sl3.exe (LOADLOOP). FP: the genuine ESET AV Remover utility is a real tool used during AV migrations — always confirm against the published SHA256 in §4 and check the signing status before escalating. Any unsigned copy running from a user-writable path is malicious until proven otherwise.

// HUNT: FLUIDLEECH / LOADLOOP named artifacts
// MITRE: T1036.005, T1204.002
// CONF: high  FP: medium  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: the genuine ESET AV Remover during a real AV migration
// TUNING: cross-check SHA256HashData against the campaign hashes in section 4; treat
// TUNING: any copy executing from Downloads/Temp/AppData as malicious until cleared
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(ESET AV Remover|updatus|updatus\.truncated|sl3)\.exe$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData], limit=200)
Q7 · FREAKYPOLL — Python interpreter from a user-writable staging directory
CONF HIGHFP MEDCOST LOW

Looks for: the FREAKYPOLL backdoor's execution shape — a private Python interpreter staged under %LOCALAPPDATA%\SystemHelper\python\ running compiled .pyc bytecode. The SystemHelper path is a CERT-UA-published host indicator and has no legitimate use. FP: vendor applications and developer tooling do embed private Python interpreters under AppData — allowlist those by their parent application directory, but never allowlist SystemHelper itself.

// HUNT: FREAKYPOLL — Python backdoor executing from a staged AppData interpreter
// MITRE: T1059.006, T1027.011
// CONF: high  FP: medium  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: embedded Python in dev tooling and vendor apps under AppData
// TUNING: allowlist known vendor app directories; never allowlist SystemHelper
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(python|pythonw)[0-9.]*\.exe$/i
| ImageFileName=/AppData\\Local\\(SystemHelper|Temp)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData], limit=200)
Q8 · Campaign C2 domain resolution
CONF HIGHFP LOWCOST LOW

Looks for: resolution of any CERT-UA-published campaign domain. Note offlce366.com is spelled with a lowercase L, not an i — copying it wrong yields silent zero coverage. Run this across the maximum retention you hold.

// HUNT: UAC-0145 published C2 / staging domain resolution
// MITRE: T1071.001
// CONF: high  FP: low  COST: low | REQUIRES: DnsRequest
// FALSE POSITIVES: sinkholed infrastructure; internal researcher lookups
// NOTE: offlce366 uses a lowercase L — verify the literal before deploying
#event_simpleName=DnsRequest
| DomainName=/^(update-requirements\.com|entouchnetworks\.com|smartlinkupload\.com|delta\.smartlinkupload\.com|static\.diagnostics-monitoring\.com|static\.opennetworkconnect\.com|softupdater\.org|soft\.softchecker\.org|pack\.softpacker\.org|offlce366\.com|365softupdate\.com|images\.stockmemory\.site|images\.stockmemory\.space)$/i
| table([@timestamp, ComputerName, UserName, DomainName, ContextBaseFileName], limit=200)
Q9 · Dead-drop C2 and cloud exfil from a non-browser process
CONF MEDFP MEDCOST MED

Looks for: the living-off-trusted-services pattern — Dropbox API for exfil and steamcommunity.com / DuckDuckGo proxy for tasking retrieval, reached by a process that is neither a browser nor the vendor's own client. FP: backup agents, sync clients and game launchers legitimately reach these hosts; the exclusion list below covers the common ones and must be extended with whatever is normal in your estate before this is promoted past investigate-only.

// HUNT: Trusted-service dead-drop C2 / exfil from an unexpected process
// MITRE: T1102.002, T1567.002, T1090.002
// CONF: medium  FP: medium  COST: medium | REQUIRES: DnsRequest
// FALSE POSITIVES: backup/sync agents, game launchers, security tooling
// TUNING: extend the ContextBaseFileName exclusion with your approved sync clients
#event_simpleName=DnsRequest
| DomainName=/(dropboxapi\.com|content\.dropboxapi\.com|steamcommunity\.com|proxy\.duckduckgo\.com)$/i
| ContextBaseFileName!=/^(chrome|msedge|firefox|brave|opera|iexplore|safari|Dropbox|steam|steamwebhelper|duckduckgo)\.exe$/i
| table([@timestamp, ComputerName, UserName, DomainName, ContextBaseFileName], limit=200)
Q10 · Published campaign hash sweep
CONF HIGHFP LOWCOST MED

Looks for: any execution or write of a file matching a CERT-UA-published SHA256. Zero false positives by construction — any hit is a confirmed incident, not a hunt lead.

// HUNT: UAC-0145 published SHA256 sweep (execution or file write)
// MITRE: T1204.002
// CONF: high  FP: low  COST: medium | REQUIRES: ProcessRollup2, PeFileWritten
// FALSE POSITIVES: none — treat any hit as a confirmed incident
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten|NewScriptWritten)$/
| in(SHA256HashData, values=[
    "78e31b518516fd5b11f63dbe91f96aece7d95f027a612b9a8baf9989a0598693",
    "0abaae3054d6dc5bee1f17684df98bf427e5c73eb3a0febb123f9ce670dbde78",
    "157aca11cdd3482728e1f687cb643f6c063025aebaf488159b4d3bf6aa9aa46d",
    "45ec265667be203aa552744cbb1c3d10f04f91d8de513eaf8f0ff99817e2b660",
    "8bd8ab9eef9ebfa683a37c0bcd8a1e29ec032861e01f15bc3488586b400b0982",
    "6065f5541d4c5e70d7ae821e275856755c900df2971e20d51314d738933bc81e",
    "a000fd4ab4c951d246f9db7e9d77dd3f3e91bbafbb93499cadf4ac5e31b77ed6",
    "488b2b1b5434db7a47471220c0bac940bc5900c258ed076589d45468c4f838c6",
    "25606f1239350b2c93d72bfbd63aa165b922326a50a1c79fc9556e74731b673a"])
| table([@timestamp, ComputerName, UserName, FileName, TargetFileName, ImageFileName, SHA256HashData], limit=max)
Q11 · SCOUTCURL — inventory recon plus browser-data collection
CONF MEDFP MEDCOST MED

Looks for: the SCOUTCURL behaviour profile — a PowerShell session doing system/software inventory and touching browser profile stores in the same command line. Either alone is common; the combination is the triage-and-steal pattern. FP: asset-inventory agents and browser-migration tooling; exclude your inventory platform's service account and any profile-migration utility.

// HUNT: SCOUTCURL-shaped recon — inventory plus browser credential stores
// MITRE: T1082, T1217, T1539, T1555.003
// CONF: medium  FP: medium  COST: medium | REQUIRES: ProcessRollup2
// FALSE POSITIVES: asset-inventory agents, browser profile migration tools
// TUNING: exclude the service account used by your inventory platform
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(powershell|pwsh)\.exe$/i
| CommandLine=/(Get-ComputerInfo|Get-WmiObject|Get-CimInstance|systeminfo|Win32_ComputerSystem|Get-ItemProperty.*Uninstall)/i
| CommandLine=/(Login Data|Web Data|Local State|Cookies|AppData\\Local\\Google\\Chrome|AppData\\Roaming\\Mozilla|AppData\\Local\\Microsoft\\Edge)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Q12 · Campaign-named artifact in any command line
CONF HIGHFP LOWCOST LOW

Looks for: the campaign's distinctive filenames anywhere in process command lines. Cheap, name-based backstop that catches renamed-hash variants still invoked by their original filename.

// HUNT: UAC-0145 named artifacts referenced in a command line
// MITRE: T1204.002
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: negligible — these are campaign-specific filenames
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/(Copilot Agent\.vbs|Work Copilot\.vbs|reshV1_2\.ps1|update\.cpython-314\.pyc|updatus\.exe|sl3\.exe|wp-header\.js|SystemHelper)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData], limit=200)
09

CrowdStrike Custom IOA Recommendations

Three queries are strong enough to promote to Custom IOAs. The rest stay investigate-only until baselined.

IOA nameFromPatternExclusionsAction
UAC-0145 · ClickFix Run-Dialog InterpreterQ1Process Creation — parent explorer.exe, image powershell.exe/pwsh.exe/cmd.exe, command line matching the download-or-encode setAdmin and helpdesk accounts; deployment agent service accountsDetect (High) — move to Prevent only after a clean two-week baseline
UAC-0145 · Startup Autorun Script DropQ3File Creation — target path contains \Start Menu\Programs\Startup\ and extension in the script/PE setYour software-deployment writer processesDetect (High)
UAC-0145 · Download-to-Startup CradleQ5Process Creation — image powershell.exe, command line contains both a download primitive and StartupNone knownPrevent (Critical) — this combination has no benign use we could identify

Investigate-only (do not promote yet)

  • Q6, Q7, Q9, Q11 — each has a real benign population (AV migrations, embedded Python, sync clients, inventory agents). Baseline for 14 days and convert exclusions into the IOA before promotion.
  • Q8, Q10, Q12 — better served by Falcon IOC Management (see §10) than by an IOA, since they are pure atomic matching.

Deployment path

  1. Endpoint security → Custom IOA rule groups → create a Windows rule group named UAC-0145-ClickFix.
  2. Add each rule in Monitor action first; assign the group to a pilot prevention policy covering ~5% of workstations.
  3. Review hits daily for 14 days, folding every benign hit into the rule's exclusion regex.
  4. Promote to Detect (all three) and Prevent (the Q5 rule) estate-wide.
10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,78e31b518516fd5b11f63dbe91f96aece7d95f027a612b9a8baf9989a0598693,prevent,critical,2027-01-20,GHETTOVIBE VBS dropper (Copilot Agent.vbs),campaign:UAC-0145
sha256,0abaae3054d6dc5bee1f17684df98bf427e5c73eb3a0febb123f9ce670dbde78,prevent,critical,2027-01-20,VBS dropper (Work Copilot.vbs),campaign:UAC-0145
sha256,157aca11cdd3482728e1f687cb643f6c063025aebaf488159b4d3bf6aa9aa46d,prevent,critical,2027-01-20,SCOUTCURL recon script (reshV1_2.ps1),campaign:UAC-0145
sha256,45ec265667be203aa552744cbb1c3d10f04f91d8de513eaf8f0ff99817e2b660,prevent,critical,2027-01-20,FLUIDLEECH carrier (ESET AV Remover.exe),campaign:UAC-0145
sha256,8bd8ab9eef9ebfa683a37c0bcd8a1e29ec032861e01f15bc3488586b400b0982,prevent,critical,2027-01-20,FLUIDLEECH carrier (updatus.exe),campaign:UAC-0145
sha256,6065f5541d4c5e70d7ae821e275856755c900df2971e20d51314d738933bc81e,prevent,critical,2027-01-20,FLUIDLEECH loader,campaign:UAC-0145
sha256,a000fd4ab4c951d246f9db7e9d77dd3f3e91bbafbb93499cadf4ac5e31b77ed6,prevent,critical,2027-01-20,LOADLOOP loader (sl3.exe),campaign:UAC-0145
sha256,488b2b1b5434db7a47471220c0bac940bc5900c258ed076589d45468c4f838c6,prevent,critical,2027-01-20,FREAKYPOLL python backdoor bytecode,campaign:UAC-0145
sha256,25606f1239350b2c93d72bfbd63aa165b922326a50a1c79fc9556e74731b673a,detect,high,2027-01-20,SMARTAXE server-side cloaking script (wp-header.js),campaign:UAC-0145
sha256,0c6095acf2e075db839872a0a74000cfb8a3984fff719ac7e5cc11115eefedad,detect,high,2027-01-20,COWARDDUCK Android backdoor (ESET.apk) - mobile MDM import,campaign:UAC-0145
md5,df586c8f8bb6f3fda68d0f60345613f3,detect,high,2027-01-20,GHETTOVIBE VBS dropper,campaign:UAC-0145
md5,a7ee9222e0e1856f8c1fe341c669ed9b,detect,high,2027-01-20,VBS dropper (Work Copilot.vbs),campaign:UAC-0145
md5,a35fc74528f0a03692288ba86dc92960,detect,high,2027-01-20,SCOUTCURL recon script,campaign:UAC-0145
md5,20ee4a5c6422fef7f22b26bac3c1b7f2,detect,high,2027-01-20,FLUIDLEECH carrier,campaign:UAC-0145
md5,ee85ed7f5d366d84001db0be6c340984,detect,high,2027-01-20,FLUIDLEECH carrier (updatus.exe),campaign:UAC-0145
md5,65eb40ec0156e2ef0e9732e6fa6fe002,detect,high,2027-01-20,FLUIDLEECH loader,campaign:UAC-0145
md5,c1e7c4304ba17f77856e8cc809cd69a8,detect,high,2027-01-20,LOADLOOP loader,campaign:UAC-0145
md5,2b21e2c6ccb1645f45890baf07590600,detect,high,2027-01-20,FREAKYPOLL bytecode,campaign:UAC-0145
md5,b674f1c1b941b6fa1373207a1d1431de,detect,high,2027-01-20,COWARDDUCK APK,campaign:UAC-0145
md5,5d176e6eb88ccfe7d48945fec4262817,detect,high,2027-01-20,SMARTAXE cloaking script,campaign:UAC-0145
domain,update-requirements.com,detect,high,2027-01-20,FREAKYPOLL C2,campaign:UAC-0145
domain,entouchnetworks.com,detect,high,2027-01-20,SMARTAXE infrastructure,campaign:UAC-0145
domain,static.diagnostics-monitoring.com,detect,high,2027-01-20,GHETTOVIBE staging,campaign:UAC-0145
domain,static.opennetworkconnect.com,detect,high,2027-01-20,GHETTOVIBE staging,campaign:UAC-0145
domain,softupdater.org,detect,high,2027-01-20,FLUIDLEECH distribution,campaign:UAC-0145
domain,soft.softchecker.org,detect,high,2027-01-20,FLUIDLEECH distribution,campaign:UAC-0145
domain,pack.softpacker.org,detect,high,2027-01-20,FLUIDLEECH distribution,campaign:UAC-0145
domain,smartlinkupload.com,detect,high,2027-01-20,campaign infrastructure,campaign:UAC-0145
domain,delta.smartlinkupload.com,detect,high,2027-01-20,campaign infrastructure,campaign:UAC-0145
domain,offlce366.com,detect,high,2027-01-20,campaign infrastructure - typosquat spelled with lowercase L,campaign:UAC-0145
domain,365softupdate.com,detect,high,2027-01-20,campaign infrastructure,campaign:UAC-0145
domain,images.stockmemory.site,detect,medium,2026-10-20,COWARDDUCK dead-drop on a legitimate host - HUNT not block,campaign:UAC-0145
domain,images.stockmemory.space,detect,medium,2026-10-20,COWARDDUCK dead-drop on a legitimate host - HUNT not block,campaign:UAC-0145
domain,REPLACE_WITH_SMARTAXE_RESOLVED_DOMAIN,detect,high,2026-10-20,resolved at runtime from an Ethereum contract - not published,campaign:UAC-0145
domain,REPLACE_WITH_COMPROMISED_LURE_SITE,detect,medium,2026-10-20,one of 10+ compromised sites - identities not published,campaign:UAC-0145
# proxy.duckduckgo.com is abused by COWARDDUCK but is a legitimate service - enrich only, never block
Behavioural Signaturessurvives rotation
BEHAVIOURAL SIGNALS - UAC-0145 ClickFix (no atomic indicator required)

B1  explorer.exe directly parents powershell.exe / pwsh.exe / cmd.exe / wt.exe
    carrying a download primitive or -EncodedCommand.  [Run-dialog paste]
B2  HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU gains a value
    containing an interpreter name or download cradle.
B3  Any .vbs / .js / .ps1 / .hta / .lnk / .exe created in
    %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\
B4  wscript.exe or cscript.exe with a Startup-directory path in its command line.
B5  One PowerShell command line containing BOTH a download primitive AND the
    string "Startup".  No benign equivalent identified.
B6  Directory %LOCALAPPDATA%\SystemHelper\python\ exists on any endpoint.
B7  python.exe / pythonw.exe executing .pyc bytecode from a user-writable path.
B8  Non-browser process resolving Dropbox API, steamcommunity.com or
    proxy.duckduckgo.com.  [dead-drop C2 / cloud exfil]
B9  Browser process issuing an Ethereum JSON-RPC eth_call to a public RPC
    provider.  [SMARTAXE / EtherHiding resolver step]
B10 Sideloaded Android package impersonating a security vendor, requesting
    contacts + fine location + storage.  [COWARDDUCK]
B11 A binary named as AV-removal tooling executing from Downloads, Temp or
    AppData, unsigned or signature-mismatched.  [FLUIDLEECH]
Named Malware & Toolingreference
UAC-0145 TOOLING (CERT-UA codenames, advisory 6318437)

GHETTOVIBE   VBS dropper; persists via the Startup autorun directory
SCOUTCURL    PowerShell recon; hardware, software, files, browser data
FLUIDLEECH   Loader masquerading as antivirus-removal software
LOADLOOP     Loader
FREAKYPOLL   Python backdoor, shipped as compiled .pyc bytecode
SMARTAXE     Server-side page-content alteration; resolves its C2 domain via an
             Ethereum smart-contract eth_call (EtherHiding)
COWARDDUCK   Android backdoor; contacts, files, real-time geolocation

HISTORICAL UAC-0145 TOOLING (same cluster, other access vectors)
KALAMBUR / SUMBUR / TAMBUR  - implants from the torrent and Signal vectors
OPENSSH + TOR               - port forwarding of 445 / 3389 / 22 to actor infra
RSYNC                       - exfiltration of Signal / WhatsApp key material

THIRD-PARTY SERVICES ABUSED
Cloaking.House  traffic filtering / conditional lure delivery
Dropbox API     file exfiltration (COWARDDUCK)
steamcommunity.com, images.stockmemory.site/.space   tasking dead-drops
proxy.duckduckgo.com   relay
Hardening Audit ChecklistASR / GPO verification
POWERSHELL AUDIT - run per host, compare against the intended baseline

# 1. Is the Run dialog disabled for standard users?
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name NoRun -EA SilentlyContinue

# 2. What is sitting in the per-user Startup autorun directory right now?
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" -Force

# 3. What has the user typed or pasted into the Run dialog?
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"

# 4. Does the FREAKYPOLL staging directory exist?
Test-Path "$env:LOCALAPPDATA\SystemHelper\python"

# 5. Are the relevant ASR rules enforced (not audit, not off)?
#    d3e037e1-3eb8-44c8-a917-57927947596d  JS/VBS launching downloaded content
#    3b576869-a4ec-4529-8536-b80a7769e899  Office creating executable content
#    5beb7efe-fd9a-4556-801d-275e5ffc04cc  Obfuscated script execution
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Actions

# 6. Is PowerShell script-block logging on?
Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" -EA SilentlyContinue

# 7. Constrained Language Mode active for standard users?
$ExecutionContext.SessionState.LanguageMode
11

Detection Validation Gates

GateTestPass criterion
G1 · Telemetry readyConfirm ProcessRollup2, FileCreateInfo, RegGenericValueUpdate and DnsRequest are all present for a representative workstation over the last 24hAll four event types return rows. If RegGenericValueUpdate is empty, Q2 is blind — record it as a gap.
G2 · Benign baselineRun Q1, Q3, Q4, Q6, Q7, Q9, Q11 across 30 days with no exclusionsEach query's benign population is enumerated and written into its TUNING line before promotion
G3 · Positive control — Run dialogFrom a test workstation, open Win+R and run powershell.exe -Command "Invoke-WebRequest -Uri https://example.com -OutFile $env:TEMP\gate.txt"Q1 returns the event within the expected ingest delay. Q2 returns the matching RunMRU value.
G4 · Positive control — Startup dropOn the same test host, copy a benign, clearly-named text-based .vbs stub into the user Startup directoryQ3 returns the file-create event; delete the stub immediately after.
G5 · Positive control — download-to-StartupCombine G3 and G4 into a single PowerShell command line whose -OutFile targets the Startup directoryQ5 returns the event. This is the gate for the Prevent-tier IOA.
G6 · Negative controlConfirm Q5 and Q3 produce zero hits on a 7-day window of a known-clean OUZero hits, or every hit explained and excluded
G7 · IOC ingestImport the §10 CSV into Falcon IOC ManagementAll rows accepted; the two REPLACE_WITH_ rows are rejected or removed as intended
G8 · Promotion14 days of clean pilot running for the three §9 IOAsFewer than one unexplained detection per 1,000 endpoints per week

Use only benign, clearly-labelled test artifacts for the positive controls and remove them immediately afterwards. Never stage real campaign samples to validate a detection.

12

Hardening — Tiered

ClickFix defeats payload-blocking because the user supplies the execution. The controls below attack the technique at its three chokepoints: the paste surface, the interpreter, and the autorun directory.

Immediate — deploy this week
  • Enable the ASR rule "Block JavaScript or VBScript from launching downloaded executable content" (d3e037e1-3eb8-44c8-a917-57927947596d) in Block mode. Directly breaks the GHETTOVIBE VBS stage. MITRE M1038 · Microsoft Security Baseline for Windows.
  • Enable ASR "Block execution of potentially obfuscated scripts" (5beb7efe-fd9a-4556-801d-275e5ffc04cc) in Block mode. Targets the encoded PowerShell cradle. MITRE M1038.
  • Turn on PowerShell script-block logging and module logging estate-wide. Without 4104 you cannot reconstruct what the pasted command actually did. MITRE M1047 · CIS Microsoft Windows Benchmark (Administrative Templates → Windows PowerShell).
  • Import the §10 IOC CSV into Falcon IOC Management at Prevent for the nine Windows SHA256 values, Detect for the domains. MITRE M1031.
  • Brief users on the ClickFix pattern specifically. The single sentence that inoculates: "No legitimate website, CAPTCHA or IT team will ever ask you to paste a command into the Run box or a terminal." Pair it with a one-click reporting path. MITRE M1017.
Near term — 1 to 4 weeks, pilot first
  • Disable the Run dialog for standard users via GPO: User Configuration → Administrative Templates → Start Menu and Taskbar → Remove Run menu from Start Menu (sets NoRun). This removes the primary paste surface outright. Pilot on a non-technical OU; expect pushback from developers and IT, who should sit in an exempted group. MITRE M1042 · CIS Windows Benchmark.
  • Deploy AppLocker or WDAC script rules blocking .vbs, .js, .wsf and .hta execution from user-writable paths (Startup, AppData, Temp, Downloads). Audit mode for two weeks, then enforce. MITRE M1038 · Microsoft WDAC guidance.
  • Change the default handler for .vbs, .vbe, .js, .jse, .wsf and .hta to Notepad so a double-click or autorun opens the file instead of executing it. Low-friction and highly effective against script droppers. MITRE M1042.
  • Enforce PowerShell Constrained Language Mode for standard users (via WDAC or AppLocker in Allow mode). Neutralises most download cradles without removing PowerShell. MITRE M1038.
  • Block newly-registered and uncategorised domains at the secure web gateway. UAC-0145's staging domains are short-lived, so category-based blocking outperforms indicator-based blocking here. MITRE M1021 · NIST SP 800-41.
  • Prohibit sideloading on managed Android devices (MDM: disallow install from unknown sources; enforce Play Protect). This is the whole COWARDDUCK vector. MITRE M1012 · CIS Google Android Benchmark. BYOD gap — for unmanaged devices this reduces to user guidance only.
Strategic — 1 to 3 months
  • Full WDAC application-control policy in enforced mode on high-value workstations, so unsigned loaders like FLUIDLEECH and LOADLOOP cannot execute regardless of how they arrive. MITRE M1038 · Microsoft WDAC design guide.
  • Remove local administrator rights from standard users and adopt a just-in-time elevation workflow. Limits the blast radius of a user-consented execution. MITRE M1026 · CIS Controls v8 §5, §6.
  • File-integrity monitoring and a signed-artifact deployment pipeline for all internet-facing web properties you own. SMARTAXE lives in the CMS theme layer (wp-header.js); only server-side FIM catches it, and CERT-UA is explicit that participation in this campaign proves the site is compromised. MITRE M1051 · CIS Controls v8 §7 · OWASP CMS hardening guidance. ⚠ best-practice, no single formal benchmark
  • Mandate a managed-device posture for access to sensitive data via Conditional Access, closing the BYOD-Android telemetry gap that COWARDDUCK exploits. MITRE M1013 · Microsoft Zero Trust deployment guidance.
  • Egress control for cloud-storage and gaming-platform APIs — allow Dropbox and Steam only for the processes that legitimately need them, so trusted-service dead-drops lose their cover. MITRE M1037 · NIST SP 800-41.
13

Deployable Playbooks

Playbook 1 — Disable the Run dialog and harden script handlers (GPO / registry)

Apply to a pilot OU first. Step 1 removes the paste surface; step 2 makes script files inert on double-click.

REM 1. Remove the Run menu for standard users (User Configuration policy)
REM    GPO path: User Configuration -> Administrative Templates ->
REM              Start Menu and Taskbar -> Remove Run menu from Start Menu
REM    Registry equivalent (per-user hive):
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
    NoRun            REG_DWORD    1

REM 2. Point script extensions at Notepad instead of the script hosts.
REM    Deploy as a per-user GPO preference or a logon script.
HKCU\Software\Classes\VBSFile\Shell\Open\Command
    (Default)        REG_SZ       notepad.exe "%1"
HKCU\Software\Classes\JSFile\Shell\Open\Command
    (Default)        REG_SZ       notepad.exe "%1"
HKCU\Software\Classes\WSFFile\Shell\Open\Command
    (Default)        REG_SZ       notepad.exe "%1"
HKCU\Software\Classes\JSEFile\Shell\Open\Command
    (Default)        REG_SZ       notepad.exe "%1"

REM 3. Verify after the policy has applied:
REM    gpresult /h report.html   then confirm NoRun = 1 in the user scope

Playbook 2 — Enforce the relevant ASR rules (PowerShell)

# Run elevated on each endpoint, or deploy via Intune / GPO / your RMM.
# Action value 1 = Block, 2 = Audit, 6 = Warn. Start at 2, move to 1 after a clean week.

$rules = @{
    # Block JavaScript or VBScript from launching downloaded executable content
    'd3e037e1-3eb8-44c8-a917-57927947596d' = 1
    # Block execution of potentially obfuscated scripts
    '5beb7efe-fd9a-4556-801d-275e5ffc04cc' = 1
    # Block Office applications from creating executable content
    '3b576869-a4ec-4529-8536-b80a7769e899' = 1
    # Block process creations originating from PSExec and WMI commands
    'd1e49aac-8f56-4280-b9ba-993a6d77406c' = 1
}

foreach ($id in $rules.Keys) {
    Add-MpPreference -AttackSurfaceReductionRules_Ids $id `
                     -AttackSurfaceReductionRules_Actions $rules[$id]
}

# Verify
$p = Get-MpPreference
for ($i = 0; $i -lt $p.AttackSurfaceReductionRules_Ids.Count; $i++) {
    '{0} = {1}' -f $p.AttackSurfaceReductionRules_Ids[$i],
                   $p.AttackSurfaceReductionRules_Actions[$i]
}

Playbook 3 — Enable PowerShell script-block and module logging (GPO / registry)

REM Machine-wide. Required to reconstruct what a pasted command actually executed.
HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
    EnableScriptBlockLogging          REG_DWORD    1
    EnableScriptBlockInvocationLogging REG_DWORD   1

HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging
    EnableModuleLogging               REG_DWORD    1
HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames
    *                                 REG_SZ       *

HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription
    EnableTranscripting               REG_DWORD    1
    EnableInvocationHeader            REG_DWORD    1
    OutputDirectory                   REG_SZ       \\FILESERVER-01\pstranscripts$

REM Ensure the transcript share is append-only for endpoints and readable only by IR.

Playbook 4 — Estate-wide triage sweep (PowerShell, read-only)

# Read-only collection. Run via your RMM or Falcon RTR against the estate and
# review centrally. Collects the four artifacts that confirm or rule out ClickFix.

$out = [ordered]@{ Host = $env:COMPUTERNAME; User = $env:USERNAME }

# 1. Run-dialog history - the paste itself
$mru = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
$out.RunMRU = if (Test-Path $mru) {
    (Get-ItemProperty $mru).PSObject.Properties |
        Where-Object { $_.Name -match '^[a-z]$' } |
        ForEach-Object { $_.Value }
} else { 'none' }

# 2. Contents of the per-user Startup autorun directory
$startup = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"
$out.Startup = Get-ChildItem $startup -Force -EA SilentlyContinue |
    Select-Object Name, Length, CreationTimeUtc

# 3. FREAKYPOLL staging directory - existence alone is an escalation
$out.SystemHelper = Test-Path "$env:LOCALAPPDATA\SystemHelper\python"

# 4. Hashes of anything script-like sitting in Startup
$out.StartupHashes = Get-ChildItem $startup -Force -EA SilentlyContinue |
    Where-Object { $_.Extension -match '\.(vbs|vbe|js|jse|wsf|hta|ps1|exe|lnk)$' } |
    ForEach-Object { '{0} {1}' -f (Get-FileHash $_.FullName -Algorithm SHA256).Hash, $_.Name }

[pscustomobject]$out | ConvertTo-Json -Depth 4

Playbook 5 — Web-property integrity check for SMARTAXE (shell)

# Run on any web server you own that could have been used to serve the lure.
# SMARTAXE was observed as wp-header.js - a CMS-theme-shaped filename.

# 1. Any JavaScript modified in the last 90 days under the web root
find /var/www -type f -name '*.js' -mtime -90 -printf '%TY-%Tm-%Td  %p\n' | sort

# 2. Hash every deployed JS file and diff against a clean vendor archive
find /var/www -type f -name '*.js' -exec sha256sum {} \; | sort -k2 > deployed.sha256
# then:  diff <(sort -k2 known-good.sha256) deployed.sha256

# 3. Look for the smart-contract resolver pattern SMARTAXE uses
grep -rIl -e 'eth_call' -e 'eth_chainId' -e 'window.ethereum' /var/www 2>/dev/null

# 4. Look for injected loaders in theme headers and footers
grep -rIn -e 'document.write' -e 'atob(' -e 'fromCharCode' /var/www --include='*.js' \
    --include='*.php' 2>/dev/null | head -50

# 5. Review CMS accounts and plugins for unexpected additions, then rotate all
#    admin credentials and any API keys the host held.
14

Containment Runbook

PhaseActionsOwnerEvidence to capture
P0 · Triage
0–30 min
Confirm the hit is genuine: pull the full command line, the RunMRU value and the Startup directory listing. Determine whether the user actually executed the command or only visited the site.SOC L1Process tree, RunMRU dump, Startup listing, browser history for the referring site
P1 · Isolate
within 1 h
Network-contain the host in Falcon. Do not reimage yet. Treat the user's credentials as compromised and suspend active sessions.SOC L2Containment timestamp; Falcon host ID
P2 · Scope
1–4 h
Run Q1–Q12 estate-wide over maximum retention. Identify every host that resolved a campaign domain or wrote to Startup. Ask the proxy team which internal users visited the referring site and treat all of them as candidates.Threat huntingQuery result exports; affected-host list; identified compromised third-party site
P3 · Eradicate
4–24 h
Remove the Startup artifact and the %LOCALAPPDATA%\SystemHelper tree. Force a password reset and revoke refresh tokens for the affected user. Given Sandworm's destructive track record and the loader-into-backdoor chain, reimage rather than clean any host with a confirmed FREAKYPOLL, FLUIDLEECH or LOADLOOP hit.IR + endpoint opsSample hashes, memory image if FREAKYPOLL is present, reimage records
P4 · Block
same day
Import the §10 IOC set. Push the §12 Immediate ASR rules. Add the campaign domains to the SWG denylist and enable newly-registered-domain blocking.Endpoint ops + networkIOC import receipt; ASR policy version
P5 · Notify
24–48 h
Notify the owner of the compromised site that served the lure — they are unaware and are still infecting visitors. If operating in or supporting Ukraine, report to CERT-UA; otherwise report to your national CERT.IR leadNotification record; CERT case reference
P6 · Recover
2–7 d
Return hosts to production only after a clean sweep. Re-run Q1–Q12 at 7 and 30 days to catch dormant re-persistence. Check the affected user's Android device for a sideloaded "security" APK.IR + service deskClean-sweep evidence; mobile inventory result
P7 · Learn
within 2 w
Fold every benign hit into the query TUNING lines. Promote the three §9 IOAs. Run a targeted ClickFix awareness push using the real lure as the example.Detection engineeringUpdated pack (bump to v0.2); IOA rule group export

Escalation trigger: a confirmed FREAKYPOLL, FLUIDLEECH or LOADLOOP hit means the actor moved past triage recon and considered the host worth a backdoor. Escalate to full incident response immediately — this cluster's historical pattern is foothold, lateral movement, then destructive action.

15

Detection Coverage Map

TechniqueBehaviourCQLIOACoverage
T1584.004Compromise of third-party websites to host the lureGAP — no endpoint telemetry; web-tier FIM only (§7, §13 PB5)
T1189Conditional lure delivery via Cloaking.HouseGAP — proxy-log dependent; the lure is served only to selected visitors
T1568.003SMARTAXE resolving C2 from an Ethereum contractGAP — contract address and selector unpublished; only the generic eth_call proxy hunt (§7) applies
T1204.004Run-dialog paste of an attacker commandQ1, Q2YesGOOD
T1059.001PowerShell download cradleQ1, Q5, Q11YesGOOD
T1547.001Startup-directory persistenceQ3, Q4, Q5YesGOOD
T1059.005GHETTOVIBE VBS executionQ4, Q12PartialGOOD
T1082 / T1539SCOUTCURL recon and browser-data collectionQ11NoPARTIAL — behaviour-only; a rewritten recon script with different cmdlets would evade
T1036.005FLUIDLEECH / LOADLOOP masquerading as AV toolingQ6, Q10, Q12NoPARTIAL — filename and hash based; a rename defeats Q6 and Q12, leaving only Q10
T1059.006 / T1027.011FREAKYPOLL Python backdoorQ7, Q10, Q12NoPARTIAL — anchored on the SystemHelper path; a different staging directory reduces this to Q10
T1071.001C2 beaconing to campaign domainsQ8NoPARTIAL — atomic and perishable; browser-level DoH bypasses sensor DNS entirely
T1102.002 / T1567.002Dead-drop C2 and Dropbox exfilQ9NoPARTIAL — high benign volume; investigate-only until baselined
T1636 / T1430COWARDDUCK Android collectionGAP — no Falcon Windows telemetry; MDM hunts in §7, hardening in §12

Known gaps and what to do about them

  • Web tier (3 gaps). Everything before the paste happens on infrastructure you do not control. Closing this requires proxy full-URL logging plus FIM on your own web properties — Playbook 5 covers the latter.
  • Android (1 gap). Without MDM or Falcon for Mobile there is no COWARDDUCK telemetry at all. On BYOD this is a policy problem, not a detection problem.
  • Encrypted DNS. Browser-level DoH removes DnsRequest visibility and silently blinds Q8 and Q9. Disable browser DoH by policy or force resolution through an inspected resolver.
  • Registry telemetry. If RegGenericValueUpdate is trimmed in your sensor policy, Q2 returns nothing and looks clean rather than blind — validate with gate G1 before trusting it.

Validation summary: gates G1–G8 in §11 govern promotion. G1 (telemetry present) and G3–G5 (positive controls) must pass before any query is treated as coverage; G2 and G6 (baseline and negative control) must pass before any IOA moves past Monitor; G8 governs the move to Prevent. A query that has not passed its gate is a hypothesis, not a detection.

16

Hunt Summary Ticket

TITLE:      UAC-0145 (Sandworm sub-cluster) ClickFix campaign - hunt and harden
SEVERITY:   High - nation-state, active, user-consented execution bypasses payload blocking
SCOPE:      All Windows workstations with browser access; managed and BYOD Android;
            all internet-facing web properties owned by the organisation

HYPOTHESIS: A user was shown a fake CAPTCHA on a compromised legitimate website and
            pasted an attacker-supplied PowerShell command into the Run dialog or
            Windows Terminal, dropping a VBS file (GHETTOVIBE) into the Startup
            autorun directory and leading to SCOUTCURL recon, FLUIDLEECH/LOADLOOP
            loaders and a FREAKYPOLL Python backdoor.

QUERIES:    Q1  explorer.exe parenting an interpreter          CONF high  FP low
            Q2  RunMRU value containing a cradle               CONF high  FP low
            Q3  script or PE written to Startup                CONF high  FP low
            Q4  wscript/cscript executing from Startup         CONF high  FP low
            Q5  download-to-Startup in one command line        CONF high  FP low
            Q6  FLUIDLEECH / LOADLOOP named artifacts          CONF high  FP med
            Q7  Python from AppData SystemHelper               CONF high  FP med
            Q8  campaign C2 domain resolution                  CONF high  FP low
            Q9  Dropbox / steamcommunity from non-browser      CONF med   FP med
            Q10 published SHA256 sweep                         CONF high  FP low
            Q11 SCOUTCURL inventory plus browser data          CONF med   FP med
            Q12 campaign-named artifact in a command line      CONF high  FP low

DO FIRST:   1. Run Q10 and Q8 across maximum retention - any hit is a confirmed incident.
            2. Run Q1, Q3 and Q5 across 90 days; these are the durable behavioural hunts.
            3. Dump RunMRU on any host returned by step 2.
            4. Enable ASR d3e037e1-3eb8-44c8-a917-57927947596d in Block mode.
            5. Import the section 10 IOC CSV at Prevent for the nine Windows SHA256s.

FINDINGS:   [pending - record hit counts per query and the referring compromised site]

GAPS:       Web-tier delivery (Cloaking.House, SMARTAXE eth_call resolver) - no endpoint
            telemetry.  COWARDDUCK Android - no Falcon Windows visibility.  Browser DoH
            blinds Q8 and Q9.  RegGenericValueUpdate may be trimmed by sensor policy (Q2).

ACTIONS:    Immediate  - ASR script rules, script-block logging, IOC import, user briefing
            Near term  - disable Run dialog for standard users, AppLocker/WDAC script rules,
                         .vbs/.js handler remap, Constrained Language Mode, block NRDs,
                         prohibit Android sideloading
            Strategic  - full WDAC enforcement, remove local admin, web-property FIM,
                         managed-device Conditional Access, cloud-API egress control

OWNER:      HuntPack
VERSION:    v0.2 - 2026-07-20
17

Changelog

v0.22026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.12026-07-20Initial pack built from CERT-UA advisory 6318437 (2026-07-19) plus three corroborating sources. 12 CQL queries, 3 Custom IOA candidates, 20 file hashes and 14 network indicators transcribed from the primary advisory. Corrected the campaign domain to offlce366[.]com (lowercase L typosquat), which several secondary write-ups render incorrectly as office366[.]com.
18

References

TierSourceUsed forAccessed
T1CERT-UA — Initial compromise vectors of UAC-0145 as of July 2026 (article 6318437)Primary. Campaign narrative, all seven malware codenames, SMARTAXE resolver mechanism, and every atomic indicator in this pack.2026-07-20
T2The Hacker News — UAC-0145 Uses ClickFix CAPTCHAs to Infect Ukrainian Devices with MalwareActor attribution, scale of the compromised-site set, implant role summaries.2026-07-20
T2SOC Prime — UAC-0145 Uses Torrents, Signal, and ClickFix for AccessWider initial-access context (torrented installers, Signal-delivered lures).2026-07-20
T3The Cyber Express — ClickFix Attacks Fuel UAC-0145 Cyber Campaigns In UkraineGeneral corroboration of the ClickFix flow and victimology.2026-07-20
RefMITRE ATT&CK T1204.004 — User Execution: Malicious Copy and PasteTechnique mapping for the ClickFix paste step.2026-07-20
RefMITRE ATT&CK T1547.001 — Registry Run Keys / Startup FolderTechnique mapping for GHETTOVIBE persistence.2026-07-20
RefMicrosoft — Attack Surface Reduction rules referenceASR rule GUIDs and deployment guidance used in §12 and §13.2026-07-20
RefCIS Benchmarks (Microsoft Windows, Google Android)Baseline citations for the tiered hardening controls.2026-07-20