2CLoader — Loader Delivering Vidar, Remus & XWorm

Windows PE-resource loader with anti-VM/anti-debug gating, Hell's Gate indirect syscalls, inline API hooking, and five persistence vectors, all sharing the name SecurityHealthService.exe
Threat
2CLoader
Severity
HIGH
Type
Malware Loader (Stealer/RAT delivery)
Platform
Windows
First Observed
August 2026 (Zscaler ThreatLabz)
Version
v0.1
Author
HuntPack
Confidence
High (primary vendor source + 3 corroborating)
Generated
2026-10-03
01

Executive Summary

2CLoader is a credential-theft delivery mechanism, not an end-goal payload. Its entire feature set exists to get Vidar, Remus, and XWorm onto a real victim machine undetected, then get out of the way. The loader stores its configuration and payload inside a Windows PE resource, decrypts that resource only after an eleven-factor environment score and a hard-fail VM/debugger/sandbox check both pass, then executes the decrypted payload via in-memory manual mapping (LoadPE), CLR hosting of a .NET assembly, or process hollowing into a suspended dllhost.exe. It persists under the literal name SecurityHealthService.exe, reused unchanged across the Run key, the RunOnce key, the Startup folder, a logon-triggered scheduled task, the Windows Load registry value, or a logon script, and it reports home over HTTP POST to aware-cr1[.]com/api/beacon with XOR-encrypted JSON status messages.

The highest-value defensive angle is not the evasion logic itself: racing a sandbox-detection scoring model is a contest defenders lose on a long enough timeline, and 2CLoader's indirect-syscall and anti-analysis layers leave no telemetry in standard Falcon event streams. What does leave telemetry, and does so on every single sample regardless of which anti-analysis branch it takes, is the fixed artifact set reporting has already confirmed: the string SecurityHealthService.exe appearing outside its real %SystemRoot%\System32\ location, and a dllhost.exe process missing the COM surrogate's mandatory /Processid: argument. Both are cheap, low-noise, high-fidelity hunts that do not depend on catching the loader's encryption chain or its syscall evasion.

Defender priority: hunt the SecurityHealthService.exe-outside-System32 pattern and the argument-less dllhost.exe pattern first (§8 Q1, Q2, Q4, Q6). These catch 2CLoader regardless of which infostealer or RAT it is staging to deliver that week, and they do not depend on the current, perishable C2 domain or sample hash set.
02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Forward
Tier 1 · PrimaryZscaler ThreatLabz blog (2026-09-30)Full technical teardown: PE-resource config structure, rolling-XOR/AES-GCM decryption chain, Hell's Gate indirect syscalls, anti-VM/anti-debug scoring, opt_flag/persistence_option tables, inline hook targets, C2 protocol, 20 SHA-256 hashes, C2 URL, payload URLYes
Tier 2 · CorroboratingCyber Security News (2026-10-01)Independently republishes (per "shared with CSN" attribution to Zscaler) the full IOC table, 20 hashes and 2 network indicators, plus the same technical summaryYes
Tier 2 · CorroboratingGBHackers (2026-10-01)Independently republishes (per "shared with GBhackers" attribution to Zscaler) the technical narrative and the 2 network IOCs; does not reproduce the hash listPartial
Tier 3 · Vendor AdvisoryBroadcom / Symantec Protection Bulletin (2026-10-02)Independent (non-Zscaler-sourced) vendor confirmation that the malware family exists and behaves as described; lists Symantec/Carbon Black detection signature names; publishes no atomic IOCs of its ownPartial

Decisions and provenance notes

Every technical detail in this pack traces to the Zscaler ThreatLabz primary research post. Cyber Security News and GBHackers both state the report was "shared with" them by Zscaler, meaning they independently fetched and republished Zscaler's own findings rather than performing independent reverse engineering. Strictly speaking, the loader's internal mechanics (config structure, encryption chain, hook targets) and its atomic IOCs have one originating source, not two. This pack ships the 20 SHA-256 hashes and both network indicators at prevent/high-or-critical severity on the practical basis that: (1) two independently-operated outlets each fetched and republished the identical indicator values from Zscaler, reducing transcription-error risk, and (2) Broadcom/Symantec, a fully independent vendor with its own telemetry, confirms the malware family's existence and general behavior (though it publishes no atomic values of its own to cross-check against). This nuance is called out here rather than glossed over; treat the atomic IOCs as single-origin, multiply-confirmed, not as independently discovered by three separate research teams.

All four fetched sources were saved verbatim to 2CLoader-Hunt-sources/ before this pack was built. No fetched source contained instructions directed at the research agent; all four were treated as data.

03

Hunt Brief & Attack Chain

Attack chain

StepTelemetryHunt Angle
1. Initial delivery (vector unspecified in public reporting) executes the 2CLoader binaryProcessRollup2Generic unusual-new-binary-execution baselining; not campaign-specific, out of scope for this pack's CQL
2. Anti-analysis gate: hard-fail VM check, score-based environment check, anti-debug, user-activity waitNone observable pre-decryption; loader exits silently on failureCoverage gap — see §15
3. Payload decrypted in memory from PE resource (rolling XOR → second XOR layer → AES-256-GCM → optional Xpress Huffman)None (no file write)Coverage gap — recoverable only via Zscaler's offline decrypt_payload.py against an acquired sample
4. Hell's Gate indirect syscalls resolve Nt* APIs from a freshly-mapped ntdll.dll copyNo raw syscall field in Falcon CQLCoverage gap — mitigated by Falcon sensor ML/behavioral prevention (M1040), not a hunt query
5. Payload executed via LoadPE (in-process mapping, command line spoofed to svchost.exe), RunPE (suspended dllhost.exe hollowed via NtCreateSection/SEC_IMAGE), or CLR hosting of a .NET assemblyProcessRollup2, ImageHashQ5 (svchost spoof), Q6 (dllhost no-arg), Q10 (CLR hosting anomaly)
6. Inline trampoline hooks (opt_flag 0x400) rewrite return values of InternetReadFile/WinHttpReadData, RegQueryValueEx, GetUserName, GetComputerName, GetVolumeInformation, GetEnvironmentVariableNone exposed via Falcon API-hook telemetryCoverage gap — downstream spoofed identifiers are not independently huntable from endpoint telemetry
7. Persistence established under the name SecurityHealthService.exe (Run, RunOnce, Startup folder, logon-triggered scheduled task, Load value) or UserInitMprLogonScriptAsepValueUpdate, RegGenericValueUpdate, ScheduledTaskRegisteredQ1, Q2, Q3
8. C2 registration/beacon over HTTP POST to aware-cr1[.]com/api/beacon, XOR-encrypted JSON bodyDnsRequest, NetworkConnectIP4Q7 (atomic), Q8 (behavioral beaconing)
9. Vidar, Remus, or XWorm payload executes and begins credential theft / remote accessOut of this pack's scope — payload-specific detections live in their own packsPivot to Vidar / Remus / XWorm hunt packs if any query above fires

