OfferLoader | CL-CRI-1171 — Pay-Per-Install Malware Distribution Network

Disposable Inno Setup loader delivering Insomnia RAT, ARKTunnel, and Docro Hijacker through trojanized software downloads and SEO/YouTube lures
Threat
OfferLoader / CL-CRI-1171
Severity
HIGH
Type
Pay-per-install (PPI) loader network / multi-payload dropper
Access
Public research, single primary investigation
Version
v1.0 · 2026-09-26
Author
HuntPack
Confidence
High (core facts, primary + 2 press write-ups) / all atomics capped at detect-hunt, never prevent (single investigation)
01

Executive Summary

CL-CRI-1171 is a pay-per-install (PPI) cybercrime distribution network that Unit 42 (Palo Alto Networks) has tracked for at least two years. The operator sells infection access to independent buyers, each of whom deploys their own payload through the same disposable, generic Inno Setup loader, which Unit 42 named OfferLoader after the offer_execution / offer_execution_fail / offer_exists variable names found in its C2 traffic. Victims are funneled in through two channels: SEO-poisoned search results promoting trojanized versions of legitimate utilities (WinDirStat, Bluetooth drivers), and at least 11 YouTube gaming-optimization channels with hundreds of thousands of subscribers. Unit 42 has identified more than 10,000 distinct loader samples and over 200 rotating two-word-compound C2 domains across the .xyz, .cfd, .space, and .info TLDs.

