Sauron Loader: MaaS DLL Side-Loading Campaigns Against Germany

A new Malware-as-a-Service loader sold on Russian-speaking underground forums by the actor alias "S4ur0n," used as the final stage in ClickFix and vishing campaigns against German organizations. Hunt, detect and harden.
Threat
Sauron Loader (MaaS)
Severity
ACTIVE CAMPAIGN
Type
Loader · DLL side-loading · C2
Initial Access
ClickFix fake prompts · vishing (email bombing + fake IT support)
Version
v1.0 · 2026-09-27
Author
HuntPack
Confidence
High (two independent primary sources)
01

Executive Summary

DCSO CyTec published research on 2026-09-24 describing a previously undocumented loader family it calls Sauron Loader, encountered in multiple real-world incidents against organizations in Germany. The malware is sold as Malware-as-a-Service in Russian-speaking underground forums by an actor operating under the alias "S4ur0n" (leetspeak for "Sauron"), and the seller's own advertisement states the loader is intended exclusively for Russian-speaking customers and is not to be used against public-sector organizations or post-Soviet states. Cyber Security News independently corroborated the finding on 2026-09-25 after DCSO shared the report with them directly, and the write-up was further mirrored by Cryptika, summarized by Mallory.ai, and cross-posted to the malware.news community board. This pack treats the DCSO CyTec research as the primary technical source and Cyber Security News as the second independent confirmation.

In the incidents DCSO supported, Sauron Loader was the final stage of attack chains that began with social engineering rather than exploitation: ClickFix-style fake verification prompts and voice phishing, where victims were first flooded with spam email (email bombing) and then contacted by attackers posing as IT support, in some cases directing the victim to start a Microsoft Quick Assist remote-assistance session. The observed MSI installer drops three files into the hardcoded directory C:\ProgramData\keyroll: the legitimate, genuinely Mozilla-signed utility rnpkeys.exe (part of the RNPGP suite), the malicious loader library rnp.dll that it side-loads, and a second malicious library tdwp.dll that decrypts rnp.dll's encrypted sections directly in memory and creates a scheduled task named keyroll for persistence. The malware deliberately delays execution during decryption, a technique intended to frustrate antivirus and automated sandbox analysis.

The highest-value defensive angle is the directory and the task name, not the DLL filenames. rnpkeys.exe and rnp.dll are real Mozilla RNP component names, so hunting on the filenames alone risks flagging genuine RNPGP installs. What is campaign-specific is the combination: those exact binaries running from C:\ProgramData\keyroll, dropped by an MSI, backed by a scheduled task literally named keyroll. That combination has no benign explanation in a normal estate.

The second-highest-value angle is the four named command-and-control domains recovered from the decrypted embedded configuration: api.namsb-show.com, api.quinlantours.com, api.virtual-magic.com, and api.lahaina-shores.com. All four, plus the four SHA-256 hashes (the malicious MSI, the malicious rnp.dll, the malicious tdwp.dll, and the legitimate rnpkeys.exe for context only), were independently published by both DCSO CyTec and Cyber Security News, which qualifies the malicious set for a block posture under this pack's two-source rule.

Defender priority: import the section 10 CSV into Falcon IOC Management and block the four C2 domains at DNS and proxy today, then run Q2 and Q4 across a 90-day window. A hit on either is a confirmed compromise until proven otherwise: nothing in a normal estate legitimately places rnpkeys.exe in C:\ProgramData\keyroll or registers a task named keyroll. Never block the rnpkeys.exe hash itself; it is a genuine signed Mozilla binary and blocking it does nothing to stop the campaign.

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
Tier 1DCSO CyTec — Sauron Loader: A New Loader Lurking in Underground Forums (2026-09-24)Primary research. Full chain of execution, decrypted config layout, C2 protocol (Salsa20 + RSA), TLV message format, ten payload handler types, sleep/rotation timers, four C2 domains, all four SHA-256 hashes, complete MITRE ATT&CK mapping, DCSO GitHub extractor tool.Yes, primary
Tier 1Cyber Security News — Sauron Loader Malware Uses DLL Side-Loading and In-Memory Decryption to Evade Detection (2026-09-25)Independent journalism, written from a DCSO report shared directly with the outlet. Confirms the attack chain, the persistence mechanism, and republishes the full IOC table (hashes, filenames, path, task name, four C2 domains) matching DCSO's own values exactly.Yes, second independent source for the two-source block rule
Tier 2Cryptika Cybersecurity (2026-09-25)Syndicated republish; the article itself states its original source is cybersecuritynews.com. Treated as a mirror of the Cyber Security News article, not a second independent confirmation.Corroboration only
Tier 2Mallory.ai intelligence storyAggregator timeline confirming the actor alias, MaaS model, targeting restrictions, and that DCSO published the hashes and domains. Atomic indicator values are masked on the public page; no hash or domain value was sourced from this page.Narrative corroboration only, no atomic IOCs
RefDCSO GitHub — Blog_CyTec/2026_09__sauron_loaderConfig-extraction Python tool (get_config.py) and a MISP event with the indicator set. Confirms the embedded-config field layout (magic number, CIS/gov-domain check flags, RSA key lengths) independently of the blog prose.Corroboration of config structure