Hunt hypotheses

#HypothesisMITREFalcon TelemetryExpected FPConfidence
H1Persistence appears as a Run/RunOnce/Load registry write or logon-triggered scheduled task literally named SecurityHealthService.exe pointing outside System32T1547.001, T1053.005AsepValueUpdate, RegGenericValueUpdate, ScheduledTaskRegisteredNear zeroHigh
H2LoadPE execution spoofs the process command line to svchost.exe while the on-disk image is not svchost.exeT1620, T1036ProcessRollup2Internal tools that rewrite their own display command line for cosmetic reasonsMedium-High
H3RunPE hollows a suspended dllhost.exe without the mandatory COM-surrogate /Processid: switchT1055.012ProcessRollup2Rare legacy COM scripting that invokes dllhost.exe directlyHigh
H4CLR-hosting execution loads mscoree.dll/clr.dll into a process that is not a typical .NET hostT1620, T1055ImageHash, ProcessRollup2Legitimate in-house .NET line-of-business tools, .NET backup/agent softwareMedium
H5Known C2 domain or payload-staging IP appears in DNS or network telemetryT1071.001DnsRequest, NetworkConnectIP4None (atomic indicator); perishable as infrastructure rotatesHigh
H6Regardless of rotation, the HTTP POST beacon to /api/beacon follows a regular-interval cadence distinguishable from normal trafficT1071.001, T1132.002NetworkConnectIP4 (beaconing pattern)SaaS sync/telemetry clients with similar polling cadenceMedium
H7Known 2CLoader sample hashes match process execution telemetryIndicator matchProcessRollup2None (exact hash); perishable as new builds get new hashesHigh
H8Rarely-used persistence vectors (Load value, UserInitMprLogonScript) show unexpected modification regardless of value nameT1547.001, T1037.001AsepValueUpdate, RegGenericValueUpdateNear zero; a small number of enterprise logon-script deployment tools use UserInitMprLogonScript legitimatelyHigh
04

Consolidated IOC Table