Once installed, OfferLoader beacons for an install verdict and then spawns three child processes, eld0.exe, eld1.exe, and eld2.exe, each an independent malware campaign with its own C2 and objective. The April 2026 intrusion set Unit 42 documented in depth delivered three payloads: Insomnia RAT (a dual Node.js/Python cross-platform backdoor, user-agent insomnia/2023.4.0 Windows), ARKTunnel (a previously undocumented WebSocket tunneling RAT extracted from a bitmap image via LSB steganography), and Docro Hijacker (a Chrome browser hijacker that forges valid HMAC signatures to bypass Chrome's Secure Preferences integrity check and sideload a search-hijacking extension). A separate June 2026 intrusion delivered two different payloads (GCleaner, Socks5Systemz) through the same loader, confirming the payload slots are interchangeable and not fixed to this campaign's three headline families.

Defender priority: the distinctive, low-noise signal in this pack is the eld0.exe/eld1.exe/eld2.exe child-process fan-out and the exact hashes of the documented samples (Q1, Q3). The rotating two-word-compound domain infrastructure (>200 hostnames observed, expected to keep rotating) is inherently high-false-positive as a standalone signal and is shipped as a low-priority triage feed only (Q10), never a block list. The in-memory BMP steganographic extraction and the in-browser SERP script injection are both invisible to endpoint telemetry by design; see Section 15 for the honest coverage picture.

02

Source Review & Web Hunter Notes

Four sources were fetched and saved verbatim as plain-text snapshots before any content in this pack was written. No fetched source contained text directed at an automated reader (no instructions to change tooling, fetch further URLs, skip steps, or claim prior authorization); all four were treated strictly as data to analyze, per standing security policy.

TierSourceKey FindingCarry Forward
Tier 1 — primary investigationUnit 42 (Palo Alto Networks), Rem Dudas, 2026-09-09Full technical breakdown: OfferLoader chain, all three payload families, every hash and domain in this pack's IOC table, the >200-domain rotational infrastructure appendix, YouTube channel listYes
Tier 2 — security press, corroboratingCyber Security News (Tushar Subhra Dutta), 2026-09-14Independently republishes 5 of the same hashes and 4 of the same domains (stryper.info, crowdstri.com, reg.pcsdkflyer.ca, mqsearch.com), citing Unit 42 as its sourceContext only
Tier 2 — security press, corroboratingGBHackers on Security (Mayura Kathir), 2026-09-11Independently republishes the windirstat.exe hash and campaign overview, citing Unit 42 as its sourceContext only
Tier 3 — historical technique precedentMalwarebytes Labs (Joshua Cannell), 2015-05-13Describes the original 2015 "WinYahoo" PUP technique for forging Chrome Secure Preferences MACs, cited by Unit 42 as the technique Docro Hijacker revives; unrelated indicators (WinYahoo's own md5/domain) are NOT shipped in this packContext only, no atomics

Provenance decisions

  • Every atomic indicator in this pack traces to a single underlying investigation. The two press write-ups (Cyber Security News, GBHackers) both explicitly cite Unit 42 as their source rather than presenting independent research; they are treated as re-publication of the same investigation, not a second independent source. Per standing policy that action=prevent or critical severity requires two independent sources, every hash and domain in this pack ships at action=detect or action=hunt, severity high or medium — never prevent, never critical.
  • All 16 file hashes and 15 domains in the IOC Appendix (Section 10) were verified present in the saved Unit 42 snapshot (01-unit42-cl-cri-1171.txt) before being included; nothing was invented or carried over from an unrelated cluster.
  • Unit 42's sanitized victim-IP examples (e.g. 5.xxx.xx.xxx) are illustrative fragments, not real addresses, and are not shippable IOCs; no IPv4/IPv6 indicator appears in this pack.
  • The three "gate/landing" domains carried into the CSV (bubbleslip.xyz, churchpail.xyz, dinosaursjam.cfd) are Unit 42's own worked examples of the >200-domain rotation pattern, shipped at low confidence/short expiry explicitly labeled illustrative — they are pattern samples, not a live blocklist, since the full rotation is expected to have moved on by the time this pack is read.
  • The Malwarebytes 2015 article is cited only for the Secure-Preferences-tampering technique lineage; none of its own indicators (unrelated to CL-CRI-1171) are shipped here.
03

Hunt Brief & Attack Chain

Hunt hypotheses

  • H1 (high confidence). Any host spawning processes named eld0.exe, eld1.exe, or eld2.exe has run the OfferLoader chain; the naming is unique to this loader family. MITRE T1204.002/T1027. Telemetry: ProcessRollup2. FP: low. → Q1.
  • H2 (medium confidence). A trojanized installer masquerading as windirstat.exe or a Bluetooth-driver installer, executing from a Downloads/Temp path, precedes the eld0-2 fan-out. MITRE T1204.002/T1036.005. Telemetry: ProcessRollup2. FP: medium (legitimate installers also run from these paths). → Q2.
  • H3 (high confidence). Exact-hash matches against the 16 published samples confirm this specific, already-analyzed campaign wave. MITRE T1204.002. Telemetry: ProcessRollup2 (SHA256HashData). FP: low. → Q3.
  • H4 (high confidence). Insomnia RAT's installer disables Defender and excludes the entire C:\ drive before deploying its Node.js/Python agents — a distinctive, rarely-legitimate command-line pattern. MITRE T1562.001. Telemetry: ProcessRollup2 (CommandLine). FP: medium. → Q4.
  • H5 (high confidence). Insomnia RAT persists via two masquerading scheduled tasks with non-Microsoft naming under Microsoft-owned task paths. MITRE T1053.005. Telemetry: ScheduledTaskRegistered. FP: low. → Q5.
  • H6 (medium confidence). Node.js is hidden from Add/Remove Programs via a SystemComponent=1 registry write, correlating with the Insomnia install chain. MITRE T1112. Telemetry: RegGenericValueUpdate. FP: medium. → Q6.
  • H7 (high confidence). ARKTunnel's dropped ZIP (procorTrex.zip), executable (wscl.exe), and Windows service (wscl-13/msvcsrvc) are all distinctively named and not used by legitimate software. MITRE T1027.003/T1543.003. Telemetry: ZipFileWritten, NewExecutableWritten, CreateService. FP: low. → Q7.
  • H8 (medium confidence). Docro Hijacker's Chrome Secure Preferences tamper and docro extension drop under C:\ProgramData\DocsHelper\ are visible as file-write events even though the HMAC-bypass logic itself is not. MITRE T1176/T1112. Telemetry: CriticalFileModified, NewExecutableWritten. FP: medium. → Q8.
  • H9 (high confidence). DNS resolution to any of the 10 confirmed second-stage/C2 domains is a strong, campaign-specific signal, including the crowdstri.com CrowdStrike typosquat. MITRE T1071.001/T1583.001. Telemetry: DnsRequest. FP: low. → Q9.
  • H10 (low confidence, explicit triage-only). The two-word-compound domain naming shape (six-to-eighteen lowercase letters, no digits or hyphens, over .xyz/.cfd/.space/.info) can be pattern-matched, but the shape alone is common to a lot of benign and parked domains. MITRE T1583.001. Telemetry: DnsRequest. FP: high. → Q10.
  • H11 (medium confidence). Insomnia RAT's C2 traffic carries the literal HTTP User-Agent insomnia/2023.4.0 Windows, visible only in ingested web-proxy/NGSIEM logs, not native EDR telemetry. MITRE T1071.001/T1036.005. Telemetry: NGSIEM proxy log fields. FP: low, but shares its UA with the legitimate Insomnia REST client. → Q11.

Two attack-chain steps have no mappable Falcon telemetry and are carried forward as explicit gaps rather than silently dropped: the in-memory LSB steganographic extraction of ARKTunnel's payload from a BMP resource, and the in-browser SERP script injection Docro Hijacker uses to monetize search results. Both are addressed in Section 15.

Attack chain

#StepTelemetryHunt angle
1User searches for a legitimate utility (WinDirStat, Bluetooth driver) and lands on an SEO-poisoned result, or watches a gaming-optimization YouTube video and clicks a description link to a Blogspot intermediaryNone (pre-execution, web/DNS layer)Section 12 hardening
2Victim downloads a ZIP archive (often bundled with a legitimate WinRAR copy renamed to .store) and runs the trojanized Inno Setup installer (e.g. windirstat.exe) from Downloads/TempProcessRollup2, ZipFileWritten, NewExecutableWrittenQ2, Q3
3Compiled Pascal [Code] section in the installer unpacks a .tmp stage, which beacons to a gate/tracker domain (e.g. voyagemist.space) for an "ok"/"no" verdictProcessRollup2, DnsRequestQ3, Q9
4On "ok", the loader spawns three children — eld0.exe, eld1.exe, eld2.exe — each an independent malware campaign with affiliate-tracking command-line parametersProcessRollup2 (parent-child)Q1 (core signature)
5aeld0.exe drops a.dll, spawns hidden PowerShell running t.ps1: disables Defender, excludes C:\, installs Python + Node.js, hides Node.js via SystemComponent=1, deploys a Node.js agent (aa.js from stryper.info) and a Python agent (from aa.amazingshield.xyz); persistence via "Maps Performance Task" / "OOBETaskScheduler"; C2 uses UA insomnia/2023.4.0 Windows, POST /d and /e; the Python variant's C2 is the crowdstri.com typosquatProcessRollup2, ScheduledTaskRegistered, RegGenericValueUpdate, DnsRequestQ4, Q5, Q6, Q9, Q11
5beld1.exe extracts a ZIP from an embedded BMP resource via LSB steganography (in-memory, no read of a source image file on disk), drops wscl.exe to C:\Users\Public\procorTrex.zip, installs it as service wscl-13/msvcsrvc; C2 (reg.pcsdkflyer.ca) decoded from a 39-byte Base64+XOR blobZipFileWritten, NewExecutableWritten, CreateService, DnsRequestQ7, Q9; GAP — in-memory LSB decode
5celd2.exe unpacks eld2.tmp, which drops Adblock.dll; the DLL extracts Chrome's HMAC key from resources.pak, recomputes valid MACs, and rewrites Chrome's Secure Preferences to set the default search provider to mqsearch.com and sideload the docro Manifest V3 extension at C:\ProgramData\DocsHelper\docro\File-write telemetry on Secure Preferences and the DocsHelper pathQ8, Q9
6The docro extension calls vendralo.info for a per-victim UUID and hourly rewrite rules, injects a script from drelto.info/farlix into Google SERPs across 190+ country-code domains to hijack/monetize search results; install telemetry reports to finersto.com/extentrack.comDnsRequest, browser-scoped networkQ9; GAP — in-browser script injection content
04

Consolidated IOC Table

Every row below traces to the primary Unit 42 investigation (Section 2). Because that investigation is the sole underlying source for every atomic indicator in this pack, no row ships at action=prevent or severity=critical, regardless of how corroborated its republication in secondary press was — per standing two-source policy. Action follows the pack's standard vocabulary (detect = alert/import as IOC, hunt = investigate, enrich = context only).

TypeValueConfidenceActionContextExpiry
SHA-2567f792c45de1e28fd42ac44c9444f157a2161742d130bac336c0e991aabbb112cHigh (2 sources cite)detectTrojanized windirstat.exe, Inno Setup 6.7.1, initial access2026-12-25
SHA-256fc485882626512e7ff82a1d7cd8e8fb3e9751b026d97e682d6908aefff1f2d73Medium (single-source)huntwindirstat.tmp, unpacked stage2026-11-10
SHA-2563052bd320a34e12ee694811ed0578797477dfd480c664491e509ed15ce1a6961High (2 sources cite)detecteld0.exe, Insomnia RAT initial loader (Inno Setup 6.3.0 SetupLdr)2026-12-25
SHA-25625558ea78c4aa0fdd0f45fafcaa546d3115dc5806809d144a5801a40e48fd4c5Medium (single-source)hunteld0.tmp, unpacked loader stage2026-11-10
SHA-2569b0d9cbc0fd4a7bae8b78a15dfbe63052779414ad725845732c4a0083008da69Medium (single-source)detecta.dll, executes the PowerShell downloader for Node.js/Python stages2026-12-25
SHA-256ceb30a5eb9ad9d9c6712c80726df16f96f99d9fc0753be241b00b4d636eb576eMedium (single-source)detectt.ps1, Insomnia RAT PowerShell installer (disables Defender, excludes C:\)2026-12-25
SHA-256cf184d04ca31fb2b6b7efd85399c29c1136b539153e137ceb3877b1b905791deMedium (single-source)detectGUID-named Python component of the Insomnia dual payload (filename randomized per build; do not filter on a literal filename)2026-12-25
SHA-25662d49d0c78207ec2452cc8a30501db771c9edbae89889e41a7dd227551243e8eMedium (single-source)detectaa.js, Node.js component of the Insomnia dual payload2026-12-25
SHA-256aaebc8c07de485be6d1bfa956668c5e18aa1ff5588dfe84672e20ae90b4560f1High (2 sources cite)detecteld1.exe, ARKTunnel LSB-steganography dropper2026-12-25
SHA-256e05bc22afbc5ddd50b49c85ee169dd13318000d38286de2b8bcff98217256a8dMedium (single-source)huntprocorTrex.zip, carved from eld1.exe's BMP steganography payload; dropped at C:\Users\Public\2026-11-10
SHA-256b367762140ae7f5098230b8a5da738c9241f286281ec9439dd6ca581fc87989cHigh (2 sources cite)detectwscl.exe, ARKTunnel WebSocket tunneling RAT2026-12-25
SHA-256d8d783f8e050a6e394f3c0aa5e2bc73a38d822e55fbc39c0648cbff566de3cdfMedium (single-source)huntResource icon shared across ARKTunnel samples; not computed by default sensor telemetry, useful for retro-hunting via IOC search only2026-11-10
SHA-25606e0afd01bbc6c9d5dc16c3165089b233dc071e1f251abd06235d1b9166cdac5Medium (single-source)huntSecond resource icon shared across ARKTunnel samples2026-11-10
SHA-2562c6e11027b011042c9a118fc20728f8f4ebb6be8795cc84cc9a45622c297d354High (2 sources cite)detecteld2.exe, Docro Hijacker installer (drops Adblock.dll + docro extension)2026-12-25
SHA-256553ce594c9c6afdd4794fddc28c194e3bc3c1b052310e5099c58ac15bab72104Medium (single-source)hunteld2.tmp, unpacked stage2026-11-10
SHA-256fdcc95b7791c0d6590dcf1a412dc9fcc92ad2095818d1b78368b31efad012007Medium (single-source)detectAdblock.dll, Chrome Secure Preferences HMAC-bypass DLL at %TEMP%2026-12-25
Domainstryper[.]infoHigh (2 sources)detectInsomnia RAT Node.js agent host (serves aa.js, POST /d /e)2026-12-25
Domainaa[.]amazingshield[.]xyzMedium (single-source)detectInsomnia RAT Python agent host2026-12-25
Domaincrowdstri[.]comHigh (2 sources)detectCrowdStrike-typosquat C2 for the Insomnia RAT Python agent2026-12-25
Domainreg[.]pcsdkflyer[.]caHigh (2 sources)detectARKTunnel (wscl.exe) WebSocket C22026-12-25
Domainvendralo[.]infoMedium (single-source)detectDocro Hijacker: per-victim UUID and hourly rewrite-rule delivery2026-12-25
Domainfinersto[.]comMedium (single-source)huntDocro Hijacker: extension install/start telemetry2026-11-10
Domaindrelto[.]infoMedium (single-source)detectDocro Hijacker: SERP-injection script host (/farlix)2026-12-25
Domainmqsearch[.]comHigh (2 sources)detectDocro Hijacker: hijacked default search provider endpoint2026-12-25
Domainextentrack[.]comMedium (single-source)huntDocro Hijacker: install-success/failure callback (also contacted by eld2.tmp)2026-11-10
Domainvoyagemist[.]spaceMedium (single-source)huntOfferLoader initial tracking beacon / install-verdict gate (observed in both documented intrusion sets)2026-11-10
Domainnoiseship[.]cfdMedium (single-source)huntSEO-poison lure domain, registered 39 days before observed use — perishable2026-10-10
Domainatthelake[.]infoMedium (single-source)huntTop referring SEO-poison domain — perishable2026-10-10
Domain (illustrative)bubbleslip[.]xyzLow (pattern example)huntWorked example of the >200-domain two-word-compound rotation; NOT a live blocklist entry, expect rotation2026-10-10
Domain (illustrative)churchpail[.]xyzLow (pattern example)huntWorked example of the rotation pattern; expect rotation2026-10-10
Domain (illustrative)dinosaursjam[.]cfdLow (pattern example)huntWorked example of the rotation pattern; expect rotation2026-10-10
05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk
Managed Windows endpoints (any user who can download and run software)ProcessRollup2, DnsRequest, ZipFileWritten, NewExecutableWritten, CreateService, ScheduledTaskRegistered, RegGenericValueUpdate (default sensor policy covers all of these)HighThe compiled Pascal [Code] section inside the Inno Setup installer, and the in-memory BMP LSB extraction, are both opaque to file/process telemetry until they write a resulting artifact to disk
Chrome/Chromium browser processes on managed endpointsFile-write telemetry on Secure Preferences and C:\ProgramData\DocsHelper\; Falcon has no native browser-extension-inventory event typeHighRTR spot-checks are point-in-time, not continuous; the SERP-injection script itself runs inside the browser's TLS session and is not visible to EDR
Perimeter DNS / secure web gatewayDNS/SWG logs (non-Falcon: Umbrella, Zscaler, firewall)MediumRequires separate tooling and manual correlation with EDR hits; the only layer that can confirm URL paths (e.g. /api/v1/proxies-style config endpoints) actually fired
Web-proxy / NGSIEM-ingested HTTP logsParser-dependent http_user_agent/url fields (see Q11)MediumOnly source that can see the insomnia/2023.4.0 Windows User-Agent string; not available unless a proxy/SWG log source is already ingested into NG-SIEM
06

ATT&CK Mapping

TacticTechnique IDTechnique nameObserved behavior
Initial Access / ExecutionT1204.002User Execution: Malicious FileVictim downloads and runs a trojanized Inno Setup installer masquerading as WinDirStat or a Bluetooth driver
Defense EvasionT1036.005Masquerading: Match Legitimate Name or Locationwindirstat.exe / Bluetooth Driver for Windows 10.exe naming; Insomnia RAT's disguised User-Agent string
Defense EvasionT1027Obfuscated Files or InformationAll malicious logic hidden inside the Inno Setup compiled Pascal [Code] section; no embedded application files
Defense EvasionT1027.003SteganographyARKTunnel's payload archive (procorTrex.zip) extracted from a BMP image resource via LSB steganography
Defense EvasionT1140Deobfuscate/Decode Files or InformationARKTunnel's C2 address decoded from a 39-byte config blob via Base64 + XOR
PersistenceT1053.005Scheduled Task"Maps Performance Task" and "OOBETaskScheduler" masquerading scheduled tasks for Insomnia RAT
PersistenceT1543.003Create or Modify System Process: Windows ServiceARKTunnel installed as a delayed-autostart Windows service (wscl-13 / msvcsrvc)
PersistenceT1176Browser ExtensionsDocro Hijacker sideloads a Manifest V3 Chrome extension at C:\ProgramData\DocsHelper\docro\
Defense EvasionT1562.001Impair Defenses: Disable or Modify Toolst.ps1 disables Windows Defender, excludes the entire C:\ drive, and suppresses security notifications
Defense EvasionT1112Modify RegistryNode.js hidden from Add/Remove Programs via SystemComponent=1; Chrome Secure Preferences MAC values recomputed and rewritten
Command and ControlT1071.001Application Layer Protocol: Web ProtocolsHTTPS POST to /d (tasking) and /e (error reporting) using the insomnia/2023.4.0 Windows User-Agent; ARKTunnel's WebSocket tunnel
Command and ControlT1105Ingress Tool Transfert.ps1 downloads and installs Python and Node.js runtimes plus the aa.js/Python agents from attacker infrastructure
Resource DevelopmentT1583.001Acquire Infrastructure: DomainsOver 200 rotating two-word-compound C2/gate domains across .xyz/.cfd/.space/.info registered by the operator
07

Native Audit-Log Hunts

These checks require no CQL and directly cover the extension-governance and dropped-artifact gaps noted in Section 15.

RTR one-time fleet sweep (read-only, point-in-time)

Run via Falcon Real Time Response across the fleet to confirm on-disk/service/task presence. See the Fleet Audit Commands quick-copy block in Section 10 for the exact commands (ARKTunnel service check, scheduled-task check, docro extension path check, Secure Preferences modification time check).

Chrome / Edge (Chromium) — managed browser extension inventory

  • Google Admin console → Chrome browser cloud management → Apps & extensions → Users & Browsers report — the sideloaded docro extension has no fixed Chrome Web Store ID (it is sideloaded from disk, not installed from the store), so hunt by installed-extension name/path rather than a store ID.
  • Microsoft Intune / Edge Business inventory — same approach if Edge extension reporting is configured.

Windows Service Control Manager

  • sc query wscl-13 / sc query msvcsrvc across the fleet (or the RTR batch equivalent in Section 10) to find ARKTunnel's installed service before or after a Q7 network hit.

Task Scheduler operational log

  • Enable Microsoft-Windows-TaskScheduler/Operational (disabled by default on most builds) and alert on new task registrations under \Microsoft\Windows\Maps\ or \Microsoft\Windows\Servicing\ that do not match your organization's known-good task baseline — see Playbook 4 in Section 13.

Perimeter DNS / secure web gateway logs

Query Umbrella / Zscaler / firewall logs for the domains in Section 4. Unlike Falcon, a web gateway typically logs the full request path, which is the only way to confirm the Docro extension's /extensionInstaller/updateChromeExtension and similar config-endpoint paths actually fired.

08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · OfferLoader child-process chain (eld0 / eld1 / eld2)
CONF HIGHFP LOWCOST LOW

Looks for: any process named eld0/eld1/eld2 — OfferLoader's distinctive three-way payload fan-out. The single strongest, lowest-noise signal in this pack.

// HUNT: OfferLoader distinctive child-process chain (eld0/eld1/eld2)
// MITRE: T1204.002, T1027
// CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 telemetry (default sensor policy)
// FALSE POSITIVES: none expected -- eld0/eld1/eld2 basenames are not used by any known legitimate software
#event_simpleName=ProcessRollup2
| FileName=/^eld[0-2](\.exe)?$/i
| table([@timestamp, aid, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine, SHA256HashData])
| sort(@timestamp, order=desc)
Q2 · Candidate trojanized installer from Downloads/Temp
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: the two documented lure filenames launching from a user Downloads/Temp path, matching Unit 42's two intrusion sets. FP: this is a triage feed, not a standalone alert — pivot into Q1/Q3 hits before acting.

// HUNT: Candidate trojanized installer executing from a user Downloads/Temp path
// MITRE: T1204.002, T1036.005
// CONF: medium  FP: medium  COST: low
// REQUIRES: ProcessRollup2 telemetry
// FALSE POSITIVES: legitimate software is routinely installed from Downloads/Temp; this is a triage feed, not a standalone alert -- pivot into Q1/Q3 hits before acting
// TUNING: exclude known-good deployment tooling (SCCM/Intune/ConnectWise/AnyDesk installers) and signed vendor installers your fleet regularly runs from these paths
#event_simpleName=ProcessRollup2
| FileName=/^(windirstat|bluetooth driver for windows 10)\.exe$/i
| FilePath=/\\(Downloads|AppData\\Local\\Temp)\\/i
| table([@timestamp, aid, ComputerName, UserName, FileName, FilePath, ParentBaseFileName, SHA256HashData])
| sort(@timestamp, order=desc)
Q3 · Exact-hash match against confirmed CL-CRI-1171 samples
CONF HIGHFP LOWCOST LOW

Looks for: the 10 file-execution-relevant hashes from Unit 42's IOC table (installer, loader stages, and payload droppers). Will only ever catch these specific, already-published samples.

// HUNT: Exact SHA256 match against confirmed CL-CRI-1171 samples (Unit 42, 2026-09-09)
// MITRE: T1204.002, T1027
// CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 telemetry; SHA256HashData is populated when Falcon has computed or received a hash for the binary
// FALSE POSITIVES: none -- exact hash match; will only ever catch these specific, already-published samples
#event_simpleName=ProcessRollup2
| in(SHA256HashData, values=["7f792c45de1e28fd42ac44c9444f157a2161742d130bac336c0e991aabbb112c","fc485882626512e7ff82a1d7cd8e8fb3e9751b026d97e682d6908aefff1f2d73","3052bd320a34e12ee694811ed0578797477dfd480c664491e509ed15ce1a6961","25558ea78c4aa0fdd0f45fafcaa546d3115dc5806809d144a5801a40e48fd4c5","9b0d9cbc0fd4a7bae8b78a15dfbe63052779414ad725845732c4a0083008da69","aaebc8c07de485be6d1bfa956668c5e18aa1ff5588dfe84672e20ae90b4560f1","b367762140ae7f5098230b8a5da738c9241f286281ec9439dd6ca581fc87989c","2c6e11027b011042c9a118fc20728f8f4ebb6be8795cc84cc9a45622c297d354","553ce594c9c6afdd4794fddc28c194e3bc3c1b052310e5099c58ac15bab72104","fdcc95b7791c0d6590dcf1a412dc9fcc92ad2095818d1b78368b31efad012007"])
| table([@timestamp, aid, ComputerName, UserName, FileName, SHA256HashData, ParentBaseFileName])
| sort(@timestamp, order=desc)
Q4 · Insomnia RAT: Defender disabled and C:\ excluded via PowerShell
CONF HIGHFP MEDIUMCOST LOW

Looks for: t.ps1's signature move — excluding the entire C:\ drive from Defender via PowerShell. FP: rare legitimate backup/migration tooling does this too; confirm against change-management records.

// HUNT: PowerShell disabling Defender and excluding the entire C: drive (Insomnia RAT t.ps1 behavior)
// MITRE: T1562.001, T1059.001
// CONF: high  FP: medium  COST: low
// REQUIRES: ProcessRollup2 with CommandLine visibility
// FALSE POSITIVES: some legitimate backup/AV-migration tooling adds broad exclusions; rare enough in most fleets to warrant investigation, but confirm against change-management records before treating as confirmed compromise
// TUNING: exclude known internal deployment/migration scripts by their signed publisher or a documented ticket-referenced CommandLine pattern
#event_simpleName=ProcessRollup2
| FileName=/^powershell(\.exe)?$/i
| CommandLine=/Add-MpPreference/i
| CommandLine=/-ExclusionPath\s+["']?C:\\\\/i
| table([@timestamp, aid, ComputerName, UserName, CommandLine, ParentBaseFileName])
| sort(@timestamp, order=desc)
Q5 · Insomnia RAT masquerading persistence tasks
CONF HIGHFP LOWCOST LOW

Looks for: the two scheduled-task names Unit 42 documented, registered under Microsoft's own task paths to blend in.

// HUNT: Insomnia RAT masquerading persistence tasks
// MITRE: T1053.005
// CONF: high  FP: low  COST: low
// REQUIRES: ScheduledTaskRegistered telemetry
// FALSE POSITIVES: none expected -- "Maps Performance Task" and "OOBETaskScheduler" are not genuine Microsoft task names
#event_simpleName=ScheduledTaskRegistered
| TaskName=/^(Maps Performance Task|OOBETaskScheduler)$/i
| table([@timestamp, aid, ComputerName, UserName, TaskName, TaskExecutable])
| sort(@timestamp, order=desc)
Q6 · Node.js hidden from Add/Remove Programs (SystemComponent=1)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: t.ps1 setting SystemComponent=1 on a Node.js Uninstall registry key to hide it from Add/Remove Programs. FP: some legitimate silent enterprise deployments do this too.

// HUNT: Node.js/Python runtime silently deployed and hidden from Add/Remove Programs (Insomnia RAT setup)
// MITRE: T1112, T1027
// CONF: medium  FP: medium  COST: low
// REQUIRES: RegGenericValueUpdate telemetry; DWORD value representation for RegStringValue is tenant/sensor-version dependent -- ⚠ validate in tenant
// FALSE POSITIVES: legitimate silent Node.js/Python enterprise deployments occasionally set SystemComponent=1 too; corroborate with Q1/Q3/Q5 hits before treating as malicious
// TUNING: scope to hosts that also show a Q1 (eld0-2) or Q5 (scheduled task) hit in the same session before alerting
#event_simpleName=RegGenericValueUpdate
| RegObjectName=/\\Uninstall\\/i
| RegValueName=/^SystemComponent$/i
| RegStringValue=/^1$/
| table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue])
| sort(@timestamp, order=desc)
Q7 · ARKTunnel dropped-artifact and service-install signature
CONF HIGHFP LOWCOST LOW

Looks for: the resulting on-disk artifacts and service install once ARKTunnel's in-memory steganographic extraction completes. Gap: the LSB decode itself is invisible; see Section 15.

// HUNT: ARKTunnel dropped-artifact and service-install signature
// MITRE: T1027.003, T1543.003, T1140
// CONF: high  FP: low  COST: low
// REQUIRES: ZipFileWritten, NewExecutableWritten, CreateService telemetry
// FALSE POSITIVES: none expected -- ServiceName wscl-13/msvcsrvc and the procorTrex.zip filename are not used by legitimate software. GAP: the in-memory BMP LSB steganographic extraction itself is not visible to any of these events (see Section 15)
#event_simpleName=/^(ZipFileWritten|NewExecutableWritten|CreateService)$/
| TargetFileName=/^procorTrex\.zip$/i or FileName=/^wscl\.exe$/i or ServiceName=/^(wscl-13|msvcsrvc)$/i
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, TargetDirectoryName, FileName, ServiceName, ServiceImagePath])
| sort(@timestamp, order=desc)
Q8 · Docro Hijacker: Secure Preferences tamper and extension drop
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Chrome's Secure Preferences file being modified alongside Adblock.dll / docro extension artifacts. FP: some legitimate Chrome management tooling also touches Secure Preferences.