Research decisions

  • Prevent/critical requires two independent sources. The four C2 domains and the three malicious SHA-256 hashes (MSI, rnp.dll, tdwp.dll) are published identically by both DCSO CyTec and Cyber Security News, two editorially independent outlets, so they ship at action=prevent. The Cryptika mirror is not counted as a second source because it discloses itself as a republish of the Cyber Security News piece.
  • The legitimate rnpkeys.exe hash never ships as prevent. It is a genuine, correctly signed Mozilla RNPGP binary that the loader abuses for side-loading. It is listed as a hunt anchor with an explicit do-not-block marker in sections 4 and 10.
  • Filenames alone are not sufficient hunt anchors. rnpkeys.exe and rnp.dll are real RNPGP component names. Every CQL query keys on the unexpected parent path (C:\ProgramData\keyroll), the MSI-dropped context, the scheduled task name, or the DLL appearing outside its known location, never on the filename in isolation.
  • No aggregator-only indicators. Mallory.ai's page masks every atomic value, so nothing atomic in this pack traces to it. It was used only to confirm the narrative and the actor alias.
  • No related-cluster IOCs imported. Mallory.ai's "Related stories" panel lists unrelated malware (LegionLoader/Satacom, TA4922's SilentRunLoader/Atlas RAT, generic ClickFix/Donut loader campaigns). None of their indicators (for example a 167.88.167.9:8356 callback or an obs.dll sideload from a different campaign) belong to Sauron Loader and none are shipped in this pack.
  • Prompt-injection review. All five fetched sources (DCSO/malware.news mirror, Cyber Security News, Cryptika, Mallory.ai, DCSO's GitHub repository) were reviewed for text addressed to an automated reader: instructions to fetch further URLs, change scope, or skip a check. None were found. No source was disqualified.
  • Access note. The DCSO CyTec Medium post (the cited primary source) returns HTTP 403 to automated fetch tools. Its full text was retrieved and saved instead from its malware.news community mirror, which reproduces the post verbatim including the appendix TTP-mapping table and the indicator list.
  • Perishability. DCSO reports finding additional Sauron Loader samples with different embedded C2 infrastructure beyond the analyzed sample. The four named domains will not be the last set this loader uses; the behavioral queries in section 8 (path, task name, MSI-to-sideload chain) are built to outlive a C2 rotation.
03

Hunt Brief & Attack Chain

Attack chain

#StepObserved behaviorTelemetryHunt angle
1Initial access, ClickFixFake verification / "fix it yourself" pastejacking prompt convinces the victim to run a command themselves.Clipboard, ProcessRollup2Section 7 native hunts
1bInitial access, vishingVictims are flooded with spam email (email bombing), then called by an attacker posing as IT support. In one DCSO-observed incident the caller instructed the victim to start a Microsoft Quick Assist session.Mail gateway, remote-assistance tool logsSection 7, hardening item 3
2Stage 1, dropAn MSI installer extracts and drops three files into the hardcoded directory C:\ProgramData\keyroll: rnpkeys.exe, rnp.dll, tdwp.dll.ProcessRollup2, PeFileWrittenQ3, Q5
3Stage 2, side-loadThe legitimate rnpkeys.exe is executed and side-loads the malicious rnp.dll from the same directory.ProcessRollup2Q2, Q7
4Stage 3, in-memory decryptrnp.dll loads tdwp.dll, which decrypts encrypted sections of rnp.dll directly in memory, deliberately delaying execution to frustrate sandbox and antivirus analysis.Not exposed as a discrete Falcon eventGap, see section 15
5Persistencetdwp.dll registers a scheduled task named keyroll that re-launches the loader at intervals.ScheduledTaskRegisteredQ4, Q8, Q12
6Command and controlHTTPS POST to a randomized path of the shape /<prefix>/v<1-9>/<action><resource>?<parameters>, prefix one of api, webhook, metrics, public, internal. Payload is Salsa20-encrypted with a per-request 16-byte key and 8-byte nonce plus an RSA signature.NetworkConnectIP4, DnsRequest, proxyQ1, Q11, section 7
7RegistrationMessage type 0x01. Bot ID is the lowercase MD5 hex digest of <COMPUTERNAME><USERNAME><volume_serial>. On failure the loader rotates C2 and sleeps 160 seconds.Not exposed as a discrete Falcon event; protocol-internalBehavioral signal only
8Tasking and payload retrievalMessage type 0x02 polls for tasking; message type 0x04 retrieves a payload. On a successful poll/task cycle the loader sleeps 600 seconds. Staged payloads land in %TEMP% with a random 6-16 character filename.PeFileWritten, NewExecutableWritten, ZipFileWrittenQ9
9Payload executionTen handler types: EXE, DLL (via rundll32/regsvr32 or a manual PE loader), driver, shellcode, MSI, ZIP, CMD, PowerShell, VBS, JavaScript.ProcessRollup2Q12, section 7
10Result reportingMessage type 0x03 reports task results back to the C2, including chunked PNG screenshot exfiltration in pieces of up to 0x4000 bytes.NetworkConnectIP4, proxySection 7

Hunt hypotheses (fidelity-ordered)

HHypothesisMITRETelemetryExpected FP sourceConf
H1A host resolved one of the four named Sauron Loader C2 domains.T1071.001DnsRequestNone. No benign resolver path exists.High
H2rnpkeys.exe executed from C:\ProgramData\keyroll.T1574.002, T1036.005ProcessRollup2None observed; no legitimate RNPGP install uses this path.High
H3rnp.dll or tdwp.dll was written to C:\ProgramData\keyroll.T1027.013, T1574.002PeFileWrittenNone observed; campaign-specific path and filename pair.High
H4A scheduled task named keyroll was registered.T1053.005ScheduledTaskRegisteredNone; not a Windows or common-vendor task name.High
H5msiexec.exe directly spawned rnpkeys.exe.T1218.007, T1574.002ProcessRollup2None observed in a normal software-deployment estate.High
H6A published Sauron Loader SHA-256 hash executed or was written to disk.T1204.002ProcessRollup2, PeFileWrittenMalware-analysis workstations and detonation sandboxes.High
H7An RNP/rnpkeys binary executed outside its legitimate Mozilla install path, campaign-agnostic form of H2.T1574.002, T1036.005ProcessRollup2A genuine Thunderbird/RNP install running key-management operations from Program Files.Medium
H8A scheduled task launches an executable from a non-standard ProgramData subfolder, campaign-agnostic form of H4.T1053.005ScheduledTaskRegisteredLegitimate vendor agents that install a scheduled task under ProgramData.Medium
H9A payload with a random 6-16 character filename and a loader-handler extension was staged to %TEMP%.T1105, T1027PeFileWritten, NewExecutableWrittenInstallers and browsers routinely stage randomly-named temp files.Medium
H10rnp.dll or tdwp.dll appeared outside the known C:\ProgramData\keyroll path, a moved or renamed build.T1036.005, T1574.002PeFileWrittenNone known by filename collision; confirm sensor signature-flag semantics before alerting.Medium
H11A process running out of C:\ProgramData\keyroll beacons out repeatedly on TCP/443, matching the loader's 160s/600s poll cadence.T1071.001, T1573.001, T1573.002NetworkConnectIP4Any legitimate agent co-located in ProgramData.Medium
H12rundll32 or regsvr32 was invoked directly against rnp.dll or tdwp.dll, the Type-2 DLL payload handler.T1218.011, T1218.010, T1574.002ProcessRollup2None expected; these files are not legitimately invoked this way.High
04

Consolidated IOC Table

Confidence high = published identically by DCSO CyTec and Cyber Security News, two independent sources. Action follows confidence: only two-source infrastructure ships at prevent/critical, and the legitimate Mozilla binary never ships as a block action regardless of how prominently it appears in the chain.

TypeValueConfActionContextExpiry
domainapi[.]namsb-show[.]comhighpreventSauron Loader C2 endpoint recovered from the decrypted embedded config.2027-03-27
domainapi[.]quinlantours[.]comhighpreventSauron Loader C2 endpoint.2027-03-27
domainapi[.]virtual-magic[.]comhighpreventSauron Loader C2 endpoint.2027-03-27
domainapi[.]lahaina-shores[.]comhighpreventSauron Loader C2 endpoint.2027-03-27
sha256ee727d639eaa4ee2e0d7cafbe496e14aaac8df0955d9fb599f2c11dfa1d0f8f2highpreventAnalyzed MSI installer; drops the loader triad into C:\ProgramData\keyroll.2027-03-27
sha2565606afdc5191d42f38d3c4f1692eda0a629c88810e29bfe78528733284ad1bf8highpreventMalicious loader library rnp.dll, side-loaded by rnpkeys.exe.2027-03-27
sha2566551293e996d19755ba497f50b30a18c178f0d6e2a73b29ae742b8171e2985b7highpreventMalicious decrypter and scheduler library tdwp.dll; creates the keyroll scheduled task.2027-03-27
sha256194d7e8870ff783ce1e4e4e3015c895cc67ae52fd5e063c89dd1c069400d3991highhunt onlyLegitimate, genuinely Mozilla-signed RNPGP binary. Never block. Listed as a hunt anchor for its location, not its identity.n/a
pathC:\ProgramData\keyrollhighhuntHardcoded drop directory for the entire loader triad. The single highest-fidelity behavioral anchor in this pack.2027-03-27
scheduled taskkeyrollhighhuntPersistence mechanism created by tdwp.dll.2027-03-27
filenamernp.dllhighhuntMalicious loader DLL. Also a real Mozilla RNPGP component name; hunt on location, not name alone.2027-03-27
filenametdwp.dllhighhuntMalicious decrypter/scheduler DLL.2027-03-27
filenamernpkeys.exehighhunt (context)Legitimate side-loading host binary. Do not block; watch for it running from an unexpected path.n/a
networkURI shape /<prefix>/v<1-9>/<action><resource>?<parameters>highhunt (proxy)Randomized HTTPS beacon path; not visible to endpoint telemetry, see section 7.2027-03-27

Do not block rnpkeys.exe by hash or by name alone. It is a genuine, correctly signed Mozilla RNPGP utility that the loader abuses purely for its side-loading behavior. Blocking it breaks a legitimate application and does not stop the campaign, which would simply ship a different signed host binary in its next MSI build.

05

Affected Surface & Telemetry Matrix

SurfaceExposureRequired telemetryPriorityGap risk
Windows workstationsPrimary target. ClickFix and vishing lures both land here; full MSI-drop-to-persistence chain executes on the endpoint.ProcessRollup2, PeFileWritten, ScheduledTaskRegistered, NetworkConnectIP4, DnsRequestCriticalLow, standard Falcon coverage
Help-desk / remote-support toolingVishing chain culminates in a Microsoft Quick Assist or similar remote-assistance session granted by the victim.Remote-assistance application logs, ProcessRollup2HighMedium, depends on whether remote-assist tools are logged centrally
Email gatewayEmail-bombing precursor to the vishing chain.Mail flow / volume anomaly logsHighMedium, volume anomaly detection is often tuned for spam, not bombing
DNS resolver / proxyThe only place a host with no endpoint agent, or a host beaconing before EDR loads, shows up.DNS resolver logs, proxy logs with URI and user agentCriticalMedium, URI-level proxy logging is not universally retained
Loader in-memory decryption stageThe decryption of rnp.dll's encrypted sections by tdwp.dll, and the deliberate execution delay.Not surfaced as a discrete Falcon eventMediumGap, memory-scan / IOA territory only
C2 protocol content (Salsa20/RSA)Registration, tasking, and result messages are opaque to any device that only sees encrypted HTTPS.Full packet capture or a TLS-terminating proxyMediumGap, most estates do not TLS-inspect all egress
06

ATT&CK Mapping

Technique identifiers below follow DCSO CyTec's own published TTP mapping appendix.

TacticTechniqueObserved behaviorQuery / control
Initial AccessT1667 Email BombingSpam flood precedes the fake IT-support call.Section 7
Initial AccessT1566.004 Phishing: Spearphishing VoiceAttacker calls posing as IT support after the email flood.Section 7, hardening item 3
Initial Access / C2T1219 Remote Access ToolsVictim instructed to start a Microsoft Quick Assist session in at least one incident.Section 7
Defense Evasion / ExecutionT1218.007 System Binary Proxy Execution: MsiexecMSI installer drops and launches the triad.Q5
Defense EvasionT1574.002 Hijack Execution Flow: DLL Side-Loadingrnpkeys.exe side-loads rnp.dll.Q2, Q7, Q12
Defense EvasionT1036.005 Masquerading: Match Legitimate Resource Name or LocationMalicious DLLs reuse legitimate RNPGP component names.Q10
Defense EvasionT1027.013 Obfuscated Files or Information: Encrypted/Encoded Filernp.dll ships with encrypted sections.Q3
Defense EvasionT1140 Deobfuscate/Decode Files or Informationtdwp.dll decrypts rnp.dll in memory.Gap, section 15
Defense EvasionT1480.001 Execution Guardrails: Environmental KeyingCIS-country and public-sector checks gate execution per the seller's advertisement and embedded config.Behavioral note only
PersistenceT1053.005 Scheduled Task/Job: Scheduled TaskTask keyroll re-launches the loader.Q4, Q8, Q12
DiscoveryT1082, T1033, T1057, T1518.001, T1016, T1614.001Registration message collects computer name, username, Windows version, privilege level, installed products, and keyboard-layout/CIS checks.Behavioral note only
Command and ControlT1071.001 Application Layer Protocol: Web ProtocolsHTTPS POST with a randomized URI path.Q1, Q11, section 7
Command and ControlT1573.001 Encrypted Channel: Symmetric CryptographySalsa20 encryption of every request and response.Q11, section 7
Command and ControlT1573.002 Encrypted Channel: Asymmetric CryptographyRSA signature over every request.Section 7
Command and ControlT1105 Ingress Tool TransferMessage type 0x04 payload retrieval.Q9
ExecutionT1059.003, T1059.001, T1059.005, T1059.007CMD, PowerShell, VBS and JavaScript payload handlers.Section 7
Execution / Defense EvasionT1218.011 Rundll32, T1218.010 Regsvr32DLL payload handler stages via rundll32/regsvr32 or a manual PE loader.Q12
Execution / PersistenceT1543.003 Create or Modify System Process: Windows ServiceDriver payload handler installs and starts a driver service.Section 7
Defense EvasionT1055.012 Process Injection: Process HollowingShellcode handler can inject into a host process.Section 7
Defense Evasion / ExecutionT1620 Reflective Code LoadingManual PE loading path for the DLL handler.Section 7
CollectionT1113 Screen CaptureChunked PNG screenshot exfiltration via the task-results message.Section 7
ExfiltrationT1041 Exfiltration Over C2 ChannelTask results and screenshot chunks exfiltrated over the same encrypted C2 channel.Q11, section 7
07

Native Audit-Log Hunts (non-CQL)

Proxy / web gateway

  • Search proxy access logs for HTTPS POST requests whose path matches /<prefix>/v[1-9]/<action><resource> where prefix is one of api, webhook, metrics, public, internal, action is set or get, and resource is one of Config, Status, Profile, Settings, Preferences, Token, Metadata, Connection, Timeout, Features. A single client hitting several of these path shapes at a steady interval is the loader's registration/poll cycle.
  • Filter on the two documented loader user-agent strings: Mozilla/5.0 (Windows NT %d.%d; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.3650.96 for Windows 10 and above, and Mozilla/5.0 (Windows NT %d.%d; Trident/7.0; rv:11.0) like Gecko for Windows 8, where %d.%d is the actual Windows major/minor version.
  • Look for a steady beacon rhythm consistent with the documented sleep timers: roughly 160 seconds after a failed registration or poll (also triggers C2 rotation to one of the other three domains), and roughly 600 seconds after a successful poll/task cycle.
  • If your proxy or firewall can TLS-inspect the session, the plaintext-before-encryption structure is a Salsa20 key/nonce header (16-byte key, 8-byte nonce on client requests; 32-byte key, 8-byte nonce on server responses) followed by an RSA signature and ciphertext length fields, then 1111 to 9999 bytes of random padding. This shape is unusual enough to fingerprint even without breaking the encryption.

DNS resolver

  • Query resolver logs for the four named domains in section 4 over your longest retention window. DCSO notes it found additional samples with different embedded C2 infrastructure, so treat the four names as a floor, not a ceiling.
  • Flag repeated NXDOMAIN or fast domain-rotation patterns from a single client immediately following a resolution of one of the four known domains: this is the loader's documented C2-rotation-on-failure behavior.

Email gateway

  • Search for a sudden, sharp increase in inbound mail volume to a single mailbox in a short window (email bombing), especially newsletter or mailing-list signup confirmations, which is a common bombing technique.
  • Cross-reference any mailbox that received an email-bombing pattern against subsequent inbound or outbound calls, help-desk tickets, or remote-assistance session logs within the following hours.

Remote-assistance tooling

  • Audit Microsoft Quick Assist (and AnyDesk, if present in your estate) session logs for sessions initiated by a standard user shortly after an email-bombing event, without a corresponding IT ticket opened beforehand by the user.
  • Confirm your help desk has, and staff actually follow, an out-of-band identity-verification step before starting any unsolicited remote-assistance session.

Windows endpoint (Sysmon / native)

  • Sysmon Event ID 7 (Image Loaded): rnpkeys.exe loading rnp.dll from C:\ProgramData\keyroll. This is the cleanest sideloading signal and Falcon's Custom IOA rule types are the closest native equivalent (section 9).
  • Sysmon Event ID 11 (File Create): any of rnpkeys.exe, rnp.dll, or tdwp.dll created under C:\ProgramData\keyroll.
  • Sysmon Event ID 1 (Process Create) with a command line invoking schtasks.exe /create and a task name of keyroll, as a cross-check against the native ScheduledTaskRegistered event used in Q4.
  • Enumerate C:\ProgramData for any subdirectory containing exactly the triad rnpkeys.exe, rnp.dll, tdwp.dll, regardless of the parent folder name, in case a future build renames the drop directory. Playbook 1 in section 13 does this estate-wide.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first: every "Open in Falcon" button below uses this selection.

None of these queries carry an in-query time filter. Set the window with the console time picker; the intended lookback is recorded in each card as a // LOOKBACK: comment. For this campaign use 90 days minimum, since DCSO reports finding additional samples with independently rotated C2 infrastructure.

Q1 · Confirmed Sauron Loader C2 domain resolution
CONF HIGHFP LOWCOST LOW

Looks for: DNS resolution of the four C2 domains recovered from the decrypted embedded config and confirmed by two independent sources. There is no benign path to these names. Run this first.

// HUNT: Sauron Loader confirmed C2 domain resolution
// MITRE: T1071.001 | CONF: high  FP: low  COST: low
// REQUIRES: DnsRequest telemetry
// FALSE POSITIVES: none expected; no legitimate resolver path exists for these hostnames
// LOOKBACK: 90d (set in the console time picker)
#event_simpleName=/^(DnsRequest|SuspiciousDnsRequest)$/
| DomainName=/^([a-z0-9_-]+\.)*(namsb-show\.com|quinlantours\.com|virtual-magic\.com|lahaina-shores\.com)$/i
| table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, DomainName])
| sort(@timestamp, order=desc, limit=500)
Q2 · rnpkeys.exe executing from the ProgramData\keyroll drop directory
CONF HIGHFP LOWCOST LOW

