Cruciferra — Crypter-as-a-Service with EDR Blinding
Executive Summary
Cruciferra is a subscription crypter, not a campaign. Proofpoint published the authoritative technical analysis on 2026-07-20. The service has been sold on underground forums (advertised on exploit[.]in as "the underground's most lethal crypter") since autumn 2025 at $450 to $2,000 USD per month, tiered by feature set. It is written in Mono, it is used by multiple unrelated criminal crews, and its only job is to get somebody else's payload to run without an EDR ever getting a clean look at it.
The attacker objective is visibility denial. Before a single byte of payload touches memory, Cruciferra reads a clean ntdll.dll off disk to build indirect syscall stubs, repairs the Import Address Table, unhooks user-mode API hooks, and — where it can — drops a vulnerable signed kernel driver and uses DeviceIoControl to terminate the security agent's own processes. It then escalates via the COM Elevation Moniker if it is not already elevated, writes a Run-key, suppresses Windows toast and balloon notifications so the user never sees a warning, decodes the payload out of the PE .reloc section with a custom Base16 alphabet, and executes it through a Process Ghosting variant that additionally patches ZwQueryVirtualMemory and neuters NtManageHotPatch so the ghosted image cannot be validated.
The highest-value defensive angle is the driver. Every other stage of this chain is deliberately engineered to be unobservable from user mode. The BYOVD stage is not: loading a kernel driver is a kernel-mediated, logged, and blockable event, and Cruciferra ships a small, enumerable set of eight vulnerable helper drivers. Hunt and block there first, then work outward to the artefacts the crypter cannot hide because they are persisted by the OS on its behalf: the Run value named putty, the notification-suppression registry trio, and the archive-borne EXE+DLL side-loading pair.
Payloads seen behind it: Agent Tesla, AsyncRAT / DCRAT, DarkCloud Stealer, Formbook, XLoader, PhantomStealer, Remcos, Snake Keylogger, ValleyRAT (Winos4.0), XWorm, and zgRAT. Because the crypter is shared, a Cruciferra hit tells you very little about who is in the environment and a great deal about what will happen next: a commodity RAT or stealer with credential-theft and follow-on-access intent.
Scope note. One named customer, the Chinese-linked actor TA4922, ran tax-themed lures against Indian taxpayers between April and June 2026 (tracked elsewhere as Operation DragonReturn, and already covered by OperationDragonReturn-Hunt in this library). That campaign is referenced here only as evidence of the service's customer base. Everything in this pack targets Cruciferra's own loader behaviours so it fires regardless of which crew bought the build or what lure they used.
Defender priority: deploy the Microsoft vulnerable-driver blocklist and ASR rule 56a863a9-875e-4185-98a7-b882c64b5ce5 ("Block abuse of exploited vulnerable signed drivers") in Block mode today, and hunt Q1/Q2/Q3 for the eight named helper drivers across the last 90 days. If Cruciferra has already run with the BYOVD stage successful, your EDR telemetry for that host is untrustworthy for the window in question and the host must be triaged from kernel-side and network evidence, not from agent process telemetry.
Source Review & Web Hunter Notes
| Tier | Source | Key finding | Carry forward |
|---|---|---|---|
| TIER 1 | Proofpoint Threat Insight, 2026-07-20 — "Unpacking Cruciferra" | Full technical analysis: DLL side-loading entry, decoy exports, console-window hiding, function unhooking, BYOVD driver table with 8 SHA256 hashes, 9 named indirect syscalls, IAT repair, notification-suppression registry keys, COM Elevation Moniker UAC bypass, Run value putty, .reloc payload storage with custom Base16 alphabet, 90+ polymorphic crypto routines, Process Ghosting variant with ZwQueryVirtualMemory patching and NtManageHotPatch neutering, payload family list, and the campaign IOC table. | Yes — every atomic IOC and every behavioural signature in this pack traces to this source. |
| TIER 2 | The Hacker News, 2026-07-27 | Independent restatement of the Proofpoint findings; adds the explicit link that the TA4922 activity is the same set Seqrite Labs tracks as Operation DragonReturn, and confirms the SSA-themed XWorm/AdaptixC2 and bed-bug/guest-complaint zgRAT campaigns. | Partial — used for the scoping decision and the cross-link to the existing DragonReturn pack. No unique IOCs. |
| TIER 2 | eSecurity Planet | Corroborates pricing, the emergence date, the evasion stack, and the payload families. Adds no primary telemetry. | Partial — corroboration only. |
| TIER 2 | SecurityOnline / Daily CyberSecurity, 2026-07-27 | Corroborates GoFlyDrv.sys being the driver used to terminate security processes; contributes the useful defender framing that the PE File Version Information fields (random-word Copyright / Product / Description) are a hunting handle. | Partial — the PE-metadata hunt in §7 is derived from this plus the Proofpoint "Tracking Cruciferra" section. |
Research decisions
- Scoped to the crypter, deliberately. The Proofpoint IOC table is dominated by TA4922 payload URLs on low-cost TLDs (.gu.cc, .love, .live) and Tax-Number archive hashes. Those are DragonReturn campaign artefacts and are excluded here to avoid duplicating an existing pack and to keep this pack useful against the other Cruciferra customers.
- Infrastructure IOCs kept are the non-TA4922 ones only: the XWorm and zgRAT C2s and the two staging hosts from the SSA and guest-complaint campaigns. Both staging hosts look like compromised legitimate sites (one serves out of a WordPress
wp-includespath), so they ship ashuntand notprevent. - Perishability. Proofpoint observed a freshly packed sample uploaded to VirusTotal every few minutes on 2026-07-09. Sample hashes are therefore near-worthless as a standing block; the driver hashes and the behavioural signatures are the durable half of this pack and should outlive the infrastructure by a year or more.
- No exploit or offensive detail is reproduced. The syscall and ghosting sequence is described only to the depth needed to name the telemetry it leaves behind.
Source snapshots for every citation are saved alongside this pack in Cruciferra-Crypter-Hunt-sources/. Every atomic indicator in §10 was traced back to that saved text mechanically before publication.
Hunt Brief & Attack Chain
Attack chain
| # | Step | Telemetry | Hunt angle |
|---|---|---|---|
| 1 | Email lure with a link or PDF-embedded link; occasionally a zipped LNK. Themes: government tax authority, social-security correspondence, guest complaint. | Mail gateway, proxy, DnsRequest | Native mail-gateway hunt (§7 N1). Not CQL-addressable on the endpoint alone. |
| 2 | Victim downloads a ZIP / RAR / VHD containing a legitimate signed executable plus a malicious DLL. | ZipFileWritten, PeFileWritten, browser child processes | Q4 — process executing out of an archive-extraction or Downloads path with an adjacent DLL. |
| 3 | User runs the EXE; the paired DLL (containing Cruciferra, with hundreds to thousands of decoy exports) is side-loaded and the EXE calls into it. | ProcessRollup2, PeFileWritten | Q4. Module-load telemetry is not a queryable Falcon event, so the side-load is inferred from the co-located pair and the launch path. |
| 4 | Environment checks (sandbox / analyst VM), console-window hiding via a retry loop that walks the process tree and calls ShowWindow(SW_HIDE) on ConsoleWindowClass windows. | None reliable | GAP — user-mode-only, no sensor-visible artefact. Documented in §15. |
| 5 | API and IAT unhooking; indirect syscalls built from a clean on-disk ntdll.dll. | None from user mode | GAP — this is the stage designed to blind the sensor. Detect it indirectly by the absence of expected telemetry around a confirmed Q1/Q2 driver hit. |
| 6 | BYOVD: a vulnerable signed helper driver is dropped and loaded; DeviceIoControl IOCTLs terminate security processes found by name in the process list. GoFlyDrv.sys is the one Proofpoint calls out for this. | PeFileWritten, NewExecutableWritten, DriverLoad, Windows Event ID 3033/3063, Sysmon EID 6 | Q1, Q2, Q3 — the highest-fidelity detection in this pack. |
| 7 | If not already elevated, UAC bypass via the COM Elevation Moniker. | ProcessRollup2 with dllhost.exe parent | Q7. |
| 8 | Persistence: Software\Microsoft\Windows\CurrentVersion\Run value named putty. | AsepValueUpdate | Q5 — narrow, near-zero-FP, and durable. |
| 9 | Notification suppression: PushNotifications\ToastEnabled, Explorer\Advanced\Balloon, Explorer\Advanced\ShowInfoTip. | RegGenericValueUpdate, AsepValueUpdate | Q6 — weak alone, strong as a cluster on one host in one minute. |
| 10 | Payload decoded from the PE .reloc section using Base16 with a custom alphabet; drivers and payload unpacked into a simple internal file structure with random-word or unreadable filenames. | PeFileWritten, NewExecutableWritten into user Temp | Q8 — extensionless or random-name PE written under AppData\Local\Temp. |
| 11 | Process Ghosting: temp file marked for pending deletion via NtSetInformationFile, payload written, NtCreateSection with SEC_IMAGE, handle closed so the OS deletes the file while the section survives, suspended process created, section mapped via NtMapViewOfSection, thread context redirected to the payload entry point. Plus ZwQueryVirtualMemory hook patching and NtManageHotPatch neutering. | Partial: the staging write in step 10 is visible; the execution itself is engineered not to be | Q8 plus §7 N4 (memory-region-without-backing-file sweep). Marked PARTIAL in §15. |
| 12 | Commodity RAT or stealer runs: keylogging, credential and browser-data theft, C2 beacon (often dynamic DNS or a bare IP on a high port). | DnsRequest, NetworkConnectIP4 | Q9, Q10. |
Hunt hypotheses (ordered by fidelity)
| # | Hypothesis | MITRE | Falcon events | Expected FP sources | Conf |
|---|---|---|---|---|---|
| H1 | A Cruciferra-packed loader has dropped one of eight known vulnerable helper drivers to disk in order to terminate security processes. | T1068, T1562.001 | PeFileWritten, NewExecutableWritten | Legitimate vendor installers for MSI Afterburner (NTIOLib_X64.sys), Lenovo tooling (LnvMSRIO.sys), and Huawei PC Manager (HwOs2Ec.sys). | HIGH |
| H2 | One of the published Cruciferra driver or loader hashes is present on an endpoint. | T1068, T1027.002 | ProcessRollup2, PeFileWritten, DriverLoad, ImageHash | None — exact-hash match. | HIGH |
| H3 | A known-vulnerable helper driver was actually loaded into the kernel, meaning the BYOVD stage succeeded and EDR telemetry for that host is suspect. | T1068 | DriverLoad | Same vendor tooling as H1, on hosts that legitimately run it. | HIGH |
| H4 | An executable launched from an archive-extraction or Downloads path side-loaded a co-located DLL. | T1574.002, T1204.002 | ProcessRollup2, PeFileWritten | Portable apps, developer tooling, IT self-service installers run from Downloads. | MEDIUM |
| H5 | Registry Run persistence was written under the value name putty pointing at something that is not PuTTY. | T1547.001 | AsepValueUpdate | A user or admin manually adding a genuine PuTTY autostart (rare — PuTTY does not install one). | HIGH |
| H6 | Windows notification suppression keys were modified in a short burst on a single host. | T1112, T1562.001 | RegGenericValueUpdate, AsepValueUpdate | Kiosk/digital-signage build scripts, privacy-hardening GPOs, some VDI gold-image tooling. | MEDIUM |
| H7 | A process in a user-writable path was spawned by dllhost.exe, consistent with COM Elevation Moniker UAC bypass. | T1548.002 | ProcessRollup2 | Legitimate COM out-of-process servers; some installer and shell-extension behaviour. | MEDIUM |
| H8 | An extensionless or random-named PE was staged in AppData\Local\Temp immediately before a short-lived process appeared, consistent with ghost-section staging. | T1055, T1140 | PeFileWritten, NewExecutableWritten | Installer bootstrappers, update agents, some browser and Office temp handling. | MEDIUM |
| H9 | An endpoint resolved one of the published Cruciferra-linked C2 or staging hostnames. | T1071.001, T1105 | DnsRequest | None for the C2s; the two staging hosts are likely compromised legitimate sites and may have benign traffic. | HIGH |
| H10 | A post-crypter RAT is beaconing to the published C2 IP or to dynamic-DNS infrastructure from a process running out of a user-writable path. | T1071.001, T1568.002 | NetworkConnectIP4, DnsRequest | Dynamic DNS is used legitimately by home-lab, remote-support, and some IoT tooling. | MEDIUM |
Consolidated IOC Table
All values below appear verbatim in the Proofpoint analysis snapshot saved with this pack. TA4922 / Operation DragonReturn campaign infrastructure is deliberately excluded — see the existing OperationDragonReturn-Hunt pack.
BYOVD helper drivers (durable — the core of this pack)
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| filename + sha256 | Core64.sys17aae57cf6255c7eb169bf62ea67376d9708976eb7831f8cdd0ea38bdcb37dc4 | HIGH | detect | Vulnerable helper driver dropped by Cruciferra for BYOVD EDR tampering. | 2027-01-29 |
| filename + sha256 | GoFlyDrv.sys2fdfdd13a0c548bb68c9d5aa8599a9265d4659da3e237fe7a42ac6ac06b9a06a | HIGH | detect | The driver Proofpoint names as most often abused; used with DeviceIoControl IOCTLs to terminate security processes. | 2027-01-29 |
| filename + sha256 | HwOs2Ec.sysc4e93449453cf67c5d5605bb8f425207a738a242fdb432d720acc32faa74926c | HIGH | detect | Alternate BYOVD helper driver. Also ships with legitimate OEM PC-management tooling — validate before blocking. | 2027-01-29 |
| filename + sha256 | LnvMSRIO.sysc5b1e9aafc8f2b4ab05effc00fd43f3114b9ef1d592a086c952793ac4e299809 | HIGH | detect | Alternate BYOVD helper driver. OEM-adjacent — validate on managed laptop fleets before blocking. | 2027-01-29 |
| filename + sha256 | MemoryInformer.sys7887e919555fb5948c217556ba149392a72982b1bc427d3db779db9dcbf09ee8 | HIGH | detect | Alternate BYOVD helper driver. | 2027-01-29 |
| filename + sha256 | NTIOLib_X64.sys09bedbf7a41e0f8dabe4f41d331db58373ce15b2e9204540873a1884f38bdde1 | HIGH | detect | Alternate BYOVD helper driver. Also shipped by overclocking utilities — expect benign hits on engineering and gaming builds. | 2027-01-29 |
| filename + sha256 | ProcessMonitorDriver.sys5b4f59236a9b950bcd5191b35d19125f60cfb9e1a1e1aa2e4f914b6745dde9df | HIGH | detect | Alternate BYOVD helper driver. | 2027-01-29 |
| filename + sha256 | selfprot.sysc46e907886e2158cbc453e767183aecf07887b5ac8848f19684451883d69f5f0 | HIGH | detect | Alternate BYOVD helper driver. | 2027-01-29 |
Non-TA4922 Cruciferra infrastructure and samples (perishable)
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| sha256 | 3f31aee0948d16f8d64bf6bec69a4331099993e502b11bfc56b2c0112024489d | HIGH | prevent | Cruciferra / zgRAT archive from the late-June guest-complaint campaign (photo295825092412.zip). | 2027-01-29 |
| domain | gatuso[.]duckdns[.]org | HIGH | detect | XWorm C2 behind a Cruciferra loader (SSA-themed campaign, May 2026). | 2027-01-29 |
| domain | 0zbqnac1t4dv2t2wuodv1m[.]com | HIGH | detect | zgRAT C2 behind a Cruciferra loader (June 2026). | 2027-01-29 |
| ipv4:port | 89.34.90.99 : 56001 | HIGH | detect | zgRAT C2 on a non-standard high port. Alert on the IP; treat the port as corroboration only. | 2027-01-29 |
| domain | digital-magicians[.]com | MEDIUM | hunt | Staged the Cruciferra / zgRAT archive. Presents as a compromised legitimate site — hunt, review, then decide on blocking. | 2026-10-29 |
| domain | almacensantangel[.]com | MEDIUM | hunt | Served the Cruciferra / XWorm RAR out of a WordPress wp-includes path — almost certainly a compromised legitimate site. | 2026-10-29 |
Behavioural indicators (no expiry — these are the pack's real value)
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| registry value | HKCU\Software\Microsoft\Windows\CurrentVersion\Run → value name putty | HIGH | detect | Cruciferra's default persistence value name. Genuine PuTTY does not create a Run entry. |
| registry value | ...\CurrentVersion\PushNotifications → ToastEnabled | MEDIUM | hunt | Suppresses Windows/Defender/SmartScreen toast notifications. |
| registry value | ...\CurrentVersion\Explorer\Advanced → Balloon, ShowInfoTip | MEDIUM | hunt | Suppresses classic Security Center balloons and infotips. |
| PE structure | Payload stored in the .reloc section, Base16-encoded with the custom alphabet PQRSTUVWXYZ[\]^_ | HIGH | enrich | Strong YARA / reverse-engineering handle for confirming a sample is Cruciferra-packed. |
| PE metadata | Randomly generated Copyright / Product / Description strings of two to four stitched pseudo-words (Proofpoint's example: "2026 Colpoplastric Semipreactical Group") | MEDIUM | hunt | Triage handle for sweeping suspect binaries offline — see §7 N5. |
| syscall set | NtProtectVirtualMemory, NtCreateSection, NtMapViewOfSection, NtCreateTransaction, NtRollbackTransaction, NtOpenKey, NtSetValueKey, NtClose, NtSetInformationFile | HIGH | enrich | The indirect-syscall stub set resolved from a clean on-disk ntdll. Useful for sandbox and memory-forensics rules, not for EDR queries (that is the point of the technique). |
Affected Surface & Telemetry Matrix
| Surface | Required telemetry | Priority | Gap risk |
|---|---|---|---|
| Windows endpoints — kernel driver loading | Falcon DriverLoad; Windows CodeIntegrity/Operational EID 3033 & 3063; Sysmon EID 6 | CRITICAL | Low — kernel-mediated and hard for user-mode malware to suppress. This is the surface to invest in. |
| Windows endpoints — file writes to user-writable paths | PeFileWritten, NewExecutableWritten, ZipFileWritten | HIGH | Medium — visible until the BYOVD stage succeeds, after which agent telemetry for the host is suspect. |
| Windows endpoints — process execution and lineage | ProcessRollup2, SyntheticProcessRollup2 | HIGH | Medium-high — Process Ghosting is specifically designed so the executing image has no scannable on-disk backing file. |
| Windows endpoints — autostart and registry | AsepValueUpdate, RegGenericValueUpdate | HIGH | Low — the OS persists these on the malware's behalf, which is why they survive the evasion stack. |
| Windows endpoints — user-mode API integrity | None available from the sensor | MEDIUM | GAP — unhooking, IAT repair and indirect syscalls leave no queryable artefact. Compensate with kernel-side controls (HVCI, ELAM, sensor tamper protection) rather than detection. |
| Network egress | DnsRequest, NetworkConnectIP4; proxy and firewall logs | HIGH | Medium — payload C2 rotates fast; dynamic-DNS and bare-IP-on-high-port patterns are the durable shape. |
| Email gateway | Attachment and URL verdicts, archive and disk-image handling, PDF link extraction | CRITICAL | Medium — the whole chain starts here and archives/VHDs are the delivery container of choice. |
| Identity | UserLogon, downstream credential use after a stealer payload | MEDIUM | Medium — matters for the second-stage impact, not for detecting the crypter itself. |
ATT&CK Mapping
| Tactic | Technique | Observed behaviour | Query / control |
|---|---|---|---|
| Initial Access | T1566.002 — Phishing: Spearphishing Link | Tax-authority, social-security, and guest-complaint lures with links in the body or inside a PDF attachment. | §7 N1 · §12 mail-gateway controls |
| Execution | T1204.002 — User Execution: Malicious File | Victim runs the signed EXE out of an extracted archive. | Q4 |
| Execution | T1106 — Native API | Indirect syscalls resolved from a clean on-disk ntdll copy. | GAP — mitigate, do not detect |
| Defense Evasion | T1027.002 — Obfuscated Files: Software Packing | The entire service. 90+ polymorphic crypto routines assembled from Keccak, Feistel, SPECK-128/256, Threefish-256 and ARX components. | Q2 · §7 N5 |
| Defense Evasion | T1140 — Deobfuscate / Decode Files or Information | Payload decoded from the PE .reloc section using Base16 with a custom alphabet. | Q8 · §7 N5 |
| Defense Evasion / Persistence / Priv Esc | T1574.002 — Hijack Execution Flow: DLL Side-Loading | Archive contains a legitimate EXE plus the Cruciferra DLL; the EXE calls the malicious export. | Q4 |
| Defense Evasion | T1497 — Virtualization / Sandbox Evasion | Environment checks plus thousands of decoy exports that never reach the real code. | GAP |
| Defense Evasion | T1562.001 — Impair Defenses: Disable or Modify Tools | API/IAT unhooking, and BYOVD-driven termination of security processes via DeviceIoControl. | Q1 · Q2 · Q3 · §12 ASR + driver blocklist |
| Privilege Escalation | T1068 — Exploitation for Privilege Escalation | Vulnerable signed kernel driver loaded to gain kernel-level primitives. | Q1 · Q2 · Q3 |
| Privilege Escalation / Defense Evasion | T1548.002 — Abuse Elevation Control Mechanism: Bypass UAC | COM Elevation Moniker used to auto-elevate without a consent prompt. | Q7 · §13 playbook 3 |
| Persistence | T1547.001 — Registry Run Keys / Startup Folder | CurrentVersion\Run value named putty. | Q5 |
| Defense Evasion | T1112 — Modify Registry | ToastEnabled, Balloon, ShowInfoTip flipped to suppress user-visible warnings. | Q6 |
| Defense Evasion | T1564.003 — Hide Artifacts: Hidden Window | Persistent thread loop hides ConsoleWindowClass windows across the process tree. | GAP |
| Defense Evasion | T1055 — Process Injection (Process Ghosting; closest published sub-technique is T1055.013, Process Doppelgänging) | Pending-delete temp file, SEC_IMAGE section, suspended host process, mapped ghost section, redirected thread context — plus ZwQueryVirtualMemory patching and NtManageHotPatch neutering. | Q8 · §7 N4 · PARTIAL |
| Defense Evasion | T1553.005 — Subvert Trust Controls: Mark-of-the-Web Bypass | VHD delivery in the SSA-themed campaign strips MOTW from the contents. | §13 playbook 5 |
| Command and Control | T1071.001 · T1568.002 — Application Layer Protocol / Dynamic Resolution: DNS | Payload C2 over HTTP(S) and dynamic-DNS hostnames, or a bare IP on a non-standard high port. | Q9 · Q10 |
| Command and Control | T1105 — Ingress Tool Transfer | Some builds download the payload from a staging server rather than carrying it in .reloc; the LNK variant pulls a ZIP after fingerprinting. | Q9 · Q10 |
Native Audit-Log Hunts (non-CQL)
These cover the surfaces Falcon telemetry does not reach, and give you a second, independent opinion on the BYOVD stage — which matters precisely because the BYOVD stage is aimed at the EDR agent.
N1 · Mail gateway — archive and disk-image delivery
Search the last 90 days for inbound mail carrying, or linking to, .zip, .rar, .7z, .vhd, .vhdx, .img or .iso where the archive contains an executable, and for PDF attachments containing outbound links to newly registered or low-cost TLDs. Pivot on the three known lure themes: tax authority, social security correspondence, and guest / customer complaint with "evidence" links.
N2 · Windows Code Integrity log — driver load attempts
Read Microsoft-Windows-CodeIntegrity/Operational: EID 3033 (a driver failed validation) and EID 3063 (a driver was blocked by policy). If the Microsoft vulnerable-driver blocklist is enabled, a blocked Cruciferra BYOVD attempt lands here even when the endpoint agent has already been degraded.
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-CodeIntegrity/Operational'
Id = 3033,3063
StartTime = (Get-Date).AddDays(-90)
} -ErrorAction SilentlyContinue |
Select-Object TimeCreated, Id, Message |
Sort-Object TimeCreated -Descending
N3 · Sysmon EID 6 — driver load with signature status
Where Sysmon is deployed, EID 6 gives you the loaded driver's image path, hashes, Signature and SignatureStatus — the signer detail Falcon does not publish as a queryable field. Filter for the eight helper-driver names and for any driver loading out of a non-System32\drivers path.
N4 · Offline memory sweep — ghosted image sections
On a host with a confirmed Q1/Q2/Q3 hit, do not rely on the live agent. Acquire memory and look for committed image-backed regions whose backing FILE_OBJECT is marked for delete or no longer resolves, and for a process whose main image path does not exist on disk. Volatility's malfind plus a ldrmodules cross-check will surface a mapped image absent from all three PEB lists.
N5 · Offline PE triage — Cruciferra packing handles
For suspect binaries pulled from an incident: check for (a) a .reloc section that is far larger than its relocation table needs to be, (b) an export table with hundreds or thousands of entries pointing at junk, and (c) File Version Information whose Copyright / Product / Description are stitched pseudo-words. Any two of the three is a strong Cruciferra call.
Get-ChildItem -Path 'C:\Users' -Include *.dll,*.exe -Recurse -ErrorAction SilentlyContinue |
ForEach-Object {
$v = $_.VersionInfo
[pscustomobject]@{
Path = $_.FullName
Company = $v.CompanyName
Product = $v.ProductName
Copyright = $v.LegalCopyright
Signed = (Get-AuthenticodeSignature $_.FullName).Status
}
} |
Where-Object { $_.Signed -ne 'Valid' -and $_.Copyright -match '^\d{4} \w{8,} \w{8,}' }
N6 · Registry sweep — persistence and notification suppression
$hits = @()
$hits += Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run' -ErrorAction SilentlyContinue |
Select-Object -Property putty -ErrorAction SilentlyContinue
$hits += Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications' -Name ToastEnabled -ErrorAction SilentlyContinue
$hits += Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name Balloon,ShowInfoTip -ErrorAction SilentlyContinue
$hits
CrowdStrike LogScale CQL Hunt Queries
None of these queries carry an in-query time filter. Set the window with the Falcon console time picker — the intended lookback is recorded as a // LOOKBACK: comment in each query. Start at 90 days for Q1 to Q3 and 30 days for the rest.
Looks for: any of the eight helper drivers Proofpoint documented being dropped to disk. Cruciferra unpacks the driver from its own .reloc payload blob, so the writing process is usually the side-loaded host EXE running out of a user path — not an installer under Program Files. FP: three of the eight names ship with legitimate vendor tooling — NTIOLib_X64.sys with MSI Afterburner and related overclocking utilities, LnvMSRIO.sys with Lenovo system tools, HwOs2Ec.sys with OEM PC-manager software. Judge on the writing process and path, not the driver name alone.
// HUNT: Cruciferra BYOVD helper driver written to disk // MITRE: T1068, T1562.001 | CONF: high FP: medium COST: low // REQUIRES: PeFileWritten / NewExecutableWritten // LOOKBACK: 90d (set in the console time picker) // FALSE POSITIVES: MSI Afterburner (NTIOLib_X64.sys), Lenovo system tooling // (LnvMSRIO.sys), OEM PC-manager suites (HwOs2Ec.sys) legitimately install these. // TUNING: exclude writes whose ContextBaseFileName is a known signed installer for // those suites, and exclude hosts in the engineering/overclocking asset group. // Do NOT exclude by driver name alone — GoFlyDrv.sys has no benign fleet use. #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/\\(Core64|GoFlyDrv|HwOs2Ec|LnvMSRIO|MemoryInformer|NTIOLib_X64|ProcessMonitorDriver|selfprot)\.sys$/i | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA256HashData]) | sort(@timestamp, order=desc, limit=500)
Looks for: exact SHA256 matches on the eight published helper drivers plus the one non-TA4922 Cruciferra-packed loader archive. Exact-hash matching, so a hit is a hit — but remember the crypter repacks constantly (a fresh build every few minutes on 2026-07-09), so a clean result here proves nothing and Q1/Q3 to Q8 carry the real coverage.
// HUNT: Cruciferra published SHA256 set (8 BYOVD drivers + 1 packed loader) // MITRE: T1068, T1027.002 | CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 / PeFileWritten / NewExecutableWritten / ImageHash // LOOKBACK: 90d (set in the console time picker) // FALSE POSITIVES: none — exact hash match. A hit on an OEM driver hash still // means that exact vulnerable build is present and should be removed. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten|ImageHash)$/ | SHA256HashData=/^(17aae57cf6255c7eb169bf62ea67376d9708976eb7831f8cdd0ea38bdcb37dc4|2fdfdd13a0c548bb68c9d5aa8599a9265d4659da3e237fe7a42ac6ac06b9a06a|c4e93449453cf67c5d5605bb8f425207a738a242fdb432d720acc32faa74926c|c5b1e9aafc8f2b4ab05effc00fd43f3114b9ef1d592a086c952793ac4e299809|7887e919555fb5948c217556ba149392a72982b1bc427d3db779db9dcbf09ee8|09bedbf7a41e0f8dabe4f41d331db58373ce15b2e9204540873a1884f38bdde1|5b4f59236a9b950bcd5191b35d19125f60cfb9e1a1e1aa2e4f914b6745dde9df|c46e907886e2158cbc453e767183aecf07887b5ac8848f19684451883d69f5f0|3f31aee0948d16f8d64bf6bec69a4331099993e502b11bfc56b2c0112024489d)$/i | table([@timestamp, aid, ComputerName, UserName, SHA256HashData, FileName, ImageFileName, TargetFileName, CommandLine]) | sort(@timestamp, order=desc, limit=500)
Looks for: the load event rather than the write. A hit here means the BYOVD stage succeeded and the attacker had a kernel primitive available to terminate security processes. Treat every hit as a containment trigger, not a triage queue item — and treat that host's subsequent agent telemetry as unreliable. FP: the same three OEM/overclocking drivers as Q1, on hosts that genuinely run that software; those will load at boot from System32\drivers, whereas a Cruciferra load follows a fresh write into a user-writable path minutes earlier.
// HUNT: Cruciferra BYOVD helper driver loaded (kernel primitive obtained) // MITRE: T1068, T1562.001 | CONF: high FP: medium COST: low // REQUIRES: DriverLoad // LOOKBACK: 90d (set in the console time picker) // FALSE POSITIVES: OEM and overclocking utilities load NTIOLib_X64.sys, // LnvMSRIO.sys and HwOs2Ec.sys at boot from the System32 drivers directory. // TUNING: exclude loads where ImageFileName sits under \Windows\System32\drivers\ // AND the same aid shows the driver present for more than 30 days. Correlate every // surviving hit against a Q1 write on the same aid within the preceding hour. #event_simpleName=/^DriverLoad$/ | ImageFileName=/\\(Core64|GoFlyDrv|HwOs2Ec|LnvMSRIO|MemoryInformer|NTIOLib_X64|ProcessMonitorDriver|selfprot)\.sys$/i | groupBy([aid, ComputerName, ImageFileName, SHA256HashData], function=[count(as=Loads), min(@timestamp, as=FirstLoad), max(@timestamp, as=LastLoad)], limit=500) | sort(FirstLoad, order=desc, limit=200)
Looks for: the Cruciferra entry point — an executable launched by a browser, mail client, or archive tool out of a Downloads / Desktop / archive-extraction path. Falcon does not expose module-load telemetry, so the side-load itself is inferred from the launch context; pair every hit with a PeFileWritten lookup for a .dll written to the same directory in the preceding minutes. FP: high — portable apps, developer tooling and IT self-service installers all run from Downloads. This is a stack-and-review hunt, never an alert.
// HUNT: EXE launched from an archive-extraction or Downloads path (side-load entry) // MITRE: T1574.002, T1204.002 | CONF: medium FP: high COST: medium // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 // LOOKBACK: 30d (set in the console time picker) // FALSE POSITIVES: portable utilities, developer toolchains, self-service installers, // and any org that ships software to users as a ZIP. // TUNING: exclude ImageFileName values on your approved portable-app allowlist and // exclude the software-packaging and developer asset groups. Then rank what is left // by rarity of ImageFileName across the fleet — Cruciferra host EXEs are one-offs. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ParentBaseFileName=/^(explorer\.exe|winrar\.exe|7zFM\.exe|7zG\.exe|Bandizip\.exe|PeaZip\.exe|OUTLOOK\.EXE|msedge\.exe|chrome\.exe|firefox\.exe)$/i | ImageFileName=/\\Users\\[^\\]+\\(Downloads|Desktop|OneDrive[^\\]*\\Downloads|AppData\\Local\\Temp\\(Rar\$[^\\]+|7z[^\\]+|Temp\d+_[^\\]+))\\[^\\]+\.exe$/i | groupBy([ImageFileName, ParentBaseFileName], function=[count(as=Runs), count(aid, distinct=true, as=Hosts), collect([ComputerName, UserName, CommandLine])], limit=500) | sort(Hosts, order=asc, limit=200)
Looks for: Cruciferra's default persistence value name. Genuine PuTTY is a portable SSH client that does not create a Run entry, so this is one of the narrowest and most durable signals in the pack. The second stage widens the same hunt to any Run value pointing at a user-writable path, which catches builds that changed the value name.
// HUNT: Cruciferra Run-key persistence (value name "putty") // MITRE: T1547.001 | CONF: high FP: low COST: low // REQUIRES: AsepValueUpdate / RegGenericValueUpdate // LOOKBACK: 90d (set in the console time picker) // FALSE POSITIVES: essentially none — PuTTY does not install an autostart entry. // Widen the RegValueName filter to /^[a-z]{4,10}$/i to catch renamed builds; that // variant is noisier and should be reviewed rather than alerted. #event_simpleName=/^(AsepValueUpdate|RegGenericValueUpdate)$/ | RegObjectName=/\\Microsoft\\Windows\\CurrentVersion\\Run$/i | RegValueName=/^putty$/i | table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue]) | sort(@timestamp, order=desc, limit=500)
Looks for: the three notification-suppression values Cruciferra flips so the victim never sees a Defender or SmartScreen warning. Any one alone is weak; two or more on the same host is the signal, which is what the Distinct filter enforces. FP: kiosk and digital-signage build scripts, privacy-hardening GPOs, and VDI gold-image tooling legitimately set all three.
// HUNT: Cruciferra notification-suppression registry cluster // MITRE: T1112, T1562.001 | CONF: medium FP: medium COST: low // REQUIRES: RegGenericValueUpdate / AsepValueUpdate // LOOKBACK: 30d (set in the console time picker) // FALSE POSITIVES: kiosk / signage provisioning, privacy-hardening GPOs, VDI // gold-image build scripts, and some OEM "clean desktop" utilities. // TUNING: exclude your imaging and VDI build asset groups, and exclude hosts whose // hits all land inside a known provisioning window. What remains is a single user // endpoint flipping two or three of these in the same minute — that is the pattern. #event_simpleName=/^(RegGenericValueUpdate|AsepValueUpdate)$/ | RegObjectName=/\\Microsoft\\Windows\\CurrentVersion\\(PushNotifications|Explorer\\Advanced)$/i | RegValueName=/^(ToastEnabled|Balloon|ShowInfoTip)$/i | groupBy([aid, ComputerName, UserName], function=[count(RegValueName, distinct=true, as=Distinct), count(as=Hits), collect([RegValueName, RegObjectName])], limit=500) | test(Distinct >= 2) | sort(Distinct, order=desc, limit=200)
Looks for: a child process running out of a user-writable path whose parent is dllhost.exe — the COM surrogate that services an Elevation Moniker request. Legitimate auto-elevating COM servers exist, but they overwhelmingly execute out of System32 or Program Files, not Downloads or AppData. FP: some installers, shell extensions and OEM updaters stage into AppData and are surrogate-hosted; baseline the parent CommandLine CLSID before alerting.
// HUNT: COM Elevation Moniker UAC bypass — user-path child of dllhost.exe // MITRE: T1548.002 | CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 / SyntheticProcessRollup2 // LOOKBACK: 30d (set in the console time picker) // FALSE POSITIVES: OEM updaters, shell extensions and some installers legitimately // run surrogate-hosted out of AppData. // TUNING: baseline the CLSID in the dllhost.exe parent CommandLine over 30 days and // exclude the CLSIDs that appear on more than 5 percent of the fleet. Then exclude // signed updater ImageFileName values you have already vetted. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ParentBaseFileName=/^dllhost\.exe$/i | ImageFileName=/\\Users\\[^\\]+\\(Downloads|Desktop|AppData\\(Local|Roaming))\\/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, ParentProcessId_decimal, ImageFileName, CommandLine, SHA256HashData]) | sort(@timestamp, order=desc, limit=500)
Looks for: the one stage of Process Ghosting that is still observable. Before the file handle is closed and the OS deletes the backing file, the payload has to be written, and Falcon sees that write. Cruciferra names these from stitched random words or unreadable UTF-16, and they typically carry no extension. FP: installer bootstrappers, update agents and some browser/Office temp handling also write extensionless PEs into Temp. Rank by rarity of the writing process across the fleet — the benign writers are common, the Cruciferra host EXE is a one-off.
// HUNT: Process Ghosting staging — extensionless / random-named PE in user Temp // MITRE: T1055, T1140 | CONF: medium FP: medium COST: medium // REQUIRES: PeFileWritten / NewExecutableWritten // LOOKBACK: 30d (set in the console time picker) // FALSE POSITIVES: installer bootstrappers (setup / msiexec chains), update agents, // and some browser and Office temporary-file handling. // TUNING: exclude ContextBaseFileName values that write these on more than 20 hosts // (that is your benign installer and updater population), then review what is left. // Pivot every survivor to Q1 and Q7 on the same aid within a 10-minute window. #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/\\Users\\[^\\]+\\AppData\\Local\\Temp\\[A-Za-z0-9]{6,64}$/i | groupBy([ContextBaseFileName], function=[count(as=Writes), count(aid, distinct=true, as=Hosts), collect([ComputerName, UserName, TargetFileName])], limit=500) | sort(Hosts, order=asc, limit=200)
Looks for: the four published non-TA4922 hostnames — two payload C2s and two staging hosts. The two staging hosts present as compromised legitimate sites, so a hit there is a strong lead but not automatically malicious traffic; the two C2s are dedicated attacker infrastructure and a hit is an incident.
// HUNT: DNS to published Cruciferra-linked C2 / staging hosts (non-TA4922 set) // MITRE: T1071.001, T1105 | CONF: high FP: low COST: low // REQUIRES: DnsRequest / SuspiciousDnsRequest // LOOKBACK: 90d (set in the console time picker) // FALSE POSITIVES: none for the two C2 hostnames. digital-magicians.com and // almacensantangel.com look like compromised legitimate sites, so a resolution // there may be ordinary browsing — confirm the requesting process before escalating. #event_simpleName=/^(DnsRequest|SuspiciousDnsRequest)$/ | DomainName=/^(gatuso\.duckdns\.org|0zbqnac1t4dv2t2wuodv1m\.com|digital-magicians\.com|almacensantangel\.com)$/i | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, DomainName, RequestType]) | sort(@timestamp, order=desc, limit=500)
Looks for: the second half of the incident. The crypter is a delivery layer; what actually matters is the RAT that follows. This catches the one published C2 IP and the durable shape around it — dynamic-DNS egress from a process running out of a user-writable path. FP: dynamic DNS has legitimate use in home-lab, remote-support and some IoT tooling, so the process-path condition is doing most of the work here.
// HUNT: RAT beacon behind a Cruciferra loader — known C2 IP or dynamic-DNS egress // MITRE: T1071.001, T1568.002 | CONF: medium FP: medium COST: medium // REQUIRES: NetworkConnectIP4 / DnsRequest // LOOKBACK: 30d (set in the console time picker) // FALSE POSITIVES: duckdns.org and similar dynamic-DNS providers are used // legitimately by remote-support tooling, home labs and some IoT devices. // TUNING: exclude approved remote-support agents by ContextBaseFileName, and exclude // any dynamic-DNS hostname that has resolved on more than 10 hosts for over 60 days // (that is sanctioned tooling, not a commodity RAT). #event_simpleName=/^(NetworkConnectIP4|DnsRequest)$/ | (RemoteAddressIP4="89.34.90.99" or DomainName=/\.(duckdns|no-ip|ddns|hopto|serveo)\.(org|net|com|info|biz)$/i) | ContextBaseFileName=/\.exe$/i | table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, DomainName, RemoteAddressIP4, RemotePort_decimal]) | sort(@timestamp, order=desc, limit=500)
CQL review notes. All ten queries use verified Falcon data-model field names and carry no in-query time filter, so nothing breaks on the console's time picker. Two caveats worth knowing before you deploy: (1) DriverLoad in Q3 requires the sensor's kernel-driver telemetry to be flowing into your NG-SIEM repo — confirm with #event_simpleName=/^DriverLoad$/ | head(10) before trusting an empty result. (2) Q4 and Q8 are rarity hunts and are sorted ascending by host count on purpose: the interesting rows are at the top because they are rare, not because they are frequent.
CrowdStrike Custom IOA Recommendations
Three of the ten queries are strong enough to promote to Custom IOAs. The rest stay Investigate-only. Deploy every IOA in Detect for two weeks first, review the hit set, then move to Prevent.
| IOA | Rule type | Pattern | Exclusions | Severity | Promote from |
|---|---|---|---|---|---|
| BLOCK — Vulnerable helper driver dropped to a user path | File Creation | File path regex .*\\Users\\.*\\(Core64|GoFlyDrv|HwOs2Ec|LnvMSRIO|MemoryInformer|NTIOLib_X64|ProcessMonitorDriver|selfprot)\.sys | None needed once the path is constrained to a user profile — legitimate vendor installers write to System32\drivers, not Users. | CRITICAL | Q1 |
| DETECT — Cruciferra Run-key persistence | Registry Operation (value name) | Key \CurrentVersion\Run, value name putty, value data pointing outside Program Files | Exclude any host in the group where an admin has documented a genuine PuTTY autostart. | HIGH | Q5 |
| DETECT — Surrogate-hosted user-path execution | Process Creation | Parent image dllhost.exe; child image path regex .*\\Users\\.*\\(Downloads|Desktop|AppData\\(Local|Roaming))\\.*\.exe | Exclude the vetted OEM-updater and shell-extension CLSIDs identified during the Q7 baseline. | HIGH | Q7 |
Deliberately not promoted
- Q4 and Q8 — rarity hunts with high benign volume. Promoting either would generate an unmanageable detection stream in any environment that distributes software as archives.
- Q6 — the notification-suppression cluster is a good corroborator but fires on legitimate imaging and VDI provisioning. Keep it as a scheduled search that feeds context onto other detections.
- Q2, Q9, Q10 — atomic-indicator hunts. These belong in Falcon IOC Management (see §10), not in a Custom IOA, because IOC Management handles expiry and bulk update and an IOA does not.
Deployment path: Falcon console → Endpoint security → Custom IOA rule groups → create a Windows rule group named Cruciferra-Crypter, add the three rules above, assign to a pilot prevention policy, then widen. Custom IOAs require the Falcon Prevent or Insight module; without them, run the three as scheduled searches with alerting instead.
Machine-Readable IOC Appendix
Fourteen atomic indicators, every one traced back to the saved Proofpoint source snapshot before publication. The behavioural and driver blocks below are the durable half — use those when the hashes have aged out.
type,value,action,severity,expiration,description,tags sha256,17aae57cf6255c7eb169bf62ea67376d9708976eb7831f8cdd0ea38bdcb37dc4,detect,high,2027-01-29,Cruciferra BYOVD helper driver Core64.sys,crypter:Cruciferra|ttp:T1068 sha256,2fdfdd13a0c548bb68c9d5aa8599a9265d4659da3e237fe7a42ac6ac06b9a06a,detect,high,2027-01-29,Cruciferra BYOVD helper driver GoFlyDrv.sys used to terminate security processes,crypter:Cruciferra|ttp:T1562.001 sha256,c4e93449453cf67c5d5605bb8f425207a738a242fdb432d720acc32faa74926c,detect,high,2027-01-29,Cruciferra BYOVD helper driver HwOs2Ec.sys,crypter:Cruciferra|ttp:T1068 sha256,c5b1e9aafc8f2b4ab05effc00fd43f3114b9ef1d592a086c952793ac4e299809,detect,high,2027-01-29,Cruciferra BYOVD helper driver LnvMSRIO.sys,crypter:Cruciferra|ttp:T1068 sha256,7887e919555fb5948c217556ba149392a72982b1bc427d3db779db9dcbf09ee8,detect,high,2027-01-29,Cruciferra BYOVD helper driver MemoryInformer.sys,crypter:Cruciferra|ttp:T1068 sha256,09bedbf7a41e0f8dabe4f41d331db58373ce15b2e9204540873a1884f38bdde1,detect,high,2027-01-29,Cruciferra BYOVD helper driver NTIOLib_X64.sys,crypter:Cruciferra|ttp:T1068 sha256,5b4f59236a9b950bcd5191b35d19125f60cfb9e1a1e1aa2e4f914b6745dde9df,detect,high,2027-01-29,Cruciferra BYOVD helper driver ProcessMonitorDriver.sys,crypter:Cruciferra|ttp:T1068 sha256,c46e907886e2158cbc453e767183aecf07887b5ac8848f19684451883d69f5f0,detect,high,2027-01-29,Cruciferra BYOVD helper driver selfprot.sys,crypter:Cruciferra|ttp:T1068 sha256,3f31aee0948d16f8d64bf6bec69a4331099993e502b11bfc56b2c0112024489d,prevent,critical,2027-01-29,Cruciferra-packed zgRAT loader archive,crypter:Cruciferra|payload:zgRAT domain,gatuso.duckdns.org,detect,high,2027-01-29,XWorm C2 behind a Cruciferra loader,crypter:Cruciferra|payload:XWorm domain,0zbqnac1t4dv2t2wuodv1m.com,detect,high,2027-01-29,zgRAT C2 behind a Cruciferra loader,crypter:Cruciferra|payload:zgRAT ipv4,89.34.90.99,detect,high,2027-01-29,zgRAT C2 on port 56001 behind a Cruciferra loader,crypter:Cruciferra|payload:zgRAT domain,digital-magicians.com,hunt,medium,2026-10-29,Likely-compromised site staging a Cruciferra zgRAT archive - review before prevent,crypter:Cruciferra|stage:delivery domain,almacensantangel.com,hunt,medium,2026-10-29,Likely-compromised WordPress staging a Cruciferra XWorm archive - review before prevent,crypter:Cruciferra|stage:delivery
# Cruciferra loader behaviours — durable, survive repacking # Persistence HKCU\Software\Microsoft\Windows\CurrentVersion\Run value name: putty # Notification suppression (2+ of these on one host in one minute) HKCU\Software\Microsoft\Windows\CurrentVersion\PushNotifications ToastEnabled HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced Balloon HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced ShowInfoTip # Privilege escalation parent dllhost.exe -> child EXE under \Users\*\(Downloads|Desktop|AppData\(Local|Roaming)) # Payload staging (Process Ghosting) PE written to \Users\*\AppData\Local\Temp\ with no file extension, then deleted # Packing handles (offline triage) payload stored in the PE .reloc section, Base16 with alphabet PQRSTUVWXYZ[\]^_ export table with hundreds-to-thousands of decoy exports pointing at junk code File Version Info Copyright/Product/Description built from stitched pseudo-words # Indirect syscall stub set resolved from a clean on-disk ntdll NtProtectVirtualMemory NtCreateSection NtMapViewOfSection NtCreateTransaction NtRollbackTransaction NtOpenKey NtSetValueKey NtClose NtSetInformationFile # Anti-EDR extras layered on Process Ghosting ZwQueryVirtualMemory hook patched to return sanitised results NtManageHotPatch neutered to stop kernel validation of the ghosted image section
# Vulnerable helper drivers Cruciferra drops for BYOVD EDR tampering. # GoFlyDrv.sys is the one named for terminating security processes. # The other three marked OEM also ship with legitimate vendor software — # validate fleet usage before moving from detect to block. Core64.sys GoFlyDrv.sys HwOs2Ec.sys # OEM PC-manager software also ships this LnvMSRIO.sys # OEM laptop tooling also ships this MemoryInformer.sys NTIOLib_X64.sys # OEM overclocking utilities also ship this ProcessMonitorDriver.sys selfprot.sys # Verify the Microsoft vulnerable-driver blocklist is actually on: # Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard # reg query "HKLM\SYSTEM\CurrentControlSet\Control\CI\Config" /v VulnerableDriverBlocklistEnable
# 1. Is the vulnerable-driver blocklist on?
(Get-CimInstance -Namespace root\Microsoft\Windows\DeviceGuard -ClassName Win32_DeviceGuard).SecurityServicesRunning
# 2. Is ASR "Block abuse of exploited vulnerable signed drivers" in Block mode?
# GUID 56a863a9-875e-4185-98a7-b882c64b5ce5 — value 1 means Block
$p = Get-MpPreference
for ($i = 0; $i -lt $p.AttackSurfaceReductionRules_Ids.Count; $i++) {
'{0} = {1}' -f $p.AttackSurfaceReductionRules_Ids[$i], $p.AttackSurfaceReductionRules_Actions[$i]
}
# 3. Is HVCI / Memory Integrity enforced?
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity' -Name Enabled
# 4. Is UAC set to always prompt on the secure desktop?
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' -Name EnableLUA,ConsentPromptBehaviorAdmin,PromptOnSecureDesktop
# 5. Can users still mount ISO/VHD by double-clicking?
Get-ItemProperty 'HKLM:\SOFTWARE\Classes\Windows.IsoFile\shell\mount' -ErrorAction SilentlyContinue
Detection Validation Gates
Gate 1 — Telemetry ready
#event_simpleName=/^DriverLoad$/ | head(10)returns rows. If it does not, Q3 is dead in your tenant and Q1/Q2 carry the whole BYOVD detection.#event_simpleName=/^AsepValueUpdate$/ | head(10)returns rows withRegValueNamepopulated. IfRegValueNameis empty, Q5 and Q6 will silently return nothing.#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | head(10)returns rows withContextBaseFileNamepopulated — Q1 and Q8 both group on it.- Registry and file telemetry are policy-gated in some Falcon deployments. Confirm the sensor policy for your pilot group has both enabled before concluding a hunt came back clean.
Gate 2 — Benign baseline
- Run Q1 and Q3 with the driver-name filter removed and group by driver name over 90 days. That is your legitimate driver population; the three OEM names should dominate and should sit under
System32\drivers. - Run Q4 and Q8 for 30 days and record the top 20
ContextBaseFileNameandImageFileNamevalues. Those are your exclusions. Anything appearing on one or two hosts is what you are actually hunting. - Run Q7 and record every CLSID appearing in the
dllhost.exeparent CommandLine. Anything on more than 5 percent of the fleet is sanctioned COM, not an elevation bypass. - Q5 should return zero rows in a healthy environment. If it returns anything at all, treat it as a finding, not a baseline.
Gate 3 — Positive tests (lab only, never production)
- In an isolated VM, create
HKCU\...\CurrentVersion\Runvalueputtypointing at a benign EXE inAppData. Q5 must fire within the sensor's registry flush interval. - Set
ToastEnabled,BalloonandShowInfoTipin one script run. Q6 must return that host withDistinctof 2 or 3. - Write a benign extensionless PE into
%LOCALAPPDATA%\Tempunder a random 8-character name. Q8 must return the writing process. - Do not attempt to reproduce the BYOVD, unhooking or ghosting stages. Validate Q1 to Q3 by copying one of the named driver files (without loading it) into a user path and confirming Q1 fires.
Gate 4 — Promotion criteria
- An IOA moves from Detect to Prevent only after 14 days with zero unexplained hits and a documented exclusion list.
- The Q1-derived file-creation IOA is the exception: it is safe to deploy directly in Prevent because the user-profile path constraint excludes every legitimate installer behaviour.
- The two
hunt-action staging domains in §10 stay athuntuntil someone confirms the sites are still compromised. Blocking a recovered legitimate site is a self-inflicted outage.
Hardening — Tiered
Cruciferra's entire design assumes it gets to run user-mode code that can rewrite its own view of the OS. Detection buys you an alert after the fact; the controls below remove the capability. They are ordered by leverage, not by effort.
- Enable the Microsoft vulnerable-driver blocklist. This is the single highest-leverage control against the entire BYOVD stage and it costs nothing on modern Windows. MITRE M1051 / M1038; Microsoft Windows Security Baseline; CIS Microsoft Windows Benchmark "Device Guard" section. Verify with the
Win32_DeviceGuardquery in §10. - Set ASR rule
56a863a9-875e-4185-98a7-b882c64b5ce5("Block abuse of exploited vulnerable signed drivers") to Block. Complements the blocklist by catching drivers that are vulnerable but not yet listed. MITRE M1038; Microsoft Defender ASR baseline. No reboot, no user-visible change. - Harden UAC against the COM Elevation Moniker path. Set
ConsentPromptBehaviorAdminto 2 (Prompt for consent on the secure desktop) and confirmEnableLUAandPromptOnSecureDesktopare 1. Auto-elevation without a prompt is what the moniker abuses. MITRE M1052; CIS Windows Benchmark 2.3.17.x; MS Security Baseline. - Block executable content in inbound archives and disk images at the mail gateway. Quarantine
.vhd,.vhdx,.isoand.imgoutright — there is no ordinary business reason to receive one by email, and they exist in this chain specifically to strip Mark-of-the-Web. Extract and inspect ZIP/RAR/7z contents, and follow links inside PDF attachments. MITRE M1049 / M1021.
- Enable HVCI / Memory Integrity fleet-wide. Kernel-mode code integrity is what turns "vulnerable driver loaded" into "vulnerable driver refused". Pilot on a hardware-representative ring first — older third-party drivers are the usual compatibility casualty. MITRE M1050 / M1038; MS Security Baseline; DISA Windows 10/11 STIG.
- Deploy a WDAC policy including the Microsoft recommended driver block rules, in audit mode first, then enforced. This gives you a policy you control rather than only the vendor blocklist, and it is where you add the eight names from §10. MITRE M1038 / M1045.
- AppLocker or WDAC rules denying execution from user-writable paths —
Downloads,Desktop,AppData\Local\Tempand archive-extraction directories. This kills the side-load entry point outright. Expect friction with portable tooling; pilot with the developer and engineering groups and build the allowlist from the Q4 baseline. MITRE M1038; CIS Windows Benchmark; MS Security Baseline. - Disable double-click mounting of ISO and VHD for standard users via GPO or by removing the shell mount verb. Removes the Mark-of-the-Web bypass used in the SSA-themed campaign. MITRE M1042. ⚠ best-practice, no formal benchmark entry — Microsoft documents the mechanism but no CIS control covers it directly.
- Turn on Falcon sensor tamper protection and require an uninstall token. A BYOVD process-kill is not an uninstall, but tamper protection plus ELAM raises the cost and generates its own telemetry when attempted. MITRE M1018 / M1024; vendor hardening guide.
- Move to full application allowlisting (WDAC in enforced mode, or Smart App Control on eligible builds). Cruciferra depends entirely on an unsigned or attacker-supplied DLL being loadable next to a signed EXE; allowlisting by publisher removes that. MITRE M1038 / M1045; NIST SP 800-167.
- Credential Guard and RunAsPPL for LSASS. Does not stop the crypter, but blunts the payload: nearly every family Cruciferra delivers is a credential or browser-data stealer. MITRE M1043 / M1028; MS Security Baseline; CIS Windows Benchmark.
- Remove local administrator rights from standard users. The COM Elevation Moniker bypass only matters where the user is already a member of the local Administrators group. Without that, the whole privilege-escalation stage fails closed. MITRE M1026; CIS Control 5/6.
- Egress control for endpoints. Force endpoint web traffic through an inspecting proxy and deny direct outbound to arbitrary high ports — the published zgRAT C2 in §4 talks on port 56001, which no business application needs. MITRE M1037; CIS Control 13.
- Phishing-resistant MFA and conditional access on everything the stealers can reach. The realistic end state of a Cruciferra infection is stolen credentials, and stolen credentials only matter where a password alone still works. MITRE M1032; NIST SP 800-63B.
Deployable Playbooks
Raw, working configuration for the five highest-leverage controls. Every step carries prerequisites, reboot impact and a rollback — deploy nothing here without reading the rollback first.
Playbook 1 — Enable the Microsoft vulnerable-driver blocklist
Prerequisites: Windows 10 1809 or later / Windows 11 / Server 2019 or later; local administrator; Secure Boot recommended. Reboot required: yes, one reboot to take effect. Rollback: set the same value to 0 and reboot — documented in step 3 below.
# 1. Confirm current state
Get-CimInstance -Namespace root\Microsoft\Windows\DeviceGuard -ClassName Win32_DeviceGuard |
Select-Object SecurityServicesConfigured, SecurityServicesRunning, CodeIntegrityPolicyEnforcementStatus
# 2. ENABLE the Microsoft vulnerable-driver blocklist
New-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Config' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Config' `
-Name 'VulnerableDriverBlocklistEnable' -Value 1 -Type DWord
# Reboot required. After reboot, blocked loads land in
# Microsoft-Windows-CodeIntegrity/Operational as Event ID 3063.
# 3. ROLLBACK (if a business-critical driver is blocked)
# Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Config' `
# -Name 'VulnerableDriverBlocklistEnable' -Value 0 -Type DWord
# Reboot. Prefer replacing the offending driver over disabling the blocklist —
# turning this off restores the exact capability Cruciferra depends on.
# 4. VERIFY after reboot
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-CodeIntegrity/Operational'; Id=3063} `
-MaxEvents 20 -ErrorAction SilentlyContinue | Select-Object TimeCreated, Message
Playbook 2 — ASR: block abuse of exploited vulnerable signed drivers
Prerequisites: Microsoft Defender Antivirus in active mode with real-time protection on; Windows 10 1803 or later. If Defender is in passive mode behind a third-party AV, ASR rules do not apply — use the WDAC route in Playbook 4 instead. Reboot required: no. Rollback: set the rule action to Disabled (step 3); takes effect immediately, no reboot.
# 1. AUDIT first — run for 7 days, review Defender Operational Event ID 1121/1122
Add-MpPreference -AttackSurfaceReductionRules_Ids 56a863a9-875e-4185-98a7-b882c64b5ce5 `
-AttackSurfaceReductionRules_Actions AuditMode
# 2. ENFORCE — move to Block once the audit set is clean
Set-MpPreference -AttackSurfaceReductionRules_Ids 56a863a9-875e-4185-98a7-b882c64b5ce5 `
-AttackSurfaceReductionRules_Actions Enabled
# Optional: also block executable content dropped from mail and webmail clients,
# which closes the delivery half of this chain.
# Set-MpPreference -AttackSurfaceReductionRules_Ids be9ba2d9-53ea-4cdc-84e5-9b1eeee46550 `
# -AttackSurfaceReductionRules_Actions Enabled
# 3. ROLLBACK
# Set-MpPreference -AttackSurfaceReductionRules_Ids 56a863a9-875e-4185-98a7-b882c64b5ce5 `
# -AttackSurfaceReductionRules_Actions Disabled
# 4. VERIFY
$p = Get-MpPreference
for ($i = 0; $i -lt $p.AttackSurfaceReductionRules_Ids.Count; $i++) {
'{0} = {1}' -f $p.AttackSurfaceReductionRules_Ids[$i], $p.AttackSurfaceReductionRules_Actions[$i]
}
Playbook 3 — Harden UAC against COM Elevation Moniker auto-elevation
Prerequisites: local administrator or GPO edit rights; communicate to users first, because they will start seeing consent prompts they did not see before. Reboot required: yes for EnableLUA changes; the consent-behaviour values apply at next logon. Rollback: restore the captured prior values from step 1 (the script writes them to disk before changing anything).
$key = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
# 1. CAPTURE current values for rollback — do this first, always
Get-ItemProperty -Path $key -Name EnableLUA,ConsentPromptBehaviorAdmin,PromptOnSecureDesktop,EnableInstallerDetection |
Export-Clixml -Path "$env:ProgramData\uac-rollback.xml"
# 2. APPLY
Set-ItemProperty -Path $key -Name 'EnableLUA' -Value 1 -Type DWord
Set-ItemProperty -Path $key -Name 'ConsentPromptBehaviorAdmin'-Value 2 -Type DWord # prompt for consent on secure desktop
Set-ItemProperty -Path $key -Name 'PromptOnSecureDesktop' -Value 1 -Type DWord
Set-ItemProperty -Path $key -Name 'EnableInstallerDetection' -Value 1 -Type DWord
# GPO equivalent: Computer Configuration - Windows Settings - Security Settings -
# Local Policies - Security Options - "User Account Control: Behavior of the
# elevation prompt for administrators in Admin Approval Mode" = Prompt for consent
# on the secure desktop.
# 3. ROLLBACK
# $old = Import-Clixml "$env:ProgramData\uac-rollback.xml"
# Set-ItemProperty -Path $key -Name 'ConsentPromptBehaviorAdmin' -Value $old.ConsentPromptBehaviorAdmin
# Set-ItemProperty -Path $key -Name 'PromptOnSecureDesktop' -Value $old.PromptOnSecureDesktop
# Reboot if EnableLUA was changed.
# 4. VERIFY
Get-ItemProperty -Path $key -Name EnableLUA,ConsentPromptBehaviorAdmin,PromptOnSecureDesktop
Playbook 4 — Deny execution from archive-extraction and user Temp paths (AppLocker)
Prerequisites: Application Identity service (AppIDSvc) set to Automatic; AppLocker requires Windows Enterprise or Education SKUs; build the allowlist from the Q4 and Q8 baselines before enforcing. Reboot required: no, but AppIDSvc must be started. Rollback: remove the rule from the AppLocker policy and re-import, or set enforcement back to AuditOnly — both take effect at the next policy refresh with no reboot.
# 1. PREREQUISITE — start the enforcement service Set-Service -Name AppIDSvc -StartupType Automatic Start-Service -Name AppIDSvc # 2. EXPORT the effective policy so you have a rollback artefact Get-AppLockerPolicy -Effective -Xml | Out-File "$env:ProgramData\applocker-rollback.xml" -Encoding utf8 # 3. AUDIT FIRST. Create a Deny rule for the Everyone group covering: # %OSDRIVE%\Users\*\Downloads\* # %OSDRIVE%\Users\*\Desktop\* # %LOCALAPPDATA%\Temp\* # Set the Executable and DLL rule collections to AuditOnly, deploy for 14 days, # then review AppLocker EXE and DLL event logs (EventID 8003/8006) to build the # exception list. The DLL collection is the one that matters here — it is the # side-loaded DLL, not the signed EXE, that carries Cruciferra. # 4. ENFORCE — flip the collections to Enabled once the exception list is stable # Set-AppLockerPolicy -XmlPolicy .\cruciferra-deny.xml -Merge # 5. ROLLBACK # Set-AppLockerPolicy -XmlPolicy "$env:ProgramData\applocker-rollback.xml" # (or set EnforcementMode back to AuditOnly and re-merge) # 6. VERIFY Get-AppLockerPolicy -Effective -Xml | Select-String -Pattern 'Downloads|Temp'
Playbook 5 — Remove double-click mounting of ISO and VHD for standard users
Prerequisites: local administrator; confirm no business workflow depends on users mounting disk images (IT and developer groups often do — scope the GPO to exclude them). Reboot required: no; takes effect immediately for new Explorer sessions. Rollback: restore the exported registry keys from step 1.
# 1. EXPORT for rollback reg export "HKLM\SOFTWARE\Classes\Windows.IsoFile" "$env:ProgramData\isofile-rollback.reg" /y reg export "HKLM\SOFTWARE\Classes\Windows.VhdFile" "$env:ProgramData\vhdfile-rollback.reg" /y # 2. APPLY — remove the shell "mount" verb so a double-click no longer mounts reg delete "HKLM\SOFTWARE\Classes\Windows.IsoFile\shell\mount" /f reg delete "HKLM\SOFTWARE\Classes\Windows.VhdFile\shell\mount" /f # Belt and braces: block the file types at the mail gateway as well (see # section 12, Immediate tier). Removing the verb does not stop PowerShell # Mount-DiskImage, so this is a usability control, not a hard boundary. # 3. ROLLBACK # reg import "$env:ProgramData\isofile-rollback.reg" # reg import "$env:ProgramData\vhdfile-rollback.reg" # 4. VERIFY — both should return "ERROR: The system was unable to find the # specified registry key or value" reg query "HKLM\SOFTWARE\Classes\Windows.IsoFile\shell\mount" reg query "HKLM\SOFTWARE\Classes\Windows.VhdFile\shell\mount"
Containment Runbook
Read this first. If Q3 fired — a vulnerable helper driver actually loaded — assume the endpoint agent was tampered with during the incident window. Do not use that host's own EDR process telemetry to decide scope. Build scope from network logs, identity logs, and neighbouring hosts instead.
| Phase | Actions | Owner | Evidence to capture |
|---|---|---|---|
| 0 · Triage (0–30 min) | Confirm which query fired and at what fidelity. Q2, Q3, Q5 and Q9 are incidents on sight. Q1 needs a five-minute check of the writing process and path. Q4, Q6, Q7, Q8 and Q10 need corroboration from a second query on the same aid before escalation. | SOC L1 | Query output, aid, ComputerName, UserName, first and last event timestamps. |
| 1 · Isolate (within 1 h of a confirmed hit) | Network-contain the host in Falcon. Do not power it off — the ghosted payload exists only in memory and a shutdown destroys the best evidence you have. Suspend the user's sessions and force a credential reset for any account that logged on during the window. | SOC L2 · IAM | Containment timestamp; list of sessions killed; accounts reset. |
| 2 · Collect (1–4 h) | Acquire a full memory image before anything else. Then collect: the CodeIntegrity Operational log, Sysmon EID 6 if present, the Run key and the three notification values, the contents of %LOCALAPPDATA%\Temp, the original archive from Downloads, and any .sys file in a user path. Preserve the paired EXE and DLL together — the pair is the artefact. | DFIR | Memory image hash; file collection manifest; registry exports. |
| 3 · Scope (4–12 h) | Sweep the fleet with Q1, Q2, Q3 and Q5 over 90 days. Sweep mail for the delivering message and everyone else who received it. Search proxy and DNS logs for the §4 hostnames and IP across all endpoints, not just the contained one. | SOC L2 · Mail admin | List of affected hosts and recipients; mail message IDs; proxy hits. |
| 4 · Eradicate (12–48 h) | Rebuild rather than clean. A host where the BYOVD stage succeeded had kernel-level code execution available to it; there is no reliable user-mode remediation for that. Remove the Run value and the driver on any host you cannot rebuild immediately, and re-enable the notification settings so the user gets warnings again. | Endpoint eng. | Rebuild tickets; per-host remediation record. |
| 5 · Recover (48–96 h) | Return hosts from containment only after a clean rebuild or a documented remediation plus 48 hours of clean telemetry. Rotate every credential and browser-stored secret that existed on the host — the payload families behind this crypter are overwhelmingly stealers. Revoke and reissue any certificate or token found in the collection. | SOC L2 · IAM | Credential rotation record; token revocation list; release approval. |
| 6 · Harden and close (1–2 weeks) | Deploy §13 playbooks 1 and 2 fleet-wide if they were not already in place — this is the control gap the incident proved. Promote the three §9 IOAs. Add the eight driver names to your WDAC policy. Record which detection actually caught it and which should have. | Detection eng. | Change records; IOA deployment evidence; post-incident review notes. |
Detection Coverage Map
| Technique | Behaviour | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1566.002 | Phishing link, tax / SSA / guest-complaint themes | — | — | PARTIAL — native mail-gateway hunt N1 only; no endpoint telemetry exists for this step |
| T1204.002 · T1574.002 | Archive-borne EXE side-loading a paired DLL | Q4 | — | PARTIAL — inferred from launch path; Falcon publishes no module-load event |
| T1497 | Sandbox / analyst-VM checks, decoy exports | — | — | GAP — entirely in-process, no sensor-visible artefact |
| T1564.003 | Console-window hiding via ShowWindow / SetWindowPos loop | — | — | GAP — window-management APIs are not sensor-instrumented |
| T1106 · T1562.001 (unhooking) | Indirect syscalls, API unhooking, IAT repair | — | — | GAP — this is the stage designed to defeat detection. Mitigate with HVCI and sensor tamper protection (§12) rather than trying to detect it |
| T1068 · T1562.001 (BYOVD) | Vulnerable helper driver dropped and loaded to terminate security processes | Q1, Q2, Q3 | IOA 1 | GOOD — write, hash and load all covered, plus an independent CodeIntegrity log hunt (N2/N3) |
| T1548.002 | COM Elevation Moniker UAC bypass | Q7 | IOA 3 | GOOD — after the CLSID baseline in Gate 2 |
| T1547.001 | Run-key persistence, value name putty | Q5 | IOA 2 | GOOD — near-zero FP and durable across repacking |
| T1112 | Notification suppression (ToastEnabled / Balloon / ShowInfoTip) | Q6 | — | GOOD — as a cluster; weak as a single value |
| T1140 · T1027.002 | Payload decoded from .reloc with custom Base16 | — | — | PARTIAL — offline PE triage only (N5); not observable in EDR telemetry |
| T1055 (Process Ghosting) | Pending-delete temp file, SEC_IMAGE section, suspended host process, redirected thread | Q8 | — | PARTIAL — only the staging write is visible; the execution is engineered not to be. ZwQueryVirtualMemory patching and NtManageHotPatch neutering are undetectable from user mode. Memory forensics (N4) is the only reliable confirmation |
| T1553.005 | VHD delivery stripping Mark-of-the-Web | — | — | PARTIAL — mail-gateway block and §13 playbook 5 are the answer; no detection query |
| T1071.001 · T1568.002 · T1105 | Payload C2 over dynamic DNS or a bare IP on a high port | Q9, Q10 | — | GOOD for the published infrastructure; PARTIAL for the general shape, since C2 rotates faster than a pack can be republished |
Validation gates. Coverage claimed above is only real once §11 Gate 1 passes in your tenant — in particular Q3 depends on DriverLoad telemetry reaching your NG-SIEM repo, and Q5/Q6 depend on RegValueName being populated on registry events. Work Gate 2 (benign baseline) before promoting anything to an alert, and treat Gate 4 as the promotion contract. The three GAP rows are not oversights: unhooking, sandbox checks and console hiding leave no sensor-visible artefact by design, which is precisely why the hardening controls in §12 carry more weight than usual in this pack.
Hunt Summary Ticket
TITLE: Cruciferra crypter service — EDR-blinding loader behind commodity RATs and stealers
SEVERITY: High (Critical on any Q3 hit — vulnerable driver actually loaded)
SCOPE: All Windows endpoints. Delivery is email-borne and opportunistic; no
vertical or geography is out of scope. This hunts the CRYPTER, not any
single customer campaign.
HYPOTHESIS: A commodity-malware crew has used the Cruciferra crypter service to
deliver a RAT or stealer into the estate. The crypter blinds EDR via
indirect syscalls, API/IAT unhooking and BYOVD process termination,
escalates through the COM Elevation Moniker, persists under a Run value
named "putty", suppresses Windows notifications, and executes the payload
through a Process Ghosting variant. The observable half of that chain is
the driver, the registry, and the staging write.
QUERIES: Q1 BYOVD helper driver written to disk CONF high / FP med
Q2 Published SHA256 set (8 drivers + 1 loader) CONF high / FP low
Q3 BYOVD helper driver loaded into the kernel CONF high / FP med
Q4 Archive-borne EXE side-load entry point CONF med / FP high
Q5 Run-key persistence value name "putty" CONF high / FP low
Q6 Notification-suppression registry cluster CONF med / FP med
Q7 COM Elevation Moniker UAC bypass CONF med / FP med
Q8 Ghost-payload staging in user Temp CONF med / FP med
Q9 DNS to published C2 / staging hosts CONF high / FP low
Q10 RAT beacon: known C2 IP + dynamic DNS CONF med / FP med
DO FIRST: 1. Run Q2 and Q5 over 90 days. Both are near-zero-FP; any hit is an
incident and short-circuits the rest of the hunt.
2. Run Q1 and Q3 over 90 days. Triage on the writing process and the
path, never on the driver name alone.
3. Confirm the vulnerable-driver blocklist and ASR rule
56a863a9-875e-4185-98a7-b882c64b5ce5 are enabled fleet-wide
(section 10 audit block). If they are not, that is the finding.
4. Only then work Q4, Q6, Q7, Q8 as stack-and-review hunts.
FINDINGS: [ ] Q1 hits: ______ [ ] Q2 hits: ______ [ ] Q3 hits: ______
[ ] Q5 hits: ______ [ ] Q9 hits: ______ [ ] Q10 hits: ______
[ ] Vulnerable-driver blocklist enabled fleet-wide? Y / N
[ ] ASR 56a863a9 in Block mode fleet-wide? Y / N
GAPS: Unhooking, indirect syscalls, IAT repair, sandbox checks and console
hiding are not detectable from the sensor by design. Process Ghosting
execution is only PARTIALLY covered — the staging write is visible, the
execution is not. Compensate with HVCI, WDAC driver blocking, sensor
tamper protection and application allowlisting (section 12).
ACTIONS: - Import the 14 atomic IOCs from section 10 into Falcon IOC Management.
- Promote the three IOAs in section 9 (Detect for 14 days, then Prevent;
the Q1-derived file-creation rule may go straight to Prevent).
- Deploy section 13 playbooks 1 and 2 this week; pilot 3, 4 and 5.
- Re-run Q2, Q9 and Q10 monthly; the infrastructure half of this pack
perishes fast (a fresh Cruciferra build every few minutes on 9 Jul 2026).
OWNER: Detection Engineering
VERSION: v0.1 · 2026-07-29 · HuntPack
Changelog
References
| Tier | Source | Used for | Accessed |
|---|---|---|---|
| TIER 1 | Proofpoint — Unpacking "Cruciferra": An Analysis of a Sophisticated Crypter Service (2026-07-20) | Primary technical analysis. Every atomic IOC, every behavioural signature, the driver table, the syscall list, the registry keys, the Process Ghosting sequence, and the payload family list. | 2026-07-29 |
| TIER 2 | The Hacker News — Cruciferra Crypter Uses BYOVD and Process Ghosting to Hide Windows Malware (2026-07-27) | Corroboration; the Operation DragonReturn cross-reference that drove this pack's scoping decision. | 2026-07-29 |
| TIER 2 | eSecurity Planet — Cruciferra Crypter Evades Detection to Deliver Malware | Corroboration of pricing, timeline, evasion stack and payload families. | 2026-07-29 |
| TIER 2 | SecurityOnline — Cruciferra Crypter Service Cloaks RATs and Infostealers for Many Threat Actors (2026-07-27) | Corroboration of the GoFlyDrv.sys EDR-termination role; PE File Version Information as a hunting handle. | 2026-07-29 |
| FRAMEWORK | MITRE ATT&CK T1068 · T1562.001 · T1574.002 · T1548.002 · T1547.001 · T1055 | Technique and mitigation mapping in §6 and §12. | 2026-07-29 |
| VENDOR | Microsoft — Recommended driver block rules / vulnerable driver blocklist · Defender ASR rules reference · COM Elevation Moniker | Hardening controls and playbooks in §12 and §13. | 2026-07-29 |
| PIPELINE | HuntPack library — OperationDragonReturn-Hunt | Existing coverage for TA4922's Indian tax-lure campaign; this pack deliberately does not duplicate it. | 2026-07-29 |