// HUNT: Chrome Secure Preferences tamper and docro extension sideload (Docro Hijacker)
// MITRE: T1176, T1112
// CONF: medium  FP: medium  COST: low
// REQUIRES: CriticalFileModified (or your tenant's file-integrity-monitoring event) + NewExecutableWritten telemetry; Falcon has no native browser-extension-inventory event type (see Section 15)
// FALSE POSITIVES: some legitimate Chrome management/kiosk tooling also modifies Secure Preferences; corroborate with the ProgramData\DocsHelper path or a Q1/Q3 hit on the same host before treating as malicious
// TUNING: exclude known enterprise browser-management agents (e.g. Chrome Browser Cloud Management sync writes) that touch Secure Preferences on a known schedule
#event_simpleName=/^(CriticalFileModified|NewExecutableWritten)$/
| TargetFileName=/^Secure Preferences$/i or TargetFileName=/^Adblock\.dll$/i or TargetDirectoryName=/\\ProgramData\\DocsHelper\\docro/i
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, TargetDirectoryName])
| sort(@timestamp, order=desc)
Q9 · DNS resolution to confirmed CL-CRI-1171 second-stage / C2 infrastructure
CONF HIGHFP LOWCOST LOW

Looks for: any endpoint resolving the 10 confirmed second-stage/C2 domains spanning all three payload families, including the crowdstri.com typosquat.

