FakeAgent — Malicious Claude Artifact → SectopRAT — Hunt & Hardening Pack
ClaudeDesktop.exe, which is a renamed JetBrains jcef_helper.exe CEF host used purely as a DLL-sideloading vessel for a VMProtect-packed libcef.dll → second-stage IBM SPSS sslconf.exe + tempdir.dll staged in an EdgeUpdate\Install path with a GPU/DXGI anti-VM gate and a DirectX-shader AES-256-CTR decryptor → SectopRAT (ArechClient2) with EtherHiding C2 resolution off BNB Smart Chain. 29 organizations compromised 2026-07-21 to 2026-07-22. Defensive hunt & harden pack — no offensive code.Executive Summary
Huntress published (2026-07-22) an analysis of a malvertising campaign it named FakeAgent, in which at least 29 organizations were compromised over a two-day window (2026-07-21 to 2026-07-22). Victims performed an ordinary Bing search for "CLAUDE DESKTOP APP". Among the sponsored results was a link that pointed at the genuine claude.ai domain — but at an attacker-published public Claude Artifact, a user-generated page that Claude renders and hosts on its own domain. That artifact rendered a convincing fake Claude Desktop download page and its "Download" button redirected the visitor off-domain to a fake installer. The artifact was viewed 7,100 times before Anthropic removed it on report.
The attacker objective is credential and financial-data theft at scale. The delivered payload is SectopRAT (a.k.a. ArechClient2), a .NET remote access trojan with HVNC — its decompiled strings reference browser logins, cookies, autofill records, credit cards, Chromium key theft, FTP and messaging clients including Discord. HVNC means the operator gets a hidden interactive desktop on the victim host, so this is a hands-on-keyboard capability, not just a log-grabber.
The execution chain is built almost entirely out of legitimate signed binaries. ClaudeDesktop.exe is not a Claude binary at all: it is a renamed component of JetBrains' jcef_helper.exe, a Chromium Embedded Framework host, and it is byte-identical to the DockerDesktop.exe the same actor drops for scheduled-task reinfection. Its only job is to load a tampered libcef.dll sitting beside it (DLL side-loading, T1574.002). The second stage repeats the trick with a signed IBM SPSS sslconf.exe written to %APPDATA%\Roaming\Microsoft\EdgeUpdate\Install\sslconf.exe, paired with a malicious tempdir.dll. Anti-analysis is unusually heavy: VMProtect on the first-stage DLL, a GPU/DXGI anti-VM gate in the second (it checks adapter vendor IDs 0x1234 for QEMU and 0x15AD for VMware, bails when VRAM is under 1 GB, and runs a compute-shader timing check), and a payload (appcfg.dat) whose AES-256-CTR decryption runs as a compiled DirectX SM5 shader with a modified MixColumns step so that CPU-side crypto-API hooking sees nothing.
C2 is resolved via EtherHiding: the address is fetched from Ethereum smart contracts on BNB Smart Chain, which lets the operator rotate infrastructure with a single transaction and makes takedown ineffective. Huntress recovered the contract cryptomaterial and decrypted the full historical C2 list back to 2025-05-30 — 21 addresses, of which 2.24.131[.]246 is current as of 2026-06-12. The same registrant email indexes across 10 malicious domains since December 2025, one of which (polse[.]us) was seized by Microsoft during Operation Endgame, and the same operator ran an April 2026 fake Docker Desktop campaign distributed via Docker Hub with the identical libcef.dll chain.
jcef_helper.exe — this is the masquerade itself, and it survives every rename), Q4 (an IBM SPSS sslconf.exe living under ...\Roaming\Microsoft\EdgeUpdate\Install\, a combination that has no legitimate explanation), and Q5 (persistence pointing into that same staging directory). Run those three first. Then treat the "trusted brand as a leading DNS label" pattern in Q7 (claude.ai.download-app[.]us) as a standing control, not a one-off IOC — it is the reusable half of this campaign.Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry |
|---|---|---|---|
| 1 · Vendor research | Huntress — "Inside FakeAgent: How a Claude Desktop Malvertising Campaign Hit 29 Organizations with SectopRAT" (2026-07-22) | PRIMARY. Full chain and the complete atomic IOC set: the public-artifact URL, the two redirect domains, five SHA-256 hashes (three malicious, two benign-but-abused), both BSC contract addresses, the current C2 and 20 historical C2 IPs decrypted from BSC transactions, the EdgeUpdate\Install\sslconf.exe path, the GPU/DXGI anti-VM detail, the SM5-shader AES-256-CTR decryptor, the SectopRAT attribution and the April 2026 Docker Hub precursor | yes |
| 2 · Vendor press | BleepingComputer — "Fake Claude app promoted by Bing ads pushes SectopRAT malware" | Independent corroboration of the 29-org scope, the 2026-07-21/22 window, the 7,100 artifact views, the JetBrains CEF component + libcef.dll sideload, and EtherHiding over BNB Smart Chain. Adds SectopRAT/ArechClient2 lineage (active since 2019, HVNC) and notes recent SectopRAT delivery via CastleLoader and ClickFix | yes |
| 2 · Vendor press | Help Net Security — "How attackers hosted a fake Claude download page on the claude.ai domain" | Corroborates the artifact-abuse mechanic (public artifact links are viewable without a Claude account), both redirect hops, the bundle contents (renamed signed JetBrains binary + tampered libcef.dll + DockerDesktop.exe registered as a scheduled task for reinfection), and the April 2026 Docker Hub link | yes |
| 3 · Background | Malpedia — win.sectop_rat family page | SectopRAT / ArechClient2 family lineage, aliases and prior public reporting. Used only for background framing, no atomic IOCs carried | partial |
| 3 · Background | AhnLab ASEC — SectopRAT (ArechClient2) distributed as a fake Notion installer | Prior art on the same family being delivered through fake-installer lures; supports the "durable behaviour is the fake-installer masquerade, not the hash" framing | partial |
| — | IT Security Guru — FakeAgent campaign write-up (2026-07-23) | Not carried. The site returned HTTP 403 to every fetch attempt, so no snapshot could be saved. Nothing from it is cited and no indicator in this pack depends on it | no |
FakeAgent-ClaudeArtifact-SectopRAT-Hunt-sources/. Where this pack's brief differed from what the primary report actually says, the source wins: the backup SectopRAT domain is 5ca8758c-02d0-4a72-89c8-d468b66dda41[.]com as published by Huntress. Vendor-attributed but unpublished internals (the AES key material, the decrypted appcfg.dat) are deliberately absent — they are not defender-actionable and were never released.Hunt Brief & Attack Chain
Attack chain
| # | Step | Telemetry | Hunt angle |
|---|---|---|---|
| 1 | User searches Bing for "CLAUDE DESKTOP APP"; clicks a sponsored result whose destination is on the genuine claude.ai domain | Proxy / secure web gateway logs; browser history | Web-proxy hunt for requests to claude.ai/public/artifacts/… immediately followed by an off-domain download (§7) |
| 2 | Malicious public Claude Artifact renders a fake Claude Desktop download page; "Download" redirects off-domain | Proxy logs; DNS | DNS/proxy for the specific artifact path and the redirect hop; generic hunt for a trusted brand appearing as a leading label of an unrelated domain (Q7) |
| 3 | Redirect claude.ai.download-app[.]us → downloading-api[.]it[.]com/html/claude/win serves the bundle | DnsRequest, NetworkConnectIP4, proxy | Q6 / Q7 — delivery-domain resolution from a browser process |
| 4 | ClaudeDesktop.exe written to a browser-download path and executed by the user | PeFileWritten, ProcessRollup2 | Q1 — masquerade filename executing from Downloads/Temp with a browser parent |
| 5 | That EXE is a renamed JetBrains jcef_helper.exe CEF host, byte-identical to the dropped DockerDesktop.exe | ProcessRollup2 + SHA256HashData | Q2 — the benign CEF-host hash running under a name that is not jcef_helper.exe. Rename-proof |
| 6 | Tampered libcef.dll (VMProtect-packed, references BSC contract 0xc1907d7be91f95903ad66d775c397302e7dd9228) side-loaded from the same directory | PeFileWritten, module load (ImageHash) | Q3 — known-bad hash, or a libcef.dll in a user-writable path |
| 7 | Stager pulls a payload referenced through the Ethereum contract (staged as cache.dat) and installs the second stage | NetworkConnectIP4, PeFileWritten | Egress to BSC RPC endpoints from a non-browser process (§7 native hunt — partial coverage) |
| 8 | Persistence stage: signed IBM SPSS sslconf.exe written to %APPDATA%\Roaming\Microsoft\EdgeUpdate\Install\ with malicious tempdir.dll beside it | PeFileWritten, ProcessRollup2 | Q4 — highest-fidelity signal in the pack |
| 9 | tempdir.dll runs a GPU/DXGI anti-VM gate (vendor IDs 0x1234 QEMU / 0x15AD VMware, VRAM under 1 GB, compute-shader timing) before proceeding | — | GAP No endpoint telemetry exposes DXGI adapter enumeration. Detonate on bare metal, not in a VM |
| 10 | appcfg.dat decrypted on the GPU via a compiled DirectX SM5 shader (AES-256-CTR with a modified MixColumns) | PeFileWritten / file-write for appcfg.dat | Q4 — the appcfg.dat artifact next to the sideload host. The shader decryption itself is not observable |
| 11 | Decrypted blob carves a PE plus a .NET assembly — SectopRAT — loaded in-process | ProcessRollup2 (host process), module load | Q9 — the masquerading host holding outbound connections; .NET reflective load itself is Partial |
| 12 | Scheduled task re-runs DockerDesktop.exe to reinfect; Run-key / task persistence into the staging directory | AsepValueUpdate, ScheduledTaskRegistered, ProcessRollup2 | Q5 |
| 13 | SectopRAT resolves live C2 from BSC contracts (EtherHiding), beacons to 2.24.131[.]246, backup domain 5ca8758c-02d0-4a72-89c8-d468b66dda41[.]com | NetworkConnectIP4, DnsRequest | Q6 / Q7 |
| 14 | Collection: browser logins, cookies, autofill, credit cards, Chromium keys, FTP creds, Discord and messaging clients; HVNC hands-on session | ProcessRollup2, NetworkConnectIP4 | Q9 — Partial. Falcon does not emit a generic file-read event, so credential-store reads are inferred from the host process, not observed directly |
Hunt hypotheses (ordered by fidelity)
| # | Hypothesis | MITRE | Falcon events | Expected FP source | Conf |
|---|---|---|---|---|---|
| H1 | A binary whose SHA-256 is the known-benign JetBrains CEF host is running under a filename other than jcef_helper.exe — i.e. it has been renamed to masquerade | T1036.005, T1574.002 | ProcessRollup2 | Repackaged IDEs that legitimately rename the helper (rare); confirm the parent | high |
| H2 | A signed IBM SPSS sslconf.exe is executing from, or was written into, an %APPDATA%\Roaming\Microsoft\EdgeUpdate\Install\ path | T1574.002, T1036.005, T1547 | ProcessRollup2, PeFileWritten | Genuine SPSS installs (which live under Program Files, never EdgeUpdate) | high |
| H3 | ClaudeDesktop.exe or DockerDesktop.exe executed from a browser-download or temp path | T1204.002, T1036.005 | ProcessRollup2, PeFileWritten | A genuine Docker Desktop installer run from Downloads (Docker ships "Docker Desktop Installer.exe", not DockerDesktop.exe) | high |
| H4 | A libcef.dll or tempdir.dll matching the published hashes, or sitting in a user-writable directory next to a renamed host, is loaded | T1574.002 | PeFileWritten, ImageHash | Legitimate Electron/CEF apps installed per-user under \AppData\Local\Programs\ | high |
| H5 | Run-key or scheduled-task persistence references the EdgeUpdate staging directory or one of the masquerade filenames | T1547.001, T1053.005 | AsepValueUpdate, ScheduledTaskRegistered, ProcessRollup2 | Genuine Microsoft Edge updater tasks (which live under Program Files (x86)) | high |
| H6 | A host connected to one of the 21 decrypted C2 addresses, or resolved a delivery/backup domain | T1071.001, T1105 | NetworkConnectIP4, DnsRequest | Shared hosting reuse on the historical IPs (they span 2025-05 to 2026-06) | high |
| H7 | A DNS name embeds a trusted software brand as its leading label on an unrelated registrable domain (claude.ai.<attacker>.tld) | T1583.001, T1566.002 | DnsRequest | Legitimate CDN and SaaS vanity chains that do exactly this | medium |
| H8 | A masquerading CEF/SPSS host process is itself holding outbound connections — the sideloaded RAT beaconing through its vessel | T1071.001, T1055 | NetworkConnectIP4 | Genuine CEF/Electron apps talk to the internet constantly | medium |
Consolidated IOC Table
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| URL | claude.ai/public/artifacts/ca456f1f-44c0-42af-b329-4f1c7534a877 | high | hunt | Malicious public Claude Artifact — the fake download page. Removed by Anthropic on report; 7,100 views. Do not block claude.ai itself — block/alert on the artifact path only | 2026-10-24 |
| Domain | claude.ai.download-app[.]us | high | detect | First redirect hop. Brand-as-leading-label lookalike; registrable domain is download-app[.]us (registered 2026-05-09) | 2027-01-24 |
| Domain | download-app[.]us | high | detect | Registrable parent of the redirect host; registrant email indexes across 10 malicious domains since 2025-12 | 2027-01-24 |
| Domain | downloading-api[.]it[.]com | high | detect | Second hop, path /html/claude/win — serves ClaudeDesktop.exe | 2027-01-24 |
| Domain | 5ca8758c-02d0-4a72-89c8-d468b66dda41[.]com | high | detect | Backup SectopRAT C2 domain | 2027-01-24 |
| IPv4 | 2.24.131[.]246 | high | detect | Current SectopRAT C2, live since 2026-06-12 per the BSC contract transaction history | 2027-01-24 |
| IPv4 (20) | See §10 — historical C2 set (107.189.*, 45.59.*, 104.194.133[.]210, 195.110.58[.]222, 191.101.80[.]211) | medium | hunt | Decrypted from BSC contract transactions, 2025-05-30 through 2026-05-12. Likely attributable to other campaigns by the same operator; treat as hunt/enrich, not block — shared hosting reuse is likely over a 13-month span | 2026-10-24 |
| SHA-256 | 26bae4d7012bf59847ab4036a065419c3d4ca47e020479f55b3b2c6d0d21394a | high | detect | Malicious libcef.dll — VMProtect-packed first-stage sideload payload | 2027-01-24 |
| SHA-256 | 1cd58cfba596da296ab1878d74023e00c399345a1b6c2a0e5446c53563f4e3bb | high | detect | Malicious tempdir.dll — GPU/DXGI anti-VM gate + SM5-shader AES-256-CTR decryptor | 2027-01-24 |
| SHA-256 | 1fe3646d27d286db8123297e06ae7badf3e26f352a04f91b6d82c28869a91664 | high | detect | Embedded SectopRAT .NET payload carved from the decrypted appcfg.dat | 2027-01-24 |
| SHA-256 | f8acb8f5cf88b77a4c27d7fd6856aa299bb178e85f9963c2fbd447d818da3ed0 | high | hunt | BENIGN component — the JetBrains jcef_helper.exe CEF host shipped as both ClaudeDesktop.exe and DockerDesktop.exe. Never block. Hunt on it running under a non-jcef_helper filename (Q2) | 2026-10-24 |
| SHA-256 | fd826215add30c1319eefa291b6eaf8ddfa7720cfe816c49aef6fe8a88de7939 | high | hunt | BENIGN component — signed IBM SPSS sslconf.exe used as the second-stage sideload host. Never block. Hunt on its path (Q4) | 2026-10-24 |
| BSC contract | 0xe012d0f34cde9b870e9d9ed566ea5f8fd9b92228 | high | enrich | SectopRAT EtherHiding contract on BNB Smart Chain — resolves the live C2 | 2026-08-24 |
| BSC contract | 0xc1907d7be91f95903ad66d775c397302e7dd9228 | high | enrich | libcef.dll stager EtherHiding contract, referenced directly in the DLL | 2026-08-24 |
| Filename | ClaudeDesktop.exe · DockerDesktop.exe · libcef.dll · tempdir.dll · sslconf.exe · appcfg.dat · cache.dat | high | hunt | Campaign filename set. Only meaningful in combination with path — three of these are legitimate filenames in their proper directories | 2026-10-24 |
| Path | %APPDATA%\Roaming\Microsoft\EdgeUpdate\Install\ | high | detect | Second-stage staging directory. A per-user EdgeUpdate\Install path is the single strongest signal in this pack | 2027-01-24 |
| Domain | polse[.]us | medium | enrich | Historical domain sharing the actor's registrant email; seized by Microsoft during Operation Endgame for hosting StealC. Attribution context only — not part of this campaign's live chain | 2026-08-24 |
Affected Surface & Telemetry Matrix
| Surface | Required telemetry | Priority | Gap risk |
|---|---|---|---|
| Windows workstations (user-writable execution) | ProcessRollup2 / SyntheticProcessRollup2 with SHA256HashData populated | critical | Low — standard Falcon sensor coverage |
| Executable/DLL writes to user paths | PeFileWritten, NewExecutableWritten | critical | Low |
| Module load (DLL side-loading) | Module-load hash telemetry — delivered as ImageHash in most tenants | high | Medium — module-load event naming and retention vary by tenant and sensor version. Q3/Q8/Q10 carry an in-query ⚠ validate in tenant note; Sysmon EventID 7 is the fallback (§7) |
| Persistence (ASEP + scheduled tasks) | AsepValueUpdate, RegGenericValueUpdate, ScheduledTaskRegistered | critical | Low—Medium. TaskName / TaskExecutable population varies; the schtasks command-line arm in Q5 is the belt-and-braces path |
| Egress (C2 + delivery) | NetworkConnectIP4, DnsRequest | critical | Low. Note DNS-over-HTTPS in the browser can blind DnsRequest for the delivery hops — proxy logs (§7) cover that |
| Web gateway / proxy | Full URL logging including claude.ai paths | high | High — many estates log domain only, not path. Without path logging the artifact hop is invisible and step 1—2 of the chain is unhunted |
| GPU / DXGI adapter enumeration | — | n/a | GAP — no EDR telemetry exposes this. Consequence: the malware will not detonate in a standard VM sandbox, so lab validation must use bare metal or a GPU-passthrough host |
| Browser credential stores | — | high | Partial — Falcon emits no generic file-read event, so credential-store access is inferred from the host process (Q9), not observed. Sysmon EventID 11/ file-audit ACLs on the Chromium profile dirs close this (§7) |
ATT&CK Mapping
| Tactic | Technique | Observed behavior | Query / control |
|---|---|---|---|
| Resource Development | T1583.001 — Acquire Infrastructure: Domains | Redirect and C2 domains registered under one registrant email; 10 domains indexed since 2025-12 | Q7 · H-N3 |
| Resource Development | T1583.008 — Malvertising | Bing sponsored ad for "Claude Desktop app" | §7 proxy hunt · H-S2 |
| Resource Development | T1584.006 — Compromise Infrastructure: Web Services | Abuse of the legitimate public Claude Artifact hosting feature to serve the lure page from a trusted domain | §7 proxy hunt · H-S1 |
| Initial Access | T1189 — Drive-by Compromise | Sponsored search result → artifact page → redirect chain → download | Q6, Q7 |
| Execution | T1204.002 — User Execution: Malicious File | User runs ClaudeDesktop.exe from Downloads | Q1 |
| Defense Evasion | T1036.005 — Masquerading: Match Legitimate Name or Location | JetBrains jcef_helper.exe renamed to ClaudeDesktop.exe / DockerDesktop.exe; IBM SPSS sslconf.exe planted in an EdgeUpdate path | Q1, Q2, Q4 |
| Persistence / Priv-Esc / Defense Evasion | T1574.002 — Hijack Execution Flow: DLL Side-Loading | Tampered libcef.dll loaded by the renamed CEF host; tempdir.dll loaded by sslconf.exe | Q3, Q8, Q10 |
| Defense Evasion | T1027.002 — Obfuscated Files: Software Packing | libcef.dll packed with VMProtect; .NET payload heavily obfuscated | Q3, Q8 (hash) — behavior itself is GAP |
| Defense Evasion | T1027.013 — Encrypted/Encoded File | appcfg.dat AES-256-CTR encrypted, decrypted by a DirectX SM5 shader with a modified MixColumns | Q4 (the artifact on disk) |
| Defense Evasion | T1497.001 — Virtualization/Sandbox Evasion: System Checks | DXGI adapter vendor-ID check (0x1234 QEMU, 0x15AD VMware), VRAM under 1 GB bail-out, compute-shader timing check | GAP — no telemetry. Detonate on bare metal |
| Defense Evasion | T1562.001 — Impair Defenses: Disable or Modify Tools | Defender exclusions observed across the affected estates alongside the installs | §7 H-W2 · hardening tier 1 |
| Persistence | T1547.001 — Registry Run Keys / Startup Folder | Persistence referencing the EdgeUpdate staging path | Q5 |
| Persistence | T1053.005 — Scheduled Task | DockerDesktop.exe registered as a scheduled task to repeatedly reinfect | Q5 · §7 H-W3 |
| Command & Control | T1102 — Web Service (dead-drop resolver) | EtherHiding — C2 address resolved from BNB Smart Chain smart contracts, rotatable by transaction | §7 H-N4 · hardening tier 2 (egress) |
| Command & Control | T1071.001 — Application Layer Protocol: Web | SectopRAT HTTP C2 to 2.24.131[.]246 / backup domain | Q6, Q7, Q9 |
| Command & Control | T1105 — Ingress Tool Transfer | cache.dat / appcfg.dat staged after the first-stage sideload | Q4 |
| Credential Access | T1555.003 — Credentials from Web Browsers | Browser logins, cookies, autofill, credit cards, Chromium key theft | Q9 · §7 H-W4 (Partial) |
| Collection | T1185 — Browser Session Hijacking (HVNC) | Hidden secondary desktop giving the operator live control of browser sessions | Q9 (Partial) |
| Collection / Exfiltration | T1005 / T1041 — Data from Local System, Exfil Over C2 | FTP credentials, Discord and messaging-client data exfiltrated over the C2 channel | Q6, Q9 |
Native Audit-Log Hunts (non-CQL)
These cover the parts of the chain that endpoint EDR sees poorly or not at all. Run them alongside §8, not instead of it.
| ID | Source | Hunt | Why it matters |
|---|---|---|---|
| H-S1 | Secure web gateway / proxy (full-URL logging) | Requests to claude.ai with a URI path beginning /public/artifacts/, then correlate each such session against an executable download in the following 5 minutes | This is the only place the artifact hop is visible. Domain-only proxy logging makes the whole lure stage invisible — claude.ai looks entirely legitimate |
| H-S2 | Proxy / browser telemetry | Executable downloads (.exe, .msi, .zip) whose HTTP Referer chain includes a search engine and whose host was registered in the last 90 days | Generic malvertising control. Catches the next campaign, not just this one |
| H-W1 | Windows Security 4688 / Sysmon EventID 1 | Process creation where the image is ClaudeDesktop.exe, DockerDesktop.exe or sslconf.exe and the parent is a browser or an archive tool | Fallback where Falcon coverage is thin or the host is unmanaged |
| H-W2 | Microsoft Defender operational log — EventID 5007 | Any change to exclusion paths/processes, especially additions covering %APPDATA%, Downloads or the EdgeUpdate tree | Huntress observed Defender exclusions being added across the affected organizations. An exclusion for a user-writable path is a standalone incident |
| H-W3 | Windows Security 4698 / Task Scheduler operational log | Scheduled tasks whose action path resolves under %APPDATA%, %LOCALAPPDATA% or any EdgeUpdate\Install directory | The reinfection mechanism. Genuine Edge update tasks point at Program Files (x86) |
| H-W4 | Sysmon EventID 11 (FileCreate) + file-system audit ACLs | Non-browser processes touching %LOCALAPPDATA%\Google\Chrome\User Data\*\Login Data, Cookies, Web Data, Local State, and the Edge/Firefox equivalents | Closes the credential-access gap that Falcon's event model leaves open |
| H-W5 | Sysmon EventID 7 (ImageLoad) | libcef.dll, tempdir.dll or chrome_elf.dll loaded from a path outside the loading process's own install directory; flag unsigned or unverified signatures | Fallback for tenants whose Falcon module-load telemetry is absent or short-retention |
| H-N3 | DNS resolver / Protective DNS logs | Resolutions where a well-known software brand appears as the leading label of a domain the organization does not own (claude.ai.*, anthropic.com.*, docker.com.*) | The reusable half of this campaign. Cheap to run continuously |
| H-N4 | Firewall / proxy egress | Non-browser, non-developer workstation processes connecting to public BNB Smart Chain / Ethereum JSON-RPC endpoints | EtherHiding resolution traffic. Expect legitimate hits only from developer machines — baseline, then alert on the rest |
| H-N5 | Netflow / firewall | Retrospective sweep for the 21 decrypted C2 addresses across the full retention window (they date to 2025-05-30) | The operator has been active for over a year; a hit on a historical address is still a lead worth chasing |
CrowdStrike LogScale CQL Hunt Queries
Looks for: the two campaign masquerade filenames being written to disk or executed. Accomplishes: catches the user-execution stage at the moment the victim runs the fake installer, with the browser parent still visible. FP: low — Docker ships its installer as "Docker Desktop Installer.exe" and its runtime as Docker Desktop.exe (with a space) under Program Files, so a bare DockerDesktop.exe in a user path is anomalous on both counts.
// HUNT: FakeAgent fake-installer masquerade filenames (T1204.002 / T1036.005) // MITRE: T1204.002, T1036.005 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2, PeFileWritten // FALSE POSITIVES: a repackaged internal deployment of Docker Desktop that renames the binary // LOOKBACK: 14d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten/ | (FileName=/^(ClaudeDesktop|DockerDesktop)\.exe$/i or TargetFileName=/\\(ClaudeDesktop|DockerDesktop)\.exe$/i) | table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, TargetFileName, ParentBaseFileName, SHA256HashData, CommandLine], limit=200) | sort(@timestamp, order=desc)
Looks for: the known-benign JetBrains jcef_helper.exe component executing under any filename except its own. Accomplishes: this is the masquerade itself, expressed as a rule rather than an IOC — it fires no matter what the attacker renames the vessel to next, which is why it is the highest-value query in the pack. FP: low. Never add this hash to a block list — it is a legitimate signed component; the signal is the name mismatch, not the file.
// HUNT: benign CEF host binary executing under a masquerade filename (T1036.005 / T1574.002) // MITRE: T1036.005, T1574.002 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 with SHA256HashData populated // NOTE: f8acb8f5... is the BENIGN JetBrains jcef_helper.exe component. Do NOT block it. // FALSE POSITIVES: an internally repackaged JetBrains IDE that renames the CEF helper // LOOKBACK: 30d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | SHA256HashData="f8acb8f5cf88b77a4c27d7fd6856aa299bb178e85f9963c2fbd447d818da3ed0" | FileName!=/^jcef_helper\.exe$/i | table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, ParentBaseFileName, GrandparentBaseFileName, CommandLine], limit=200) | sort(@timestamp, order=desc)
Looks for: the VMProtect-packed libcef.dll by hash, or any libcef.dll written into or loaded from a Downloads / Temp / AppData path. Accomplishes: catches the first-stage side-load payload. FP: medium — per-user Electron and CEF applications legitimately install under \AppData\Local\Programs\, so the path arm needs one baselining pass before it is alertable; the hash arm is clean immediately.
// HUNT: FakeAgent first-stage libcef.dll side-load payload (T1574.002 / T1027.002) // MITRE: T1574.002, T1027.002 // CONF: high FP: medium COST: low | REQUIRES: PeFileWritten, module-load hash telemetry // TUNING: baseline then exclude your approved per-user CEF/Electron installs by directory // (e.g. \AppData\Local\Programs\<approved-vendor>\); the hash arm needs no tuning. // ⚠ validate in tenant: module-load coverage ships as ImageHash in most tenants — // confirm your repo emits it, else fall back to Sysmon EventID 7 (see native hunts). // LOOKBACK: 30d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/PeFileWritten|NewExecutableWritten|ImageHash/ | (SHA256HashData="26bae4d7012bf59847ab4036a065419c3d4ca47e020479f55b3b2c6d0d21394a" or ((TargetFileName=/\\libcef\.dll$/i or ImageFileName=/\\libcef\.dll$/i) and (TargetFileName=/\\Users\\[^\\]+\\(Downloads|AppData)\\/i or ImageFileName=/\\Users\\[^\\]+\\(Downloads|AppData)\\/i or TargetFileName=/\\Windows\\Temp\\/i or ImageFileName=/\\Windows\\Temp\\/i))) | table([@timestamp, aid, ComputerName, UserName, TargetFileName, ImageFileName, SHA256HashData, ContextBaseFileName], limit=200) | sort(@timestamp, order=desc)
Looks for: the persistence stage — a signed IBM SPSS sslconf.exe, its paired tempdir.dll, or the encrypted appcfg.dat payload, anywhere under a per-user Microsoft\EdgeUpdate\Install\ directory. Accomplishes: the strongest single signal in the pack — a statistics-package binary inside an Edge-updater directory has no benign explanation. FP: medium, driven entirely by the bare sslconf filename arm firing on genuine IBM SPSS estates; the path arm on its own is effectively FP-free.
// HUNT: FakeAgent second-stage staging dir + sideload pair (T1574.002 / T1036.005 / T1547) // MITRE: T1574.002, T1036.005, T1547, T1027.013 // CONF: high FP: medium COST: low | REQUIRES: ProcessRollup2, PeFileWritten // TUNING: if your estate genuinely deploys IBM SPSS, exclude the vendor install root // (\Program Files\IBM\SPSS\) and keep only the EdgeUpdate\Install path arm. // Genuine Edge updater content lives under \Program Files (x86)\Microsoft\EdgeUpdate\. // LOOKBACK: 30d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten/ | (ImageFileName=/\\Microsoft\\EdgeUpdate\\Install\\/i or TargetFileName=/\\Microsoft\\EdgeUpdate\\Install\\/i or FileName=/^sslconf(\.exe)?$/i or TargetFileName=/\\(tempdir\.dll|appcfg\.dat|cache\.dat)$/i) | table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, TargetFileName, SHA256HashData, ParentBaseFileName, CommandLine], limit=200) | sort(@timestamp, order=desc)
Looks for: Run-key values, scheduled-task actions, or schtasks command lines that reference the staging directory or any of the campaign's masquerade binaries. Accomplishes: catches the reinfection loop that made this campaign persistent across 29 estates. FP: medium — genuine Microsoft Edge updater persistence also contains the string "EdgeUpdate", so the Install subdirectory and the per-user location are what separate malicious from benign.
// HUNT: FakeAgent persistence into the per-user EdgeUpdate staging dir (T1547.001 / T1053.005) // MITRE: T1547.001, T1053.005 // CONF: high FP: medium COST: low | REQUIRES: AsepValueUpdate, ScheduledTaskRegistered, ProcessRollup2 // TUNING: exclude genuine Edge updater persistence under \Program Files (x86)\Microsoft\EdgeUpdate\; // only a per-user \AppData\Roaming\Microsoft\EdgeUpdate\Install\ target is anomalous. // LOOKBACK: 30d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/AsepValueUpdate|RegGenericValueUpdate|ScheduledTaskRegistered|ProcessRollup2|SyntheticProcessRollup2/ | (RegStringValue=/EdgeUpdate\\Install|ClaudeDesktop\.exe|DockerDesktop\.exe|sslconf\.exe/i or TaskExecutable=/EdgeUpdate\\Install|ClaudeDesktop\.exe|DockerDesktop\.exe|sslconf\.exe/i or CommandLine=/schtasks.{0,80}(EdgeUpdate\\Install|ClaudeDesktop|DockerDesktop|sslconf)/i) | table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue, TaskName, TaskExecutable, CommandLine], limit=200) | sort(@timestamp, order=desc)
Looks for: any outbound connection to the 21 C2 addresses Huntress decrypted from the BNB Smart Chain contract transaction history (2025-05-30 through 2026-06-12). Accomplishes: a retrospective sweep that reaches well beyond this campaign — a hit on a 2025 address still indicates the same operator touched the host. FP: low, but note the historical addresses are over a year old and shared hosting reuse is plausible, so treat a hit on anything other than 2.24.131[.]246 as a lead to confirm rather than a confirmed compromise.
// HUNT: FakeAgent / SectopRAT C2 egress, full decrypted address set (T1071.001) // MITRE: T1071.001, T1102 // CONF: high FP: low COST: medium | REQUIRES: NetworkConnectIP4 // 2.24.131.246 is the CURRENT C2 (since 2026-06-12); the rest are historical (2025-05-30 onward). // LOOKBACK: 90d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/NetworkConnectIP4/ | in(RemoteAddressIP4, values=["2.24.131.246", "107.189.24.67", "104.194.133.210", "107.189.26.86", "107.189.21.86", "45.59.124.17", "45.59.125.228", "45.59.122.82", "107.189.17.143", "45.59.122.134", "45.59.122.235", "107.189.22.118", "107.189.20.32", "107.189.20.95", "107.189.24.255", "45.59.117.145", "45.59.114.190", "45.59.123.122", "45.59.117.67", "195.110.58.222", "191.101.80.211"]) | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, LocalAddressIP4, RemoteAddressIP4, RemotePort], limit=max) | sort(@timestamp, order=desc)
Looks for: two things at once — the campaign's known delivery and backup domains (high confidence), and the reusable pattern behind claude.ai.download-app[.]us: a trusted software brand planted as the leading label of a registrable domain the brand does not own. Accomplishes: turns a one-off IOC into a standing control that catches the next campaign. FP: high on the generic arm — legitimate CDN and SaaS vanity chains do exactly this, so allowlist first and split the arms into two saved searches if you intend to alert.
// HUNT: FakeAgent delivery/backup domains + brand-as-leading-label lookalikes (T1583.001 / T1566.002) // MITRE: T1583.001, T1566.002, T1071.001 // CONF: medium FP: high COST: medium | REQUIRES: DnsRequest // TUNING: the second arm fires on legitimate CDN/vanity chains that embed a brand label. // Allowlist your own CDN and SaaS vanity domains, then keep only unknown registrables. // Split the two arms into separate saved searches before promoting either to alerting. // LOOKBACK: 30d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/DnsRequest|SuspiciousDnsRequest/ | DomainName=/^((.*\.)?(download-app\.us|downloading-api\.it\.com|5ca8758c-02d0-4a72-89c8-d468b66dda41\.com)|(claude\.ai|anthropic\.com|docker\.com|slack\.com|zoom\.us)\.[a-z0-9-]{2,40}\.[a-z]{2,12})$/i | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, DomainName], limit=200) | sort(@timestamp, order=desc)
Looks for: the three malicious hashes anywhere they can surface — as a running process, as a loaded module, or as a written file. Accomplishes: the fastest confirm/deny for "were we hit". FP: low (exact-hash matching). Deliberately excludes the two benign-but-abused component hashes, which belong in Q2 and Q4 as hunts, never as detections.
// HUNT: FakeAgent malicious hash sweep (T1204.002 / T1574.002) // MITRE: T1204.002, T1574.002 // CONF: high FP: low COST: medium | REQUIRES: ProcessRollup2, PeFileWritten, module-load hashes // ⚠ validate in tenant: the ImageHash arm depends on module-load telemetry being enabled. // Malicious only: libcef.dll, tempdir.dll, embedded SectopRAT .NET payload. // LOOKBACK: 90d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten|ImageHash/ | in(SHA256HashData, values=["26bae4d7012bf59847ab4036a065419c3d4ca47e020479f55b3b2c6d0d21394a", "1cd58cfba596da296ab1878d74023e00c399345a1b6c2a0e5446c53563f4e3bb", "1fe3646d27d286db8123297e06ae7badf3e26f352a04f91b6d82c28869a91664"]) | table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, TargetFileName, SHA256HashData, ParentBaseFileName], limit=200) | sort(@timestamp, order=desc)
Looks for: outbound connections whose initiating process is one of the campaign's masquerade vessels, grouped by destination so a beacon pattern stands out. Accomplishes: catches the SectopRAT stage even after the C2 has rotated via EtherHiding, because the vessel name is stable while the address is not. FP: medium — a genuine JetBrains CEF helper talks to the internet routinely, so jcef_helper.exe needs baselining; ClaudeDesktop.exe, DockerDesktop.exe and sslconf.exe making network connections are anomalous on their own.
// HUNT: sideload vessel beaconing — survives EtherHiding C2 rotation (T1071.001 / T1055) // MITRE: T1071.001, T1102, T1555.003 // CONF: medium FP: medium COST: medium | REQUIRES: NetworkConnectIP4 // TUNING: exclude jcef_helper.exe destinations belonging to your approved JetBrains estate // (IDE telemetry/licensing endpoints); keep every ClaudeDesktop/DockerDesktop/sslconf row. // LOOKBACK: 30d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/NetworkConnectIP4/ | ContextBaseFileName=/^(ClaudeDesktop|DockerDesktop|sslconf|jcef_helper)\.exe$/i | groupBy([aid, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], function=count(as=Hits), limit=2000) | sort(Hits, order=desc, limit=200)
Looks for: the generic version of this actor's tradecraft — any of the classic CEF sideload payload DLLs appearing in a Downloads / AppData / Windows\Temp path. Accomplishes: covers the April 2026 fake Docker Desktop precursor and whatever the operator renames the vessel to next, since the payload DLL name is the one thing the CEF loader cannot change. FP: high — this is a baselining hunt, not a detection. Run it once, allowlist your approved per-user Electron/CEF apps, then re-run weekly for new publishers only.
// HUNT: broad — CEF/Chromium sideload payload DLLs in user-writable dirs (T1574.002) // MITRE: T1574.002 // CONF: medium FP: high COST: medium | REQUIRES: PeFileWritten, module-load hash telemetry // TUNING: baseline-first query. Allowlist the per-user Electron/CEF apps your estate ships // by directory, then alert only on directories seen for the first time. // ⚠ validate in tenant: the ImageHash arm depends on module-load telemetry being enabled. // LOOKBACK: 30d. Set the search window in Falcon; no in-query time filter (an expression on the right of a comparison is not valid in CQL filter context). #event_simpleName=/PeFileWritten|NewExecutableWritten|ImageHash/ | (TargetFileName=/\\(libcef|tempdir|chrome_elf)\.dll$/i or ImageFileName=/\\(libcef|tempdir|chrome_elf)\.dll$/i) | (TargetFileName=/\\Users\\[^\\]+\\(Downloads|AppData)\\/i or ImageFileName=/\\Users\\[^\\]+\\(Downloads|AppData)\\/i or TargetFileName=/\\Windows\\Temp\\/i or ImageFileName=/\\Windows\\Temp\\/i) | groupBy([TargetDirectoryName, ContextBaseFileName, SHA256HashData], function=count(as=Hits), limit=2000) | sort(Hits, order=desc, limit=300)
CrowdStrike Custom IOA Recommendations
Three queries in §8 are strong enough to promote to Custom IOAs. The rest stay Investigate-only hunts.
| IOA | From | Rule type | Pattern | Exclusions | Severity |
|---|---|---|---|---|---|
| DETECT — Masqueraded CEF host (FakeAgent) | Q2 | Process Creation | Image SHA-256 equals the benign JetBrains CEF helper while the image filename is not jcef_helper.exe | Approved internally repackaged JetBrains IDE install roots, if any exist after baselining | Critical |
| DETECT — SPSS binary in EdgeUpdate staging path | Q4 | Process Creation + File Creation | Image path regex \\Microsoft\\EdgeUpdate\\Install\\ under a per-user profile, any image name | \Program Files (x86)\Microsoft\EdgeUpdate\ (genuine updater); \Program Files\IBM\SPSS\ | Critical |
| DETECT — Fake AI/dev-tool installer execution | Q1 | Process Creation | Image filename ClaudeDesktop.exe or DockerDesktop.exe with a grandparent/parent in the browser or archive-tool family | Enterprise software-deployment agents as parent | High |
| Investigate-only | Q3, Q5, Q6, Q7, Q8, Q9, Q10 | Scheduled Search | Run Q5/Q6/Q8 daily and Q3 weekly; Q7 and Q10 are baselining hunts that should stay out of the alert queue until their allowlists exist | — | Medium |
Alert package — DETECT: Masqueraded CEF host (FakeAgent)
Subject: [CRITICAL] Detection: FakeAgent — signed CEF host running under a masquerade filename
Body: A binary whose SHA-256 matches the legitimate JetBrains jcef_helper.exe Chromium Embedded Framework component executed under a different filename on <host>. In the FakeAgent campaign this exact component was shipped as ClaudeDesktop.exe and DockerDesktop.exe and used purely as a vessel to side-load a malicious libcef.dll, ending in SectopRAT. The binary itself is benign and signed — the renaming is the attack. Treat as a live intrusion until the co-located DLL is proven clean.
L1 triage checklist
- Record the full image path and the parent/grandparent process. A browser or archive-tool parent means user-initiated download and execution.
- List every file in the same directory and hash the
libcef.dllbeside it. Compare against26bae4d7…and against the vendor's published CEF hashes. - Check for
%APPDATA%\Roaming\Microsoft\EdgeUpdate\Install\on the host — presence ofsslconf.exe,tempdir.dllorappcfg.datconfirms the second stage landed (run Q4 host-scoped). - Enumerate scheduled tasks and Run keys referencing that directory or the masquerade filenames (Q5 host-scoped).
- Pull the host's outbound connections for the surrounding 72 hours and check against the §10 address set (Q6 host-scoped).
- Check the Defender operational log for exclusion additions (native hunt H-W2) — exclusions were observed alongside these installs.
- If any of steps 2—6 confirm, network-contain the host and move to the §14 runbook. Assume every credential in every browser profile on that host is compromised.
- Preserve
appcfg.datand both DLLs before remediation — the payload is GPU-decrypted and cannot be recovered from memory after the fact.
Pivot queries
- Host-scoped: add
| aid = "REPLACE_WITH_AID"as the second line of Q4, Q5 and Q6. - Environment-wide: run Q8 across the full retention window to find other hosts that touched the same payloads.
- Upstream: proxy hunt H-S1 for the artifact path, scoped to the victim's user, to confirm the delivery vector and identify anyone else who visited it.
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags sha256,26bae4d7012bf59847ab4036a065419c3d4ca47e020479f55b3b2c6d0d21394a,prevent,critical,2027-01-24,FakeAgent malicious libcef.dll VMProtect sideload payload,campaign:FakeAgent sha256,1cd58cfba596da296ab1878d74023e00c399345a1b6c2a0e5446c53563f4e3bb,prevent,critical,2027-01-24,FakeAgent malicious tempdir.dll GPU anti-VM loader,campaign:FakeAgent sha256,1fe3646d27d286db8123297e06ae7badf3e26f352a04f91b6d82c28869a91664,prevent,critical,2027-01-24,SectopRAT embedded .NET payload,campaign:FakeAgent ipv4,2.24.131.246,detect,critical,2027-01-24,SectopRAT C2 current since 2026-06-12,campaign:FakeAgent domain,download-app.us,detect,high,2027-01-24,FakeAgent redirect domain registrable parent,campaign:FakeAgent domain,claude.ai.download-app.us,detect,high,2027-01-24,FakeAgent first redirect hop brand-prefix lookalike,campaign:FakeAgent domain,downloading-api.it.com,detect,high,2027-01-24,FakeAgent installer delivery host,campaign:FakeAgent domain,5ca8758c-02d0-4a72-89c8-d468b66dda41.com,detect,high,2027-01-24,SectopRAT backup C2 domain,campaign:FakeAgent ipv4,107.189.24.67,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,104.194.133.210,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,107.189.26.86,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,107.189.21.86,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.124.17,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.125.228,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.122.82,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,107.189.17.143,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.122.134,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.122.235,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,107.189.22.118,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,107.189.20.32,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,107.189.20.95,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,107.189.24.255,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.117.145,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.114.190,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.123.122,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,45.59.117.67,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,195.110.58.222,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent ipv4,191.101.80.211,detect,medium,2026-10-24,SectopRAT historical C2 from BSC contract,campaign:FakeAgent # Malicious ClaudeDesktop.exe binary hash was not published as a distinct value: # sha256,REPLACE_WITH_CLAUDEDESKTOP_SHA256,prevent,critical,2027-01-24,FakeAgent fake installer,campaign:FakeAgent
# DO NOT add these to a prevent/block list. Both are legitimate, signed # vendor components. In FakeAgent they were used as side-loading vessels. # The correct control is a HUNT on name/path mismatch (see Q2 and Q4). f8acb8f5cf88b77a4c27d7fd6856aa299bb178e85f9963c2fbd447d818da3ed0 JetBrains jcef_helper.exe (Chromium Embedded Framework host) Shipped by the actor as ClaudeDesktop.exe AND DockerDesktop.exe (identical files) HUNT RULE: this hash executing under any filename other than jcef_helper.exe fd826215add30c1319eefa291b6eaf8ddfa7720cfe816c49aef6fe8a88de7939 IBM SPSS sslconf.exe (signed statistics-platform binary) Planted at %APPDATA%\Roaming\Microsoft\EdgeUpdate\Install\sslconf.exe HUNT RULE: this binary anywhere under a per-user EdgeUpdate\Install path
# FakeAgent — behavioral signatures (no atomic dependency)
B1 Signed JetBrains CEF helper component executing under a filename
that is not jcef_helper.exe -> Q2 [strongest]
B2 Any binary executing from, or written into, a per-user
...\AppData\Roaming\Microsoft\EdgeUpdate\Install\ path -> Q4
B3 libcef.dll or tempdir.dll written into Downloads, AppData
or Windows\Temp beside a non-CEF-named executable -> Q3, Q10
B4 Run key or scheduled task whose target resolves under a
per-user EdgeUpdate directory -> Q5
B5 DNS name where a trusted software brand is the LEADING label
of a registrable domain the brand does not own -> Q7
B6 ClaudeDesktop.exe / DockerDesktop.exe / sslconf.exe holding
outbound network connections -> Q9
B7 appcfg.dat or cache.dat written next to a sideload host -> Q4
B8 Defender exclusion added covering a user-writable path -> native H-W2
B9 Workstation (non-developer) egress to a public BNB Smart
Chain / Ethereum JSON-RPC endpoint -> native H-N4
B10 Executable download whose referer chain starts at a search
engine and whose host is under 90 days old -> native H-S2
# Campaign FakeAgent (Huntress, 2026-07-22) # Payload SectopRAT, aka ArechClient2 (.NET, active since 2019, HVNC) # Loader chain renamed JetBrains jcef_helper CEF host -> libcef.dll (VMProtect) # -> IBM SPSS sslconf.exe -> tempdir.dll -> appcfg.dat -> .NET RAT # Scope 29 organizations, 2026-07-21 to 2026-07-22 # Lure Bing sponsored ad for "CLAUDE DESKTOP APP" # Lure page claude.ai/public/artifacts/ca456f1f-44c0-42af-b329-4f1c7534a877 # (public Claude Artifact, 7,100 views, removed by Anthropic) # EtherHiding contracts (BNB Smart Chain) - enrichment, not blockable: # 0xe012d0f34cde9b870e9d9ed566ea5f8fd9b92228 SectopRAT C2 resolver # 0xc1907d7be91f95903ad66d775c397302e7dd9228 libcef.dll stager resolver # Actor overlap # polse.us seized by Microsoft (Operation Endgame), hosted StealC # April 2026 fake Docker Desktop via Docker Hub, same libcef.dll chain # 10 domains share one registrant email, indexed since Dec 2025 # Anti-analysis VMProtect; DXGI vendor-ID gate (0x1234 QEMU, 0x15AD VMware); # VRAM under 1GB bail-out; compute-shader timing check; # AES-256-CTR via DirectX SM5 shader with modified MixColumns # LAB NOTE will NOT detonate in a standard VM - use bare metal or GPU passthrough
# FakeAgent — control audit (tick each; see section 12 for the how)
[ ] ASR "Block executable files from running unless they meet a prevalence,
age, or trusted list criterion" = Block (01443614-cd74-433a-b99e-2ecdc07bfc25)
[ ] ASR "Block JavaScript or VBScript from launching downloaded executable
content" = Block (d3e037e1-3eb8-44c8-a917-57927947596d)
[ ] Defender Tamper Protection = On, and exclusion changes are alerted on
[ ] SmartScreen for Edge = Enabled, PUA protection = Block
[ ] AppLocker/WDAC deny rule for %USERPROFILE%\Downloads and %APPDATA%
[ ] Browser password manager disabled by policy (all managed browsers)
[ ] Protective DNS: newly-registered-domain category blocked
[ ] Protective DNS: brand-as-leading-label rule deployed
[ ] Managed software portal published so users never search for installers
[ ] Falcon module-load telemetry confirmed present (or Sysmon 7 deployed)
[ ] Proxy full-URL (path) logging enabled for SaaS/AI domains
[ ] Phishing-resistant MFA enforced so stolen browser cookies are low-value
Detection Validation Gates
| Gate | Check | Pass criterion |
|---|---|---|
| 1 · Telemetry ready | Confirm each event type the pack relies on is present in your repo: ProcessRollup2, PeFileWritten, NewExecutableWritten, AsepValueUpdate, ScheduledTaskRegistered, NetworkConnectIP4, DnsRequest, and module-load hashes (ImageHash) | Every event type returns rows over a 24-hour window. If module-load is absent, Q3/Q8/Q10 lose their DLL-load arm — deploy Sysmon EventID 7 (H-W5) before claiming coverage |
| 2 · Field population | SHA256HashData is populated on ProcessRollup2; TaskExecutable / TaskName are populated on ScheduledTaskRegistered | Q2 is meaningless without process hashes. Q5 degrades to its schtasks command-line arm if task fields are empty — verify before trusting a null result |
| 3 · Benign baseline | Run Q3, Q7, Q9 and Q10 over 30 days with no exclusions and record what fires | You have a written allowlist of your per-user CEF/Electron install roots, your CDN/vanity DNS chains, and your JetBrains egress destinations. Until that list exists, none of these four should be alerting |
| 4 · Positive test | On an isolated bare-metal test host, copy a legitimate signed CEF helper to a Downloads path under the name ClaudeDesktop.exe and run it; separately, place a benign signed binary under %APPDATA%\Roaming\Microsoft\EdgeUpdate\Install\ and run it | Q1, Q2 and Q4 all fire within the expected latency. Do not attempt to detonate the real sample in a VM — the DXGI gate will suppress execution and you will get a false all-clear |
| 5 · Provenance | Every atomic indicator in §10 traces to the saved source snapshots | All 31 atomic indicators traced to FakeAgent-ClaudeArtifact-SectopRAT-Hunt-sources/ by check_ioc_provenance.py (exit 0, 2026-07-24). The malicious ClaudeDesktop.exe hash was never published and ships as a labelled REPLACE_WITH_ placeholder, not as an invented value |
| 6 · Promotion | Promote to alerting only after gates 1—4 pass | Q1, Q2, Q4 → Custom IOA. Q5, Q6, Q8 → daily scheduled search. Q3 → weekly. Q7, Q9, Q10 → stay Investigate-only until their allowlists exist |
Hardening — Tiered
1. Block the atomic infrastructure and quarantine the payload hashes
Import the §10 CSV into Falcon IOC Management; block the four domains at Protective DNS and the secure web gateway. Do not block claude.ai — block the artifact path if your gateway supports URL-path policy, otherwise rely on Q7 plus the H-S1 proxy hunt. MITRE M1031 (Network Intrusion Prevention), M1037 (Filter Network Traffic).
2. Turn on Defender Tamper Protection and alert on every exclusion change
Exclusions were observed being added across the affected estates. Tamper Protection blocks the common path; an alert on Defender EventID 5007 covers the rest. An exclusion covering %APPDATA%, Downloads or an EdgeUpdate directory should page someone. M1018 (User Account Management), M1054 (Software Configuration); Microsoft Security Baseline for Windows — Defender Antivirus.
3. Enable the two ASR rules that break this exact chain
01443614-cd74-433a-b99e-2ecdc07bfc25 (block executables that lack prevalence/age/trust) stops a freshly-compiled fake installer cold, and d3e037e1-3eb8-44c8-a917-57927947596d (block scripts from launching downloaded executable content) covers the scripted-redirect variant. Deploy in Audit for 72 hours, then Block. M1038 (Execution Prevention); CIS Microsoft Windows Benchmark — Attack Surface Reduction.
4. Enforce SmartScreen and PUA blocking in managed browsers
Edge SmartScreen with the bypass prompt disabled would have interrupted the download hop even though the referring page sat on a trusted domain. M1021 (Restrict Web-Based Content); Microsoft Edge Security Baseline.
5. Deny execution from user-writable directories (AppLocker or WDAC in audit → enforce)
Every stage of this chain runs from Downloads or %APPDATA%. A publisher-based allowlist with a deny rule over those paths removes the entire class, not just this campaign. Pilot on a single ring; expect to carve exceptions for legitimately per-user-installed apps (Teams, Slack, Zoom, several IDEs) — that exception list is the baseline Q3 and Q10 need anyway. M1038 (Execution Prevention); CIS Windows Benchmark, Microsoft WDAC guidance.
6. Protective DNS: block newly-registered domains and brand-prefix lookalikes
The redirect domain was registered 2026-05-09 and used in July. An NRD category block plus a rule for "trusted brand as leading label on a domain we do not own" (the Q7 pattern, pushed left to the resolver) closes the delivery hop without depending on any specific IOC. M1037 (Filter Network Traffic); NIST SP 800-81 / CISA Protective DNS guidance.
7. Publish a managed software portal and tell people to use it
This campaign works only because employees search the web for installers. An internal catalogue for AI and developer tooling — with the genuine Claude, Docker and IDE packages in it — removes the reason to search at all. Pair it with a short awareness note naming this specific lure. M1017 (User Training), M1051 (Update Software); best-practice, no formal benchmark.
8. Disable browser password managers by policy; restrict workstation egress to blockchain RPC
SectopRAT's payday is the browser credential store — emptying it removes the payload's value. Separately, block public BNB Smart Chain / Ethereum JSON-RPC endpoints from non-developer workstations at the proxy; EtherHiding cannot resolve a C2 the host cannot reach. M1027 (Password Policies), M1037 (Filter Network Traffic); CIS Benchmarks for Google Chrome and Microsoft Edge.
9. Signed WDAC policy in enforcement across the managed fleet
The end state for tier 5. A signed policy that only permits binaries from approved publishers ends DLL side-loading as a delivery technique, because the vessel and the payload both have to be signed by someone you trust. M1038 (Execution Prevention); Microsoft WDAC design guide, DISA Windows STIG.
10. Phishing-resistant MFA plus short session lifetimes everywhere
HVNC and cookie theft both target the session, not the password. FIDO2/WebAuthn with conditional-access session controls means a stolen cookie jar buys the operator very little. M1032 (Multi-factor Authentication); CISA phishing-resistant MFA guidance, NIST SP 800-63B.
11. Guarantee module-load telemetry and full-URL proxy logging as standing requirements
Two of this pack's gaps are telemetry gaps, not detection gaps. Make module-load events and path-level proxy logging non-negotiable line items in the logging standard, with retention long enough to answer "when did that DLL first load here". M1047 (Audit); best-practice, no formal benchmark.
Deployable Playbooks
P1 — Sweep a host for the FakeAgent second stage (read-only)
# Run as the signed-in user or as SYSTEM. Read-only: reports, changes nothing.
$stage = Join-Path $env:APPDATA 'Microsoft\EdgeUpdate\Install'
if (Test-Path $stage) {
Write-Warning "FakeAgent staging directory present: $stage"
Get-ChildItem -Path $stage -Recurse -Force -ErrorAction SilentlyContinue |
ForEach-Object {
[pscustomobject]@{
Path = $_.FullName
Bytes = $_.Length
LastWrite = $_.LastWriteTimeUtc
SHA256 = (Get-FileHash -Algorithm SHA256 -Path $_.FullName -ErrorAction SilentlyContinue).Hash
}
} | Format-Table -AutoSize
} else {
Write-Host "No per-user EdgeUpdate\Install directory found."
}
# Campaign filenames anywhere under the user profile
$names = 'ClaudeDesktop.exe','DockerDesktop.exe','sslconf.exe','tempdir.dll','appcfg.dat','cache.dat'
Get-ChildItem -Path $env:USERPROFILE -Recurse -Force -Include $names -ErrorAction SilentlyContinue |
Select-Object FullName, Length, LastWriteTimeUtc
ⓘ Run this from a management tool that captures structured output (NinjaOne, Intune script, Falcon RTR) rather than reading it off a console — you want the hashes back as data so they can be checked against §10 in bulk.
P2 — Audit persistence pointing at the staging directory (read-only)
# Scheduled tasks whose action resolves into a per-user EdgeUpdate path
Get-ScheduledTask | ForEach-Object {
$t = $_
$t.Actions | Where-Object { $_.Execute -match 'EdgeUpdate.Install|ClaudeDesktop|DockerDesktop|sslconf' } |
ForEach-Object {
[pscustomobject]@{
TaskPath = $t.TaskPath; TaskName = $t.TaskName
Execute = $_.Execute; Arguments = $_.Arguments
}
}
} | Format-List
# Run keys, both hives
$keys = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run',
'HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce',
'HKLM:\Software\Microsoft\Windows\CurrentVersion\Run',
'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce'
foreach ($k in $keys) {
if (Test-Path $k) {
(Get-ItemProperty -Path $k).PSObject.Properties |
Where-Object { $_.Value -match 'EdgeUpdate.Install|ClaudeDesktop|DockerDesktop|sslconf' } |
Select-Object @{n='Key';e={$k}}, Name, Value
}
}
P3 — Enable the two ASR rules (Audit first, then Block)
# Step 1 — Audit for 72 hours and review Defender EventID 1121/1122 before enforcing. $rules = @( '01443614-cd74-433a-b99e-2ecdc07bfc25', # Block low-prevalence / untrusted executables 'd3e037e1-3eb8-44c8-a917-57927947596d' # Block JS/VBS launching downloaded executables ) Add-MpPreference -AttackSurfaceReductionRules_Ids $rules -AttackSurfaceReductionRules_Actions AuditMode # Step 2 — after review, switch to Block # Add-MpPreference -AttackSurfaceReductionRules_Ids $rules -AttackSurfaceReductionRules_Actions Enabled # Verify what is actually applied Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Actions
P4 — Tamper Protection and exclusion audit
# Report current exclusions — anything covering a user-writable path is suspect
$p = Get-MpPreference
[pscustomobject]@{
TamperProtection = (Get-MpComputerStatus).IsTamperProtected
ExclusionPath = ($p.ExclusionPath -join '; ')
ExclusionProcess = ($p.ExclusionProcess -join '; ')
ExclusionExtension = ($p.ExclusionExtension -join '; ')
} | Format-List
# Tamper Protection is set via Intune / Defender portal policy, not locally.
# Alert on Defender operational log EventID 5007 (settings change) centrally:
# Log: Microsoft-Windows-Windows Defender/Operational EventID: 5007
P5 — AppLocker deny rule for user-writable execution (audit mode)
<!-- Deploy via GPO: Computer Config / Windows Settings / Security Settings /
Application Control Policies / AppLocker. Start in Audit, review, then Enforce. -->
<RuleCollection Type="Exe" EnforcementMode="AuditOnly">
<FilePathRule Id="a1b2c3d4-0001-4000-8000-fakeagent0001"
Name="DENY exe from user Downloads"
Description="FakeAgent: fake installers execute from the browser download path"
UserOrGroupSid="S-1-1-0" Action="Deny">
<Conditions><FilePathCondition Path="%OSDRIVE%\Users\*\Downloads\*"/></Conditions>
</FilePathRule>
<FilePathRule Id="a1b2c3d4-0002-4000-8000-fakeagent0002"
Name="DENY exe from per-user EdgeUpdate staging"
Description="FakeAgent: sslconf.exe staged in AppData EdgeUpdate\Install"
UserOrGroupSid="S-1-1-0" Action="Deny">
<Conditions><FilePathCondition Path="%OSDRIVE%\Users\*\AppData\Roaming\Microsoft\EdgeUpdate\*"/></Conditions>
</FilePathRule>
</RuleCollection>
<!-- DLL rules matter here too: the payload is a DLL, not an EXE.
Enable the AppLocker DLL rule collection in Audit before enforcing. -->
P6 — Disable the browser password manager by policy
# Removes the payload's primary target. Apply via GPO/Intune, not per-machine. # Microsoft Edge reg add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v PasswordManagerEnabled /t REG_DWORD /d 0 /f # Google Chrome reg add "HKLM\SOFTWARE\Policies\Google\Chrome" /v PasswordManagerEnabled /t REG_DWORD /d 0 /f # SmartScreen, with the user bypass removed reg add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v SmartScreenEnabled /t REG_DWORD /d 1 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v PreventSmartScreenPromptOverride /t REG_DWORD /d 1 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v SmartScreenPuaEnabled /t REG_DWORD /d 1 /f
Containment Runbook
| Phase | Actions | Owner | Evidence to capture |
|---|---|---|---|
| 0 · Confirm | Run Q2, Q4 and Q5 host-scoped. Hash the DLLs beside the suspect executable. A hit on the benign-CEF-hash-under-another-name rule plus anything under EdgeUpdate\Install is a confirmed intrusion, not a maybe | SOC L2 | Full process tree, directory listing with hashes, Falcon detection IDs |
| 1 · Isolate | Network-contain the host in Falcon. Do not power it off — the .NET payload lives in the host process and memory is worth more than a clean shutdown | SOC L2 | Containment timestamp; memory image if your process supports it |
| 2 · Preserve | Collect appcfg.dat, cache.dat, both DLLs and the sideload hosts before touching anything. The payload is GPU-decrypted at runtime and cannot be reconstructed after remediation | DFIR | Hashed evidence bundle with chain of custody |
| 3 · Scope | Run Q1, Q4, Q6 and Q8 fleet-wide over full retention. Run the H-S1 proxy hunt to find every user who reached the artifact page — visitors who downloaded but did not execute still need checking | Threat hunt | Affected-host list; proxy sessions touching the artifact path |
| 4 · Eradicate | Delete the staging directory and every campaign artifact; remove the scheduled task and Run-key entries; remove any Defender exclusion the actor added; confirm no second persistence path remains (re-run Q5 and P2) | Endpoint ops | Before/after persistence inventory |
| 5 · Credential response | Treat every credential in every browser profile on the host as compromised. Force password resets, revoke all active sessions and refresh tokens (cookie theft and HVNC both defeat a password reset alone), rotate any FTP and messaging-client credentials, and check for mail rules or OAuth grants added during the window | IAM + SOC | Reset and revocation log; token-revocation timestamps |
| 6 · Recover | Reimage. A host that ran an HVNC-capable RAT with hands-on-keyboard access does not get cleaned in place. Restore user data from a copy predating first execution | Endpoint ops | Reimage record; restore point justification |
| 7 · Harden & close | Apply §12 tiers 1—4 fleet-wide if not already done. Add the artifact URL and delivery domains to the gateway blocklist. Brief the affected user population on the specific lure — a sponsored ad on the real vendor domain defeats the usual "check the URL" advice, and people need to hear why | Security eng + Comms | Control-change tickets; awareness comms record |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1583.008 / T1584.006 | Malvertising via a sponsored ad to a malicious artifact on a trusted domain | — | — | GAP — endpoint-blind. Covered only by proxy hunt H-S1/H-S2, and only if full-URL logging is on |
| T1189 | Redirect chain to the fake installer | Q6, Q7 | — | Good |
| T1204.002 | User executes the fake installer | Q1 | Yes | Good |
| T1036.005 | Signed CEF host renamed; SPSS binary planted in an EdgeUpdate path | Q1, Q2, Q4 | Yes | Good — Q2 is rename-proof |
| T1574.002 | DLL side-loading (libcef.dll, tempdir.dll) | Q3, Q8, Q10 | — | Partial — file-write arm is solid; the module-load arm depends on tenant ImageHash coverage |
| T1027.002 | VMProtect packing | Q3, Q8 (by hash) | — | Partial — packing itself is not observable; only the specific packed file is |
| T1027.013 | Encrypted appcfg.dat payload | Q4 | — | Good — the artifact on disk is visible even though the decryption is not |
| T1497.001 | DXGI adapter / VRAM / shader-timing anti-VM gate | — | — | GAP — no EDR surface exposes DXGI enumeration. Mitigation is procedural: detonate on bare metal |
| T1562.001 | Defender exclusions added | — | — | Partial — native hunt H-W2 (Defender EventID 5007) carries this; no CQL equivalent in this pack |
| T1547.001 / T1053.005 | Run key and scheduled-task persistence into the staging directory | Q5 | — | Good |
| T1102 | EtherHiding — C2 resolved from BNB Smart Chain contracts | — | — | Partial — native hunt H-N4 (workstation egress to blockchain RPC) plus the tier-2 egress control. The contract read itself is indistinguishable from any HTTPS request |
| T1071.001 / T1105 | SectopRAT C2 and payload staging | Q6, Q7, Q9 | — | Good — Q9 survives C2 rotation because it keys on the vessel, not the address |
| T1555.003 / T1185 | Browser credential theft and HVNC | Q9 | — | Partial — Falcon emits no generic file-read event. Sysmon EventID 11 + audit ACLs (H-W4) close it |
Validation gates: the six gates in §11 must pass before any of these queries alert. In short: confirm module-load telemetry exists (or deploy Sysmon 7), confirm SHA256HashData is populated on process events, run a 30-day benign baseline for Q3/Q7/Q9/Q10 and write the allowlist down, positive-test Q1/Q2/Q4 on bare-metal hardware, and only then promote Q1/Q2/Q4 to Custom IOAs. Two gaps are structural rather than fixable by better queries: the malvertising and DXGI anti-VM stages have no endpoint telemetry at all, so they are answered by proxy logging and by lab procedure respectively.
Hunt Summary Ticket
TITLE: FakeAgent — malicious Claude Artifact malvertising delivering SectopRAT via CEF DLL side-loading
SEVERITY: Critical — active in the wild, 29 organizations compromised 2026-07-21 to 2026-07-22
SCOPE: All Windows endpoints with internet access. Highest risk: users who install their own
AI/developer tooling. Lookback 90 days (C2 set reaches back to 2025-05-30).
HYPOTHESIS: A user searched for the Claude desktop app, clicked a Bing sponsored ad pointing at a
malicious public artifact on the genuine claude.ai domain, and ran ClaudeDesktop.exe —
a renamed JetBrains jcef_helper CEF host that side-loads a tampered libcef.dll, stages
IBM SPSS sslconf.exe plus tempdir.dll under %APPDATA%\Roaming\Microsoft\EdgeUpdate\Install\,
GPU-decrypts appcfg.dat and runs SectopRAT with HVNC and browser credential theft.
QUERIES: Q1 fake installer filenames in a download path CONF high / FP low
Q2 benign CEF host hash under a non-jcef_helper name CONF high / FP low [START HERE]
Q3 tampered libcef.dll by hash or user-writable path CONF high / FP med
Q4 sslconf.exe / tempdir.dll / appcfg.dat in EdgeUpdate CONF high / FP med [START HERE]
Q5 persistence into the staging directory CONF high / FP med
Q6 egress to the 21 decrypted C2 addresses CONF high / FP low
Q7 delivery domains + brand-as-leading-label DNS CONF med / FP high
Q8 malicious SHA-256 sweep CONF high / FP low
Q9 sideload vessel beaconing (survives C2 rotation) CONF med / FP med
Q10 CEF payload DLLs in user-writable dirs (baseline) CONF med / FP high
DO FIRST: 1. Run Q2 and Q4 fleet-wide. Either firing is a confirmed intrusion — go to section 14.
2. Run Q8 and Q6 across full retention for retrospective scope.
3. Check Defender exclusion changes (native hunt H-W2) on any host that fires.
4. Proxy hunt H-S1 for claude.ai/public/artifacts/ to find everyone who saw the lure.
FINDINGS: [ ] Q2 hits: ____ [ ] Q4 hits: ____ [ ] Q6/Q8 hits: ____ [ ] proxy hits: ____
GAPS: - Malvertising / artifact-hosting stage has NO endpoint telemetry (proxy full-URL only)
- DXGI anti-VM gate is unobservable; sample will not detonate in a standard VM
- Module-load (ImageHash) coverage is tenant-dependent — verify before trusting Q3/Q8/Q10
- Browser credential-store reads are inferred, not observed (no Falcon file-read event)
- Malicious ClaudeDesktop.exe hash was never published — shipped as a REPLACE_WITH_ placeholder
ACTIONS: - Import section 10 CSV to Falcon IOC Management; block the 4 domains at DNS and proxy
- Do NOT block claude.ai; do NOT block the two benign component hashes
- Promote Q1/Q2/Q4 to Custom IOAs after validation gates 1-4 pass
- Deploy hardening tier 1 (ASR pair, Tamper Protection, SmartScreen) this week
- Publish a managed software portal so users stop searching the web for installers
OWNER: HuntPack
VERSION: v0.3 (2026-07-24)
Changelog
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.@timestamp >= (now() - N) timeframe line from every query: an expression on the right of a comparison is not valid in CQL filter context, so Falcon rejected the query at line 1 and no hunt would run. The lookback is now a // LOOKBACK comment; set the window with Falcon's time picker, which is what the rest of the library does. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Access date |
|---|---|---|---|
| 1 | Huntress — Inside FakeAgent: How a Claude Desktop Malvertising Campaign Hit 29 Organizations with SectopRAT (2026-07-22) | PRIMARY — full attack chain, all atomic IOCs (hashes, domains, current + 20 historical C2 addresses, BSC contracts, staging path), anti-analysis internals, SectopRAT attribution, actor-overlap and April 2026 Docker Hub precursor | 2026-07-24 |
| 2 | BleepingComputer — Fake Claude app promoted by Bing ads pushes SectopRAT malware | Independent corroboration of scope, timeline, artifact view count, the JetBrains CEF component and EtherHiding; SectopRAT/ArechClient2 lineage and HVNC capability | 2026-07-24 |
| 2 | Help Net Security — How attackers hosted a fake Claude download page on the claude.ai domain | Claude Artifacts mechanics (public links viewable without an account), both redirect hops, bundle contents and scheduled-task reinfection, April 2026 Docker Hub link | 2026-07-24 |
| 3 | Malpedia — win.sectop_rat | SectopRAT / ArechClient2 family lineage and prior reporting (background only) | 2026-07-24 |
| 3 | AhnLab ASEC — Distribution of SectopRAT (ArechClient2) Disguised as Notion Installer | Prior fake-installer delivery of the same family; supports the behavioral-over-atomic framing | 2026-07-24 |
| 4 | MITRE ATT&CK T1574.002 — DLL Side-Loading · T1036.005 · T1497.001 · T1102 | Technique definitions and mitigation M-numbers used in §6 and §12 | 2026-07-24 |
HuntPack v0.3 · FakeAgent — Malicious Claude Artifact → SectopRAT · Generated 2026-07-24 · Defensive use only — no offensive code. This campaign's atomic indicators are unusually perishable: EtherHiding lets the operator rotate C2 with a single blockchain transaction, and the delivery domains are disposable. The durable signal is behavioral — a signed CEF host running under a name that is not its own (Q2), a statistics-package binary inside a per-user EdgeUpdate directory (Q4), and persistence pointing at that directory (Q5). Validate field names, confirm module-load telemetry, run the 30-day baseline for Q3/Q7/Q9/Q10, and positive-test on bare-metal hardware — the sample's DXGI gate will suppress execution in a VM and hand you a false all-clear.