TypeValueConfidenceActionContextExpiry
URLhttps://aware-cr1[.]com/api/beaconHighdetect2CLoader C2 registration/beacon endpoint2027-04-03
Domainaware-cr1[.]comHighdetect2CLoader C2 host2027-04-03
URLhttp://62.60.226[.]185/t0907.exeHighdetect2CLoader in-the-wild payload-staging URL2027-04-03
IPv462.60.226[.]185Highdetect2CLoader payload-staging host2027-04-03
SHA-2565edcaa75a28e5cd700bf7643b275fe5d28649aa41a0711f391ec1fca795a4e8aHighdetect2CLoader sample2027-04-03
SHA-2560017821181723261801e24abb9d33c739f382889d46dbf46d320c87ac62e5ca6Highdetect2CLoader sample2027-04-03
SHA-25606185d74edbdc06f99095e96f74aa2e49a1cda2d02a294c11a9ac35a0231075eHighdetect2CLoader sample2027-04-03
SHA-256066d83b98a2081e0bb075c94376aebc9b0fd6499025cab1762d83bbb4d7576c6Highdetect2CLoader sample2027-04-03
SHA-2560a2ef2c360cf6e3e3e5d844ca03fecc31924ba0e8c3ecd8aefa778cae10fb19eHighdetect2CLoader sample2027-04-03
SHA-2560d2abd7d872196abd951f1d7ed6406486499e5d5acc04f28fcd4f45b1851711eHighdetect2CLoader sample2027-04-03
SHA-2560e4d6c385922938ecc1962dbc7e5950b086459b172b70a945414cffe4395aa27Highdetect2CLoader sample2027-04-03
SHA-2560ee6df8a309443c86c0bba8b376f39531513d3451b46bebd4b79bb9d5bf8dcb1Highdetect2CLoader sample2027-04-03
SHA-2561337ed6fe9c6205b569670a40eab42b51ba69c5c1724d61474e8595acd90ecfbHighdetect2CLoader sample2027-04-03
SHA-2561447ed0893b9095f671e2f35a2a0127890040b5459534813b0f83c3e1fffa0bfHighdetect2CLoader sample2027-04-03
SHA-2561b195181a2603b0b2608d49134af8c170225c2e06873c1fe5cd537db9018807fHighdetect2CLoader sample2027-04-03
SHA-256246717653bc2ae2e09036bac56c9d79940c652972a73f4c6aa9b925c28cce095Highdetect2CLoader sample2027-04-03
SHA-2562ad9b5e1c9952e95cfa55a4255e952962b6208ae1ca610caf1c7c2383be7e74bHighdetect2CLoader sample2027-04-03
SHA-2562c786f7009cc5e1fba5471a88b23b34dce6e1578ee9f664ec62bf48227ba384bHighdetect2CLoader sample2027-04-03
SHA-2562d43d592630ad1e012da63ef7279f95dd4a8e94964e12ca2f996051875574fa6Highdetect2CLoader sample2027-04-03
SHA-25630cf47caf9700a74a8ea4a728b8b7c88cb1f8e22261b4ac01575b112c1e224caHighdetect2CLoader sample2027-04-03
SHA-2563286ff477ccd888479b96d0ffb2bd53962862db7267a4bd1c8d8f8c22fec63d4Highdetect2CLoader sample2027-04-03
SHA-256331fd58d489e9fb888a5e4193d0e36f6ff29063808c59a164d98e26835054972Highdetect2CLoader sample2027-04-03
SHA-25645d46e7064ba4b4cb578659f73ee354ad26cf2cc1e7f59bd3d15028e1e46a38bHighdetect2CLoader sample2027-04-03
SHA-2564c16f5ebd5c633b7a793ffa2cd96daddc5a503d82ed4fbe636109d89164ec02bHighdetect2CLoader sample2027-04-03
StringSecurityHealthService.exeHighhuntReused persistence value/task name across all persistence vectors; the real Windows binary of this name lives only in %SystemRoot%\System32\2027-01-03
String%TEMP%\aw_[32-hex-ID].lkMediumhuntSingle-instance lock-file pattern (opt_flag 0x100)2027-01-03
StringWin64.Loader.2CLoaderHighenrichZscaler detection/threat name for sandbox and multilayer platform correlation2026-11-03
05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk
Windows process executionProcessRollup2 / SyntheticProcessRollup2HighLow — broad Falcon sensor coverage
Windows registry (autostart persistence)AsepValueUpdate / RegGenericValueUpdateHighLow
Windows scheduled tasksScheduledTaskRegisteredHighLow
Module load (CLR hosting of .NET payloads)ImageHashMediumLow-Medium
Network / DNS (C2 beacon)NetworkConnectIP4, DnsRequestHighMedium — Falcon network telemetry has no HTTP URI-path visibility, so /api/beacon path-level hunting needs proxy or DNS-layer logs, not CQL alone
Kernel syscall layer (Hell's Gate indirect syscalls)No raw syscall field exposed via Falcon CQLMediumHigh — genuine coverage gap; rely on Falcon ML/behavioral prevention (M1040) rather than a hunt query
File system (temp lock file, dropped payload)No generically-verified "any file create" CQL field in this skill's reference setLowMedium — use native Sysmon EventID 11 instead (§7)
06

ATT&CK Mapping

TacticTechniqueNameObserved Behavior
Defense EvasionT1027Obfuscated Files or InformationPE-resource payload encrypted with rolling XOR, a second XOR layer, then AES-256-GCM; key derived from the SHA-256 of the loader's own .text section
Defense EvasionT1140Deobfuscate/Decode Files or InformationMulti-stage runtime decrypt (rolling XOR → XOR layer 2 → AES-GCM → optional Xpress Huffman decompression) before payload execution
Defense EvasionT1497.001Virtualization/Sandbox Evasion: System ChecksHard-fail CPUID hypervisor check (blocklists VMware/VirtualBox/KVM/Xen/Parallels/QEMU TCG, allowlists Hyper-V) plus an 11-factor score model (process count, CPU count, RAM, disk size, uptime, ProcessDebugPort, recent-files count, screen resolution, username/computer-name blocklist, cursor movement); exits before decryption if score < 8
Defense EvasionT1497.003Virtualization/Sandbox Evasion: Time Based EvasionAnti-debug timing loop (200ms threshold), decryption-time check (3,000,000-iteration loop completing in under 2,000,000 cycles flips the SHA-256 key material), user-activity wait loop (cursor/mouse/Enter, up to 5s)
Defense EvasionT1622Debugger EvasionIsDebuggerPresent and CheckRemoteDebuggerPresent checks; payload decryption skipped if a debugger is detected
Defense EvasionT1106Native APIHell's Gate indirect syscalls for NtProtectVirtualMemory, NtUnmapViewOfSection, NtQueryInformationProcess, NtDelayExecution, NtSetContextThread, NtGetContextThread via a freshly-mapped ntdll.dll copy and syscall-gadget scanning; falls back to GetProcAddress if setup fails
Defense EvasionT1620Reflective Code LoadingLoadPE performs in-process manual PE mapping (fixes relocations/imports, updates PEB->ImageBaseAddress, starts a new thread); CLR hosting loads .NET payloads directly from memory via mscoree.dll
Defense EvasionT1055.012Process Injection: Process HollowingRunPE creates a suspended process (default dllhost.exe), marks a temp file DeletePending, maps the payload via NtCreateSection(SEC_IMAGE), redirects the suspended primary thread to the payload entry point
Defense EvasionT1036.005Masquerading: Match Legitimate Name or LocationPersistence entries and the scheduled task use the name SecurityHealthService.exe, the real Windows Security Health Service binary name, outside its real System32 location
Defense EvasionT1036Masquerading (command-line spoofing)LoadPE spoofs the displayed process command line to svchost.exe
Defense EvasionT1134.004Access Token Manipulation: Parent PID Spoofingopt_flag 0x80 spoofs the parent process as explorer.exe and enables SeDebugPrivilege for the optional payload process
Defense EvasionT1562 *Impair Defenses (host-identity spoofing via inline hooks)Inline trampoline hooks on InternetReadFile/WinHttpReadData, RegQueryValueEx, GetUserName, GetComputerName, GetVolumeInformation, GetEnvironmentVariable rewrite return values (IPv4 octets, hardware/registry identifiers, username, hostname, volume serial, environment variables) with properly-formatted but false data
PersistenceT1547.001Registry Run Keys / Startup Folderpersistence_option flags write HKCU...Run, HKCU...RunOnce, a Startup-folder copy, and the HKCU...Windows Load value, all under the name SecurityHealthService.exe
PersistenceT1053.005Scheduled TaskLogonTrigger scheduled task named SecurityHealthService.exe
PersistenceT1037.001Boot or Logon Initialization Scripts: Logon Script (Windows)UserInitMprLogonScript value under HKCU\Environment
DiscoveryT1082System Information DiscoveryScore-based environment profiling (CPU count, RAM, disk size, uptime, screen resolution) feeds the anti-VM scoring model
Command and ControlT1071.001Application Layer Protocol: Web ProtocolsHTTP POST to aware-cr1[.]com/api/beacon carrying JSON registration/status messages
Command and ControlT1132.002Data Encoding: Non-Standard EncodingOutbound JSON payload XOR-encrypted with a static 32-byte key before transmission

* T1562 is the closest ATT&CK umbrella for inline-hook host-identity spoofing; no sub-technique cleanly covers "rewrite API return values with plausible false data," so this row is flagged as an analyst judgment call rather than a reporting-confirmed procedure mapping.

07

Native Audit-Log Hunts

These checks cover the parts of the attack chain that Falcon CQL cannot see directly (no raw syscall field, no generic file-create field verified against this skill's Falcon reference set). They require Sysmon or native Windows auditing in addition to the Falcon sensor.

1. Lock-file artifact (Sysmon EventID 11 — FileCreate)

Field: TargetFilename
Pattern: C:\Users\*\AppData\Local\Temp\aw_[0-9a-f]{32}\.lk
Notes: opt_flag 0x100 creates this file with FILE_FLAG_DELETE_ON_CLOSE as a
single-instance mutex. The file is normally gone by the time an analyst
looks, so alert on CREATE, not on current presence.

2. .NET CLR module load into a non-.NET host (Sysmon EventID 7 — ImageLoad)

Field: ImageLoaded
Pattern: ...\mscoree.dll OR ...\clr.dll OR ...\clrjit.dll
Exclude: parent/host process already known to be a .NET application
Cross-reference against CQL Q10 (§8) which performs the same hunt on
Falcon's ImageHash event for hosts where Sysmon is not deployed.

3. Scheduled task creation (Windows Security EventID 4698 / 4702)

Field: TaskName
Pattern: SecurityHealthService.exe (or SecurityHealthService)
Notes: complements Falcon's ScheduledTaskRegistered event (CQL Q2); use
this where Advanced Audit Policy is enabled but the Falcon sensor is not
yet deployed or is in a degraded state.

4. dllhost.exe process creation without /Processid: (Windows Security EventID 4688)

Field: NewProcessName, CommandLine
Pattern: NewProcessName ends \dllhost.exe AND CommandLine does not contain
"/Processid:"
Prerequisite: "Include command line in process creation events" GPO must
be enabled (Computer Configuration > Administrative Templates > System >
Audit Process Creation), or CommandLine will be blank in the event.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Run/RunOnce Persistence Masquerading as SecurityHealthService.exe
CONF HIGHFP LOWCOST LOW

Looks for: a Run or RunOnce registry value literally named SecurityHealthService.exe pointing somewhere other than the real System32 binary. FP: near zero — the exact value name colliding with an unrelated legitimate application is rare, and the real Windows binary is explicitly excluded.

// HUNT: Run/RunOnce persistence masquerading as SecurityHealthService.exe
// MITRE: T1547.001
// CONF: high
// FP: low
// COST: low
// REQUIRES: AsepValueUpdate or RegGenericValueUpdate telemetry (registry monitoring enabled)
// FALSE POSITIVES: third-party software coincidentally reusing the exact value name (not observed)
#event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/
| RegObjectName = /\\Microsoft\\Windows\\CurrentVersion\\(Run|RunOnce)$/i
| RegValueName = /^SecurityHealthService\.exe$/i
| RegStringValue != /\\Windows\\System32\\SecurityHealthService\.exe$/i
| table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue])
Q2 · Logon-Triggered Scheduled Task Named SecurityHealthService.exe
CONF HIGHFP LOWCOST LOW