// HUNT: DNS resolution to confirmed CL-CRI-1171 second-stage / C2 infrastructure
// MITRE: T1071.001, T1583.001
// CONF: high  FP: low  COST: low
// REQUIRES: DnsRequest telemetry
// FALSE POSITIVES: none expected -- domains are unique to this campaign per Unit 42 (2026-09-09); crowdstri.com is a typosquat of the CrowdStrike brand and should never appear in legitimate traffic
#event_simpleName=DnsRequest
| DomainName=/^(stryper\.info|aa\.amazingshield\.xyz|crowdstri\.com|reg\.pcsdkflyer\.ca|vendralo\.info|drelto\.info|mqsearch\.com|finersto\.com|extentrack\.com|voyagemist\.space)$/i
| table([@timestamp, aid, ComputerName, UserName, DomainName, ContextProcessId_decimal])
| sort(@timestamp, order=desc)
Q10 · Rotational two-word-compound gate-domain pattern (triage-only)
CONF LOWFP HIGHCOST MEDIUM

Looks for: the naming shape Unit 42 documented for >200 rotating gate domains. This is deliberately a low-priority triage feed, never a block source — see the TUNING note.

// HUNT: Rotational two-word-compound gate/landing domain pattern (CL-CRI-1171 infrastructure convention)
// MITRE: T1583.001, T1071.001
// CONF: low  FP: high  COST: medium
// REQUIRES: DnsRequest telemetry
// FALSE POSITIVES: HIGH -- this regex matches the *shape* of Unit 42's >200 reported hostnames (two dictionary words concatenated, no hyphen, over .xyz/.cfd/.space/.info), not a confirmed-malicious list; ordinary marketing/dropcatch/parked domains follow the same shape constantly. Treat hits as a LOW-priority triage feed only, never an auto-block source.
// TUNING: cross-reference any hit against the Section 4 IOC table and require a second signal (a Q1/Q3/Q9 hit on the same host within 24h) before investigating; exclude your own DNS security vendor's sinkhole/parking responses
// LOOKBACK: 7d
#event_simpleName=DnsRequest
| DomainName=/^[a-z]{6,18}\.(xyz|cfd|space|info)$/i
| !in(DomainName, values=["stryper.info","aa.amazingshield.xyz","crowdstri.com","vendralo.info","drelto.info","mqsearch.com","finersto.com","extentrack.com"])
| groupBy([aid, ComputerName, DomainName], function=[count(as=Hits), min(@timestamp, as=FirstSeen)], limit=1000)
| sort(Hits, order=desc)
Q11 · NGSIEM / web proxy: Insomnia RAT HTTP User-Agent
CONF MEDIUMFP LOWCOST MEDIUM

