ACR Stealer / Amatera — ClickFix Intrusion Chains
Executive Summary
Attacker objective: harvest browser-stored credentials, session cookies and authentication tokens, plus sensitive enterprise documents (PDFs from Desktop and Downloads, Microsoft 365 files, OneDrive/SharePoint synced folders), then exfiltrate them for resale or follow-on account takeover. This is a credential- and token-theft operation, not a destructive one — the damage lands after the endpoint event, in your identity plane.
ACR Stealer is sold as malware-as-a-service and is the lineage behind the Amatera Stealer rebrand. Microsoft Defender Experts observed elevated activity across customer environments from late April 2026 through mid-June 2026, delivered by ClickFix lures — malvertising and SEO-poisoned search results that socially engineer the user into pasting an attacker-supplied command into the Windows Run dialog.
Microsoft documented two distinct intrusion chains:
- Chain 1 — WebDAV + rundll32 + Python.
rundll32.exeloads a DLL directly from an attacker WebDAV share over HTTPS (three command variants: direct,pushd-mounted, and aconhost.exe --headlessobfuscated form using delayed variable expansion). A ZIP payload lands in%LocalAppData%\Tempand a bundledpythonw.exeruns a Python loader that executes shellcode in memory viaVirtualAllocand the Windows Fiber API. Persistence is a hidden scheduled task masquerading as a software update. A second Python loader uses EtherHiding — public blockchain RPC endpoints and Web3 node infrastructure as dead-drop resolvers for the next payload or C2 address. - Chain 2 — MSHTA + PowerShell + steganography. The ClickFix prompt runs
MSHTAagainst a remote HTA; embedded VBScript uses COM objects to decode and run encoded PowerShell; that downloader (randomized variable names, arithmetic no-ops, dead loops, custom encryption) pulls a JPEG from an image-hosting service and extracts the payload from the image pixels, decrypting, decompressing and executing it entirely in memory with dynamically resolved APIs.
Highest-value defensive angle: both chains converge on the same two chokepoints. Upstream, every infection starts with a Run-dialog paste — which Windows records in RunMRU, giving you a near-zero-FP detection and a decisive hardening control (disable the Run dialog). Downstream, both chains reach for the same Chromium credential stores and DPAPI. Hunt the ends of the chain, not the middle; the middle is where the obfuscation lives.
Defender priority: Treat any confirmed ACR Stealer execution as a token compromise, not a malware cleanup. Reimaging the host does not invalidate stolen session cookies or refresh tokens. Revoke sessions and rotate credentials in the identity plane before you close the endpoint ticket.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Forward |
|---|---|---|---|
| 1 | Microsoft Security Blog — "ACR Stealer: Two observed intrusion chains amid increased threat activity" (2026-07-16) | Authoritative. Full campaign-1 and campaign-2 domain IOC tables, both intrusion chains, LOLBin set, ATT&CK mapping, hunting queries (KQL), mitigations. | Yes — primary basis for every IOC and TTP in this pack |
| 1 | The Hacker News — "ACR Stealer Uses ClickFix Lures to Steal Browser Tokens and Microsoft 365 Files" (2026-07-17) | Corroborates Microsoft. Adds the literal WebDAV command line including host sphere-api.dialectosphere.in[.]net and GUID path; relays a Red Canary (June 2025) fake-Claude-Code GitLab lure. | Partial — WebDAV host carried; the GitLab lure carried at low confidence (2025, likely dead) |
| 2 | Proofpoint — "Amatera Stealer: Rebranded ACR Stealer With Improved Evasion, Sophistication" | Establishes the ACR → Amatera rebrand lineage and the MaaS distribution model. Background context; no IOCs pulled from it. | Partial — lineage / naming only |
| 1 | Microsoft Learn — ASR rules reference (retrieved 2026-07-18) | Canonical ASR rule names and GUIDs used in the hardening section. | Yes — GUIDs verified verbatim, not recalled |
Hunter notes & deliberate omissions
- No file hashes exist in the public reporting. Microsoft published domains only. This pack therefore ships no SHA256 IOCs. The IOC-management CSV uses explicit
REPLACE_WITH_SHA256placeholders rather than invented values. - No exact scheduled-task name is published. Microsoft describes the pattern only — a hidden task posing as a software update, matched in their own query by
"Autoupdate"plus an 8-digit number. Q6 encodes that pattern; it does not assert a task name. - No registry keys are published beyond the ClickFix
RunMRUvector that Microsoft's own detection query pivots on. Q9 is a translation of that pivot, not an inferred key. - The EtherHiding domain keywords in Q11 are a hunting heuristic, not sourced IOCs. Microsoft named the technique but not the specific RPC providers. Q11 is labelled accordingly and must be baselined before it is trusted.
- Microsoft's published hunting queries are Defender KQL. Every query in section 8 is a hand-translation into Falcon CQL against the CrowdStrike data model — no Defender schema names (
DeviceProcessEvents,ProcessCommandLine,DeviceRegistryEvents) survive into the CQL.
Hunt Brief & Attack Chain
Hunt hypotheses (ordered by fidelity)
| # | Hypothesis | ATT&CK | Falcon telemetry | Conf |
|---|---|---|---|---|
| H1 | A user pasted an attacker-supplied command into the Run dialog; the RunMRU value contains an interpreter plus a remote resource or encoded blob. | T1204, T1189 | RegGenericValueUpdate | HIGH |
| H2 | rundll32.exe is loading a DLL from a UNC/WebDAV path rather than a local file, under an interactive parent. | T1218.011 | ProcessRollup2 | HIGH |
| H3 | conhost.exe --headless is being used to hide a pushd/rundll32 chain and the remote hostname behind delayed variable expansion. | T1027, T1036 | ProcessRollup2 | HIGH |
| H4 | mshta.exe is fetching remote HTA content over HTTP(S), spawned from an interactive shell rather than an application. | T1218.005 | ProcessRollup2 | HIGH |
| H5 | A scheduled task whose name matches the "Autoupdate" + 8-digit software-update masquerade pattern was registered or invoked. | T1053.005, T1036 | ScheduledTaskRegistered, ProcessRollup2 | HIGH |
| H6 | cmd.exe mounted a remote share with pushd or net use to a non-corporate host immediately before execution. | T1218.011, T1105 | ProcessRollup2 | MED |
| H7 | pythonw.exe is executing from a user Temp path — a bundled interpreter unpacked from the delivered ZIP, run windowless to suppress the console. | T1059.006, T1036 | ProcessRollup2 | MED |
| H8 | PowerShell is downloading an image file and treating it as a payload carrier (steganographic loader). | T1027.003, T1059.001 | ProcessRollup2 | MED |
| H9 | PowerShell command history is being cleared or suppressed to remove operator traces. | T1070.003 | ProcessRollup2 | MED |
| H10 | A non-browser process is reading or copying Chromium Login Data / Web Data / Local State. | T1555.003 | ProcessRollup2 | MED |
| H11 | A script interpreter is resolving blockchain-RPC / Web3 node infrastructure as a dead-drop C2 resolver (EtherHiding). | T1102.001 | DnsRequest | LOW |
| H12 | An endpoint resolved one of the published campaign-1 or campaign-2 domains. | T1102 | DnsRequest | HIGH |
Attack chain — Chain 1 (WebDAV / Python)
| Step | Behavior | Telemetry | Hunt angle |
|---|---|---|---|
| 1 | Malvertising / SEO-poisoned result renders a ClickFix prompt; user pastes the command into Run | Registry (RunMRU), Process | Q9 — highest-fidelity upstream signal |
| 2 | cmd.exe spawns; three observed variants — direct rundll32, pushd-mounted drive letter, or conhost --headless with delayed expansion | Process | Q1, Q2, Q3 |
| 3 | rundll32.exe loads a DLL from a WebDAV share over HTTPS; GUID directory + disguised extension (e.g. .google) | Process, Network | Q1 |
| 4 | ZIP payload written to %LocalAppData%\Temp (observed folder name LogiOptionsPlus); bundled pythonw.exe launched to suppress the console | Process, File | Q5 |
| 5 | Python loader executes shellcode in memory via VirtualAlloc + Fiber API (ConvertThreadToFiber, CreateFiber, SwitchToFiber) | — in-memory only | GAP — no reliable Falcon surface; rely on stages 2–4 and 6–8 |
| 6 | Hidden scheduled task masquerading as a software update ("Autoupdate" + 8 digits) established for sign-in persistence | Scheduled task, Process | Q6 |
| 7 | Timestomping (timestamps copied from notepad.exe) and PowerShell history clearing | Process | Q7 (history); timestomp is a GAP |
| 8 | Second Python loader queries public blockchain RPC / Web3 nodes as a dead-drop resolver (EtherHiding) | DNS, Network | Q11 (heuristic) |
Attack chain — Chain 2 (MSHTA / steganography)
| Step | Behavior | Telemetry | Hunt angle |
|---|---|---|---|
| 1 | ClickFix prompt spawns a command running MSHTA against remote HTA content over HTTPS (Microsoft's query: 7-digit path segment, parent explorer.exe) | Process | Q4, Q9 |
| 2 | Embedded VBScript loader uses COM objects to decode and execute encoded PowerShell | Process | Q4 child-process pivot |
| 3 | PowerShell downloader — randomized variable names, arithmetic no-ops, dead loops, custom encryption | Process, Script block logs | Q10; native hunt N2 |
| 4 | Retrieves a JPEG from an image-hosting service; payload extracted from pixel data, decrypted, decompressed | Process, Network | Q10 |
| 5 | Reflective shellcode execution via runtime-resolved LoadLibrary, GetProcAddress, VirtualAlloc, CreateThread, WaitForSingleObject | — in-memory only | GAP — AMSI / script block logging is the only practical surface |
Convergent stage — both chains
| Step | Behavior | Telemetry | Hunt angle |
|---|---|---|---|
| C1 | Reads Chromium Login Data and Web Data; invokes DPAPI to decrypt stored passwords, cookies and auth tokens | Process | Q8 |
| C2 | Enumerates and stages PDFs from Desktop and Downloads, Microsoft 365 documents, OneDrive/SharePoint synced folders | File | Partial — see native hunt N4 |
| C3 | Exfiltration to campaign C2 infrastructure | DNS, Network | Q12 |
Consolidated IOC Table
Provenance: every atomic indicator below is reproduced from a cited published source. Microsoft's report contains no file hashes, no registry keys and no exact scheduled-task names — none are invented here. Domain infrastructure of this type is highly perishable; treat absence of hits as inconclusive and lean on the behavioral queries.
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| domain | looksta[.]icu | high | detect | Chain 1 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | contrite.quirksturdy[.]icu | high | detect | Chain 1 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | ux.strainedeasily[.]icu | high | detect | Chain 1 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | cpppemwjewjoiwejow[.]sale | high | detect | Chain 1 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | breaksd.wifihot[.]icu | high | detect | Chain 1 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | walter.filloco[.]icu | high | detect | Chain 1 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | fast.raidher[.]icu | high | detect | Chain 1 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | apigrokcloud[.]icu | high | detect | Chain 1 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | enhanceblabber[.]cc | high | detect | Chain 2 payload host / C2 — Microsoft IOC table | 2027-01-18 |
| domain | deep-harborio[.]com | high | detect | Chain 2 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | auramatrixa[.]com | high | detect | Chain 2 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | zealpraxis[.]com | high | detect | Chain 2 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | prism-vertex[.]com | high | detect | Chain 2 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | prism-matrixs[.]com | high | detect | Chain 2 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | proton-network[.]com | high | detect | Chain 2 infrastructure — Microsoft IOC table | 2027-01-18 |
| domain | creativecommunityinfo[.]art | high | detect | Chain 2 payload host — Microsoft IOC table | 2027-01-18 |
| hostname | sphere-api.dialectosphere.in[.]net | medium | hunt | WebDAV share host in the observed rundll32 command line — The Hacker News | 2026-10-18 |
| hostname | claude-desktop[.]gitlab[.]io | low | hunt | Fake Claude Code ClickFix lure — Red Canary, June 2025, relayed by The Hacker News. Dated; likely dead. gitlab.io is shared hosting — match the full host only. | 2026-08-18 |
| path fragment | \05fe317c-0981-4de2-bc8a-930d369db441\ | medium | pivot | GUID directory in the observed WebDAV path — The Hacker News | 2026-08-18 |
| filename | ck-3d80df5d12cdfe6450a782fc87bf66b444.google | medium | pivot | Disguised DLL — non-PE extension chosen to blend with expected traffic — The Hacker News | 2026-08-18 |
| folder name | %LocalAppData%\Temp\LogiOptionsPlus | medium | pivot | Observed ZIP-unpack staging folder masquerading as vendor software — Microsoft | 2026-10-18 |
| task pattern | Autoupdate + 8 digits | high | hunt | Persistence masquerade pattern (no exact name published) — Microsoft hunting query | 2027-01-18 |
| registry | ...\Explorer\RunMRU | high | hunt | ClickFix delivery vector — the key Microsoft's own detection query pivots on | 2027-01-18 |
| sha256 | None published. Microsoft's report contains no file hashes. Do not deploy hash IOCs for this campaign from this pack. | ||||
Affected Surface & Telemetry Matrix
| Surface | Required telemetry | Priority | Gap risk |
|---|---|---|---|
| Windows workstations (user-context, interactive) | Falcon ProcessRollup2 / SyntheticProcessRollup2 | CRITICAL | Low — baseline sensor telemetry |
| Run dialog / shell registry | Falcon RegGenericValueUpdate (RunMRU) | CRITICAL | Medium — registry event volume is a sensor policy setting; confirm RunMRU writes are captured in your tenant before trusting Q9 |
| Scheduled task subsystem | Falcon ScheduledTaskRegistered / ScheduledTaskModified; Windows Event ID 4698 | HIGH | Medium — availability varies by sensor version and policy; Q6 falls back to schtasks command lines |
| DNS resolution | Falcon DnsRequest / SuspiciousDnsRequest | HIGH | Low — but encrypted DNS on the endpoint will blind this; verify DoH is disabled or proxied |
| WebDAV / SMB egress | Proxy and firewall logs; Falcon NetworkConnectIP4 | HIGH | High — WebDAV over 443 is indistinguishable from HTTPS without proxy inspection |
| PowerShell | Script block logging (4104), module logging (4103), transcription | HIGH | High — commonly not enabled; this is the only surface for the Chain 2 in-memory stage |
| Chromium browser profiles | Process telemetry referencing credential DBs; DPAPI audit | HIGH | High — Falcon does not emit a generic file-read event; Q8 is command-line based and will miss purely in-process reads |
| Identity plane (Entra ID / M365) | Entra sign-in logs, risky sign-ins, token issuance, OneDrive/SharePoint audit | CRITICAL | Low — but frequently un-hunted; this is where the impact materialises |
| Python runtime | Process telemetry for python.exe / pythonw.exe | MEDIUM | Low — but noisy in developer populations; scope Q5 by asset group |
| In-memory execution (Fiber API, reflective loading) | — none | MEDIUM | Accepted gap — no practical detection surface; compensate at the stages either side |
ATT&CK Mapping
| Tactic | Technique | Observed behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1189 — Drive-by Compromise | Malvertising and SEO-poisoned search results serving the ClickFix page | Q9 · H-N2, H-N7 |
| Initial Access / Execution | T1204 — User Execution | User pastes the attacker command into the Run dialog | Q9 · H-I1, H-S3 |
| Execution | T1059.003 — Windows Command Shell | cmd.exe launches the chain; pushd mounts the WebDAV share | Q2, Q3 |
| Execution | T1059.001 — PowerShell | Obfuscated downloader in Chain 2 | Q10 · H-I4 |
| Execution | T1059.006 — Python | Bundled pythonw.exe runs the loader script | Q5 · H-N1 |
| Execution / Defense Evasion | T1218.011 — Rundll32 | DLL loaded directly from a WebDAV share over HTTPS | Q1 · H-I1, H-N3 |
| Execution / Defense Evasion | T1218.005 — Mshta | Remote HTA retrieved and executed | Q4 · H-N1 |
| Persistence | T1053.005 — Scheduled Task/Job | Hidden task disguised as a software update, running at sign-in | Q6 · H-N1 |
| Defense Evasion | T1027 — Obfuscated Files or Information | conhost --headless + delayed variable expansion; randomized variables, dead loops, custom encryption | Q2, Q10 · H-I2 |
| Defense Evasion | T1027.003 — Steganography | Payload embedded in JPEG pixel data, extracted in memory | Q10 · H-I2 |
| Defense Evasion | T1036 — Masquerading | Task named as a software update; staging folder named after vendor software; DLL given a .google extension | Q1, Q5, Q6 |
| Defense Evasion | T1070.003 — Clear Command History | PowerShell history cleared post-execution | Q7 · H-I4 |
| Defense Evasion | T1070.006 — Timestomp | Timestamps copied from notepad.exe onto deployed files | GAP — no Falcon surface; see coverage map |
| Defense Evasion / Execution | T1620 — Reflective Code Loading | Runtime-resolved LoadLibrary / GetProcAddress / VirtualAlloc / CreateThread | PARTIAL — H-I4 script block logging only |
| Defense Evasion / Execution | T1055 — Process Injection | Fiber-API in-memory shellcode execution | GAP — compensate with H-I5 EDR block mode |
| Credential Access | T1555.003 — Credentials from Web Browsers | Chromium Login Data / Web Data read; DPAPI used to decrypt passwords, cookies, tokens | Q8 · H-N4, H-S1 |
| Collection | T1005 — Data from Local System | PDFs from Desktop and Downloads; Microsoft 365 documents | N4 · H-S2 |
| Collection | T1074 — Data Staged | Collected files staged locally before exfiltration | N4 |
| Command & Control | T1102 — Web Service | Image-hosting service used as payload delivery; campaign domains used for C2 | Q10, Q12 · H-N2 |
| Command & Control | T1102.001 — Dead Drop Resolver | EtherHiding — blockchain RPC endpoints and Web3 nodes resolve the next payload or C2 address | Q11 (heuristic) |
Native Audit-Log Hunts (non-CQL)
These run outside Falcon and cover the surfaces where EDR telemetry is thin — particularly the identity-plane impact, which is the part of this campaign that actually costs you something.
N1 · Windows Security / Task Scheduler — masqueraded persistence
- Event ID 4698 (task created) and 4702 (task updated). Filter task names matching
Autoupdatefollowed by 8 digits, and any task whose action points into%LocalAppData%\Temp. - Microsoft-Windows-TaskScheduler/Operational 106 / 200 for registration and action-start.
- On-box triage:
Get-ScheduledTask | Where-Object { $_.TaskName -match 'Autoupdate\d{8}' }— and separately enumerate hidden tasks, which the Task Scheduler UI will not show by default.
N2 · Web proxy / secure web gateway — ClickFix delivery and WebDAV egress
- Hunt
User-Agentstrings containingMicrosoft-WebDAV-MiniRedir— that is the Windows WebClient service reaching the internet, and it is almost never legitimate outbound. - Requests with HTTP methods
PROPFIND,OPTIONSorLOCKto non-corporate hosts. - First-seen resolutions to the campaign TLDs heavily represented here:
.icu,.sale,.art,.cc. - Referrer chains landing on a page from a search-engine result immediately before a Run-dialog paste on the same host.
N3 · PowerShell operational logs
- 4104 script block logging — the single most valuable artifact for Chain 2. Search for image-file downloads,
FromBase64String, and reflective-loading API names (GetProcAddress,VirtualAlloc,CreateThread). - 4103 module logging and transcription output for the same window.
- Absence of expected 4104 events on a host that otherwise shows PowerShell execution is itself a finding — see T1070.003.
N4 · Microsoft 365 / Entra ID — the impact hunt
- Unified audit log:
FileDownloaded/FileSyncDownloadedFullspikes from an affected user in the 24h either side of the endpoint event. - Entra sign-in logs: the same session token or device ID appearing from a new ASN, country or user agent — the classic token-replay signature. Check both interactive and non-interactive sign-ins; token replay usually shows in the non-interactive log.
- Risky sign-ins / risk detections: anomalous token, unfamiliar sign-in properties, impossible travel.
- OAuth grants: any new consent granted by the affected user after the compromise window.
- Enumerate which corporate SaaS the user had live browser sessions for — every one of those is potentially compromised, not just M365.
N5 · Endpoint local artifacts (for confirmed hosts)
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU— the pasted command usually survives here and is your cleanest confirmation of the initial lure.%LocalAppData%\Temp— look for vendor-named folders containing a bundled Python runtime.%AppData%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt— present, truncated, or missing.- Files whose MFT
$STANDARD_INFORMATIONand$FILE_NAMEtimestamps disagree — the timestomping tell that endpoint telemetry cannot give you.
CrowdStrike LogScale CQL Hunt Queries
All twelve queries are hand-translated from behavior described by Microsoft into the Falcon data model. Microsoft published their hunting logic as Defender KQL; none of that schema survives here. Run the behavioral queries (Q1–Q11) first — the atomic domain sweep (Q12) is the least durable of the set.
Looks for: the core Chain 1 execution primitive — rundll32.exe handed a UNC path instead of a local DLL, under an interactive parent. Covers the direct variant and, because the mounted share still appears in the command line, most pushd variants too. FP: low, but legacy line-of-business installers occasionally rundll32 a DLL off an internal file server; those resolve to a known internal hostname and are easy to allowlist once.
// HUNT: rundll32 loading a DLL from a remote WebDAV / UNC share (ACR Stealer Chain 1) // MITRE: T1218.011, T1204, T1189 // CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: legacy LOB installers invoking rundll32 against an internal file server // TUNING: add your internal file-server hostnames to the exclusion filter at the end #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^rundll32(\.exe)?$/i | CommandLine=/\\\\[A-Za-z0-9._\-]+\\/ | ParentBaseFileName=/^(cmd|conhost|explorer|powershell|wscript|mshta)\.exe$/i // exclude known-good internal shares (replace the sample hostnames): | CommandLine!=/\\\\(fileserver01|deploy-share)\./i | table([@timestamp, ComputerName, UserName, GrandparentBaseFileName, ParentBaseFileName, FileName, CommandLine, SHA256HashData, aid], limit=200)
Looks for: the third observed Chain 1 variant — conhost.exe --headless used to hide a pushd/rundll32 chain and the remote hostname behind delayed variable expansion. --headless is an undocumented switch with essentially no legitimate interactive use, which makes this one of the cleanest signals in the pack. FP: very low. Some terminal-emulator and CI tooling shells out through conhost, but not with this argument set.
// HUNT: conhost.exe --headless used to obfuscate a WebDAV loader chain (ACR Stealer Chain 1) // MITRE: T1027, T1036, T1059.003 // CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: rare; some terminal / automation tooling invokes conhost programmatically // TUNING: if your terminal stack is noisy here, pin ParentBaseFileName to explorer.exe only #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^conhost(\.exe)?$/i | CommandLine=/--headless/i | CommandLine=/(pushd|rundll32|cmd\.exe|\\\\|\^|!)/i | table([@timestamp, ComputerName, UserName, GrandparentBaseFileName, ParentBaseFileName, FileName, CommandLine, aid], limit=200)
Looks for: the drive-letter-mount variant — pushd against a WebDAV share to obtain a temporary drive letter before rundll32 runs, so the subsequent command line looks local. FP: medium — pushd and net use against internal shares are routine in login scripts and admin workflows. The value here is the external hostname, so exclude internal namespaces aggressively; what remains is small.
// HUNT: cmd.exe mounting a remote share via pushd / net use (ACR Stealer Chain 1 variant 2) // MITRE: T1218.011, T1105, T1059.003 // CONF: medium | FP: medium | COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: login scripts, software deployment, and admin sessions mounting internal shares // TUNING: exclude your internal DFS namespace and file-server hostnames below; the residue is the hunt #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^cmd(\.exe)?$/i | CommandLine=/(pushd|net\s+use)\s+.{0,8}\\\\/i // exclude internal namespaces (replace with your own): | CommandLine!=/\\\\(corp|dfs|fileserver01|sysvol|netlogon)/i | ParentBaseFileName=/^(explorer|conhost|mshta|rundll32|powershell)\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine, aid], limit=200)
Looks for: the Chain 2 entry point. mshta.exe pointed at a remote URL is close to indefensible as benign behavior in a modern estate. Microsoft's own query additionally pins parent explorer.exe and a 7-digit URL path segment — both are included below as commented refinements rather than hard filters, so you see the full picture first and narrow only if volume demands. FP: low; a handful of legacy intranet apps still ship HTAs, and those resolve to internal hosts.
// HUNT: mshta.exe fetching remote HTA content (ACR Stealer Chain 2 entry) // MITRE: T1218.005, T1204, T1189 // CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: legacy intranet HTA applications (internal hostnames only) // TUNING: exclude internal intranet hosts; to match Microsoft's tighter variant, uncomment // the ParentBaseFileName and 7-digit path filters below #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^mshta(\.exe)?$/i | CommandLine=/https?:\/\//i // | ParentBaseFileName=/^explorer\.exe$/i -- Microsoft's observed parent // | CommandLine=/[0-9]{7}/ -- Microsoft's 7-digit path segment | table([@timestamp, ComputerName, UserName, GrandparentBaseFileName, ParentBaseFileName, CommandLine, aid], limit=200)
Looks for: the bundled interpreter stage — a Python runtime unpacked from the delivered ZIP into %LocalAppData%\Temp and run as pythonw.exe specifically to suppress the console window. The observed staging folder masqueraded as vendor software (LogiOptionsPlus). FP: medium — developer workstations and some installers legitimately run Python from Temp. Scope by asset group: on a non-developer population this is close to zero-noise, on an engineering fleet it needs the parent-process filter.
// HUNT: pythonw.exe running from a user Temp staging folder (ACR Stealer Chain 1 loader) // MITRE: T1059.006, T1036, T1204 // CONF: medium | FP: medium | COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: developer tooling, pip/venv activity, and installers that bundle a Python runtime // TUNING: exclude your engineering asset group, or uncomment the ParentBaseFileName filter to // keep only interpreters launched by the ClickFix LOLBin chain #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^pythonw(\.exe)?$/i | ImageFileName=/\\AppData\\Local\\Temp\\/i // | ParentBaseFileName=/^(cmd|conhost|rundll32|mshta|powershell)\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData, aid], limit=200)
Looks for: the Chain 1 persistence masquerade. No exact task name was published — this encodes the naming pattern Microsoft's own hunting query matched (Autoupdate plus an 8-digit number, consistent with a date stamp). It covers both the scheduled-task events and the schtasks command line, so it still fires if task telemetry is not enabled in your policy. FP: low — the digit-suffix pattern is distinctive enough that genuine updater tasks rarely collide.
⚠ Validate in tenant: ScheduledTaskRegistered / ScheduledTaskModified and the TaskName / TaskExecutable fields are sensor-version and policy dependent. Confirm they are populated in your tenant; if not, the CommandLine half of this query still works standalone.
// HUNT: scheduled task masquerading as a software update, "Autoupdate" + 8 digits (ACR Stealer) // MITRE: T1053.005, T1036 // CONF: high | FP: low | COST: low // REQUIRES: ProcessRollup2; ScheduledTaskRegistered/Modified (validate in tenant) // FALSE POSITIVES: rare; a genuine vendor updater using the same date-suffix convention // TUNING: confirm any hit against the task's Author and Executable before escalating #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|ScheduledTaskRegistered|ScheduledTaskModified)$/ | CommandLine=/Autoupdate\d{8}/i or TaskName=/Autoupdate\d{8}/i | table([@timestamp, ComputerName, UserName, FileName, TaskName, TaskExecutable, TaskAuthor, CommandLine, aid], limit=200)
Looks for: the indicator-removal step Microsoft observed — PowerShell command history cleared after execution. Also catches the quieter variant, setting HistorySaveStyle to SaveNothing so nothing is ever written. FP: medium — administrators and power users clear history for legitimate reasons, and some CI tooling suppresses it by design. Correlate against the same host and hour as any Q1–Q6 hit; standalone, this is context rather than a detection.
// HUNT: PowerShell command-history clearing or suppression (ACR Stealer defense evasion) // MITRE: T1070.003 // CONF: medium | FP: medium | COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: admin hygiene, CI/CD runners, and profile scripts that suppress history // TUNING: treat as a supporting signal -- alert only when the same aid also hits Q1-Q6 in a 24h window #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(Clear-History|ConsoleHost_history|HistorySaveStyle\s+SaveNothing)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, aid], limit=200)
Looks for: the convergent credential-access stage — a process other than a browser touching Login Data, Web Data or Local State under a browser profile path. FP: medium — backup agents, browser-migration utilities, DLP tooling and password-manager importers all legitimately touch these files; exclude them by FileName once identified.
⚠ Known blind spot: Falcon does not emit a generic file-read event, so this query is command-line based. ACR Stealer reads these databases in-process after reflective loading, which produces no command line at all — so a clean result here does not mean credentials are safe. Treat Q8 as a bonus catch, and let the identity-plane hunts in section 7 (N4) carry the real weight.
// HUNT: non-browser process referencing Chromium credential databases (ACR Stealer collection) // MITRE: T1555.003 // CONF: medium | FP: medium | COST: medium | REQUIRES: ProcessRollup2 // FALSE POSITIVES: backup agents, profile-migration tools, DLP scanners, password-manager importers // TUNING: add your backup / DLP / migration agents to the FileName exclusion list below #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(Login\s?Data|Web\s?Data|Local\s?State)/i | CommandLine=/AppData\\(Local|Roaming)\\/i | !in(FileName, values=["chrome.exe", "msedge.exe", "firefox.exe", "brave.exe", "opera.exe", "vivaldi.exe"], ignoreCase=true) | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData, aid], limit=200)
Looks for: the ClickFix delivery vector itself. Windows records every Run-dialog entry in RunMRU, so this fires upstream of execution — it catches the lure even when the payload fails, is blocked, or is a variant nobody has published yet. This is the Falcon translation of the exact pivot Microsoft's own detection query uses. The second filter is what keeps it clean: a user typing cmd is normal, a user pasting an interpreter plus a remote resource or encoded blob is not. FP: low as written; drop the second filter for a broader, noisier hunt.
// HUNT: ClickFix Run-dialog paste recorded in RunMRU (ACR Stealer initial access) // MITRE: T1204, T1189, T1059.003 // CONF: high | FP: low | COST: low | REQUIRES: registry telemetry (RunMRU writes) // FALSE POSITIVES: IT staff pasting legitimate remote-admin one-liners into Run // TUNING: exclude your admin asset group / privileged accounts. Removing the second // RegStringValue filter widens this to every interpreter typed into Run (noisier hunt). #event_simpleName=/^(RegGenericValueUpdate|AsepValueUpdate|RegSystemConfigValueUpdate)$/ | RegObjectName=/RunMRU/i | RegStringValue=/(powershell|cmd|mshta|rundll32|conhost|curl|msiexec|certutil|bitsadmin|python)/i | RegStringValue=/(http|\\\\|-enc|-e |hidden|iex|FromBase64|--headless)/i | table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue, aid], limit=200)
Looks for: the Chain 2 payload-retrieval stage — PowerShell fetching a JPEG from an image-hosting service, from which the real payload is extracted out of the pixel data. PowerShell downloading an image is intrinsically odd: legitimate scripts fetch data, archives and installers, not photographs. FP: medium — some monitoring, reporting and wallpaper-management scripts do pull images. Baseline once and the residue is small.
// HUNT: PowerShell retrieving an image file as a payload carrier (ACR Stealer Chain 2 steganography) // MITRE: T1027.003, T1059.001, T1102 // CONF: medium | FP: medium | COST: medium | REQUIRES: ProcessRollup2 // FALSE POSITIVES: wallpaper/branding deployment, reporting scripts that embed charts, monitoring agents // TUNING: exclude your imaging/branding deployment scripts by ParentBaseFileName or CommandLine path #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^powershell(\.exe)?$/i | CommandLine=/(DownloadString|DownloadData|DownloadFile|Invoke-WebRequest|Invoke-RestMethod|Net\.WebClient|Start-BitsTransfer|curl|wget)/i | CommandLine=/\.(jpg|jpeg|png|gif|bmp|webp|svg)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine, aid], limit=200)
Looks for: the dead-drop resolver stage — a script interpreter (not a browser) resolving blockchain RPC or Web3 node infrastructure to retrieve a follow-up payload or C2 address. The process constraint is what carries this query: a browser hitting a Web3 endpoint is unremarkable, pythonw.exe doing it is not.
⚠ Heuristic, not an IOC: Microsoft named the EtherHiding technique but did not publish the RPC providers used. The keyword list below is an authored hunting heuristic, not sourced infrastructure — it will produce false positives on ordinary CDN, node and RPC hostnames. Baseline it before you trust it, and never promote it to an alert without tuning. Use it as a ranked review list, not a verdict.
// HUNT: script interpreter resolving blockchain RPC / Web3 node infrastructure (EtherHiding dead drop) // MITRE: T1102.001, T1059.006 // CONF: low | FP: high | COST: medium | REQUIRES: DnsRequest with process context // NOTE: the domain keyword list is an authored heuristic -- Microsoft published the technique, // not the providers. No indicator in this query is a sourced IOC. // FALSE POSITIVES: high -- ordinary CDN / node / RPC hostnames match these keywords // TUNING: baseline over 30 days, allowlist every recurring destination, then review only new ones #event_simpleName=/^(DnsRequest|SuspiciousDnsRequest)$/ | ContextBaseFileName=/^(pythonw|python|powershell|rundll32|mshta|conhost|wscript|cscript)\.exe$/i | DomainName=/(rpc|web3|infura|blockchain|binance|ethereum)/i | groupBy([ComputerName, ContextBaseFileName, DomainName], function=count(as=Requests)) | sort(Requests, order=desc, limit=200)
Looks for: resolution of any published campaign domain. Every value below is reproduced from the Microsoft IOC table, plus the two host indicators relayed by The Hacker News. Registrable domains are matched so subdomains are caught, and the pattern is end-anchored to avoid substring collisions. FP: very low — a hit is a hit.
Perishability: this is the least durable query in the pack. Stealer infrastructure rotates in days-to-weeks, and Microsoft's observation window closed in mid-June 2026. Run it for retrospective scope, not as your primary control — a clean result proves nothing. Queries Q1, Q2, Q4, Q6 and Q9 are what will still be firing next quarter.
// HUNT: ACR Stealer published campaign domains (atomic IOC sweep) // MITRE: T1102, T1071.001 // CONF: high | FP: low | COST: medium | REQUIRES: DnsRequest // SOURCE: Microsoft Security Blog 2026-07-16 IOC table; hosts 17-18 from The Hacker News 2026-07-17 // FALSE POSITIVES: none expected -- any hit warrants immediate host triage // NOTE: highly perishable. Absence of hits is NOT evidence of absence -- rely on Q1-Q11. #event_simpleName=/^(DnsRequest|SuspiciousDnsRequest)$/ | DomainName=/(looksta\.icu|quirksturdy\.icu|strainedeasily\.icu|cpppemwjewjoiwejow\.sale|wifihot\.icu|filloco\.icu|raidher\.icu|apigrokcloud\.icu|enhanceblabber\.cc|deep-harborio\.com|auramatrixa\.com|zealpraxis\.com|prism-vertex\.com|prism-matrixs\.com|proton-network\.com|creativecommunityinfo\.art|dialectosphere\.in\.net|claude-desktop\.gitlab\.io)$/i | table([@timestamp, ComputerName, UserName, ContextBaseFileName, DomainName, aid], limit=500)
CrowdStrike Custom IOA Recommendations
Five queries are clean enough to promote from hunt to Custom IOA. The rest stay investigate-only — either because their FP profile needs environment tuning first (Q3, Q5, Q7, Q8, Q10), because they are an explicitly heuristic hunt (Q11), or because they belong in IOC Management rather than an IOA (Q12).
| IOA name | From | Rule group / type | Pattern | Exclusions | Action |
|---|---|---|---|---|---|
| ACR — rundll32 DLL Load from Remote UNC Share | Q1 | Process Creation (Windows) | Image rundll32.exe; CommandLine matches a UNC prefix; parent is an interactive shell | Internal file-server and DFS hostnames | Detect — Critical |
| ACR — conhost --headless Obfuscated Launch | Q2 | Process Creation (Windows) | Image conhost.exe; CommandLine contains --headless plus a loader keyword or caret/bang expansion | Approved terminal and automation tooling | Block — Critical |
| ACR — mshta.exe Remote HTA Execution | Q4 | Process Creation (Windows) | Image mshta.exe; CommandLine contains an http or https URL | Legacy intranet HTA hosts (internal only) | Block — Critical |
| ACR — Software-Update Task Masquerade | Q6 | Process Creation (Windows) | schtasks.exe CommandLine matching Autoupdate + 8 digits | None known — validate any hit | Detect — High |
| ACR — ClickFix Run-Dialog Interpreter Paste | Q9 | Registry Operation (Windows) | RunMRU value containing an interpreter plus a remote resource or encoding marker | Privileged / IT admin asset group | Detect — High |
Deployment path
- Endpoint security → Configuration → Custom IOA rule groups — create a group named for this campaign and assign it to a pilot prevention policy first.
- Add each rule above in Monitor (detect-only) severity to start. Let it run one full business week.
- Review every hit, add the exclusions the review produces, then raise the two Block-recommended rules to prevention. Do not skip the monitor week on Q2 and Q4 — they are clean in most estates but the exceptions are always local.
- Q12's domains belong in IOC Management, not an IOA — import the CSV from section 10.
Investigate-only queries — pivot guidance
- Q3, Q5, Q7, Q8, Q10: run weekly as scheduled searches with results to a hunt queue, not an alert inbox. Promote individually once your environment's baseline is documented.
- Q11: run monthly as a ranked review list. It is a research aid, not a detection.
- Cross-query correlation is where the real fidelity lives. Any single host hitting two or more of Q1–Q10 within 24 hours should escalate immediately regardless of the individual FP ratings.
Machine-Readable IOC Appendix
Read before importing: the SHA256 rows below are REPLACE_WITH_SHA256 placeholders on purpose. No file hashes have been published for this campaign by any cited source. Delete those rows or populate them from your own confirmed samples — do not ship them as-is.
type,value,action,severity,expiration,description,tags domain,looksta.icu,detect,high,2027-01-18,ACR Stealer chain-1 infrastructure,campaign:ACRStealer domain,quirksturdy.icu,detect,high,2027-01-18,ACR Stealer chain-1 infrastructure,campaign:ACRStealer domain,strainedeasily.icu,detect,high,2027-01-18,ACR Stealer chain-1 infrastructure,campaign:ACRStealer domain,cpppemwjewjoiwejow.sale,detect,high,2027-01-18,ACR Stealer chain-1 infrastructure,campaign:ACRStealer domain,wifihot.icu,detect,high,2027-01-18,ACR Stealer chain-1 infrastructure,campaign:ACRStealer domain,filloco.icu,detect,high,2027-01-18,ACR Stealer chain-1 infrastructure,campaign:ACRStealer domain,raidher.icu,detect,high,2027-01-18,ACR Stealer chain-1 infrastructure,campaign:ACRStealer domain,apigrokcloud.icu,detect,high,2027-01-18,ACR Stealer chain-1 infrastructure,campaign:ACRStealer domain,enhanceblabber.cc,detect,high,2027-01-18,ACR Stealer chain-2 payload host,campaign:ACRStealer domain,deep-harborio.com,detect,high,2027-01-18,ACR Stealer chain-2 infrastructure,campaign:ACRStealer domain,auramatrixa.com,detect,high,2027-01-18,ACR Stealer chain-2 infrastructure,campaign:ACRStealer domain,zealpraxis.com,detect,high,2027-01-18,ACR Stealer chain-2 infrastructure,campaign:ACRStealer domain,prism-vertex.com,detect,high,2027-01-18,ACR Stealer chain-2 infrastructure,campaign:ACRStealer domain,prism-matrixs.com,detect,high,2027-01-18,ACR Stealer chain-2 infrastructure,campaign:ACRStealer domain,proton-network.com,detect,high,2027-01-18,ACR Stealer chain-2 infrastructure,campaign:ACRStealer domain,creativecommunityinfo.art,detect,high,2027-01-18,ACR Stealer chain-2 payload host,campaign:ACRStealer domain,sphere-api.dialectosphere.in.net,detect,high,2026-10-18,ACR Stealer WebDAV share host,campaign:ACRStealer domain,claude-desktop.gitlab.io,detect,medium,2026-08-18,Fake Claude Code ClickFix lure (2025 reporting),campaign:ACRStealer sha256,REPLACE_WITH_SHA256,prevent,critical,2027-01-18,ACR Stealer payload - NO HASH PUBLISHED,campaign:ACRStealer sha256,REPLACE_WITH_SHA256,prevent,critical,2027-01-18,ACR Stealer loader DLL - NO HASH PUBLISHED,campaign:ACRStealer
ACR Stealer / Amatera - behavioral signatures (ClickFix chains)
CHAIN 1 - WebDAV + rundll32 + Python
B1 rundll32.exe with a UNC path argument, parent = interactive shell
B2 conhost.exe --headless wrapping pushd / rundll32 (delayed expansion, ^ and !)
B3 pushd or net use mounting an EXTERNAL share, immediately followed by execution
B4 pythonw.exe executing from %LocalAppData%\Temp (console suppressed)
B5 Temp staging folder named after vendor software (observed: LogiOptionsPlus)
B6 DLL delivered with a non-PE extension to blend in (observed: .google)
B7 scheduled task named "Autoupdate" + 8 digits, hidden, trigger = user sign-in
B8 file timestamps copied from notepad.exe (timestomp)
B9 PowerShell history cleared or HistorySaveStyle set to SaveNothing
B10 script interpreter resolving blockchain RPC / Web3 nodes (EtherHiding)
CHAIN 2 - MSHTA + PowerShell + steganography
B11 mshta.exe fetching a remote HTA over HTTPS, parent = explorer.exe
B12 URL path containing a 7-digit segment
B13 VBScript using COM objects to decode and run encoded PowerShell
B14 PowerShell with randomized variable names, arithmetic no-ops, dead loops
B15 PowerShell downloading a JPEG from an image-hosting service
B16 runtime API resolution: LoadLibrary, GetProcAddress, VirtualAlloc,
CreateThread, WaitForSingleObject
CONVERGENT - both chains
B17 non-browser process reading Chromium Login Data / Web Data / Local State
B18 DPAPI decryption of browser-stored passwords, cookies, auth tokens
B19 staging of PDFs from Desktop/Downloads, M365 docs, OneDrive-synced folders
CORRELATION RULE
Any single aid matching 2+ behaviors above within 24h = escalate immediately,
regardless of the individual FP rating of each contributing signal.
FAMILY NAMES / ALIASES ACR Stealer primary name AcridRain alias Amatera Stealer rebrand lineage (Proofpoint) DISTRIBUTION MODEL Malware-as-a-Service (MaaS) DELIVERY ClickFix fake verification / "fix it" prompt driving a Run-dialog paste Malvertising paid placement serving the ClickFix page SEO poisoning manipulated organic search results TECHNIQUES BY NAME EtherHiding public blockchain / Web3 nodes as a dead-drop resolver Fiber API execution ConvertThreadToFiber / CreateFiber / SwitchToFiber Steganography payload carried in JPEG pixel data Timestomping timestamps sourced from notepad.exe LOLBINS ABUSED cmd.exe rundll32.exe mshta.exe powershell.exe pythonw.exe conhost.exe OBSERVATION WINDOW late April 2026 - mid June 2026 (Microsoft Defender Experts)
# ACR Stealer / ClickFix - exposure audit (run per host or via RMM)
# 1. WebClient service - the WebDAV prerequisite for Chain 1
Get-Service WebClient | Select-Object Name, Status, StartType
# 2. Run dialog available? (RunMRU is the ClickFix vector)
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer' -Name NoRun -EA SilentlyContinue
# 3. What has already been pasted into Run on this host?
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU' -EA SilentlyContinue
# 4. ASR rules currently applied (GUIDs verified against Microsoft Learn 2026-07-18)
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Actions
# 5beb7efe-fd9a-4556-801d-275e5ffc04cc Block execution of potentially obfuscated scripts
# d3e037e1-3eb8-44c8-a917-57927947596d Block JS/VBScript launching downloaded executable content
# c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb Block use of copied or impersonated system tools
# 01443614-cd74-433a-b99e-2ecdc07bfc25 Block executables failing prevalence/age/trust criteria
# 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 Block credential stealing from LSASS
# 5. PowerShell logging posture
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging' -EA SilentlyContinue
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging' -EA SilentlyContinue
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription' -EA SilentlyContinue
# 6. Browser password-manager policy (reduces what there is to steal)
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Google\Chrome' -Name PasswordManagerEnabled -EA SilentlyContinue
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Edge' -Name PasswordManagerEnabled -EA SilentlyContinue
# 7. Suspicious scheduled tasks matching the observed masquerade pattern
Get-ScheduledTask | Where-Object { $_.TaskName -match 'Autoupdate\d{8}' } |
Select-Object TaskName, State, Author
# 8. Tamper protection + cloud-delivered protection
Get-MpComputerStatus | Select-Object IsTamperProtected, AMServiceEnabled, RealTimeProtectionEnabled
Get-MpPreference | Select-Object MAPSReporting, SubmitSamplesConsent, DisableScriptScanning
Detection Validation Gates
Work these in order. A query that has not cleared gate 2 has no business being an alert.
| Gate | What to prove | How | Pass criteria |
|---|---|---|---|
| G1 · Telemetry ready | The events each query depends on actually arrive in your tenant | Run each #event_simpleName filter alone over 24h with a count(). Pay particular attention to RegGenericValueUpdate (Q9) and ScheduledTaskRegistered (Q6) — both are policy dependent. | Non-zero counts for every event type used. Any zero means that query is blind, not clean. |
| G2 · Benign baseline | You know what normal looks like before you alert on abnormal | Run Q1–Q11 across 30 days of historical data. Catalogue every hit and classify it. | Every recurring hit is either explained and excluded, or escalated. No unexplained residue. |
| G3 · Positive test | The query fires on the behavior it claims to detect | On an isolated test host, in a change window: type a benign marker string into the Run dialog (Q9); run conhost.exe --headless cmd /c echo test (Q2); register a task named Autoupdate20260718 pointing at calc.exe (Q6); run rundll32.exe against a DLL on an internal test share (Q1). All benign, all safe, all reversible. | Each query returns the test event within the expected telemetry latency. |
| G4 · Negative test | Your exclusions did not blind the query | Re-run G3 with the tuning exclusions applied. | Test events still fire. If an exclusion swallowed one, it was written too broadly. |
| G5 · Promotion | The rule is safe to alert or block on | Custom IOA in Monitor mode for one full business week on a pilot policy. | Zero unexplained detections. Only then raise Q2 and Q4 to Block. |
| G6 · Response readiness | The team can actually act on a hit | Tabletop the containment runbook in section 14 with the on-call analyst. | Analyst can articulate the token-revocation step without prompting. This is the step teams skip and it is the one that matters. |
Do not deploy Q11 as an alert under any circumstances. Its keyword list is an authored heuristic, not published infrastructure. It is a monthly review list and nothing more.
Hardening — Tiered
Controls are ordered by leverage against this threat, not by generic best practice. The first two immediate controls each break an entire intrusion chain outright.
I1 · Disable the WebClient service (kills Chain 1 outright)
WebDAV over HTTPS is the delivery mechanism for the entire first chain. No WebClient service, no WebDAV mount, no rundll32 load from a remote share. This is the single highest-leverage control in the pack and the overwhelming majority of enterprises have no legitimate need for outbound WebDAV.
Authority: MITRE M1042 (Disable or Remove Feature or Program); Microsoft — "restrict execution from untrusted internet-delivered content". Verify: Get-Service WebClient reports Stopped / Disabled. Risk: low; check first for SharePoint "Open in Explorer" workflows, which depend on it.
I2 · Disable the Run dialog (kills the ClickFix vector)
ClickFix requires the user to paste into Run. Remove Run and the lure has no landing surface — for both chains simultaneously. RunMRU is precisely the key Microsoft's own detection pivots on, which tells you how central this vector is.
Authority: MITRE M1038 (Execution Prevention), M1042. GPO: User Configuration → Administrative Templates → Start Menu and Taskbar → Remove Run menu from Start Menu. Verify: NoRun = 1 under the Explorer policy key. Risk: medium — exempt IT and developer groups via a filtered GPO; pilot on a ring before fleet-wide rollout. pilot first
I3 · Enable the ASR rules that intersect these chains
GUIDs below were pulled from Microsoft Learn on 2026-07-18, not recalled from memory.
5beb7efe-fd9a-4556-801d-275e5ffc04cc — Block execution of potentially obfuscated scripts (Chain 2 PowerShell)
d3e037e1-3eb8-44c8-a917-57927947596d — Block JavaScript or VBScript from launching downloaded executable content (Chain 2 VBScript loader)
c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb — Block use of copied or impersonated system tools (bundled pythonw.exe)
01443614-cd74-433a-b99e-2ecdc07bfc25 — Block executables failing prevalence, age or trust criteria
Authority: MITRE M1038, M1040 (Behavior Prevention on Endpoint); Microsoft Defender ASR reference. Deploy in Audit first — the obfuscated-scripts rule can catch legitimate minified or packed internal scripts. audit first
I4 · Enable PowerShell script block logging, module logging and transcription
Chain 2 executes entirely in memory. Script block logging is the only practical visibility you will get into it, and it is also how you detect history-clearing by its absence.
Authority: MITRE M1047 (Audit); CIS Microsoft Windows Benchmark — PowerShell logging section; Microsoft Security Baseline. Verify: Event ID 4104 present in Microsoft-Windows-PowerShell/Operational. Note: forward these centrally — local-only logs are the first thing an operator clears.
I5 · Tamper protection, cloud-delivered protection, EDR in block mode
Directly per Microsoft's guidance. Cloud-delivered protection is a hard dependency for two of the ASR rules in I3 — without it, those rules silently do nothing.
Authority: MITRE M1040; Microsoft recommended mitigations. Verify: Get-MpComputerStatus | Select IsTamperProtected.
N1 · WDAC / AppLocker — constrain the LOLBins these chains depend on
Block mshta.exe outright (it has essentially no modern legitimate use), and deny execution of pythonw.exe, python.exe and unsigned binaries from user-writable paths (%LocalAppData%\Temp, %AppData%). This removes Chain 2's entry point and Chain 1's loader stage in one policy.
Authority: MITRE M1038; Microsoft App Control for Business recommended block rules. Pilot carefully on engineering populations. pilot first
N2 · Web and DNS filtering aimed at the actual delivery path
Block newly-registered domains and low-reputation TLDs — this campaign leans heavily on .icu, .sale, .art and .cc. Enable Defender for Endpoint Network Protection. Critically: block outbound WebDAV at the proxy by denying PROPFIND/LOCK methods and the Microsoft-WebDAV-MiniRedir user agent — that catches Chain 1 even where I1 could not be applied. Also constrain malvertising at source with an ad-blocking policy; that is where the ClickFix pages are served from.
Authority: MITRE M1021 (Restrict Web-Based Content); Microsoft — "enforce web filtering, block low-reputation or newly observed domains".
N3 · Remove browser-stored credentials from the equation
Disable the browser password manager by policy (PasswordManagerEnabled = 0 for Chrome and Edge) and migrate users to an enterprise password manager. ACR Stealer's entire credential-access stage targets Chromium Login Data and Web Data — if nothing is stored there, that stage returns nothing.
Authority: MITRE M1027 (Password Policies), M1017 (User Training); Microsoft — "reduce browser-stored credential reliance". Sequence matters: deploy the enterprise password manager before disabling the browser one, or users will start writing passwords down. sequence dependency
N4 · Shorten the value of a stolen token
Enable Conditional Access sign-in frequency and Continuous Access Evaluation; require compliant or hybrid-joined devices for M365 access. Stolen cookies are the actual payload of this campaign — a token that dies quickly and is bound to a managed device is worth far less on resale.
Authority: MITRE M1032 (Multi-factor Authentication), M1018 (User Account Management); Microsoft Entra Conditional Access guidance.
N5 · Alert on masqueraded persistence centrally
Forward Event ID 4698/4702 and monitor for hidden tasks and tasks whose action targets a user Temp path. Pair with Q6.
Authority: MITRE M1047 (Audit).
S1 · Phishing-resistant, token-bound authentication
Roll out FIDO2 / passkeys with Entra token protection (token binding). This is the durable answer to the entire infostealer category: it makes an exfiltrated cookie useless off the originating device. Everything else on this page raises the attacker's cost; this one removes the prize.
Authority: MITRE M1032; NIST SP 800-63B AAL3; Microsoft phishing-resistant MFA guidance.
S2 · Data-centric controls on what the stealer actually collects
The collection stage targets PDFs on Desktop and in Downloads, M365 documents and OneDrive-synced folders. Apply sensitivity labelling with encryption so exfiltrated documents remain unreadable, and constrain what syncs locally in the first place. This is the only control here that limits impact rather than probability.
Authority: MITRE M1057 (Data Loss Prevention); Microsoft Purview Information Protection.
S3 · ClickFix-specific user education
Generic phishing training does not cover this. The lure is not an email — it is a search result or an ad, and the ask is not "click a link" but "paste this to verify you are human". Users need to recognise that specific interaction as always malicious. Run a simulation using a benign marker string and measure paste rate.
Authority: MITRE M1017 (User Training); Microsoft — "educate users to recognize ClickFix prompts invoking command interpreters as malicious".
S4 · Application control maturity
Move from LOLBin blocklisting (N1) toward a managed installer / allowlist model under App Control for Business. Blocklists lose ground with every new LOLBin discovered; allowlists do not.
Authority: MITRE M1038; CIS Controls v8 Control 2 (Inventory and Control of Software Assets).
Deployable Playbooks
Test every playbook on a pilot ring before fleet deployment. P2 in particular changes visible user-facing behavior.
P1 · Disable the WebClient service (WebDAV) — breaks Chain 1
#requires -RunAsAdministrator # P1 - Disable WebDAV client. Highest-leverage single control against ACR Stealer Chain 1. # CHECK FIRST: SharePoint "Open in Explorer" and some legacy DMS clients depend on WebClient. # 1. Record current state so the change is reversible $before = Get-Service -Name WebClient | Select-Object Name, Status, StartType $before | Format-List # 2. Stop and disable Stop-Service -Name WebClient -Force -ErrorAction SilentlyContinue Set-Service -Name WebClient -StartupType Disabled # 3. Verify Get-Service -Name WebClient | Select-Object Name, Status, StartType # --- Fleet-wide via GPO --- # Computer Configuration -> Policies -> Windows Settings -> Security Settings # -> System Services -> WebClient -> Define this policy -> Disabled # # --- Rollback --- # Set-Service -Name WebClient -StartupType Manual; Start-Service -Name WebClient
P2 · Disable the Run dialog — removes the ClickFix landing surface
# P2 - Remove the Run dialog. RunMRU is the ClickFix delivery vector for BOTH chains.
# USER-VISIBLE CHANGE. Pilot on a ring. Exempt IT/developer groups by GPO security filtering.
# --- Preferred: GPO ---
# User Configuration -> Policies -> Administrative Templates -> Start Menu and Taskbar
# -> "Remove Run menu from Start Menu" -> Enabled
# (also disables Win+R and the Run entry in the WinX menu)
# --- Equivalent registry value (per-user) ---
$key = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'
if (-not (Test-Path $key)) { New-Item -Path $key -Force | Out-Null }
New-ItemProperty -Path $key -Name 'NoRun' -Value 1 -PropertyType DWord -Force | Out-Null
# Verify
Get-ItemProperty -Path $key -Name 'NoRun'
# --- Forensic value: capture what was already pasted into Run before you clear it ---
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU' -ErrorAction SilentlyContinue
# --- Rollback ---
# Remove-ItemProperty -Path $key -Name 'NoRun' -ErrorAction SilentlyContinue
P3 · Enable the intersecting ASR rules (audit mode first)
#requires -RunAsAdministrator
# P3 - ASR rules intersecting the ACR Stealer chains.
# GUIDs verified against Microsoft Learn ASR rules reference, retrieved 2026-07-18.
# Action codes: 0 = Disabled, 1 = Block, 2 = Audit, 6 = Warn
$rules = @(
'5beb7efe-fd9a-4556-801d-275e5ffc04cc', # Block execution of potentially obfuscated scripts
'd3e037e1-3eb8-44c8-a917-57927947596d', # Block JS/VBScript launching downloaded executable content
'c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb', # Block use of copied or impersonated system tools
'01443614-cd74-433a-b99e-2ecdc07bfc25' # Block executables failing prevalence/age/trust criteria
)
# STEP 1 - deploy in AUDIT for one to two weeks and review the generated events
foreach ($r in $rules) {
Add-MpPreference -AttackSurfaceReductionRules_Ids $r -AttackSurfaceReductionRules_Actions Audit
}
# STEP 2 - after review, switch to Block (re-run with Enabled instead of Audit)
# foreach ($r in $rules) {
# Add-MpPreference -AttackSurfaceReductionRules_Ids $r -AttackSurfaceReductionRules_Actions Enabled
# }
# Cloud-delivered protection is a DEPENDENCY for two of these rules - without it they no-op
Set-MpPreference -MAPSReporting Advanced
Set-MpPreference -SubmitSamplesConsent SendSafeSamples
# Verify
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Actions
P4 · Enable PowerShell logging — the only surface for Chain 2
#requires -RunAsAdministrator
# P4 - Script block logging, module logging and transcription.
# Chain 2 runs entirely in memory; 4104 events are the only practical visibility.
$base = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell'
# Script block logging (Event ID 4104)
$sb = "$base\ScriptBlockLogging"
if (-not (Test-Path $sb)) { New-Item -Path $sb -Force | Out-Null }
New-ItemProperty -Path $sb -Name 'EnableScriptBlockLogging' -Value 1 -PropertyType DWord -Force | Out-Null
# Module logging (Event ID 4103)
$ml = "$base\ModuleLogging"
if (-not (Test-Path $ml)) { New-Item -Path $ml -Force | Out-Null }
New-ItemProperty -Path $ml -Name 'EnableModuleLogging' -Value 1 -PropertyType DWord -Force | Out-Null
$mn = "$ml\ModuleNames"
if (-not (Test-Path $mn)) { New-Item -Path $mn -Force | Out-Null }
New-ItemProperty -Path $mn -Name '*' -Value '*' -PropertyType String -Force | Out-Null
# Transcription - point OutputDirectory at a write-only central share
$tr = "$base\Transcription"
if (-not (Test-Path $tr)) { New-Item -Path $tr -Force | Out-Null }
New-ItemProperty -Path $tr -Name 'EnableTranscripting' -Value 1 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path $tr -Name 'EnableInvocationHeader' -Value 1 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path $tr -Name 'OutputDirectory' -Value 'C:\ProgramData\PSTranscripts' -PropertyType String -Force | Out-Null
# Verify
Get-ItemProperty $sb, $ml, $tr | Format-List
# IMPORTANT: forward these logs centrally. Local-only logs are the first thing an operator clears.
P5 · Reduce what there is to steal — browser credential policy
#requires -RunAsAdministrator
# P5 - Disable browser password managers.
# ACR Stealer's credential stage targets Chromium Login Data / Web Data.
# SEQUENCE: deploy an enterprise password manager FIRST, or users will write passwords down.
# Chrome
$chrome = 'HKLM:\SOFTWARE\Policies\Google\Chrome'
if (-not (Test-Path $chrome)) { New-Item -Path $chrome -Force | Out-Null }
New-ItemProperty -Path $chrome -Name 'PasswordManagerEnabled' -Value 0 -PropertyType DWord -Force | Out-Null
# Edge
$edge = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge'
if (-not (Test-Path $edge)) { New-Item -Path $edge -Force | Out-Null }
New-ItemProperty -Path $edge -Name 'PasswordManagerEnabled' -Value 0 -PropertyType DWord -Force | Out-Null
# Verify
Get-ItemProperty $chrome -Name PasswordManagerEnabled -ErrorAction SilentlyContinue
Get-ItemProperty $edge -Name PasswordManagerEnabled -ErrorAction SilentlyContinue
# NOTE: this stops NEW credentials being saved. Already-stored credentials remain until
# cleared - instruct users to clear saved passwords after migrating to the enterprise vault.
P6 · Identity-plane response — the step teams forget
# P6 - Token and credential revocation for a confirmed ACR Stealer host.
# Reimaging the endpoint does NOT invalidate stolen session cookies or refresh tokens.
# Run this BEFORE closing the endpoint ticket.
# Requires: Microsoft.Graph PowerShell SDK
Connect-MgGraph -Scopes 'User.ReadWrite.All','Directory.AccessAsUser.All','AuditLog.Read.All'
$upn = 'AFFECTED_USER@example.com' # replace
$user = Get-MgUser -UserId $upn
# 1. Revoke all refresh tokens and sign the user out everywhere
Revoke-MgUserSignInSession -UserId $user.Id
# 2. Force password change at next sign-in (do this AFTER the revoke)
# Then reset the password out-of-band through your normal process.
# 3. Review sign-ins for token replay - a stolen cookie shows up in the
# NON-interactive log, from a new ASN / country / user agent
Get-MgAuditLogSignIn -Filter "userPrincipalName eq '$upn'" -Top 200 |
Select-Object createdDateTime, ipAddress, appDisplayName, clientAppUsed,
isInteractive, @{n='Location';e={$_.location.countryOrRegion}} |
Sort-Object createdDateTime -Descending | Format-Table -AutoSize
# 4. Review OAuth consents granted by this user during the compromise window
Get-MgUserOauth2PermissionGrant -UserId $user.Id | Format-Table
# 5. Enumerate every OTHER SaaS the user had a live browser session for.
# M365 is not the only thing in the cookie jar - rotate those too.
Containment Runbook
Sequencing rule for this threat: the endpoint is the crime scene, the identity plane is the loss. Isolate the host early, but do not let the endpoint work delay token revocation — stolen cookies are being used while you image the disk.
| Phase | Actions | Owner | Evidence to capture |
|---|---|---|---|
| P0 · Triage 0–15 min |
Confirm the detection against the Q1–Q12 context. Identify the user, the host, and the approximate time of the Run-dialog paste. Determine which chain (WebDAV/Python vs MSHTA/PowerShell) from the parent-process tree. | SOC L1 | Falcon process tree; triggering query and its output; aid and ComputerName |
| P1 · Isolate 15–30 min |
Network-contain the host in Falcon. Do not power off — in-memory execution means shutdown destroys the best evidence. Notify the user by an out-of-band channel that their session may be compromised. | SOC L2 | Containment timestamp; memory image if your process supports it |
| P2 · Revoke parallel with P1 — do not wait |
Run playbook P6: revoke all refresh tokens, force password reset, review non-interactive sign-ins for replay from a new ASN or country. Enumerate every other SaaS the user held a live browser session for and rotate those too. | IAM / SOC L2 | Revocation confirmation; sign-in log export covering 7 days either side |
| P3 · Scope 30–90 min |
Run Q12 fleet-wide for other hosts touching the same infrastructure. Run Q9 across the same time window — where one user hit a ClickFix page, others in the same role likely saw the same ad or search result. Check whether the lure arrived by malvertising or a specific search term and hunt that term's referrer chain in proxy logs. | Threat Hunter | Query results; list of additional affected aids; the delivery URL if recoverable |
| P4 · Eradicate 90 min – 4 h |
Remove the scheduled task (match on the "Autoupdate" + 8-digit pattern and enumerate hidden tasks). Delete the Temp staging folder. Capture RunMRU before clearing it — it is your cleanest proof of the initial lure. Given in-memory execution and timestomping, reimage rather than clean; you cannot prove you found everything. |
Endpoint Ops | Task export; staging folder listing and hashes; RunMRU contents; reimage record |
| P5 · Assess data exposure 4–24 h |
Review M365 unified audit log for FileDownloaded / FileSyncDownloadedFull spikes in the compromise window. Determine what was in Desktop, Downloads and synced OneDrive/SharePoint folders on that host. Escalate to Legal/Privacy if regulated data was in scope. |
IR Lead / DPO | Audit log export; inventory of exposed documents; notification decision record |
| P6 · Recover 24–72 h |
Return the reimaged host with I1 (WebClient disabled) and I2 (Run dialog disabled) applied. Re-enrol MFA. Confirm no residual sessions via a fresh sign-in log review at 24h and 72h. | Endpoint Ops / IAM | Rebuild record; hardening verification output; clean sign-in review |
| P7 · Harden & close 1–2 weeks |
Roll the section 12 Immediate tier fleet-wide. Add exclusions learned during this incident to the Custom IOAs. Run a ClickFix-specific awareness push to the affected user's business unit while the incident is still salient. | Security Engineering | Change records; updated IOA exclusion list; training completion |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Hardening | Coverage |
|---|---|---|---|---|---|
| T1189 / T1204 | ClickFix lure → Run-dialog paste | Q9 | Yes | I2, N2, S3 | GOOD |
| T1218.011 | rundll32 loading DLL from WebDAV/UNC | Q1, Q3 | Yes | I1, N1, N2 | GOOD |
| T1027 / T1036 | conhost --headless + delayed expansion | Q2 | Yes | I3, N1 | GOOD |
| T1218.005 | mshta fetching remote HTA | Q4 | Yes | N1, N2 | GOOD |
| T1053.005 | Scheduled task masquerading as an updater | Q6 | Yes | N5 | GOOD |
| T1059.003 | cmd.exe / pushd share mount | Q2, Q3 | Partial | I1 | GOOD |
| T1059.006 | Python loader via bundled pythonw.exe | Q5 | No | N1, I3 | PARTIAL — FP profile needs environment tuning before promotion |
| T1059.001 | Obfuscated PowerShell downloader | Q10 | No | I3, I4 | PARTIAL — depends on script block logging being enabled |
| T1027.003 | Steganographic payload in JPEG | Q10 | No | I3 | PARTIAL — detects the retrieval, not the extraction |
| T1070.003 | PowerShell history clearing | Q7 | No | I4 | PARTIAL — supporting signal only; correlate with Q1–Q6 |
| T1555.003 | Chromium credential store access + DPAPI | Q8 | No | N3, S1 | PARTIAL — command-line based; misses in-process reads entirely |
| T1102 / T1071.001 | Campaign C2 infrastructure | Q12 | IOC Mgmt | N2 | GOOD — but highly perishable |
| T1102.001 | EtherHiding dead-drop resolver | Q11 | No | N2 | GAP — heuristic only; no published provider infrastructure |
| T1070.006 | Timestomping from notepad.exe | — | No | — | GAP — no Falcon telemetry; MFT timestamp comparison at forensic stage only (N5) |
| T1620 / T1055 | Fiber API + reflective in-memory execution | — | No | I3, I5 | GAP — accepted; no practical detection surface. Compensated by detecting the stages either side and by EDR block mode |
| T1005 / T1074 | Document collection and staging | — | No | S2 | GAP — covered by native hunt N4 (M365 audit log), not by CQL |
Gap summary
- Four hard gaps. Two are structural and accepted (in-memory execution T1620/T1055; timestomping T1070.006) — no EDR gives you these, so the pack compensates by detecting the stages immediately before and after. One is an intel gap (EtherHiding T1102.001 — the technique is named, the infrastructure is not). One is a tooling boundary (collection T1005/T1074 lives in M365 audit, not endpoint telemetry).
- The most consequential partial is Q8. Falcon has no generic file-read event, and ACR Stealer reads browser databases in-process after reflective loading. A clean Q8 result is not evidence that credentials are safe. Treat the identity-plane hunts (section 7, N4) as the real detection for the credential-access stage.
- Compensating strength: both chains converge on Run-dialog delivery upstream and browser/token theft downstream. Q9 covers the upstream chokepoint at high fidelity for both chains simultaneously, which is why it is the highest-value query in the pack despite the flashier middle stages.
Validation: gates G1–G6 in section 11 govern promotion. No query proceeds to alert before clearing G2 (benign baseline) and no query proceeds to block before clearing G5 (one monitor week). Q11 is permanently barred from alerting — it is a heuristic review list, not a detection.
Hunt Summary Ticket
TITLE: ACR Stealer / Amatera - ClickFix intrusion chains (WebDAV+Python, MSHTA+steganography)
SEVERITY: High - active MaaS infostealer, vendor-confirmed activity Apr-Jun 2026
SCOPE: All Windows endpoints with interactive users. Priority: hosts whose users hold
M365 / SaaS sessions and store credentials in a Chromium browser.
HYPOTHESIS: A user was served a ClickFix lure via malvertising or a poisoned search result and
pasted an attacker command into the Run dialog, executing one of two chains:
Chain 1 - rundll32 loads a DLL from a WebDAV share; ZIP + bundled pythonw.exe
stage in %LocalAppData%\Temp; in-memory shellcode via the Fiber API;
persistence as a hidden "Autoupdate"+8-digit scheduled task;
EtherHiding blockchain RPC used as a dead-drop C2 resolver.
Chain 2 - MSHTA fetches a remote HTA; VBScript decodes PowerShell; a JPEG from an
image host carries the payload in pixel data, executed reflectively.
Both converge on Chromium credential/token theft and document collection.
QUERIES: Q1 rundll32 DLL load from remote WebDAV/UNC CONF high | FP low | COST low
Q2 conhost --headless obfuscated launcher CONF high | FP low | COST low
Q3 pushd / net use remote share mount CONF med | FP med | COST low
Q4 mshta remote HTA over HTTP(S) CONF high | FP low | COST low
Q5 pythonw.exe from user Temp path CONF med | FP med | COST low
Q6 scheduled task "Autoupdate" + 8 digits CONF high | FP low | COST low
Q7 PowerShell history clearing CONF med | FP med | COST low
Q8 non-browser touching Chromium cred stores CONF med | FP med | COST med
Q9 ClickFix Run-dialog paste (RunMRU) CONF high | FP low | COST low
Q10 PowerShell downloading an image file CONF med | FP med | COST med
Q11 EtherHiding blockchain RPC (HEURISTIC ONLY) CONF low | FP high | COST med
Q12 published campaign domain sweep CONF high | FP low | COST med
DO FIRST: 1. Q9 across 30 days - the ClickFix vector, upstream of execution, covers both chains
2. Q1 + Q2 + Q4 across 30 days - the three highest-fidelity execution primitives
3. Q6 - persistence; anything here is almost certainly a true positive
4. Q12 - retrospective infrastructure scope (perishable; a clean result proves nothing)
5. Native hunt N4 - M365 / Entra identity-plane impact review
FINDINGS: [ ] Q9 hits: ______ [ ] Q1 hits: ______ [ ] Q2 hits: ______
[ ] Q4 hits: ______ [ ] Q6 hits: ______ [ ] Q12 hits: ______
[ ] Hosts with 2+ query hits in 24h (auto-escalate): ______
[ ] Affected identities requiring token revocation: ______
GAPS: - In-memory execution (Fiber API, reflective loading) - no detection surface, accepted
- Timestomping - no Falcon telemetry; MFT comparison at forensic stage only
- EtherHiding - technique published, infrastructure not; Q11 is heuristic, never alert
- Document collection/staging - lives in M365 audit log, not endpoint telemetry
- Q8 misses in-process credential reads; do NOT read a clean Q8 as "creds safe"
- No file hashes published by any source; IOC CSV ships placeholders by design
ACTIONS: [ ] Promote Q1, Q2, Q4, Q6, Q9 to Custom IOA (Monitor mode, pilot policy, 1 week)
[ ] Import the section 10 domain CSV into Falcon IOC Management
[ ] Deploy hardening Immediate tier: I1 WebClient disable, I2 Run dialog,
I3 ASR rules (audit first), I4 PowerShell logging, I5 tamper protection
[ ] Confirm RunMRU registry telemetry is captured in tenant (gate G1 - Q9 depends on it)
[ ] Confirm ScheduledTaskRegistered / TaskName populated in tenant (gate G1 - Q6)
[ ] Schedule ClickFix-specific user awareness for affected business units
OWNER: ______________________
VERSION: v0.1 - 2026-07-18
Changelog
References
| Tier | Source | Used for | Accessed |
|---|---|---|---|
| 1 | Microsoft Security Blog — ACR Stealer: Two observed intrusion chains amid increased threat activity (2026-07-16) | Primary. Both intrusion chains, all 16 campaign domain IOCs, LOLBin set, scheduled-task masquerade pattern, ATT&CK mapping, recommended mitigations, RunMRU detection pivot | 2026-07-18 |
| 1 | The Hacker News — ACR Stealer Uses ClickFix Lures to Steal Browser Tokens and Microsoft 365 Files (2026-07-17) | Corroboration; the literal WebDAV rundll32 command line including host, GUID path and disguised .google extension; relayed Red Canary GitLab lure indicator | 2026-07-18 |
| 2 | Proofpoint — Amatera Stealer: Rebranded ACR Stealer With Improved Evasion, Sophistication | ACR → Amatera rebrand lineage and MaaS distribution model; naming context only, no IOCs sourced | 2026-07-18 |
| 1 | Microsoft Learn — Attack surface reduction rules reference | Verbatim ASR rule names and GUIDs used in hardening control I3 and playbook P3 | 2026-07-18 |
| ref | MITRE ATT&CK | Technique IDs in section 6 and mitigation M-numbers throughout section 12 | 2026-07-18 |
| ref | CIS Benchmarks — Microsoft Windows | PowerShell logging and application-control baseline citations (I4, S4) | 2026-07-18 |
Provenance statement. Every atomic indicator in this pack — all 16 campaign domains, both additional host indicators, the GUID path fragment, the disguised filename and the Temp staging folder name — is reproduced from one of the cited sources above. Where a source published nothing (file hashes, exact scheduled-task names, registry keys beyond RunMRU, EtherHiding RPC providers), this pack says so explicitly and ships a placeholder or a labelled heuristic rather than an invented value.