Looks for: the exact side-load host binary running from the exact hardcoded directory the MSI drops it into. rnpkeys.exe is a real Mozilla RNPGP utility, but it has no legitimate reason to run from C:\ProgramData\keyroll. This combination of name and path is the single highest-fidelity signal in this pack.

// HUNT: Sauron Loader side-load host executing from its hardcoded drop directory
// MITRE: T1574.002, T1036.005, T1218.007 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2
// FALSE POSITIVES: none expected; rnpkeys.exe has no legitimate reason to run from ProgramData\keyroll
// LOOKBACK: 90d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^rnpkeys(\.exe)?$/i
| ImageFileName=/\\ProgramData\\keyroll\\/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, SHA256HashData, CommandLine])
| sort(@timestamp, order=desc, limit=500)
Q3 · rnp.dll / tdwp.dll written to the ProgramData\keyroll directory
CONF HIGHFP LOWCOST LOW

Looks for: the MSI-drop moment itself, catching the malicious DLL pair as it is written to disk, which typically happens before the process-execution signal in Q2 fires.

// HUNT: Sauron Loader malicious DLL pair written to the ProgramData\keyroll directory
// MITRE: T1027.013, T1574.002 | CONF: high  FP: low  COST: low
// REQUIRES: PeFileWritten or NewExecutableWritten
// FALSE POSITIVES: none expected; this exact filename pair dropping into this exact directory is campaign-specific
// LOOKBACK: 90d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\ProgramData\\keyroll\\(rnp|tdwp)\.dll$/i
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, SHA256HashData])
| sort(@timestamp, order=desc, limit=500)
Q4 · "keyroll" scheduled task registration
CONF HIGHFP LOWCOST LOW