Looks for: a scheduled task named SecurityHealthService.exe whose target executable is not the real System32 binary. FP: near zero.

// HUNT: Scheduled task persistence masquerading as SecurityHealthService.exe
// MITRE: T1053.005
// CONF: high
// FP: low
// COST: low
// REQUIRES: ScheduledTaskRegistered telemetry
// FALSE POSITIVES: none identified
#event_simpleName=ScheduledTaskRegistered
| TaskName = /^SecurityHealthService\.exe$/i
| TaskExecutable != /\\Windows\\System32\\SecurityHealthService\.exe$/i
| table([@timestamp, ComputerName, UserName, TaskName, TaskExecutable, TaskAuthor])
Q3 · Rare Persistence Locations: Load Value & UserInitMprLogonScript
CONF HIGHFP LOWCOST LOW

Looks for: modification of the HKCU Load value or the HKCU\Environment UserInitMprLogonScript value, both exceptionally rare persistence vectors regardless of the value written. FP: near zero; a small number of enterprise logon-script deployment tools legitimately use UserInitMprLogonScript.

// HUNT: Load value / logon-script persistence (rare registry locations)
// MITRE: T1547.001, T1037.001
// CONF: high
// FP: low
// COST: low
// REQUIRES: AsepValueUpdate or RegGenericValueUpdate telemetry
// FALSE POSITIVES: enterprise logon-script deployment tooling using UserInitMprLogonScript legitimately
#event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/
| (RegObjectName = /\\Microsoft\\Windows NT\\CurrentVersion\\Windows$/i and RegValueName = /^Load$/i) or (RegObjectName = /\\Environment$/i and RegValueName = /^UserInitMprLogonScript$/i)
| table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue])
Q4 · Process Execution Masquerading as SecurityHealthService.exe
CONF HIGHFP LOWCOST LOW

Looks for: any process named SecurityHealthService.exe actually executing from a path other than the real System32 binary, regardless of which persistence vector launched it. FP: near zero.

// HUNT: Process execution masquerading as SecurityHealthService.exe
// MITRE: T1036.005
// CONF: high
// FP: low
// COST: low
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2 telemetry
// FALSE POSITIVES: none identified
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName = /^SecurityHealthService\.exe$/i
| ImageFileName != /\\Windows\\System32\\SecurityHealthService\.exe$/i
| table([@timestamp, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
Q5 · LoadPE Command-Line Spoof to svchost.exe
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: a process whose displayed command line begins with svchost.exe while its on-disk image file name is not svchost.exe — the LoadPE path's command-line spoof. FP: medium — some legitimate relaunch/updater tools rewrite their own displayed command line.

// HUNT: LoadPE command-line masquerade as svchost.exe
// MITRE: T1620, T1036
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2 telemetry
// FALSE POSITIVES: internal update/relaunch tooling that intentionally rewrites its own displayed command line
// TUNING: exclude known internal packaging/update tools by SHA256HashData or ParentBaseFileName after a baseline run; validate CommandLine casing/quoting variants before promoting to Prevent
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| CommandLine = /^svchost\.exe\b/i
| FileName != /^svchost\.exe$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
Q6 · RunPE Process Hollowing: dllhost.exe Without COM Surrogate Argument
CONF HIGHFP MEDIUMCOST LOW

Looks for: dllhost.exe launched without the /Processid:{GUID} switch that every legitimate DCOM-launched COM surrogate carries. FP: medium pending environment baseline — flagged medium out of caution even though no legitimate no-arg invocation pattern is documented.

// HUNT: dllhost.exe process hollowing (RunPE default target)
// MITRE: T1055.012
// CONF: high
// FP: medium
// COST: low
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2 telemetry with command-line capture
// FALSE POSITIVES: rare legacy COM scripting or management tooling that invokes dllhost.exe directly without the DCOM launcher
// TUNING: run over a 30-day baseline per host group before alerting; allowlist any confirmed legitimate no-arg dllhost.exe source by ParentBaseFileName before promoting to Prevent
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName = /^dllhost\.exe$/i
| CommandLine != /\/Processid:/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine, SHA256HashData])
Q7 · Atomic C2 Indicator Match (Domain / IP)
CONF HIGHFP LOWCOST LOW

Looks for: DNS resolution of the known 2CLoader C2 domain or a direct connection to the known payload-staging IP. FP: near zero (atomic indicator); perishable as infrastructure rotates — re-run against current threat intel before relying on this long-term.

// HUNT: 2CLoader C2 domain / payload-staging IP
// MITRE: T1071.001
// CONF: high
// FP: low
// COST: low
// REQUIRES: DnsRequest and/or NetworkConnectIP4 telemetry
// FALSE POSITIVES: none identified (atomic indicator)
#event_simpleName=/DnsRequest|NetworkConnectIP4/
| (DomainName = /^aware-cr1\.com$/i) or (RemoteAddressIP4 = "62.60.226.185")
| table([@timestamp, ComputerName, UserName, DomainName, RemoteAddressIP4, RemotePort, ContextBaseFileName])
Q8 · Behavioral C2 Beaconing Cadence (Domain/IP-Agnostic)
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: host/destination pairs connecting on a regular 5-minute cadence for over an hour with a low per-bucket connection count, a shape consistent with 2CLoader's periodic HTTP POST status beacon, regardless of which IP it is currently using. FP: medium — legitimate SaaS sync/telemetry clients poll on similar cadences; tune with the ContextBaseFileName projection.