Looks for: the disguised C2 User-Agent string, via NG-SIEM-ingested proxy/firewall logs only — Falcon's endpoint sensor does not decode HTTP headers inside TLS traffic for arbitrary processes.

// HUNT: Insomnia RAT C2 User-Agent via ingested web-proxy/NGSIEM logs (NOT native Falcon EDR sensor telemetry)
// MITRE: T1071.001, T1036.005
// CONF: medium  FP: low  COST: medium
// REQUIRES: NG-SIEM ingestion of a web proxy / firewall / SWG log source that captures the HTTP User-Agent header. ⚠ validate in tenant: repo name, parser, and field names below (#repo, http_user_agent, url) are illustrative and depend entirely on your ingested log source's parser.
// FALSE POSITIVES: low if the field is populated correctly -- the literal string "insomnia/2023.4.0 Windows" is also the default user-agent of the legitimate Insomnia API-testing desktop client; confirm the destination host is NOT a developer workstation calling a legitimate API before treating as malicious
#repo=ngsiem-web-proxy
| http_user_agent="insomnia/2023.4.0 Windows"
| groupBy([src_ip, url], function=[count(as=Hits), min(@timestamp, as=FirstSeen)], limit=1000)
| sort(Hits, order=desc)
09

CrowdStrike Custom IOA Recommendations

Honesty note: the highest-confidence signal in this pack (Q1, the eld0/eld1/eld2 child-process chain) is exactly the kind of narrow, distinctive process-naming pattern a Falcon Custom IOA is built for. The domain-pattern hunt (Q10) is the opposite case — too broad and too high-FP for a Custom IOA, and belongs only as an investigate-only Scheduled Search at most.