Looks for: the exact persistence task name created by tdwp.dll. "keyroll" is not a Windows or common-vendor task name, so this is a near zero-false-positive query.

// HUNT: Sauron Loader "keyroll" scheduled task persistence
// MITRE: T1053.005 | CONF: high  FP: low  COST: low
// REQUIRES: ScheduledTaskRegistered telemetry
// FALSE POSITIVES: none expected; "keyroll" is not a Windows or common-vendor task name
// LOOKBACK: 90d
#event_simpleName=/^ScheduledTaskRegistered$/
| TaskName=/^keyroll$/i
| table([@timestamp, aid, ComputerName, UserName, TaskName, TaskExecutable, TaskAuthor])
| sort(@timestamp, order=desc, limit=500)
Q5 · msiexec directly spawning the side-load host
CONF HIGHFP LOWCOST LOW

Looks for: the installer-to-execution chain, msiexec.exe as the immediate parent of rnpkeys.exe. A normal RNPGP install is run by a user double-clicking an installer UI or a package manager, not spawned as a direct msiexec child in this pattern.

// HUNT: MSI installer directly spawning the Sauron Loader side-load host
// MITRE: T1218.007, T1574.002 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2
// FALSE POSITIVES: none expected; msiexec does not legitimately launch rnpkeys.exe as a direct child
// LOOKBACK: 90d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^msiexec(\.exe)?$/i
| FileName=/^rnpkeys(\.exe)?$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine])
| sort(@timestamp, order=desc, limit=500)
Q6 · Known Sauron Loader SHA-256 set (malicious files only)
CONF HIGHFP LOWCOST LOW

Looks for: the vendor-published SHA-256 set for the malicious MSI dropper and the two malicious DLLs. Retrospective hash hunting is the cheapest confirmation you have; run it before anything else if you only have time for one query besides Q1.

// HUNT: Sauron Loader known-bad SHA-256 set (MSI dropper + malicious DLL pair)
// MITRE: T1204.002, T1574.002 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2, PeFileWritten or ImageHash
// FALSE POSITIVES: malware-analysis workstations and detonation sandboxes
// NOTE: the legitimate signed rnpkeys.exe hash is deliberately NOT in this list; see section 4
// LOOKBACK: 180d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten|ImageHash)$/
| in(SHA256HashData, values=[
    "ee727d639eaa4ee2e0d7cafbe496e14aaac8df0955d9fb599f2c11dfa1d0f8f2",
    "5606afdc5191d42f38d3c4f1692eda0a629c88810e29bfe78528733284ad1bf8",
    "6551293e996d19755ba497f50b30a18c178f0d6e2a73b29ae742b8171e2985b7"])
| table([@timestamp, aid, ComputerName, UserName, #event_simpleName, FileName, ImageFileName, TargetFileName, SHA256HashData])
| sort(@timestamp, order=desc, limit=500)
Q7 · rnpkeys.exe executing outside a legitimate RNPGP install path (generalised)
CONF MEDFP MEDCOST MED

Looks for: the campaign-agnostic version of Q2, in case a future Sauron Loader build renames the keyroll drop directory. FP: medium; a genuine Thunderbird or standalone RNP install legitimately runs rnpkeys.exe from Program Files during key management, so the tuning line is required before this feeds an alert.

// HUNT: RNP/rnpkeys binary executing outside its legitimate Mozilla RNP install path
// MITRE: T1574.002, T1036.005 | CONF: medium  FP: medium  COST: medium
// REQUIRES: ProcessRollup2
// FALSE POSITIVES: a genuine Thunderbird/RNP install running rnpkeys.exe from Program Files during key management
// TUNING: append the exclusion stage below to drop the real install path, then baseline the survivors
// TUNING: | ImageFileName!=/\\Program Files( \(x86\))?\\(Mozilla Thunderbird|RNP)\\/i
// LOOKBACK: 90d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^rnpkeys(\.exe)?$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, SHA256HashData])
| sort(@timestamp, order=desc, limit=500)
Q8 · Scheduled task launching from a non-standard ProgramData subfolder (generalised)
CONF MEDFP MEDCOST MED

Looks for: the campaign-agnostic version of Q4, in case a future build renames the keyroll task. Sorted ascending so the rarest task/executable pairs surface first. FP: medium; plenty of legitimate vendor agents install a scheduled task under ProgramData.

// HUNT: Scheduled task launching an executable from a non-standard ProgramData subfolder
// MITRE: T1053.005 | CONF: medium  FP: medium  COST: medium
// REQUIRES: ScheduledTaskRegistered telemetry
// FALSE POSITIVES: legitimate vendor agents and updaters that install a scheduled task under ProgramData
// TUNING: exclude your approved ProgramData vendor subfolders by name, e.g. append
// TUNING: | TaskExecutable!=/\\ProgramData\\(Microsoft|Google|Mozilla|Adobe|Dell|HP|Intel|CrowdStrike)\\/i
// TUNING: then investigate any TaskExecutable seen on fewer than 3 distinct hosts
// LOOKBACK: 90d
#event_simpleName=/^ScheduledTaskRegistered$/
| TaskExecutable=/\\ProgramData\\[^\\]+\\[^\\]+\.(exe|dll)$/i
| groupBy([TaskName, TaskExecutable], function=[count(aid, distinct=true, as=HostCount), count(as=Regs)], limit=2000)
| sort(HostCount, order=asc, limit=200)
Q9 · Randomised-filename payload staged to %TEMP%
CONF MEDFP MED-HIGHCOST MED

Looks for: the documented staging pattern for a directly-downloaded payload, a 6-16 character random name in %TEMP% with one of the loader's ten handler-format extensions. FP: medium-high on its own; installers and browsers do this constantly, so treat a hit as a triage feed and correlate with Q2/Q3 on the same host within a 24-hour window before acting.

// HUNT: Sauron Loader payload staged to %TEMP% with a randomised filename
// MITRE: T1105, T1027 | CONF: medium  FP: medium-high  COST: medium
// REQUIRES: PeFileWritten, NewExecutableWritten or ZipFileWritten
// FALSE POSITIVES: legitimate installers and browsers routinely stage randomly-named temp files
// TUNING: correlate with Q2/Q3 hits on the same aid within a 24h window before treating this as actionable;
// TUNING: on its own this query is a triage feed, not an alert
// LOOKBACK: 30d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten|ZipFileWritten)$/
| TargetFileName=/\\Temp\\[A-Za-z0-9]{6,16}\.(exe|dll|sys|msi|zip|cmd|ps1|vbs|js)$/i
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, SHA256HashData])
| sort(@timestamp, order=desc, limit=500)
Q10 · rnp.dll / tdwp.dll appearing outside the known drop path
CONF MEDFP MEDCOST MED