// HUNT: Periodic beaconing consistent with 2CLoader's HTTP POST status reporting
// MITRE: T1071.001, T1132.002
// CONF: medium
// FP: medium
// COST: medium
// REQUIRES: NetworkConnectIP4 telemetry
// FALSE POSITIVES: legitimate cloud-sync, telemetry, or EDR-agent callback traffic with similar polling cadence
// TUNING: exclude known-benign ContextBaseFileName values (sync clients, update agents, the EDR sensor itself) after baselining; raise BucketsActive / lower AvgConnsPerBucket thresholds to fit environment norms
// LOOKBACK: 7d -- set the window with the console time picker
#event_simpleName=NetworkConnectIP4
| !cidr(RemoteAddressIP4, subnet="10.0.0.0/8")
| !cidr(RemoteAddressIP4, subnet="172.16.0.0/12")
| !cidr(RemoteAddressIP4, subnet="192.168.0.0/16")
| Bucket5m := @timestamp - (@timestamp % 300000)
| groupBy([ComputerName, RemoteAddressIP4, ContextBaseFileName, Bucket5m], function=count(as=ConnsInBucket), limit=20000)
| groupBy([ComputerName, RemoteAddressIP4, ContextBaseFileName], function=[count(as=BucketsActive), avg(ConnsInBucket, as=AvgConnsPerBucket)], limit=5000)
| BucketsActive > 12
| AvgConnsPerBucket < 5
| sort(BucketsActive, order=desc)
| table([ComputerName, RemoteAddressIP4, ContextBaseFileName, BucketsActive, AvgConnsPerBucket])
Q9 · Known 2CLoader Sample Hash Sweep
CONF HIGHFP LOWCOST LOW

Looks for: exact SHA-256 match against the 20 known 2CLoader samples published by Zscaler ThreatLabz. FP: near zero (exact hash); perishable as new builds get new hashes — re-run against updated hash feeds, not a one-time check.

// HUNT: Known 2CLoader sample hash sweep
// MITRE: Indicator Match (supports all TTPs in this pack)
// CONF: high
// FP: low
// COST: low
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2 telemetry
// FALSE POSITIVES: none identified (exact hash match)
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| in(field=SHA256HashData, values=["5edcaa75a28e5cd700bf7643b275fe5d28649aa41a0711f391ec1fca795a4e8a","0017821181723261801e24abb9d33c739f382889d46dbf46d320c87ac62e5ca6","06185d74edbdc06f99095e96f74aa2e49a1cda2d02a294c11a9ac35a0231075e","066d83b98a2081e0bb075c94376aebc9b0fd6499025cab1762d83bbb4d7576c6","0a2ef2c360cf6e3e3e5d844ca03fecc31924ba0e8c3ecd8aefa778cae10fb19e","0d2abd7d872196abd951f1d7ed6406486499e5d5acc04f28fcd4f45b1851711e","0e4d6c385922938ecc1962dbc7e5950b086459b172b70a945414cffe4395aa27","0ee6df8a309443c86c0bba8b376f39531513d3451b46bebd4b79bb9d5bf8dcb1","1337ed6fe9c6205b569670a40eab42b51ba69c5c1724d61474e8595acd90ecfb","1447ed0893b9095f671e2f35a2a0127890040b5459534813b0f83c3e1fffa0bf","1b195181a2603b0b2608d49134af8c170225c2e06873c1fe5cd537db9018807f","246717653bc2ae2e09036bac56c9d79940c652972a73f4c6aa9b925c28cce095","2ad9b5e1c9952e95cfa55a4255e952962b6208ae1ca610caf1c7c2383be7e74b","2c786f7009cc5e1fba5471a88b23b34dce6e1578ee9f664ec62bf48227ba384b","2d43d592630ad1e012da63ef7279f95dd4a8e94964e12ca2f996051875574fa6","30cf47caf9700a74a8ea4a728b8b7c88cb1f8e22261b4ac01575b112c1e224ca","3286ff477ccd888479b96d0ffb2bd53962862db7267a4bd1c8d8f8c22fec63d4","331fd58d489e9fb888a5e4193d0e36f6ff29063808c59a164d98e26835054972","45d46e7064ba4b4cb578659f73ee354ad26cf2cc1e7f59bd3d15028e1e46a38b","4c16f5ebd5c633b7a793ffa2cd96daddc5a503d82ed4fbe636109d89164ec02b"])
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, SHA256HashData, ParentBaseFileName])
Q10 · In-Memory CLR Hosting Anomaly (.NET Payload Execution)
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: mscoree.dll, clr.dll, clrjit.dll, mscorlib.ni.dll, or mscoreei.dll loaded into a process that is not a recognized .NET host, consistent with 2CLoader's CLR-hosting execution path (fl 0x2). FP: medium — legitimate in-house .NET line-of-business tools and .NET-based agents will also trip this.