ControlMechanismPatterns / scopeDeployment path
Custom IOA — processFalcon Custom IOA ruleFileName matches ^eld[0-2](\.exe)?$ — action: detect (promote to prevent only after your own tenant validation, per Section 2's single-source cap)Falcon console → Custom IOA rule groups → new File Creation/Process rule
Custom IOC — hashFalcon IOC ManagementThe 16 SHA-256 hashes in Section 10's CSV — action: detect (high-confidence rows) or hunt (medium-confidence rows)IOC Management → Add indicator → type: sha256
Custom IOC — domainFalcon IOC ManagementThe 10 confirmed C2/second-stage domains — action: detectIOC Management → Add indicator → type: domain; see Section 10 CSV block
Scheduled SearchNG-SIEM Scheduled SearchQ1 (child-process chain), Q3 (hash match), Q5 (scheduled tasks), Q9 (C2 domains) — all CONF high / FP lowPromote directly; these four are the IOA/Scheduled-Search candidates
Investigate-onlyAd hoc hunt queryQ2, Q4, Q6, Q7, Q8, Q11 — medium-confidence or context-dependent, needing periodic re-validationRun manually on the cadence in Section 11; do not auto-promote
Triage-only (never promote)Ad hoc hunt queryQ10 — explicitly high-FP pattern huntManual review only, cross-referenced against a Q1/Q3/Q9 hit; never a Scheduled Search or IOA
10

Machine-Readable IOC Appendix

The Falcon IOC Management CSV below is the only block whose atomic indicators are mechanically traced to the saved source snapshots. The other blocks are practical quick-copy references (operator/protocol details, named tooling, and fleet audit commands) that are not Falcon-importable IOC types.

Falcon IOC Management CSV31 rows
type,value,action,severity,expiration,description,tags
sha256,7f792c45de1e28fd42ac44c9444f157a2161742d130bac336c0e991aabbb112c,detect,high,2026-12-25,Trojanized windirstat.exe Inno Setup 6.7.1 initial-access installer,campaign:cl-cri-1171 family:offerloader
sha256,fc485882626512e7ff82a1d7cd8e8fb3e9751b026d97e682d6908aefff1f2d73,hunt,medium,2026-11-10,windirstat.tmp unpacked stage (single-source),campaign:cl-cri-1171 family:offerloader
sha256,3052bd320a34e12ee694811ed0578797477dfd480c664491e509ed15ce1a6961,detect,high,2026-12-25,eld0.exe Insomnia RAT initial loader,campaign:cl-cri-1171 family:offerloader
sha256,25558ea78c4aa0fdd0f45fafcaa546d3115dc5806809d144a5801a40e48fd4c5,hunt,medium,2026-11-10,eld0.tmp unpacked loader stage (single-source),campaign:cl-cri-1171 family:offerloader
sha256,9b0d9cbc0fd4a7bae8b78a15dfbe63052779414ad725845732c4a0083008da69,detect,high,2026-12-25,a.dll executes PowerShell downloader for Node.js/Python stages,campaign:cl-cri-1171 family:insomnia-rat
sha256,ceb30a5eb9ad9d9c6712c80726df16f96f99d9fc0753be241b00b4d636eb576e,detect,high,2026-12-25,t.ps1 Insomnia RAT PowerShell installer (Defender disable + C: exclusion),campaign:cl-cri-1171 family:insomnia-rat
sha256,cf184d04ca31fb2b6b7efd85399c29c1136b539153e137ceb3877b1b905791de,detect,high,2026-12-25,GUID-named Python component of Insomnia dual payload (filename randomized per build),campaign:cl-cri-1171 family:insomnia-rat
sha256,62d49d0c78207ec2452cc8a30501db771c9edbae89889e41a7dd227551243e8e,detect,high,2026-12-25,aa.js Node.js component of Insomnia dual payload,campaign:cl-cri-1171 family:insomnia-rat
sha256,aaebc8c07de485be6d1bfa956668c5e18aa1ff5588dfe84672e20ae90b4560f1,detect,high,2026-12-25,eld1.exe ARKTunnel LSB-steganography dropper,campaign:cl-cri-1171 family:arktunnel
sha256,e05bc22afbc5ddd50b49c85ee169dd13318000d38286de2b8bcff98217256a8d,hunt,medium,2026-11-10,procorTrex.zip carved from eld1.exe BMP steganography payload (single-source),campaign:cl-cri-1171 family:arktunnel
sha256,b367762140ae7f5098230b8a5da738c9241f286281ec9439dd6ca581fc87989c,detect,high,2026-12-25,wscl.exe ARKTunnel WebSocket tunneling RAT,campaign:cl-cri-1171 family:arktunnel
sha256,d8d783f8e050a6e394f3c0aa5e2bc73a38d822e55fbc39c0648cbff566de3cdf,hunt,medium,2026-11-10,ARKTunnel shared resource icon (retro-hunt only; single-source),campaign:cl-cri-1171 family:arktunnel
sha256,06e0afd01bbc6c9d5dc16c3165089b233dc071e1f251abd06235d1b9166cdac5,hunt,medium,2026-11-10,ARKTunnel shared resource icon #2 (retro-hunt only; single-source),campaign:cl-cri-1171 family:arktunnel
sha256,2c6e11027b011042c9a118fc20728f8f4ebb6be8795cc84cc9a45622c297d354,detect,high,2026-12-25,eld2.exe Docro Hijacker installer,campaign:cl-cri-1171 family:docro-hijacker
sha256,553ce594c9c6afdd4794fddc28c194e3bc3c1b052310e5099c58ac15bab72104,hunt,medium,2026-11-10,eld2.tmp unpacked stage (single-source),campaign:cl-cri-1171 family:docro-hijacker
sha256,fdcc95b7791c0d6590dcf1a412dc9fcc92ad2095818d1b78368b31efad012007,detect,high,2026-12-25,Adblock.dll Chrome Secure Preferences HMAC-bypass DLL,campaign:cl-cri-1171 family:docro-hijacker
domain,stryper.info,detect,high,2026-12-25,Insomnia RAT Node.js agent host (aa.js POST /d /e),campaign:cl-cri-1171 family:insomnia-rat
domain,aa.amazingshield.xyz,detect,high,2026-12-25,Insomnia RAT Python agent host,campaign:cl-cri-1171 family:insomnia-rat
domain,crowdstri.com,detect,high,2026-12-25,CrowdStrike-typosquat C2 for Insomnia RAT Python agent,campaign:cl-cri-1171 family:insomnia-rat
domain,reg.pcsdkflyer.ca,detect,high,2026-12-25,ARKTunnel (wscl.exe) WebSocket C2,campaign:cl-cri-1171 family:arktunnel
domain,vendralo.info,detect,high,2026-12-25,Docro Hijacker per-victim UUID and hourly rewrite-rule delivery,campaign:cl-cri-1171 family:docro-hijacker
domain,finersto.com,hunt,medium,2026-11-10,Docro Hijacker extension install/start telemetry (single-source),campaign:cl-cri-1171 family:docro-hijacker
domain,drelto.info,detect,high,2026-12-25,Docro Hijacker SERP-injection script host (/farlix),campaign:cl-cri-1171 family:docro-hijacker
domain,mqsearch.com,detect,high,2026-12-25,Docro Hijacker hijacked default search provider endpoint,campaign:cl-cri-1171 family:docro-hijacker
domain,extentrack.com,hunt,medium,2026-11-10,Docro Hijacker install-success/failure callback (single-source),campaign:cl-cri-1171 family:docro-hijacker
domain,voyagemist.space,hunt,medium,2026-11-10,OfferLoader initial tracking beacon / install-verdict gate,campaign:cl-cri-1171 family:offerloader
domain,noiseship.cfd,hunt,medium,2026-10-10,SEO-poison lure domain registered 39 days before observed use -- perishable,campaign:cl-cri-1171 family:offerloader
domain,atthelake.info,hunt,medium,2026-10-10,Top referring SEO-poison domain -- perishable,campaign:cl-cri-1171 family:offerloader
domain,bubbleslip.xyz,hunt,low,2026-10-10,Illustrative example of the rotating two-word-compound gate pattern -- NOT a live blocklist entry,campaign:cl-cri-1171 family:offerloader
domain,churchpail.xyz,hunt,low,2026-10-10,Illustrative example of the rotating two-word-compound gate pattern -- NOT a live blocklist entry,campaign:cl-cri-1171 family:offerloader
domain,dinosaursjam.cfd,hunt,low,2026-10-10,Illustrative example of the rotating two-word-compound gate pattern -- NOT a live blocklist entry,campaign:cl-cri-1171 family:offerloader
Behavioral Signaturesoperator + protocol details
# Operator/loader variable names (compiled Pascal [Code] section, not directly queryable, context only)
offer_execution, offer_execution_fail, offer_exists

# OfferLoader child-process fan-out (see Q1)
eld0.exe -> Insomnia RAT (Operation A)
eld1.exe -> ARKTunnel (Operation B)
eld2.exe -> Docro Hijacker (Operation C)

# Insomnia RAT C2 protocol
user_agent: insomnia/2023.4.0 Windows
endpoints: POST /d (tasking), POST /e (error reporting)
persistence: "Maps Performance Task" under \Microsoft\Windows\Maps\ ; "OOBETaskScheduler" under \Microsoft\Windows\Servicing\

# ARKTunnel service persistence (see Q7)
service_names: wscl-13, msvcsrvc (delayed autostart)
c2_config_decode: Base64 -> XOR, 39-byte blob

# Docro Hijacker paths (see Q8)
extension_path: C:\ProgramData\DocsHelper\docro\
dll_path: %TEMP%\Adblock.dll
serp_injection_script: drelto.info/farlix

# Known affiliate IDs observed in the two documented intrusion sets (context, not a hunt indicator)
CID=2855 (Bluetooth Driver for Windows 10.exe intrusion set)
CID=3075 (windirstat.exe intrusion set)
Named Toolingloader + payload family reference
Cluster:             CL-CRI-1171 (Unit 42 attribution framework)
Loader:              OfferLoader (disposable, generic Inno Setup trojanized-installer loader)
Payload A:            Insomnia RAT -- dual Node.js/Python cross-platform backdoor
Payload B:            ARKTunnel -- WebSocket tunneling RAT, LSB-steganography staged
Payload C:            Docro Hijacker -- Chrome Secure Preferences hijacker + search extension

ARKTunnel fabricated corporate-identity rotation (attribution signal, not a hunt indicator):
  EarthLink   (May 2025)          -- coincidental use of a real ISP's name
  EarthChain  (May 2025-Apr 2026) -- coincidental use of a real company's name
  EarthKark   (Feb 2026-Jun 2026) -- fully fictitious identity
  TamarkLark  (Mar 2026-Jun 2026) -- fully fictitious identity; PE metadata: "TamarkLark Corporation" / "TamarkLark Manager"

Scale (per Unit 42, 2026-09-09): >10,000 distinct OfferLoader samples; >200 rotating C2/gate domains;
  >=50 ARKTunnel samples over 1 year; observed distribution window June 2025-April 2026; 11 YouTube
  channels (since removed) and a parallel SEO-poisoning funnel; targets include gamers (YouTube funnel)
  and corporate/critical-infrastructure/government endpoints (SEO funnel).
Fleet Audit CommandsRTR quick-copy
# ARKTunnel service presence
Get-Service -Name wscl-13,msvcsrvc -ErrorAction SilentlyContinue

# Insomnia RAT masquerading scheduled tasks
Get-ScheduledTask -TaskName "Maps Performance Task","OOBETaskScheduler" -ErrorAction SilentlyContinue

# Docro Hijacker sideloaded extension path
Get-ChildItem "C:\ProgramData\DocsHelper\docro" -ErrorAction SilentlyContinue

# Chrome Secure Preferences recent-modification check (all local profiles)
Get-ChildItem "$env:LOCALAPPDATA\Google\Chrome\User Data\*\Secure Preferences" -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# ARKTunnel dropped artifact
Get-ChildItem "C:\Users\Public\procorTrex.zip" -ErrorAction SilentlyContinue
11

Detection Validation Gates

Telemetry ready

ProcessRollup2, DnsRequest, ZipFileWritten, NewExecutableWritten, CreateService, ScheduledTaskRegistered, and RegGenericValueUpdate must be enabled and flowing (default Falcon sensor policy covers all seven on Windows). Confirm with #event_simpleName=ProcessRollup2 | groupBy(ComputerName, function=count(), limit=10) against a small pilot group before relying on Q1-Q9.

Benign baseline

Run Q1, Q3, Q5, and Q9 with a 30-day console lookback and confirm a zero (or near-zero, fully explained) baseline before enabling any of them as a Scheduled Search. Any pre-existing hits should be triaged as already-compromised endpoints, not tuned away. Run Q10 once against the same window purely to gauge its baseline noise volume in your environment before ever running it live.

Positive tests

Validate Q1 and Q5 against a lab-owned host that spawns a harmless, uniquely-named process called eld1.exe (or registers a scheduled task named exactly "OOBETaskScheduler") rather than resolving or executing any live campaign domain or sample from production. Do not run confirmed campaign hashes or resolve confirmed campaign domains from a production endpoint for testing.

Promotion

Q1, Q3, Q5, and Q9 are the IOA/Scheduled-Search candidates (CONF high, FP low). Q2, Q4, Q6, Q7, Q8, and Q11 remain investigate-only pending periodic re-validation. Q10 never promotes past manual triage, per its explicit high-FP labeling in Section 8.

12

Hardening — Tiered

Immediate — deploy this week

1. Disable local-admin merge for Defender exclusion lists. Set-MpPreference -DisableLocalAdminMerge $true (equivalently, the "Configure local administrator merge behavior for lists" policy under Administrative Templates > Windows Components > Microsoft Defender Antivirus > Exclusions) prevents a locally-run Add-MpPreference -ExclusionPath "C:\" from ever merging into the effective, managed exclusion list — neutralizing t.ps1's defense-evasion step even if it runs. MITRE M1028 (Operating System Configuration); Microsoft Security Baseline for Windows / Microsoft Defender Antivirus documentation; CIS Microsoft Windows Benchmark (Microsoft Defender Antivirus section).

2. Lock the enterprise-managed Chrome default search provider. Set DefaultSearchProviderEnabled/DefaultSearchProviderName/DefaultSearchProviderSearchURL via Chrome Enterprise policy (Playbook 2, Section 13). A managed default-search policy takes precedence over a user-profile Secure Preferences value, so Docro Hijacker's HMAC-forged rewrite of the default search provider stops working even if the bypass DLL still runs. MITRE M1042 (Disable or Remove Feature or Program); CIS Google Chrome Benchmark (Default Search Provider section).

3. Fleet-wide audit sweep. Run the Section 10 Fleet Audit Commands across all endpoints to find existing ARKTunnel services, Insomnia scheduled tasks, and Docro extension/Secure-Preferences artifacts before any policy rollout, so existing infections are triaged rather than silently masked by new controls.

Near term — 1 to 4 weeks

4. Application control for user-writable execution paths. Deploy an AppLocker or WDAC path-deny rule for unsigned executables launched from %USERPROFILE%\Downloads\* and %USERPROFILE%\AppData\Local\Temp\*, with a signed-publisher exception for approved deployment tooling (Playbook 3, Section 13). This blocks the OfferLoader installer's very first execution step regardless of which lure filename it uses next. MITRE M1038 (Execution Prevention); CIS Microsoft Windows Benchmark (Application Control section).

5. Task Scheduler operational logging and baseline alerting. Enable Microsoft-Windows-TaskScheduler/Operational fleet-wide (Playbook 4, Section 13) and alert on new task registrations under \Microsoft\Windows\Maps\ and \Microsoft\Windows\Servicing\ that fall outside your known-Microsoft-task baseline. MITRE M1047 (Audit).

6. DNS-security category blocking for newly-registered domains in the observed TLD set. Most enterprise DNS-security/SWG products offer a "newly registered domain" or "high-risk TLD" category; enabling it for .xyz/.cfd/.space/.info reduces exposure to the rotating gate infrastructure without needing a static, perishable domain list. MITRE M1031 (Network Intrusion Prevention). ⚠ best-practice, no single CIS Benchmark section covers TLD-category DNS filtering; the underlying control (DNS security filtering) is documented in CIS Controls v8, Control 9.

Strategic — 1 to 3 months

7. Browser extension governance program. Move from ad hoc extension checks to a documented allowlist model: ExtensionInstallBlocklist: ["*"] paired with ExtensionInstallAllowlist for approved extensions (Playbook 2, Section 13). This blocks sideloaded/unpacked extensions like docro at the platform level, independent of Docro Hijacker's specific HMAC-bypass technique, and generalizes to the next browser-hijacker family. MITRE M1042; CIS Google Chrome Benchmark (Extension Management section).

8. Formal PPI/loader-cluster IR runbook. Generalize the Section 14 containment runbook into a standing playbook for "generic loader spawns N unrelated payloads" incidents — the defining trait of PPI infrastructure is that any two infections from the same loader can carry entirely different, unrelated malware, so IR scoping must never assume the payload set from one infection generalizes to the next. MITRE M1047 (Audit) as an ongoing IR-maturity practice.

9. User awareness training on SEO-poisoned downloads and gaming-optimization lures. The initial-access vector here requires no exploit, only a convincing download page or YouTube description link; awareness training measurably reduces the population that reaches step 1 of the attack chain (Section 3). MITRE M1017 (User Training).

13

Deployable Playbooks

Playbook 1 — Disable Defender local-admin exclusion merge (PowerShell / Intune)

Prerequisites: local admin or Intune/GPO push rights. Reboot required: no — Defender re-reads the setting on next policy sync. Rollback: Set-MpPreference -DisableLocalAdminMerge $false.

Set-MpPreference -DisableLocalAdminMerge $true

Verify: Get-MpPreference | Select-Object DisableLocalAdminMerge returns True; a subsequent local Add-MpPreference -ExclusionPath "C:\" no longer appears in the effective exclusion list returned by Get-MpPreference | Select-Object -ExpandProperty ExclusionPath once managed policy is present.

Playbook 2 — Chrome enterprise policy: lock default search + block unmanaged extensions

Prerequisites: write access to Chrome policy delivery (GPO ADMX, Intune, or Google Admin console for managed ChromeOS/Chrome Browser Cloud Management). Reboot required: no — restart Chrome to pick up policy. Rollback: remove the JSON keys below and restart Chrome.

{
  "DefaultSearchProviderEnabled": true,
  "DefaultSearchProviderName": "Google",
  "DefaultSearchProviderSearchURL": "https://www.google.com/search?q={searchTerms}",
  "ExtensionInstallBlocklist": ["*"],
  "ExtensionInstallAllowlist": ["REPLACE_WITH_your_approved_extension_ids"]
}

Verify: chrome://policy on a test endpoint shows both policies applied; chrome://extensions with Developer Mode on shows any unpacked/sideloaded extension (including a test copy of docro's manifest structure) blocked from loading; the default search box shows the managed provider and offers no alternate-provider option in Settings.

Playbook 3 — AppLocker path-deny rule for Downloads/Temp execution

Prerequisites: local admin or GPO push rights to Application Control Policies. Reboot required: no — AppLocker re-evaluates on next policy refresh / Application Identity service poll. Rollback: remove or disable the deny rule and re-run gpupdate /force.

<AppLockerPolicy Version="1">
  <RuleCollection Type="Exe" EnforcementMode="Enabled">
    <FilePathRule Id="REPLACE_WITH_new_guid" Name="Deny exe from Downloads" Description="Blocks OfferLoader-style installer execution from Downloads" UserOrGroupSid="S-1-1-0" Action="Deny">
      <Conditions>
        <FilePathCondition Path="%USERPROFILE%\Downloads\*.exe" />
      </Conditions>
    </FilePathRule>
    <FilePathRule Id="REPLACE_WITH_new_guid_2" Name="Deny exe from Temp" Description="Blocks unpacked installer stages from user Temp" UserOrGroupSid="S-1-1-0" Action="Deny">
      <Conditions>
        <FilePathCondition Path="%USERPROFILE%\AppData\Local\Temp\*.exe" />
      </Conditions>
    </FilePathRule>
  </RuleCollection>
</AppLockerPolicy>

Apply with Set-AppLockerPolicy -XmlPolicy "C:\Policies\DenyDownloadsTempExec.xml" -Merge and add publisher-condition exceptions for your approved deployment tooling before enforcing. Verify: Get-AppLockerPolicy -Effective -Xml includes both rules; a test .exe copied to Downloads and launched is blocked with the standard AppLocker denial dialog.

Playbook 4 — Enable Task Scheduler operational logging (fleet-wide)

Prerequisites: local admin or RTR/GPO push rights. Reboot required: no. Rollback: wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:false.

wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:true

Verify: wevtutil gl Microsoft-Windows-TaskScheduler/Operational shows enabled: true; registering a test scheduled task produces Event ID 106 in that log, confirming the pipeline is live for SIEM/NG-SIEM ingestion.

Playbook 5 — Fleet-wide RTR eradication sweep (ARKTunnel service + Insomnia tasks)

Prerequisites: Falcon RTR enabled and admin rights to run a batch RTR script. Reboot required: no. Rollback: none required for the detection half; the removal commands are themselves the remediation action, run only after Section 14 Identify/Triage confirms compromise.

sc query wscl-13
sc query msvcsrvc
sc stop wscl-13
sc delete wscl-13
sc stop msvcsrvc
sc delete msvcsrvc
schtasks /delete /tn "Maps Performance Task" /f
schtasks /delete /tn "OOBETaskScheduler" /f

Verify: repeat sc query and schtasks /query /tn "..." for each name and confirm "service does not exist" / "task not found"; re-run the Section 10 Fleet Audit Commands to confirm no remaining artifacts.

14

Containment Runbook

PhaseActionsOwnerEvidence
1. Identify / TriageConfirm eld0-2 execution via Q1/Q3; confirm ARKTunnel service and Insomnia scheduled tasks via the Section 10 audit commands; confirm Docro artifacts via Q8. Because this is a PPI loader, do NOT assume all three payload families are present on every host — verify each branch independentlySOC / Detection EngineeringQ1/Q3/Q5/Q8/Q9 hit lists, RTR audit output
2. ContainNetwork-contain the host in Falcon pending investigation; block the confirmed domains in Section 4 at the perimeter DNS/SWG layerSOC / Network EngineeringContainment log, perimeter blocklist change record
3. EradicateRun Playbook 5 (stop/delete ARKTunnel services, delete Insomnia scheduled tasks); remove Adblock.dll and the docro extension directory; remove the a.dll/aa.js/Python-agent files if still present; re-run the Section 10 audit sweep to confirm removalEndpoint EngineeringSecond RTR sweep output
4. Recover / Remediate identity & browserReset the Chrome profile (or restore a known-good Secure Preferences backup) on any confirmed-affected endpoint; deploy Playbook 2's managed search-provider/extension policy before returning the host to service; rotate any credentials entered while the browser hijack was activeEndpoint Engineering / Security AwarenessBrowser reset log, policy deployment confirmation
5. Evidence & ReportingPreserve Q1-Q11 hit lists, RTR audit output, and the confirmed-affected host list for the incident record; report to security leadership, noting which of the three payload branches (Insomnia RAT / ARKTunnel / Docro Hijacker) were confirmed presentSOCIncident ticket with attached query outputs
6. Post-incidentAdd the Section 4 domains and hashes to Falcon IOC Management at the severities in this pack (never prevent/critical without your own additional corroboration); deploy Playbooks 1, 3, and 4 fleet-wide; formalize the Section 12 near-term and strategic hardening itemsDetection EngineeringIOC Management change record
15

Detection Coverage Map

TechniqueBehaviorCQLIOA/ControlCoverage
T1204.002 User Execution: Malicious FileTrojanized Inno Setup installer run from Downloads/TempQ2, Q3AppLocker/WDAC path deny (Playbook 3)Good
T1027 Obfuscated Files or InformationAll malicious logic hidden in the installer's compiled Pascal [Code] section— (script content inside a compiled installer is not exposed as queryable telemetry)Application control blocks the installer itself before its bytecode runsGap (CQL) / mitigated by policy
T1027.003 SteganographyARKTunnel payload extracted in-memory from a BMP resource via LSB steganography— (in-memory image decode)—Gap
T1140 Deobfuscate/Decode Files or InformationARKTunnel C2 address decoded from a Base64+XOR blob in-processQ9 (indirect, via the resulting DNS resolution only)—Partial
T1053.005 Scheduled Task"Maps Performance Task" / "OOBETaskScheduler" persistenceQ5Custom IOA + Scheduled SearchGood
T1543.003 Windows ServiceARKTunnel installs as wscl-13 / msvcsrvcQ7Custom IOA candidateGood
T1562.001 Impair Defensest.ps1 disables Defender, excludes C:\, suppresses notificationsQ4Defender local-admin-merge lockout (Playbook 1)Partial
T1112 Modify RegistrySystemComponent=1 hides Node.js; Secure Preferences MACs rewrittenQ6, Q8—Partial
T1105 Ingress Tool Transfert.ps1 downloads Python/Node.js runtimes and agent payloadsQ9 (indirect, via infrastructure signal only)—Partial
T1071.001 Application Layer Protocol: Web ProtocolsHTTPS POST to /d /e with a disguised User-Agent; ARKTunnel WebSocket tunnelQ9 (domain-level); Q11 (UA-level, NGSIEM only, not native EDR)Custom IOC (domain)Partial
T1176 Browser Extensionsdocro Manifest V3 extension sideloaded via Secure Preferences tamperQ8Chrome ExtensionInstallBlocklist (Playbook 2)Partial
T1583.001 Acquire Infrastructure: Domains>200 rotating two-word-compound C2/gate domainsQ10 (deliberately high-FP, triage-only)DNS-security newly-registered-domain category (Section 12)Partial
Search-result monetization / SERP script injectiondocro extension injects a script into Google SERPs to hijack/rewrite results— (in-browser JS content inside the search engine's own TLS session)—Gap

Validation gates (Section 11, summarized): telemetry readiness confirmed via a pilot ProcessRollup2/DnsRequest check; benign baseline required before promoting Q1/Q3/Q5/Q9; positive-test against a lab host, never a live campaign hash or domain, before production use; Q1/Q3/Q5/Q9 promote to Scheduled Search, Q2/Q4/Q6/Q7/Q8/Q11 stay investigate-only, and Q10 never promotes past manual triage.

16

Hunt Summary Ticket

TITLE:        OfferLoader / CL-CRI-1171 pay-per-install loader -- Insomnia RAT, ARKTunnel, Docro Hijacker
SEVERITY:     HIGH -- disposable multi-payload loader with >10,000 samples observed, delivering a cross-platform RAT, an undocumented WebSocket tunneling RAT, and a Chrome search hijacker; targets both gamers (YouTube funnel) and corporate/critical-infrastructure/government endpoints (SEO funnel)
SCOPE:        Managed Windows endpoints (installer execution, service/task persistence, DNS egress); Chrome browser profile integrity; NGSIEM-ingested proxy logs (User-Agent visibility)
HYPOTHESIS:   Endpoints running a trojanized WinDirStat/Bluetooth-driver installer spawn eld0/eld1/eld2 child processes, each delivering an independent payload family with its own persistence and C2
QUERIES:      Q1-Q11 (Q1, Q3, Q5, Q9 promoted to Scheduled Search / IOA candidates; Q10 is triage-only, never promoted)
DO FIRST:     Q1 (eld0-2 child-process chain), then Q3 (exact hash match), then the Section 10 RTR audit sweep (ARKTunnel service, Insomnia tasks, Docro extension path)
FINDINGS:
GAPS:         In-memory BMP LSB steganographic extraction (ARKTunnel) and in-browser SERP script injection (Docro Hijacker) are both invisible to EDR by design; the Insomnia RAT User-Agent is visible only via NGSIEM-ingested proxy logs, not native Falcon sensor telemetry; the installer's compiled Pascal [Code] section is not inspectable content
ACTIONS:      Disable Defender local-admin exclusion merge (Playbook 1); lock the managed Chrome default search provider and extension allowlist (Playbook 2); deploy AppLocker/WDAC deny rules for Downloads/Temp execution (Playbook 3); run the fleet-wide RTR eradication sweep (Playbook 5) on any confirmed host
OWNER:        SOC / Detection Engineering / Endpoint Engineering
VERSION:      v1.0 · 2026-09-26 · STATIC REVIEW PASSED
17

Changelog

v1.02026-09-26Initial pack: 11 hunt queries (4 promoted to Scheduled Search/IOA candidates, 1 explicitly triage-only), 31-row IOC table (31 rows in the importable CSV) spanning all three payload families, tiered hardening with Defender/Chrome/AppLocker playbooks, 6-phase containment runbook, honest EDR coverage gaps for steganographic extraction and in-browser SERP injection.
18

References

IDPublisherVersion/dateAccessedUseURL
S01Unit 42 (Palo Alto Networks), Rem Dudas2026-09-092026-09-26Primary investigation: OfferLoader chain, all three payload families, full IOC tables, rotational infrastructure appendixhttps://unit42.paloaltonetworks.com/ppi-network-malware-campaign-analysis/
S02Cyber Security News, Tushar Subhra Dutta2026-09-142026-09-26Corroboration (republication citing Unit 42): 5 of the same hashes, 4 of the same domainshttps://cybersecuritynews.com/hackers-abuse-youtube-gaming/
S03GBHackers on Security, Mayura Kathir2026-09-112026-09-26Corroboration (republication citing Unit 42): windirstat.exe hash and campaign overviewhttps://gbhackers.com/10000-malware-loaders/
S04Malwarebytes Labs, Joshua Cannell2015-05-132026-09-26Historical technique precedent for Chrome Secure Preferences HMAC forging (Docro Hijacker's revived technique); no atomics from this source are shippedhttps://www.malwarebytes.com/blog/news/2015/05/winyahoo-pup-modifies-chrome-secure-preferences