Looks for: a moved, renamed-directory, or manually-copied build of the loader that keeps the DLL filenames but drops them somewhere other than C:\ProgramData\keyroll. Projects SignInfoFlags as a signing-state hint alongside the hash.

// HUNT: rnp.dll / tdwp.dll written outside the known ProgramData\keyroll drop path
// MITRE: T1036.005, T1574.002 | CONF: medium  FP: medium  COST: medium
// REQUIRES: PeFileWritten or NewExecutableWritten
// FALSE POSITIVES: none known by filename collision, but confirm SignInfoFlags semantics for your sensor version first
// TUNING: ⚠ validate in tenant -- SignInfoFlags bit meanings are sensor/tenant-version dependent;
// TUNING: project and baseline the values your estate actually reports before filtering on a specific bit
// LOOKBACK: 90d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\(rnp|tdwp)\.dll$/i
| TargetFileName!=/\\ProgramData\\keyroll\\/i
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, SignInfoFlags, SHA256HashData])
| sort(@timestamp, order=desc, limit=500)
Q11 · Repeated HTTPS egress from a ProgramData\keyroll process (beacon cadence)
CONF MEDFP MED-HIGHCOST HIGH

Looks for: the network-egress fingerprint of the loader's own process names reaching out on TCP/443 repeatedly, which is what the documented 160-second (failed poll) and 600-second (successful poll) sleep cadence looks like from the outside. FP: medium-high; any legitimate agent that happens to share the directory would match. COST: high; scope the lookback down after tuning.