// HUNT: CLR hosting of a .NET payload by a non-.NET process
// MITRE: T1620, T1055
// CONF: medium
// FP: medium
// COST: medium
// REQUIRES: ImageHash telemetry correlated with ProcessRollup2 on aid + TargetProcessId
// FALSE POSITIVES: legitimate in-house .NET applications, .NET-based backup/agent/management software
// TUNING: extend the FileName exclusion list with your environment's known legitimate .NET hosts after a baseline run; validate before promoting beyond Investigate-only
#event_simpleName=ImageHash
| rename(field=[[FileName, Dll_Loaded], [FilePath, Dll_Path]])
| selfJoinFilter(field=[aid, TargetProcessId], where=[
    {#event_simpleName = /ProcessRollup2/},
    {FileName != /(powershell|pwsh|dotnet|w3wp|devenv|MSBuild)\.exe/i},
    {#event_simpleName = ImageHash}
])
| in(field=Dll_Loaded, values=["mscoree.dll", "clr.dll", "clrjit.dll", "mscorlib.ni.dll", "mscoreei.dll"], ignoreCase=true)
| groupBy([aid, ComputerName, TargetProcessId], function=collect([FileName, CommandLine, Dll_Loaded, Dll_Path]))
09

CrowdStrike Custom IOA Recommendations

IOA NamePatternExclusionsDeployment Path
SecurityHealthService MasqueradeProcess, registry autostart value, or scheduled task named SecurityHealthService.exe where the target path is not %SystemRoot%\System32\SecurityHealthService.exe (built from Q1, Q2, Q4)None identified; the real binary path is explicitly excluded by designDeploy direct to Detect; promote to Prevent after a 14-day burn-in with zero legitimate hits (see §11)
dllhost.exe Without COM Surrogate Argumentdllhost.exe process creation lacking the /Processid: switch (built from Q6)Any confirmed legitimate internal tooling invoking dllhost.exe directly — allowlist by ParentBaseFileName or SHA256HashData after baselineStart in Detect for a 30-day baseline per host group; most environments can promote to Prevent faster than the masquerade IOA since the legitimate no-arg case is undocumented
2CLoader C2 BeaconDNS/network match for aware-cr1.com or 62.60.226.185 (built from Q7)None — atomic indicatorDeploy to Detect. Both network indicators are single-origin (all public reporting traces to one Zscaler disclosure, see §2), which does not meet this pack's two-independent-source bar for a blocking posture. Promote to Prevent at the network layer (firewall/DNS sinkhole) once a second independent vendor publishes the same values, or once a local hit is confirmed as true-positive in your own telemetry. Expect to retire this IOA as infrastructure rotates: re-check against current intel before the 2027-04-03 expiry
10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,5edcaa75a28e5cd700bf7643b275fe5d28649aa41a0711f391ec1fca795a4e8a,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,0017821181723261801e24abb9d33c739f382889d46dbf46d320c87ac62e5ca6,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,06185d74edbdc06f99095e96f74aa2e49a1cda2d02a294c11a9ac35a0231075e,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,066d83b98a2081e0bb075c94376aebc9b0fd6499025cab1762d83bbb4d7576c6,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,0a2ef2c360cf6e3e3e5d844ca03fecc31924ba0e8c3ecd8aefa778cae10fb19e,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,0d2abd7d872196abd951f1d7ed6406486499e5d5acc04f28fcd4f45b1851711e,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,0e4d6c385922938ecc1962dbc7e5950b086459b172b70a945414cffe4395aa27,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,0ee6df8a309443c86c0bba8b376f39531513d3451b46bebd4b79bb9d5bf8dcb1,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,1337ed6fe9c6205b569670a40eab42b51ba69c5c1724d61474e8595acd90ecfb,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,1447ed0893b9095f671e2f35a2a0127890040b5459534813b0f83c3e1fffa0bf,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,1b195181a2603b0b2608d49134af8c170225c2e06873c1fe5cd537db9018807f,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,246717653bc2ae2e09036bac56c9d79940c652972a73f4c6aa9b925c28cce095,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,2ad9b5e1c9952e95cfa55a4255e952962b6208ae1ca610caf1c7c2383be7e74b,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,2c786f7009cc5e1fba5471a88b23b34dce6e1578ee9f664ec62bf48227ba384b,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,2d43d592630ad1e012da63ef7279f95dd4a8e94964e12ca2f996051875574fa6,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,30cf47caf9700a74a8ea4a728b8b7c88cb1f8e22261b4ac01575b112c1e224ca,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,3286ff477ccd888479b96d0ffb2bd53962862db7267a4bd1c8d8f8c22fec63d4,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,331fd58d489e9fb888a5e4193d0e36f6ff29063808c59a164d98e26835054972,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,45d46e7064ba4b4cb578659f73ee354ad26cf2cc1e7f59bd3d15028e1e46a38b,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
sha256,4c16f5ebd5c633b7a793ffa2cd96daddc5a503d82ed4fbe636109d89164ec02b,detect,high,2027-04-03,2CLoader loader sample (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
domain,aware-cr1.com,detect,high,2027-04-03,2CLoader C2 callout domain (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
ipv4,62.60.226.185,detect,high,2027-04-03,2CLoader payload-staging IP t0907.exe (single-origin intel: detect-only until independently corroborated),campaign:2CLoader
Behavioral SignaturesSOC playbook / IOA patterns
[Persistence masquerade]
Name/value/task = SecurityHealthService.exe
Target path NOT %SystemRoot%\System32\SecurityHealthService.exe
Locations: HKCU...CurrentVersion\Run, HKCU...CurrentVersion\RunOnce,
Startup folder, logon-triggered Scheduled Task, HKCU...CurrentVersion\Windows (Load)

[Rare persistence]
HKCU\Environment\UserInitMprLogonScript modified (any value)

[Command-line masquerade]
CommandLine starts with "svchost.exe" AND on-disk FileName != svchost.exe

[Process hollowing]
FileName = dllhost.exe AND CommandLine does NOT contain "/Processid:"

[Lock-file artifact]
%TEMP%\aw_[32 hex chars].lk created with FILE_FLAG_DELETE_ON_CLOSE

[CLR hosting anomaly]
mscoree.dll / clr.dll / clrjit.dll loaded into a non-.NET host process
Named Malware / Toolingcontext
Loader:          2CLoader
Zscaler detect:  Win64.Loader.2CLoader
Delivers:        Vidar (infostealer), Remus (infostealer), XWorm (RAT)
Technique names: Hell's Gate (indirect syscalls)
Symantec/CB sigs (independent vendor, see Broadcom bulletin):
  SONAR.SuspBeh!gen66, SONAR.TCP!gen1, PUA.Gen.2, Trojan Horse,
  Trojan.Dacic!ATN, Trojan.Gen.MBT, Trojan.Sabsik!ATN, WS.Malware.1,
  Heur.AdvML.A!300/400/500, Heur.AdvML.B!100/200, Heur.AdvML.C
Patch / ASR / Baseline AuditPowerShell one-liners
(Get-MpPreference).AttackSurfaceReductionRules_Ids
(Get-MpPreference).AttackSurfaceReductionRules_Actions
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard |
  Select-Object SecurityServicesRunning, VirtualizationBasedSecurityStatus
(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name RunAsPPL -EA SilentlyContinue).RunAsPPL
Get-AppLockerPolicy -Effective | Select-Object -ExpandProperty RuleCollections
auditpol /get /subcategory:"Process Creation"
11

Detection Validation Gates

GateCheckStatus
Telemetry readyConfirm ProcessRollup2/SyntheticProcessRollup2, AsepValueUpdate/RegGenericValueUpdate, ScheduledTaskRegistered, DnsRequest, NetworkConnectIP4, and ImageHash are flowing for in-scope hostsRequired before deployment
Benign baselineRun Q1, Q2, Q3, Q4, Q6 over a 30-day historical window on a representative fleet subset before enabling any alerting; expect zero hitsRun before promotion
Positive testIn an isolated lab VM: write a Run-key value named SecurityHealthService.exe pointing outside System32 (confirms Q1, Q4); launch dllhost.exe manually with no /Processid: argument (confirms Q6)Run before promotion
Promotion criteria14 consecutive days with zero legitimate (non-test) hits on Q1, Q2, Q4, and Q6 before moving the matching Custom IOA from Detect to PreventGate for IOA promotion
12

Hardening — Tiered

Immediate (this week)
  • Enable the LSASS-credential-theft ASR rule in Block mode (GUID 9E6C4E1F-7D60-472F-BA1A-A39EF669E4B2) — MITRE M1040 (Behavior Prevention on Endpoint). Does not stop 2CLoader itself but blunts the downstream Vidar/Remus credential-theft impact if the loader lands. CIS Microsoft 365 Apps/Windows Benchmark, section 18.9.47, sub-rule 5.1.2 (L1, Block).
  • Enable full command-line process-creation auditing (Event 4688 with command line + Sysmon EventID 1) — MITRE M1047 (Audit). Required for Q5/Q6 hunts and the native EventID 4688 hunt in §7 to return usable data. Microsoft Security Baseline: Computer Configuration > Administrative Templates > System > Audit Process Creation > Include command line in process creation events = Enabled.
  • Set the Falcon prevention policy to full Block (ML + sensor-based detections, not Detect-only) — MITRE M1040. This is the only control in this pack that directly contests 2CLoader's Hell's Gate indirect syscalls and in-memory execution, since neither is independently huntable via CQL (see §15 gaps).
Near Term (1-4 weeks, pilot ring first)
  • AppLocker/WDAC path rule denying execution from %TEMP% and %APPDATA%\Local\Temp for unsigned binaries — MITRE M1038 (Execution Prevention). Reduces the viability of the drop-and-run pattern 2CLoader and its payloads use from temp paths. Microsoft Security Baseline AppLocker guidance; DISA STIG WN11-00-000030 (Application Control) covers the equivalent intent for government environments. Deploy in Audit mode first, confirm no legitimate workflow trips, then flip to Enforce.
  • Restrict registry write permissions on sensitive autostart keys (Run, RunOnce, the Windows NT\CurrentVersion\Windows Load value, HKCU\Environment) for standard users via GPO — MITRE M1024 (Restrict Registry Permissions). ⚠ best-practice, no single CIS benchmark line item covers this exact ACL change; it follows CIS Benchmark intent for restricting user-writable autostart locations (CIS Microsoft Windows Benchmark §18.x autostart hardening family) without a one-to-one control number.
Strategic (1-3 months)
  • Deploy Credential Guard fleet-wide (VBS-isolated LSASS) — MITRE M1025, M1043 (Privileged Process Integrity, Credential Access Protection). Blunts Vidar/Remus's ultimate objective even when 2CLoader itself succeeds in landing. CIS Microsoft Windows Benchmark, section 18.9.45, sub-rule 5.1 (L1, Enabled with UEFI lock). Pilot first: breaks some legacy SSO products and older third-party AV that hooks LSASS.
  • Egress filtering / DNS-layer blocking for newly-registered and unclassified domains — MITRE M1037 (Filter Network Traffic). Reduces C2 callout success for rotated infrastructure not yet IOC-listed, complementing the atomic domain/IP block in §10. ⚠ best-practice, no single CIS/STIG line item; follows NIST SP 800-53 SC-7 (Boundary Protection) intent.
13

Deployable Playbooks

Playbook 1 — Enable LSASS Credential-Theft ASR Rule

Prerequisites: Windows 10 1709+/Server 2019+, Microsoft Defender Antivirus active (passive or primary), local admin or GPO push access.
Reboot required: No.

Set-MpPreference -AttackSurfaceReductionRules_Ids '9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2' `
                 -AttackSurfaceReductionRules_Actions Enabled

# Verify
(Get-MpPreference).AttackSurfaceReductionRules_Ids
(Get-MpPreference).AttackSurfaceReductionRules_Actions
# Watch Defender Event ID 1121 (blocked) / 1122 (audited) for this rule GUID

Rollback:

Set-MpPreference -AttackSurfaceReductionRules_Ids '9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2' `
                 -AttackSurfaceReductionRules_Actions AuditMode
# or -AttackSurfaceReductionRules_Actions Disabled to fully revert

Playbook 2 — Enable Command-Line Process Auditing & PowerShell ScriptBlock Logging

Prerequisites: Local or domain GPO access; Windows 10/Server 2016+.
Reboot required: No — takes effect on next process creation / PowerShell session.

# Command-line auditing (Event 4688 with CommandLine populated)
auditpol /set /subcategory:"Process Creation" /success:enable
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' `
  -Name 'ProcessCreationIncludeCmdLine_Enabled' -Value 1 -PropertyType DWORD -Force | Out-Null

# PowerShell ScriptBlock logging
New-Item -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging' `
  -Name 'EnableScriptBlockLogging' -Value 1 -PropertyType DWORD -Force | Out-Null

# Verify
(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' `
  -Name ProcessCreationIncludeCmdLine_Enabled).ProcessCreationIncludeCmdLine_Enabled
auditpol /get /subcategory:"Process Creation"

Rollback:

auditpol /set /subcategory:"Process Creation" /success:disable
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' `
  -Name 'ProcessCreationIncludeCmdLine_Enabled' -EA SilentlyContinue
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging' `
  -Name 'EnableScriptBlockLogging' -EA SilentlyContinue

Playbook 3 — AppLocker Deny-Execution Path Rule for Temp Directories

Prerequisites: AppLocker policy infrastructure (GPO), Application Identity service (AppIDSvc) available to start, Windows 10/11 Enterprise or Server.
Reboot required: No, but the Application Identity service must be running (not a reboot, a service start).

# Start and set Application Identity service to auto
Set-Service -Name AppIDSvc -StartupType Automatic
Start-Service -Name AppIDSvc

# Example path-rule deny (apply via GPO AppLocker console for fleet deployment;
# this PowerShell form is for single-host testing/validation)
$rule = New-AppLockerPolicy -RuleType Path -User Everyone -Action Deny `
  -PathCondition "%OSDRIVE%\Users\*\AppData\Local\Temp\*.exe","%OSDRIVE%\Windows\Temp\*.exe"
Set-AppLockerPolicy -PolicyObject $rule -Merge

# Verify (Audit mode first)
Get-AppLockerPolicy -Effective | Select-Object -ExpandProperty RuleCollections

Rollback:

# Remove the merged rule collection or set the Enforcement mode back to "Not configured" / AuditOnly
Set-AppLockerPolicy -PolicyObject (New-AppLockerPolicy -RuleType Path -User Everyone -Action Deny `
  -PathCondition "%OSDRIVE%\Users\*\AppData\Local\Temp\*.exe","%OSDRIVE%\Windows\Temp\*.exe") -Merge -EA SilentlyContinue
# then remove via the AppLocker GPO console, or:
Set-Service -Name AppIDSvc -StartupType Manual

Playbook 4 — Enable Credential Guard

Prerequisites: Windows 10/11 Enterprise or Server 2016+, UEFI, Secure Boot, TPM 2.0, VBS-capable CPU. Pilot before fleet rollout — known to break some legacy SSO products and older third-party AV that hooks LSASS.
Reboot required: Yes.

$dg = 'HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard'
New-ItemProperty -Path $dg -Name 'EnableVirtualizationBasedSecurity' -Value 1 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $dg -Name 'RequirePlatformSecurityFeatures' -Value 3 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name 'LsaCfgFlags' -Value 1 -PropertyType DWORD -Force | Out-Null
Write-Output "Credential Guard configured. REBOOT REQUIRED."

# Verify (after reboot)
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard |
  Select-Object SecurityServicesRunning, VirtualizationBasedSecurityStatus
# SecurityServicesRunning should include 1; VirtualizationBasedSecurityStatus should be 2

Rollback:

$dg = 'HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard'
Set-ItemProperty -Path $dg -Name 'EnableVirtualizationBasedSecurity' -Value 0
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name 'LsaCfgFlags' -Value 0
# Reboot required to take effect
14

Containment Runbook

PhaseActionsOwnerEvidence to Capture
1. IsolateNetwork-contain the affected host via Falcon RTR; block aware-cr1.com and 62.60.226.185 at DNS/firewall org-wide; suspend/disable the affected user's domain credentials pending a presumed Vidar/Remus credential-theft outcomeIR Lead / SOCIsolation timestamp, blocked-indicator confirmation, account-suspension ticket
2. EradicateTerminate the identified 2CLoader process and any RunPE-hollowed dllhost.exe tree; remove all persistence entries (Run/RunOnce/Startup/Load/Scheduled Task/UserInitMprLogonScript named SecurityHealthService.exe outside System32); delete the dropped payload and any %TEMP%\aw_*.lk lock file; run a full scan with current signatures (Win64.Loader.2CLoader)IR / Endpoint TeamProcess tree snapshot, removed registry/task values (before deletion), scan report
3. RecoverReset all credentials cached or visible on the host, including browser-stored credentials Vidar/Remus could have harvested; rotate any service-account credentials used interactively on the box; re-image if integrity cannot be confirmed; re-enable network access only after a clean scan; monitor the host for 14 days with the Custom IOAs from §9 and promote them to Prevent per the §11 criteriaIR Lead / Identity TeamCredential-reset log, re-image confirmation or clean-scan report, 14-day monitoring log
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1547.001 / T1037.001Run/RunOnce/Load/logon-script persistenceQ1, Q3SecurityHealthService MasqueradeGood
T1053.005Scheduled task persistenceQ2SecurityHealthService MasqueradeGood
T1036.005Process execution masquerading as SecurityHealthService.exeQ4SecurityHealthService MasqueradeGood
T1620 / T1036LoadPE command-line spoof to svchost.exeQ5—Partial — FP medium, needs tuning before promotion
T1055.012RunPE process hollowing into dllhost.exeQ6dllhost.exe Without COM Surrogate ArgumentGood
T1071.001 / T1132.002Atomic C2 domain/IP matchQ72CLoader C2 BeaconGood — perishable, re-validate against live intel
T1071.001Behavioral beaconing cadenceQ8—Partial — generic pattern, needs environment tuning
Indicator MatchKnown sample hash sweepQ9(hash feed)Good — perishable, re-validate against updated hash feed
T1620 / T1055CLR hosting anomaly (.NET payload)Q10—Partial
T1106Hell's Gate indirect syscallsNone—Gap — no raw syscall field in Falcon CQL; rely on sensor ML/behavioral prevention (M1040)
T1497.001 / T1497.003 / T1622Anti-VM / anti-debug / timing-based evasionNone—Gap — pre-decryption, no observable endpoint telemetry; rely on Falcon sandbox/ML detonation
T1027 / T1140PE-resource encryption/decryption chainNone—Gap — in-memory only, no file write; recoverable only via Zscaler's offline decrypt tooling against an acquired sample
T1134.004Parent PID spoofing to explorer.exeNone (not independently isolated)—Partial — would require an explorer.exe-parented anomaly correlation not built into this pack's current query set; flagged as a future enhancement

All four validation gates from §11 (telemetry ready, benign baseline, positive test, promotion criteria) apply before any Good-rated detection above is promoted from Detect to Prevent.

16

Hunt Summary Ticket

TITLE:      Hunt for 2CLoader (loader delivering Vidar / Remus / XWorm)
SEVERITY:   High
SCOPE:      Windows endpoints with Falcon sensor; registry, scheduled-task,
            process, and network telemetry required (see Sec 5)
HYPOTHESIS: 2CLoader persists under the name SecurityHealthService.exe
            across five registry/task vectors and executes via LoadPE
            (svchost.exe command-line spoof), RunPE (dllhost.exe hollowing
            without /Processid:), or CLR hosting, then beacons to
            aware-cr1[.]com/api/beacon before delivering Vidar, Remus, or
            XWorm.
QUERIES:    10 CQL hunt queries (Q1-Q10, Sec 8); 3 Custom IOA
            recommendations (Sec 9); 4 native audit-log hunts (Sec 7)
DO FIRST:   Q1, Q2, Q4, Q6 -- highest fidelity, lowest FP, independent of
            current perishable C2 infrastructure or sample hashes
FINDINGS:   [fill in after execution]
GAPS:       Hell's Gate indirect syscalls, anti-VM/anti-debug/timing
            evasion, and the PE-resource decryption chain leave no
            Falcon CQL-visible telemetry (Sec 15) -- covered only by
            sensor-level ML/behavioral prevention, not a hunt query
ACTIONS:    See Sec 12-14 (tiered hardening, deployable playbooks,
            3-phase containment runbook)
OWNER:      [assign SOC/IR owner]
VERSION:    v0.1 -- 2026-10-03
17

Changelog

v0.12026-10-03Initial release. Built from the Zscaler ThreatLabz primary research post (2026-09-30) plus three corroborating sources. 10 CQL hunt queries, 3 Custom IOA recommendations, 4 native audit-log hunts, tiered hardening with 4 deployable playbooks, and a 3-phase containment runbook.
18

References

TierSourceUsed ForAccess Date
Tier 1 · PrimaryZscaler ThreatLabz — "2CLoader: A New Malware Loader Delivering Vidar and Remus"Full technical teardown, configuration structure, encryption chain, evasion logic, persistence options, API hooks, C2 protocol, all atomic IOCs2026-10-03
Tier 2 · CorroboratingCyber Security News — "New 2CLoader Malware Evades Security Tools to Deploy Vidar and Remus Stealers"Independent republication confirming the full IOC table and technical summary2026-10-03
Tier 2 · CorroboratingGBHackers — "New 2CLoader Malware Uses Anti-VM and API Hooking to Deliver Vidar and Remus Stealers"Independent republication confirming the technical narrative and network IOCs2026-10-03
Tier 3 · Vendor AdvisoryBroadcom / Symantec Protection Bulletin — "Vidar and Remus infostealers distributed with help of new 2CLoader"Independent (non-Zscaler-sourced) vendor confirmation of the malware family's existence and behavior; Symantec/Carbon Black detection signature names2026-10-03

Source snapshots saved verbatim at build time: 2CLoader-Hunt-sources/01-zscaler-threatlabz.txt, 02-cybersecuritynews.txt, 03-broadcom-symantec-bulletin.txt, 04-gbhackers.txt.