// HUNT: Repeated HTTPS egress from a Sauron Loader process (C2 poll/registration cadence)
// MITRE: T1071.001, T1573.001, T1573.002 | CONF: medium  FP: medium-high  COST: high
// REQUIRES: NetworkConnectIP4
// FALSE POSITIVES: any legitimate updater or agent co-located under the same process names
// TUNING: drop known-good egress destinations first, e.g. append a !cidr() stage for your CDN/vendor ranges,
// TUNING: then keep groups where Conns is high and the FirstSeen-to-LastSeen span matches multiple poll cycles
// LOOKBACK: 30d (this one is expensive; widen only after tuning)
#event_simpleName=/^NetworkConnectIP4$/
| ContextBaseFileName=/^(rnpkeys|rnp|tdwp)(\.exe|\.dll)?$/i
| RemotePort=443
| groupBy([aid, ComputerName, ContextBaseFileName, RemoteAddressIP4], function=[count(as=Conns), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=2000)
| sort(Conns, order=desc, limit=200)
Q12 · rundll32 / regsvr32 invoked against a Sauron Loader component DLL
CONF HIGHFP LOWCOST LOW

Looks for: the DCSO-documented Type-2 DLL payload handler, which stages a DLL and launches it via rundll32/regsvr32 or a manual PE loader. Catches a downloaded second-stage DLL payload being invoked this way, independent of the initial infection path.

// HUNT: rundll32/regsvr32 invoked against a Sauron Loader component DLL
// MITRE: T1218.011, T1218.010, T1574.002 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2
// FALSE POSITIVES: none expected; rnp.dll/tdwp.dll are not legitimately invoked via rundll32/regsvr32
// LOOKBACK: 90d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(rundll32|regsvr32)(\.exe)?$/i
| CommandLine=/\\(rnp|tdwp)\.dll/i
| table([@timestamp, aid, ComputerName, UserName, FileName, CommandLine])
| sort(@timestamp, order=desc, limit=500)
09

CrowdStrike Custom IOA Recommendations

Four of the twelve queries are clean enough to promote to Custom IOAs. The rest stay investigate-only until tuned. Build these under Endpoint security > Custom IOA rule groups, start every rule at Detect, and only move to Prevent after a two-week clean baseline.

IOA-1 · Side-load host in its hardcoded drop directory

FieldValue
Rule typeProcess Creation
Source from QQ2
Image filename pattern.*\\rnpkeys\.exe
Path guardImage filename pattern .*\\ProgramData\\keyroll\\.*
SeverityCritical
ActionDetect first. Promote to Prevent once confirmed no internal tooling ever stages a legitimate RNPGP binary under this path.

IOA-2 · "keyroll" scheduled task creation

FieldValue
Rule typeScheduled Task Registered
Source from QQ4
Task name pattern^keyroll$
SeverityCritical
ActionDetect. This name has no known legitimate use; promote to Prevent after a short observation window.

IOA-3 · MSI-to-sideload execution chain

FieldValue
Rule typeProcess Creation
Source from QQ5
Parent image filename pattern.*\\msiexec\.exe
Image filename pattern.*\\rnpkeys\.exe
SeverityHigh
ActionDetect, then Prevent once confirmed your software-deployment tooling never chains msiexec directly into rnpkeys.exe.

IOA-4 · rundll32/regsvr32 against a component DLL

FieldValue
Rule typeProcess Creation
Source from QQ12
Image filename pattern.*\\(rundll32|regsvr32)\.exe
Command line pattern.*\\(rnp|tdwp)\.dll.*
SeverityHigh
ActionDetect, then Prevent; no legitimate invocation of these filenames via rundll32/regsvr32 is expected.

Not promoted, and why

  • Q1 / Q6 (domain and hash lookups) — better served by Falcon IOC Management import than by a Custom IOA. Import the CSV in section 10 instead.
  • Q3 — the file-write moment overlaps IOA-1's process signal in most incidents and is kept as a scheduled search rather than a duplicate IOA.
  • Q7, Q8, Q9, Q10, Q11 — FP medium or higher. Run these as scheduled searches for two weeks and apply the tuning line before considering an IOA.
  • The in-memory decryption stage and the Salsa20/RSA protocol content — no Custom IOA rule type reaches them. They are memory-behavioral and protocol-content signals respectively; treat this as a known ceiling, not a gap you can close with more queries.
10

Machine-Readable IOC Appendix

Read before importing. Every value below traces to a saved snapshot of the DCSO CyTec research and its independent Cyber Security News confirmation. Two-source infrastructure carries severity=critical. The legitimate Mozilla binary is listed for context only and must never be set to a block action.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
domain,api.namsb-show.com,prevent,critical,2027-03-27,Sauron Loader C2 endpoint,campaign:SauronLoader
domain,api.quinlantours.com,prevent,critical,2027-03-27,Sauron Loader C2 endpoint,campaign:SauronLoader
domain,api.virtual-magic.com,prevent,critical,2027-03-27,Sauron Loader C2 endpoint,campaign:SauronLoader
domain,api.lahaina-shores.com,prevent,critical,2027-03-27,Sauron Loader C2 endpoint,campaign:SauronLoader
sha256,ee727d639eaa4ee2e0d7cafbe496e14aaac8df0955d9fb599f2c11dfa1d0f8f2,prevent,critical,2027-03-27,Sauron Loader MSI installer,campaign:SauronLoader
sha256,5606afdc5191d42f38d3c4f1692eda0a629c88810e29bfe78528733284ad1bf8,prevent,critical,2027-03-27,Sauron Loader malicious rnp.dll,campaign:SauronLoader
sha256,6551293e996d19755ba497f50b30a18c178f0d6e2a73b29ae742b8171e2985b7,prevent,critical,2027-03-27,Sauron Loader malicious tdwp.dll,campaign:SauronLoader
# DO NOT BLOCK 194d7e8870ff783ce1e4e4e3015c895cc67ae52fd5e063c89dd1c069400d3991
# That SHA-256 is the LEGITIMATE, genuinely Mozilla-signed rnpkeys.exe utility.
# It is a hunt anchor only. Blocking it breaks a real product and stops nothing.
# The next campaign build can pick a different signed host binary entirely.
Behavioral signaturesoutlives the IOCs
# These survive a C2 rotation or a renamed drop directory. The atomic
# indicators above will not.
DROP_PATH         C:\ProgramData\keyroll (hardcoded MSI extraction target)
TRIAD             rnpkeys.exe (legit) + rnp.dll (malicious loader) +
                  tdwp.dll (malicious decrypter/scheduler), all three in
                  the same directory
SIDELOAD          legitimate signed rnpkeys.exe side-loads rnp.dll from
                  its own directory
DECRYPT_ROUTINE   tdwp.dll decrypts rnp.dll's encrypted sections directly
                  in memory, with a deliberate execution delay
PERSISTENCE       scheduled task literally named "keyroll"
C2_URI_SHAPE      /prefix/vN/actionResource?params where prefix is one of
                  api, webhook, metrics, public, internal (N is 1-9)
C2_CRYPTO         Salsa20 with a fresh 16-byte key + 8-byte nonce per
                  client request, RSA-signed; server replies with a
                  32-byte Salsa20 key
BOT_ID            lowercase MD5 hex digest of
                  COMPUTERNAME + USERNAME + volume_serial
SLEEP_TIMERS      160s after a failed registration/poll (also rotates C2);
                  600s after a successful poll/task cycle
MSG_TYPES         0x01 registration, 0x02 task poll, 0x03 task results,
                  0x04 payload retrieval
PAYLOAD_HANDLERS  EXE, DLL, driver (.sys), shellcode, MSI, ZIP, CMD,
                  PowerShell, VBS, JavaScript (10 total)
TEMP_STAGING      %TEMP%\ + random 6-16 character name + handler extension
SCREENSHOT_EXFIL  PNG captured, chunked into pieces up to 0x4000 bytes,
                  sent via the same task-results message type
Named malware & toolingdetection naming
loader           Sauron Loader (Malware-as-a-Service, C++)
seller alias     S4ur0n (leetspeak for "Sauron")
market           Russian-speaking underground forums
drop mechanism   MSI installer to C:\ProgramData\keyroll
sideload host    rnpkeys.exe (genuine Mozilla RNPGP utility, abused)
loader dll       rnp.dll (encrypted, decrypted in memory by tdwp.dll)
decrypter/sched  tdwp.dll (persistence via scheduled task "keyroll")
publisher        DCSO CyTec (primary research, 2026-09-24)
corroboration    Cyber Security News (2026-09-25, independent)
extractor tool   DCSO GitHub Blog_CyTec/2026_09__sauron_loader/get_config.py
Vishing / help-desk auditprevent half
# Delivery vectors observed: ClickFix fake-prompt pastejacking, and
# vishing (email bombing followed by a fake IT-support call, in one
# incident directing the victim to open Microsoft Quick Assist).

# Policy / process checks
Help desk has a documented out-of-band caller-identity verification step   Y/N
Standard users can start Quick Assist / remote-assist sessions unattended  Y/N
Mail gateway flags abnormal inbound volume spikes to a single mailbox     Y/N
Standard users can install MSI packages without elevation                 Y/N

# Policy values to verify
HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated = 0
HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated = 0
HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\DisableMSI            = 2

# Defender ASR rules to enable in Block mode
D3E037E1-3EB8-44C8-A917-57927947596D  Block JS/VBS launching downloaded executable content
5BEB7EFE-FD9A-4556-801D-275E5FFC04CC  Block execution of potentially obfuscated scripts
D4F940AB-401B-4EFC-AADC-AD5F3C50688A  Block Office apps creating child processes
11

Detection Validation Gates

Gate 1 — Telemetry ready

  • Confirm ScheduledTaskRegistered events are present estate-wide before trusting a clean result from Q4, Q8, or Q12: #event_simpleName=/^ScheduledTaskRegistered$/ | groupBy([ComputerName], function=count(as=n), limit=5000). A host group returning zero is invisible to the persistence queries.
  • Confirm DnsRequest is flowing before trusting Q1's silence.
  • Confirm PeFileWritten or NewExecutableWritten is enabled before trusting Q3, Q9, or Q10's silence.
  • Confirm your DNS resolver and proxy retention actually covers 90 days. If it covers 30, record that in the hunt ticket rather than reporting a clean hunt.

Gate 2 — Benign baseline

  • Before enabling Q7 or Q8 as a scheduled search, confirm whether your estate has a legitimate Thunderbird/RNP deployment or any scheduled tasks that legitimately install under ProgramData, and add the tuning exclusion in the card before promoting either to an alert.
  • Run Q11 for one full week first and inspect the Conns distribution; anything that looks like normal telemetry or update-check traffic belongs in the CIDR/vendor-range exclusion, not in the alert.

Gate 3 — Confirm the finding, not just the query

  • A hit on Q2, Q3, Q4, or Q5 is high-confidence on its own; still pull the full directory listing of C:\ProgramData\keyroll before isolating, since the loader may already have staged an additional payload there.
  • A hit on Q7, Q8, Q9, Q10, or Q11 alone is not sufficient to declare compromise; corroborate against Q1, Q2, Q4, or Q6 on the same host before escalating.
12

Hardening — Tiered

Each control names the MITRE mitigation it satisfies and the platform authority that defines it. Controls are ordered by leverage against this specific chain, not by comprehensiveness.

Immediate — deploy this week, no compatibility risk
  1. Block the four confirmed C2 domains at DNS and proxy. Import the section 10 CSV into Falcon IOC Management and add the same domains to your resolver's denylist. MITRE M1037 Filter Network Traffic. Verify: resolve each name from a user subnet and confirm NXDOMAIN or sinkhole.
  2. Deny execution from unexpected ProgramData subdirectories. An AppLocker or WDAC deny rule targeting non-vendor executables running from %ProgramData%\* removes the exact drop-and-run pattern this loader depends on. MITRE M1038 Execution Prevention; CIS Microsoft Windows Benchmark application-control section; Microsoft Security Baseline. Verify: stage a benign EXE under a non-approved ProgramData subfolder and confirm it is blocked.
  3. Require out-of-band identity verification for any unsolicited IT-support contact. The vishing chain depends entirely on the victim trusting a cold caller. Publish and drill a verification procedure (callback to a known internal extension, ticket-number cross-check) before any remote-assistance session is granted. MITRE M1017 User Training. best practice, no formal benchmark covers social-engineering process controls directly.
  4. Restrict who can initiate or accept Microsoft Quick Assist sessions. At least one DCSO-observed incident used Quick Assist as the remote-access vector after the fake support call. MITRE M1042 Disable or Remove Feature or Program. Verify: confirm Quick Assist is removed or policy-restricted on standard-user endpoints outside an active, ticketed support session.
  5. Enable the three Defender ASR rules listed in section 10 in Block mode. The JS/VBS and Office child-process rules cut off two of the ten documented payload-handler execution paths. MITRE M1038, M1040 Behavior Prevention on Endpoint; Microsoft Defender ASR documentation. Verify: Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids.
  6. Alert on email-volume anomalies per mailbox. Email bombing is the documented precursor to the vishing call in this campaign. MITRE M1031 Network Intrusion Prevention. best practice, most mail security platforms ship a volume-anomaly rule that is disabled by default.
Near term — 1 to 4 weeks, pilot on a ring first
  1. Remove non-admin MSI install rights. Set AlwaysInstallElevated=0 in both hives and DisableMSI=2 for standard users. The ClickFix and vishing chains both rely on a user (or an attacker with remote-assist access) being able to run an unmanaged MSI. MITRE M1026 Privileged Account Management, M1038; CIS Windows Benchmark installer section.
  2. Publisher-and-path allowlisting for signed vendor utilities. A WDAC or AppLocker publisher rule that permits rnpkeys.exe (and other genuine Mozilla/vendor binaries you rely on) only from their real install paths directly defeats this side-load pattern regardless of which signed binary a future build picks. MITRE M1038; CIS Windows Benchmark; Microsoft WDAC design guide. Verify: Get-AppLockerPolicy -Effective -Xml and a copy-to-ProgramData execution test.
  3. Baseline and alert on new scheduled task creation outside a known-good vendor set. Every DCSO-observed Sauron Loader infection persists via exactly one scheduled task. MITRE M1047 Audit. Feeds Q8 and Q12 directly.
  4. TLS-inspecting proxy on user egress, with a documented exception list. Without it, the C2 URI shape and Salsa20/RSA header structure in section 7 are unavailable to you, and the loader's beacon looks like any other HTTPS traffic. MITRE M1020 SSL/TLS Inspection.
  5. Simulated vishing / email-bombing tabletop exercise for the help desk. The technique's reported 72% success rate in industry reporting on this class of attack means a documented process alone is not enough; staff need to have practiced saying no. MITRE M1017 User Training.
Strategic — 1 to 3 months, architectural
  1. WDAC in enforcement mode across the managed estate. Application control is the only control in this list that defeats an unknown future Sauron Loader build on the day it ships, regardless of which signed binary or drop directory it uses. Audit mode first, then enforce ring by ring. MITRE M1038; Microsoft WDAC deployment guidance.
  2. Retention uplift for DNS, proxy, and remote-assistance session logs to 12 months. DCSO reports finding additional samples with rotated infrastructure; a 30-day retention window would report a live compromise as clean. MITRE M1047 Audit. best practice, retention targets are regulatory, not benchmark-defined.
  3. Formalize a help-desk impersonation runbook as part of the broader incident-response plan. Vishing followed by fake IT support has been used to deliver DarkGate and by Black Basta affiliates historically, and this campaign confirms it is still a live, effective initial-access technique. MITRE M1017.
13

Deployable Playbooks

Playbook 1 — Sweep for the Sauron Loader triad (PowerShell)

Finds the drop directory or any folder anywhere on disk containing all three loader filenames together, in case a future build renames the keyroll directory. Read-only; run it estate-wide before you change anything.

# Run as SYSTEM or an admin. Read-only enumeration.
$known = 'C:\ProgramData\keyroll'
if (Test-Path $known) {
    Get-ChildItem -Path $known -File -ErrorAction SilentlyContinue | ForEach-Object {
        [pscustomobject]@{
            Host   = $env:COMPUTERNAME
            Path   = $known
            File   = $_.Name
            Sha256 = (Get-FileHash $_.FullName -Algorithm SHA256).Hash
        }
    }
}

# Broader sweep: any ProgramData subfolder containing all three filenames,
# in case a future build renames the "keyroll" directory itself.
Get-ChildItem 'C:\ProgramData' -Directory -ErrorAction SilentlyContinue | ForEach-Object {
    $dir = $_.FullName
    $has = @('rnpkeys.exe','rnp.dll','tdwp.dll') | Where-Object {
        Test-Path (Join-Path $dir $_)
    }
    if ($has.Count -eq 3) {
        [pscustomobject]@{
            Host      = $env:COMPUTERNAME
            Directory = $dir
            Triad     = 'CONFIRMED'
        }
    }
}
# All three filenames together in one ProgramData subfolder is the Sauron
# Loader triad regardless of the directory name. Collect the folder and the
# scheduled task list before isolating.

Playbook 2 — Audit for the "keyroll" scheduled task (PowerShell)

Cross-checks the native ScheduledTaskRegistered telemetry in Q4 against the local task scheduler directly. Read-only.

Get-ScheduledTask | Where-Object { $_.TaskName -match 'keyroll' } | ForEach-Object {
    $info = Get-ScheduledTaskInfo -TaskName $_.TaskName -TaskPath $_.TaskPath
    [pscustomobject]@{
        Host      = $env:COMPUTERNAME
        TaskName  = $_.TaskName
        TaskPath  = $_.TaskPath
        Action    = ($_.Actions | ForEach-Object { $_.Execute }) -join ';'
        Arguments = ($_.Actions | ForEach-Object { $_.Arguments }) -join ';'
        State     = $_.State
        LastRun   = $info.LastRunTime
    }
}

Playbook 3 — Deny execution from ProgramData (AppLocker, GPO)

Deploy in Audit mode for 48 hours first; the report tells you which legitimate applications you are about to break before you enforce.

# 1. Create or edit a GPO linked to your workstation OU.
# 2. Computer Configuration
#      -> Policies
#      -> Windows Settings
#      -> Security Settings
#      -> Application Control Policies
#      -> AppLocker
#      -> Executable Rules
# 3. New Rule: Action = Deny, User = Everyone, Condition = Path
#      %OSDRIVE%\ProgramData\*
#    Then add Exceptions for your known-good vendor subfolders
#    (Microsoft, your EDR vendor, approved line-of-business agents).
# 4. Repeat under "DLL Rules" with the same path and exceptions. DLL rules
#    are what actually stop the sideload; the executable rule alone leaves
#    rnp.dll loadable by rnpkeys.exe even if rnpkeys.exe itself is denied.
# 5. Set enforcement to "Audit only", collect for 48h, then switch to
#    "Enforce rules".

Playbook 4 — Help-desk vishing verification checklist (process)

A one-page script for help-desk and IT staff to challenge an unsolicited "IT support" contact, especially one that follows an email flood.

1. Did the user open a ticket BEFORE this contact arrived? If no, treat as
   unsolicited.
2. Call the user back on a number from the internal directory, never a
   number the caller provided.
3. Never accept a Quick Assist / AnyDesk / remote-assist session initiated
   in response to an unsolicited call or a "fix it yourself" prompt.
4. Never read out, or ask the user to enter, a one-time code or session
   PIN to someone who called them first.
5. If a recent inbox flood is confirmed, treat any IT-support contact
   in the following 24 hours as suspicious by default and escalate to
   the security team before any remote access is granted.
14

Containment & Incident Response Runbook

  1. Isolate, don't kill, the affected host first. Network-contain via Falcon host isolation rather than terminating the process; killing tdwp.dll's scheduler mid-cycle can complicate forensic timing but the host should stop reaching the C2 immediately.
  2. Preserve C:\ProgramData\keyroll before remediation. Copy the full directory listing, all three files, and their hashes off the host. Confirm whether an additional payload has already been staged there via the message-type-4 payload-retrieval mechanism.
  3. Pull the scheduled task definition for "keyroll." schtasks /query /tn keyroll /xml before deleting it, to capture the exact executable path and arguments for the case file.
  4. Identify the entry vector. Check whether the user reports a recent email-bombing event, an unsolicited IT-support call, or a ClickFix-style prompt they were told to run. This determines whether the help-desk verification gap (hardening item 3) or the mail-flow anomaly detection (hardening item 6) needs the more urgent fix.
  5. Check for a granted remote-assistance session. Review Quick Assist, AnyDesk, or similar tool logs around the infection window for a session the user did not initiate themselves.
  6. Hunt laterally with Q1, Q2, Q4, and Q6 estate-wide before declaring scope. A single confirmed host rarely means a single victim; the loader's registration message reports domain-join status, so check whether the host is domain-joined and, if so, whether credentials used on it require rotation.
  7. Rotate credentials used on or near the compromised host if there is any indication of screenshot exfiltration (task-results messages with non-zero total_data_length) or a downloaded credential-theft payload via the DLL or shellcode handler.
  8. Remove the triad and the scheduled task, then re-image if the loader executed a downloaded second-stage payload. A confirmed hit on Q9 (temp-staged payload) or Q12 (rundll32/regsvr32 against a component DLL) raises this from "clean the loader" to "assume second-stage compromise."
  9. Block the four C2 domains estate-wide if not already enforced, and check DNS logs for any other host that has ever resolved them.
  10. File the hunt ticket in section 16 with the confirmed entry vector, host count, and whether a second-stage payload executed, before closing the incident.
15

Detection Coverage Map

TechniqueBehaviorCQLIOAHardeningCoverage
T1071.001C2 domain resolution and HTTPS beaconQ1, Q11—Item 1Good
T1574.002DLL side-loading via rnpkeys.exeQ2, Q3, Q5, Q7, Q12IOA-1, IOA-3, IOA-4Items 2, 8Good
T1036.005Malicious DLLs masquerading as real RNPGP componentsQ7, Q10IOA-1Item 8Partial — filename overlap with a genuine component is unavoidable by design
T1218.007MSI-to-sideload execution chainQ5IOA-3Item 7Good
T1027.013Encrypted sections shipped inside rnp.dllQ3——Partial — write event covers the drop, not the encryption itself
T1140In-memory decryption of rnp.dll by tdwp.dll——Item 12Gap — no discrete Falcon event for the decrypt stage; sensor memory scanning is the counter
T1053.005"keyroll" scheduled task persistenceQ4, Q8, Q12IOA-2Item 9Good
T1667 / T1566.004Email bombing followed by voice-phishing IT-support impersonation——Items 3, 6, 11, 13Gap — endpoint telemetry does not cover this; section 7 mail-gateway hunts and the hardening process controls are the coverage
T1219Quick Assist / remote-assist tool granted to the caller——Item 4Partial — depends on whether remote-assist tools are centrally logged
T1573.001 / T1573.002Salsa20 + RSA encrypted C2 protocolQ11—Item 10Partial — content-level visibility requires TLS inspection; volume/cadence signal only otherwise
T1105Payload retrieval and temp stagingQ9——Partial — high baseline noise; correlation-dependent, see Q9 tuning
T1218.011 / T1218.010rundll32/regsvr32 DLL payload handlerQ12IOA-4—Good
T1113 / T1041Chunked PNG screenshot exfiltration over the C2 channelQ11 (volume signal only)——Gap — no discrete Falcon event distinguishes screenshot chunks from ordinary task results

Twelve queries and four Custom IOAs cover the drop, side-load, persistence, and one payload-handler technique at Good or Partial. The remaining gaps cluster in three places, for three different reasons: the in-memory decryption stage was engineered specifically to avoid endpoint-visible primitives, the social-engineering delivery vectors sit upstream of any endpoint telemetry entirely, and the encrypted C2 content requires TLS inspection this pack cannot assume every reader has deployed. Section 12's application-control item (13) and mail-gateway/help-desk process controls (items 3, 6, 11) are the counters for the delivery gap; sensor memory scanning is the counter for the decryption gap. Before reporting a clean hunt, complete Gate 1 in section 11: a query that returns nothing because the telemetry never arrived is not a negative result.

16

Hunt Summary Ticket

TITLE:      Sauron Loader - MaaS DLL side-loading via rnpkeys.exe/rnp.dll/tdwp.dll,
            keyroll persistence, ClickFix/vishing delivery hunt
SEVERITY:   High - active MaaS campaign against German organizations, confirmed
            intrusions, seller actively advertises to further customers
SCOPE:      All Windows endpoints; help-desk and remote-assistance tooling;
            mail gateway; DNS resolver and proxy logs. Minimum 90-day lookback.

HYPOTHESIS: A host has rnpkeys.exe, rnp.dll and tdwp.dll dropped by an MSI into
            C:\ProgramData\keyroll, with rnpkeys.exe side-loading rnp.dll and a
            scheduled task named "keyroll" providing persistence. Corollary: any
            host resolving one of the four named C2 domains is compromised.

QUERIES:    Q1  confirmed C2 domain resolution        CONF high / FP low    RUN FIRST
            Q2  side-load host in drop directory       CONF high / FP low    RUN SECOND
            Q3  malicious DLL pair written to disk      CONF high / FP low
            Q4  "keyroll" scheduled task                CONF high / FP low    RUN SECOND
            Q5  msiexec spawning side-load host         CONF high / FP low
            Q6  known-bad SHA-256 set                   CONF high / FP low    RUN FIRST
            Q7  rnpkeys.exe outside install path         CONF med  / FP med
            Q8  scheduled task in non-standard ProgramData CONF med / FP med
            Q9  randomised %TEMP% payload staging        CONF med  / FP med-high
            Q10 component DLL outside known path         CONF med  / FP med
            Q11 beacon cadence egress                    CONF med  / FP med-high
            Q12 rundll32/regsvr32 against component DLL  CONF high / FP low

DO FIRST:   1. Import the section 10 CSV into Falcon IOC Management.
            2. Block the four C2 domains at DNS and proxy.
            3. Run Q1, Q2, Q4 and Q6 across maximum retention.
            4. Run playbook 1 estate-wide to inventory ProgramData for the triad.
            5. Complete Gate 1 in section 11 before reporting any query clean.

FINDINGS:   [ ] Q1 hits ............ hosts: ______  domains matched: ______
            [ ] Q2/Q4 hits ......... hosts: ______  triad confirmed: Y / N
            [ ] Q6 hits ............ hosts: ______  which hash(es): ______
            [ ] Entry route ........ ClickFix / vishing+QuickAssist / unknown
            [ ] Second-stage payload  Y / N   handler type: ______
            [ ] Screenshot exfil indication  Y / N

GAPS:       - In-memory decryption stage (tdwp.dll decrypting rnp.dll) is not a
              discrete Falcon event; application control is the counter.
            - Email bombing and voice-phishing delivery sit upstream of endpoint
              telemetry; mail-gateway and help-desk process controls are the
              coverage, not a query.
            - Salsa20/RSA C2 content needs TLS inspection to read; without it,
              only connection volume and cadence are visible.
            - Record your actual DNS/proxy retention here. If under 90 days,
              this hunt is inconclusive, not clean: ______

ACTIONS:    [ ] Immediate hardening tier deployed (section 12, items 1-6)
            [ ] IOA-1 through IOA-4 created at Detect severity
            [ ] Q7, Q8, Q9, Q10, Q11 baselined for two weeks and tuned
            [ ] Help-desk vishing verification checklist (playbook 4) distributed
            [ ] AlwaysInstallElevated / DisableMSI policy values confirmed

OWNER:      ______________________
VERSION:    v1.0 (2026-09-27)
17

Changelog

v1.02026-09-27Initial build. Twelve CQL hunt queries, four Custom IOA candidates, thirteen tiered hardening controls, four deployable playbooks, and a ten-step containment runbook. Atomic indicators sourced from the DCSO CyTec primary research and independently confirmed by Cyber Security News; every value traced to a saved source snapshot. The legitimate rnpkeys.exe hash is shipped as a labelled hunt anchor, never as a block action. No related-cluster or aggregator-only indicators imported.
18

References

TierSourceUsed forAccessed
1DCSO CyTec — Sauron Loader: A New Loader Lurking in Underground ForumsPrimary research: attack chain, decrypted config layout, C2 protocol, TLV message format, payload handlers, sleep timers, domain/hash IOC set, full ATT&CK mapping. Full text retrieved via the malware.news community mirror; the Medium URL returns HTTP 403 to automated fetch.2026-09-27
1Cyber Security News — Sauron Loader Malware Uses DLL Side-Loading and In-Memory Decryption to Evade DetectionIndependent confirmation of the attack chain and the full IOC table; qualifies the block-eligible indicators under this pack's two-source rule.2026-09-27
2Cryptika CybersecuritySyndicated republish of the Cyber Security News article; corroboration only, not counted as an independent second source.2026-09-27
2Mallory.ai — Sauron Loader Sold to Russian-Speaking Criminals Targets German OrganizationsNarrative corroboration of the actor alias, MaaS model, and targeting restrictions. Atomic indicator values are masked on the public page and were not sourced from it.2026-09-27
RefDCSO GitHub — Blog_CyTec/2026_09__sauron_loaderConfig-extraction tool and MISP event; corroborates the embedded-config field layout.2026-09-27
RefMITRE ATT&CKTechnique and mitigation identifiers throughout sections 6 and 122026-09-27
RefMicrosoft Defender — Attack Surface Reduction rules referenceASR rule GUIDs in sections 10 and 122026-09-27
RefCIS BenchmarksWindows application-control and installer baselines2026-09-27

Source snapshots for every cited source are stored alongside this file in Sauron-Loader-Hunt-sources/. Every atomic indicator shipped in section 10 traces to one of them.