Spirals Ransomware — Rapid Rust Encryptor via IIS Web Shell

Break-in to network-wide encryption in under 24 hours. IIS/ASP.NET web shell, redundant tunneling, PsExec-as-SYSTEM deployment.
Threat
Spirals (unattributed)
Severity
ACTIVE RANSOMWARE
Type
Rust ransomware / double extortion
Initial Access
Internet-facing IIS web shell
Version
v0.2 · 2026-07-23
Author
HuntPack
Confidence
High (vendor primary + press)
01

Executive Summary

Spirals is a previously undocumented, Rust-based ransomware family that Symantec's Threat Hunter Team disclosed on 2026-07-17. In June 2026 the operator compromised an IT-services company in South Asia and moved from initial breach to network-wide encryption in under 24 hours. The intrusion began 2026-06-16 at 22:21 local time through an internet-facing IIS web server, where the attacker uploaded an ASP.NET web shell.

Within minutes the operator dropped three tunneling utilities for redundant, encrypted C2 over port 443: a reverse-SOCKS proxy (revsocks and a tool named tunn.exe), the Chisel tunneler renamed chrome.exe, and a Cloudflare Tunnel client (cloudflared). They escalated with a UAC bypass and token-impersonation tooling, dumped the SAM hive and LSASS (via rundll32.exe + comsvcs.dll), then used WMI to move laterally across more than a dozen hosts with a compromised domain-admin account. The next day the ransomware payload, masquerading as bitsadmin.exe, was pushed network-wide with PsExec running as SYSTEM; a base64 PowerShell stub disabled Microsoft Defender and stopped 23 backup/database/virtualization service categories first. Files are encrypted with a per-file AES-128 key wrapped under an attacker-controlled ECDH P-256 public key, with intermittent encryption on files over 5 MB. The ransom note lands system-wide as C:\RECOVERY_SECTION.log, threatening a public leak within six days via a Tor portal that names the family "Spirals".

Defender priority: The single highest-value catch is an IIS worker process (w3wp.exe) spawning a command interpreter — the web-shell foothold that precedes everything else. Pair it with detection of "living-off-trusted-names" masquerades (chrome.exe/bitsadmin.exe running from the wrong directory) and PsExec-as-SYSTEM lateral bursts. With a sub-24-hour clock, prevention and rapid isolation matter more than after-the-fact hunting.

02

Source Review & Web Hunter Notes

#TierSourceKey contributionCarry
1T1Symantec / Security.com Threat Hunter TeamPrimary analysis: timeline, tool set, full SHA256 IOC list, staging IP + URLs, encryption scheme, ransom-note pathyes
2T2Help Net SecurityCorroborates chain: SAM/LSASS dump, Chisel-as-chrome.exe, cloudflared, bitsadmin.exe, 23 services, AES-128 + ECDH P-256yes
3T2CyberSecurityNewsStaging IP 185.141.216.194, ransom-note path, timeline (22:21 / 23:33 / next-day PsExec), SYSVOL propagationyes
4T2BleepingComputerRust family, PsExec-as-SYSTEM, UAC bypass, RDP + local account, six-day leak deadlineyes
5T3Mallory.ai (aggregator)Cross-check of chain and encryption details; single-victim statuspartial

Verbatim snapshots of every cited source are saved in Spirals-Ransomware-Hunt-sources/ for IOC provenance. Gridinsoft's write-up returned HTTP 403 and was not used. All atomic IOCs in this pack trace to snapshot 01 (Symantec primary), with the staging IP and ransom-note path also present in snapshot 03.

03

Hunt Brief & Attack Chain

Hunt hypotheses (fidelity-ordered)

  1. H1 (high): An IIS worker (w3wp.exe) spawned a command interpreter or recon binary, indicating an ASP.NET web shell. Falcon: ProcessRollup2.
  2. H2 (high): A tunneling binary runs under a masqueraded name or from a public web/temp directory (chrome.exe = Chisel, tunn.exe/revsocks, cloudflared). Falcon: ProcessRollup2 + NetworkConnectIP4.
  3. H3 (high): LSASS or SAM credential material was dumped (rundll32.exe + comsvcs.dll MiniDump). Falcon: ProcessRollup2.
  4. H4 (high): Ransomware was deployed by PsExec running as SYSTEM. Falcon: ProcessRollup2.
  5. H5 (high): The payload masquerades as bitsadmin.exe from a non-system directory. Falcon: ProcessRollup2.
  6. H6 (medium): A PowerShell stub disabled Defender and stopped backup/DB/virtualization services. Falcon: ProcessRollup2.
  7. H7 (high): The ransom note C:\RECOVERY_SECTION.log was written. Falcon: file-write telemetry.
  8. H8 (high): A host connected to staging IP 185.141.216.194. Falcon: NetworkConnectIP4.

Attack chain

#StageBehaviorTelemetryHunt angle
1Initial AccessASP.NET web shell on internet-facing IISProcessRollup2 (w3wp parent); IIS logsQ1, native IIS hunt
2C2 / redundancyrevsocks, Chisel-as-chrome.exe, cloudflared over 443ProcessRollup2; NetworkConnectIP4Q2, Q3, Q4, Q10
3Priv-escUAC bypass; token impersonation (tokens.exe)ProcessRollup2Hash IOC; native 4688
4Cred AccessSAM hive dump; LSASS via comsvcs.dllProcessRollup2; ZipFileWrittenQ7
5Lateral MovementWMI + compromised DA to 12+ hosts; SYSVOL stagingProcessRollup2; nativeNative hunts
6DeploymentPsExec-as-SYSTEM pushes bitsadmin.exeProcessRollup2; 7045Q5, Q6
7Defense EvasionBase64 PS disables Defender, stops 23 servicesProcessRollup2Q8
8ImpactAES-128/ECDH P-256 encryption; note droppedFile-write; RECOVERY_SECTION.logQ9
04

Consolidated IOC Table

TypeValueConfActionContext
SHA2560f9574dc38e5c34a31153f0bcc603c6ec29cb3bf65c3d25380dbe86d42573141highdetectSpirals ransomware payload (bitsadmin.exe)
SHA2567f0d49b11d0a3697685622ce510c570199bf2dc76515b3f9a6b6735de8c9134bhighdetectTunneling tool tunn.exe (public web dir)
SHA2564cab935d0ec400059a3fcdc95b6623efdd51a61dff401fba8d5da244cc2de649highdetectrevsocks reverse-SOCKS proxy
SHA25684b9a9a1668145df04faa3d0e118e2f0acbebd3d9d260baf3a355b44c815c22dhighdetectChisel disguised as chrome.exe
SHA256862a3ca7e944ccf0ff3a6d556b34faade4b68343015c35a014a43725ac14a2a1highdetectToken impersonation tool (tokens.exe)
SHA256b5d598b00cc3a28cabc5812d9f762819334614bae452db4e7f23eefe7b081556highdetectCloudflare Tunnel client (cloudflared)
IPv4185.141.216.194highdetectPayload staging / download host
URLhttp://185.141.216.194/cd.jpgmedhuntTool download disguised with .jpg extension
URLhttp://185.141.216.194/cd.zipmedhuntTool archive download
URLhttps://computer.kplus.com/cd.zipmedhuntSecondary staging URL
URLhttps://beta.padmin.com/mybenefits/Templates/cd.zipmedhuntSecondary staging URL
FilenameC:\RECOVERY_SECTION.loghighdetectSystem-wide ransom note
Behavioralchrome.exe / bitsadmin.exe / cloudflared / tunn.exe from non-standard pathhighhuntMasquerade + tunneling behavior

Hashes and the staging IP are single-campaign, single-victim indicators; treat masquerade + tunneling behavior as the durable signal. The staging hostnames appear in the Symantec IOC list but may be attacker-abused legitimate infrastructure, so they are set to hunt, not block.

05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk
Internet-facing IIS / ASP.NETProcessRollup2 (w3wp children); IIS W3C logscriticalIIS logs often not centralized
Windows endpoints / serversProcessRollup2, SyntheticProcessRollup2, file-write, NetworkConnectIP4criticalServers sometimes under-sensored
Active Directory / domain adminUserLogon, service install (7045), SYSVOL change audithighDA logon baseline needed
Perimeter / egress (443)NetworkConnectIP4; proxy/firewall logshighTLS tunnels blend into normal 443
Backup / virtualization infraServiceStarted/stop; ProcessRollup2highAppliance telemetry may be thin
06

ATT&CK Mapping

TacticTechniqueObserved behaviorQuery / Control
Initial AccessT1190Exploited public-facing IIS web serverQ1 / harden IIS
PersistenceT1505.003ASP.NET web shellQ1 / IIS hunt
PersistenceT1136.001 / T1021.001Local account created; RDP enabledNative / harden
Priv Esc / Def EvasionT1548.002UAC bypassNative 4688
Priv EscT1134Token impersonation (tokens.exe)Hash IOC
Credential AccessT1003.001LSASS dump via comsvcs.dll MiniDumpQ7
Credential AccessT1003.002SAM hive dumped to archiveNative / ASR
Command & ControlT1572Chisel, revsocks, Cloudflare tunnels over 443Q2, Q3, Q4
Command & ControlT1105Tools downloaded from staging host (.jpg lure)Q10
Defense EvasionT1036.005chrome.exe / bitsadmin.exe masqueradeQ2, Q6
Defense EvasionT1562.001Disable Defender / tamperQ8 / harden
Lateral MovementT1021.002 / T1047PsExec + WMI to 12+ hostsQ5 / native
ExecutionT1569.002PsExec service execution as SYSTEMQ5
ImpactT1489Stopped 23 backup/DB/virtualization servicesQ8
ImpactT1486AES-128 + ECDH P-256 encryption; note droppedQ9
07

Native Audit-Log Hunts (non-CQL)

  • IIS W3C logs: hunt POST requests to recently-created or unusual .aspx/.ashx files in web-production directories, especially from a single external IP with immediate follow-on GET activity. New handler files with no deployment ticket = web shell.
  • Windows Security 4688: process creation where parent is w3wp.exe and child is a shell or recon tool. Also flag tokens.exe, tunn.exe, chrome.exe, cloudflared*.exe from web/temp paths.
  • Service install (System 7045): PSEXESVC service registrations across many hosts in a short window signal mass PsExec push.
  • SYSVOL / netlogon change audit: unexpected writes to the SYSVOL domain scripts directory or the \Windows\Tasks folder (tool-staging locations reported by Symantec).
  • Defender operational log (5001/5010/5012): real-time protection disabled or tamper events cluster immediately before encryption.
  • Security 1102: event-log clears during the intrusion window.
  • DA logon baseline (4624/4672): domain-admin interactive/network logons to servers that never normally see them, in the hours before deployment.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · IIS worker spawning a shell (ASP.NET web shell)
CONF HIGHFP LOWCOST LOW

Looks for: w3wp.exe launching a command interpreter or recon binary, the classic web-shell foothold.

// HUNT: IIS worker process spawning a command shell (ASP.NET web shell)
// MITRE: T1505.003, T1190
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: rare legacy app-pool maintenance scripts, some monitoring agents
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^w3wp\.exe$/i
| FileName=/^(cmd|powershell|pwsh|cscript|wscript|net1?|whoami|systeminfo|bitsadmin|certutil)\.exe$/i
| table([ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, aid], limit=200)
Q2 · chrome.exe outside the real Chrome path (Chisel masquerade)
CONF HIGHFP MEDCOST LOW

Looks for: a process named chrome.exe executing from anywhere other than the genuine Google Chrome install tree. FP: portable/enterprise Chrome builds and dev sandboxes.

// HUNT: chrome.exe running from outside the real Chrome install path (Chisel masquerade)
// MITRE: T1572, T1036.005
// CONF: high  FP: medium  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: portable Chrome, non-standard enterprise installs, browser dev builds
// TUNING: exclude ImageFileName paths under \Program Files\Google\Chrome and \Program Files (x86)\Google\Chrome; corroborate with SHA256 84b9a9a1668145df04faa3d0e118e2f0acbebd3d9d260baf3a355b44c815c22d
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^chrome\.exe$/i
| ImageFileName!=/\\Google\\Chrome\\/i
| table([ComputerName, UserName, ImageFileName, CommandLine, SHA256HashData, aid], limit=200)
Q3 · Cloudflare Tunnel client (cloudflared) execution
CONF HIGHFP LOWCOST LOW

Looks for: execution of cloudflared to expose internal RDP/services over an outbound tunnel.

// HUNT: Cloudflare Tunnel client (cloudflared) execution
// MITRE: T1572, T1090
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: organizations that sanction Cloudflare Tunnel for remote access
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^cloudflared(-windows-amd64)?\.exe$/i
| table([ComputerName, UserName, ImageFileName, CommandLine, SHA256HashData, aid], limit=200)
Q4 · Reverse-SOCKS tunnelers (tunn.exe / revsocks)
CONF HIGHFP LOWCOST LOW

Looks for: the named reverse-SOCKS tools by filename or by the two published tunneler hashes.

// HUNT: reverse-SOCKS tunnelers (tunn.exe / revsocks) by name or hash
// MITRE: T1572, T1090.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: unusual; legitimate SOCKS tooling is rare on servers
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(tunn|revsocks)\.exe$/i OR SHA256HashData=/^(7f0d49b11d0a3697685622ce510c570199bf2dc76515b3f9a6b6735de8c9134b|4cab935d0ec400059a3fcdc95b6623efdd51a61dff401fba8d5da244cc2de649)$/i
| table([ComputerName, ImageFileName, FileName, CommandLine, SHA256HashData, aid], limit=200)
Q5 · PsExec service execution as SYSTEM (ransomware push)
CONF HIGHFP MEDCOST LOW

Looks for: the PSEXESVC service process or PsExec command lines invoking -s (SYSTEM). FP: sanctioned admin/software-deployment via PsExec.

// HUNT: PsExec service execution as SYSTEM (mass ransomware deployment)
// MITRE: T1569.002, T1021.002
// CONF: high  FP: medium  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: legitimate remote administration and software deployment using PsExec
// TUNING: exclude known admin jump hosts and RMM service accounts; alert when the same source pushes PSEXESVC to many hosts in a short window
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^PSEXESVC\.exe$/i OR CommandLine=/psexec.{0,40}(\-s\b|accepteula)/i
| table([ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, aid], limit=200)
Q6 · bitsadmin.exe from a non-system directory (Spirals payload)
CONF HIGHFP MEDCOST LOW

Looks for: a bitsadmin.exe image running from anywhere other than System32/SysWOW64. FP: admin scripts that copy the real binary elsewhere.

// HUNT: bitsadmin.exe running from outside System32/SysWOW64 (Spirals payload masquerade)
// MITRE: T1036.005, T1486
// CONF: high  FP: medium  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: legitimate bitsadmin from system directories (excluded), rare admin tooling copies
// TUNING: keep the System32/SysWOW64 exclusion; corroborate with SHA256 0f9574dc38e5c34a31153f0bcc603c6ec29cb3bf65c3d25380dbe86d42573141
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^bitsadmin\.exe$/i
| ImageFileName!=/\\Windows\\(System32|SysWOW64)\\/i
| table([ComputerName, UserName, ImageFileName, CommandLine, SHA256HashData, aid], limit=200)
Q7 · LSASS dump via rundll32 + comsvcs.dll
CONF HIGHFP LOWCOST LOW

Looks for: the well-known rundll32 comsvcs.dll, MiniDump LSASS-dumping pattern.

// HUNT: LSASS memory dump via rundll32 + comsvcs.dll MiniDump
// MITRE: T1003.001
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: extremely rare; some crash-dump diagnostics
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^rundll32\.exe$/i
| CommandLine=/comsvcs\.dll.{0,40}MiniDump|MiniDump.{0,40}comsvcs/i
| table([ComputerName, UserName, CommandLine, aid], limit=200)
Q8 · PowerShell disabling Defender / stopping backup services
CONF MEDFP MEDCOST LOW

Looks for: a PowerShell command line combining Defender-disable cmdlets with bulk service stops. FP: maintenance windows and backup admins.

// HUNT: PowerShell disabling Defender and stopping backup/DB/virtualization services
// MITRE: T1562.001, T1489
// CONF: medium  FP: medium  COST: low | REQUIRES: ProcessRollup2
// FALSE POSITIVES: legitimate patch/maintenance windows; backup admins stopping services
// TUNING: prioritize command lines pairing Set-MpPreference/DisableRealtimeMonitoring with multiple Stop-Service; exclude approved maintenance service accounts
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(powershell|pwsh)\.exe$/i
| CommandLine=/Set-MpPreference|DisableRealtimeMonitoring|Remove-MpPreference|Stop-Service|Uninstall-WindowsFeature/i
| table([ComputerName, UserName, CommandLine, aid], limit=200)
Q9 · Ransom note C:\RECOVERY_SECTION.log written
CONF HIGHFP LOWCOST LOW

Looks for: creation of the Spirals ransom note. A hit means encryption is already in progress. Validate file-write event coverage in your tenant.

// HUNT: creation of the Spirals ransom note RECOVERY_SECTION.log
// MITRE: T1486
// CONF: high  FP: low  COST: low | REQUIRES: FileWritten telemetry
// FALSE POSITIVES: none expected; the filename is campaign-specific
#event_simpleName=/FileWritten/
| TargetFileName=/\\RECOVERY_SECTION\.log$/i
| table([ComputerName, TargetFileName, ContextBaseFileName, aid], limit=200)
Q10 · Outbound connection to staging IP 185.141.216.194
CONF HIGHFP LOWCOST LOW

Looks for: any host reaching the reported payload-staging host.

// HUNT: outbound connection to Spirals staging IP 185.141.216.194
// MITRE: T1105
// CONF: high  FP: low  COST: low | REQUIRES: NetworkConnectIP4
// FALSE POSITIVES: none expected for this single-campaign address
#event_simpleName=/NetworkConnectIP4/
| RemoteAddressIP4=/^185\.141\.216\.194$/
| table([ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort, aid], limit=200)
09

CrowdStrike Custom IOA Recommendations

IOA namePatternExclusionsAction
WebShell — IIS worker spawns shellParent w3wp.exe → child cmd/powershell/cscript/wscriptApproved app-pool maintenance scriptsBlock/Detect (server policy)
Masquerade — trusted name, wrong pathchrome.exe/bitsadmin.exe executing outside their legitimate directoriesReal Chrome tree; System32/SysWOW64Detect, escalate
Tunneler executioncloudflared*, tunn.exe, revsocks.exe process creationSanctioned Cloudflare Tunnel hostsBlock on servers
Credential dump — comsvcs MiniDumprundll32.exe command line with comsvcs.dll + MiniDumpNoneBlock
PsExec-as-SYSTEM burstPSEXESVC.exe created on many hosts from one source in a short windowAdmin jump hosts, RMM accountsDetect, high severity

Promote Q7 (comsvcs MiniDump) and the tunneler patterns to prevention first: both are low-FP and sit early in the chain. Gate the web-shell IOA to your IIS/server policy to avoid workstation noise.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,0f9574dc38e5c34a31153f0bcc603c6ec29cb3bf65c3d25380dbe86d42573141,prevent,critical,2027-01-23,Spirals ransomware payload (bitsadmin.exe),campaign:Spirals
sha256,7f0d49b11d0a3697685622ce510c570199bf2dc76515b3f9a6b6735de8c9134b,prevent,high,2027-01-23,Tunneling tool tunn.exe,campaign:Spirals
sha256,4cab935d0ec400059a3fcdc95b6623efdd51a61dff401fba8d5da244cc2de649,prevent,high,2027-01-23,revsocks reverse-SOCKS proxy,campaign:Spirals
sha256,84b9a9a1668145df04faa3d0e118e2f0acbebd3d9d260baf3a355b44c815c22d,prevent,high,2027-01-23,Chisel disguised as chrome.exe,campaign:Spirals
sha256,862a3ca7e944ccf0ff3a6d556b34faade4b68343015c35a014a43725ac14a2a1,prevent,high,2027-01-23,Token impersonation tool tokens.exe,campaign:Spirals
sha256,b5d598b00cc3a28cabc5812d9f762819334614bae452db4e7f23eefe7b081556,detect,high,2027-01-23,Cloudflare Tunnel client cloudflared,campaign:Spirals
ipv4,185.141.216.194,detect,high,2026-10-23,Payload staging host,campaign:Spirals
url,http://185.141.216.194/cd.jpg,detect,medium,2026-10-23,Tool download (.jpg lure),campaign:Spirals
url,http://185.141.216.194/cd.zip,detect,medium,2026-10-23,Tool archive download,campaign:Spirals
url,https://computer.kplus.com/cd.zip,detect,medium,2026-10-23,Secondary staging URL,campaign:Spirals
url,https://beta.padmin.com/mybenefits/Templates/cd.zip,detect,medium,2026-10-23,Secondary staging URL,campaign:Spirals
Behavioral Signaturesdurable
# Durable behaviors (survive hash/infra rotation)
w3wp.exe -> cmd/powershell/cscript/wscript child      # ASP.NET web shell
chrome.exe running outside \Program Files\Google\Chrome  # Chisel masquerade
bitsadmin.exe running outside \Windows\System32|SysWOW64 # payload masquerade
cloudflared / tunn.exe / revsocks process creation       # redundant 443 tunnels
rundll32.exe + comsvcs.dll + MiniDump                    # LSASS dump
PSEXESVC.exe created on many hosts from one source       # mass deployment
PowerShell: Set-MpPreference/DisableRealtimeMonitoring + bulk Stop-Service
File write: C:\RECOVERY_SECTION.log                      # ransom note
Named Malware / Toolingreference
# Tool -> disguise -> role
tunn.exe            reverse-SOCKS proxy (public web dir)
revsocks.exe        reverse-SOCKS proxy
chrome.exe          Chisel tunneler (masquerade)
cloudflared*.exe    Cloudflare Tunnel client (RDP exposure)
tokens.exe          token impersonation / priv-esc
bitsadmin.exe       Spirals Rust encryptor (masquerade)
# Ransom note: C:\RECOVERY_SECTION.log
# Crypto: per-file AES-128, keys wrapped with attacker ECDH P-256 pubkey
Hardening / ASR Auditchecklist
# Verify before / after deployment
[ ] IIS patched; web-production dirs reviewed for rogue .aspx/.ashx
[ ] LSASS RunAsPPL enabled (RunAsPPL=1); Credential Guard where possible
[ ] Defender Tamper Protection ON; ASR: block credential steal from LSASS
[ ] ASR: block process creation from PSExec/WMI commands
[ ] Egress 443 to unsanctioned tunnels (cloudflared) blocked/monitored
[ ] Offline/immutable backups verified restorable
[ ] Block staging IP 185.141.216.194 at egress
11

Detection Validation Gates

GateCheckPass criteria
Telemetry readyProcessRollup2, NetworkConnectIP4, and file-write events flow from IIS/serversRecent events from web + server hosts in the last 24h
Benign baselineRun Q2/Q5/Q6/Q8 over 7-30 days; catalog benign hitsExclusions written for known Chrome paths, admin PsExec, maintenance windows
Positive testIn a lab, run bitsadmin.exe from a temp dir and rundll32 comsvcs MiniDumpQ6 and Q7 fire
PromotionQ7 + tunneler + comsvcs patterns promoted to preventionIOA live on server policy; FP rate acceptable
12

Hardening — Tiered

Immediate (this week)
  • Enable Defender Tamper Protection and confirm it is enforced by policy, not locally toggleable (M1042). Blocks the base64 Set-MpPreference disable step.
  • Enable LSASS protection: RunAsPPL=1 and, where supported, Credential Guard (M1043). Defeats the comsvcs MiniDump path.
  • ASR rules (Defender): block credential stealing from LSASS, block process creations originating from PsExec/WMI commands, block executable content unless it meets prevalence/trust (M1040).
  • Block the staging IP 185.141.216.194 at egress and alert on any historical hits.
  • Review internet-facing IIS web-production directories for unauthorized .aspx/.ashx files; patch the server (M1051).
Near term (1-4 weeks)
  • Constrain the IIS app-pool identity to least privilege; deny it interactive-logon and outbound where feasible (CIS IIS Benchmark; M1026).
  • Restrict PsExec/SMB admin: tiered administration, block SMB (445) between workstations, enforce SMB signing (M1026, M1037).
  • Egress control for tunnels: allowlist outbound 443 destinations for servers; alert on cloudflared/Chisel-style long-lived TLS tunnels (M1037).
  • Immutable/offline backups for backup, DB and virtualization infra; test restores (M1053).
Strategic (1-3 months)
  • Segment internet-facing IIS into a DMZ with no direct path to domain admin scope; remove domain-joined web servers from Tier-0 reach (M1030).
  • Deploy a WAF / RASP in front of public web apps to catch web-shell upload and interaction (M1050).
  • Domain-admin hygiene: eliminate DA logons to member servers; adopt just-in-time/PAW access (M1026, M1015).
13

Deployable Playbooks

1. Enable LSASS protection (RunAsPPL)

# Requires reboot. Deploy via GPO/registry to servers + workstations.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 1 /f
# Verify:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL

2. Enforce Defender Tamper Protection + key ASR rules (PowerShell)

# Tamper Protection is managed via Intune/MDE policy; confirm state locally:
Get-MpComputerStatus | Select-Object IsTamperProtected, RealTimeProtectionEnabled

# ASR: block credential stealing from LSASS
Add-MpPreference -AttackSurfaceReductionRules_Ids 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 -AttackSurfaceReductionRules_Actions Enabled
# ASR: block process creations from PsExec and WMI commands
Add-MpPreference -AttackSurfaceReductionRules_Ids d1e49aac-8f56-4280-b9ba-993a6d77406c -AttackSurfaceReductionRules_Actions Enabled

3. Block the staging IP at the host firewall

New-NetFirewallRule -DisplayName "Block Spirals staging 185.141.216.194" `
  -Direction Outbound -RemoteAddress 185.141.216.194 -Action Block -Profile Any

4. Hunt rogue web-shell files under IIS roots (PowerShell)

# Flag recently-written handler files in web roots (review each hit).
Get-ChildItem -Path C:\inetpub\wwwroot -Recurse -Include *.aspx,*.ashx,*.asmx -ErrorAction SilentlyContinue |
  Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-14) } |
  Select-Object FullName, LastWriteTime, Length | Sort-Object LastWriteTime -Descending
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain any host with an encrypting process, a tunneler, or a note write. Contain the IIS web server first. Sever egress to 185.141.216.194 and to unsanctioned Cloudflare tunnels.SOC / IRFalcon host IDs, containment timestamps
EradicateDisable the compromised domain-admin account and reset it plus krbtgt (twice). Kill and remove tunn.exe/revsocks/chrome.exe(Chisel)/cloudflared, tokens.exe, bitsadmin.exe payload. Remove the ASP.NET web shell and any local accounts the actor created.IR / AD teamProcess trees, file hashes, SAM/local-account diff
RecoverRebuild the IIS server from known-good. Restore encrypted systems from immutable/offline backups only after eradication is confirmed. Re-enable Defender + services from clean policy.Infra / BackupRestore logs, integrity checks
Post-incidentRotate all credentials exposed to SAM/LSASS dumps. Review SYSVOL and \Windows\Tasks for residual staging. Hunt other IIS servers for the same web-shell pattern.IR / IAMCredential-rotation record, hunt results

Assume every credential on any host where LSASS or SAM was dumped is compromised, including the domain-admin account used for lateral movement. Password rotation without krbtgt reset leaves Kerberos persistence intact.

15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1190 / T1505.003IIS web shellQ1YesGood
T1572Tunnelers (Chisel/revsocks/cloudflared)Q2, Q3, Q4YesGood
T1105Staging downloadQ10Good
T1003.001LSASS dumpQ7YesGood
T1003.002SAM hive dumpASRPartial
T1569.002 / T1021.002PsExec-as-SYSTEMQ5YesGood
T1047WMI lateral movementGap
T1036.005Masquerade (chrome/bitsadmin)Q2, Q6YesGood
T1562.001 / T1489Defender disable + service stopQ8Partial
T1548.002 / T1134UAC bypass / token impersonationHashPartial
T1486Encryption + ransom noteQ9Good

Known gaps: WMI-based lateral movement (T1047) has no dedicated CQL here and should be covered by a broad WMI/wmic/WmiPrvSE.exe child-process hunt in your tenant. SAM-hive dump and UAC bypass are covered indirectly (ASR / hash) rather than by a purpose-built query. Validation gates in Section 11 must pass before promoting any FP-medium query to prevention.

16

Hunt Summary Ticket

Hunt Ticket — Spirals Ransomware
TITLE:      Spirals ransomware — IIS web shell to network encryption in <24h
SEVERITY:   Critical (active ransomware, double extortion)
SCOPE:      Internet-facing IIS, Windows servers/endpoints, AD, egress 443
HYPOTHESIS: A web-shell foothold on IIS leads to redundant tunneling, LSASS/SAM
            theft, PsExec-as-SYSTEM deployment of a Rust encryptor (bitsadmin.exe)
            and a system-wide C:\RECOVERY_SECTION.log note.
QUERIES:    Q1 web shell · Q2-Q4,Q10 tunnels/staging · Q7 LSASS · Q5 PsExec ·
            Q6 payload masquerade · Q8 Defender/service kill · Q9 ransom note
DO FIRST:   Run Q1 and Q7 (highest fidelity, earliest in chain). Then Q4/Q3/Q2.
FINDINGS:   [ fill in on execution ]
GAPS:       WMI lateral movement (T1047); SAM-dump and UAC bypass query coverage
ACTIONS:    Enable Tamper Protection + RunAsPPL + ASR; block 185.141.216.194;
            review IIS web roots; verify immutable backups
OWNER:      HuntPack
VERSION:    v0.2 · 2026-07-23
17

Changelog

v0.22026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.12026-07-23Initial HuntPack for Spirals ransomware. 10 CQL queries, 5 IOA recommendations, tiered hardening, playbooks, containment runbook. IOCs sourced from Symantec/Security.com primary plus four corroborating reports; all atomic IOCs provenance-traced to saved snapshots.
18

References

TierSourceUsed forAccess date
T1Symantec / Security.com — SpiralsPrimary: timeline, tools, hashes, IP/URLs, crypto, note path2026-07-23
T2Help Net SecurityChain corroboration; credential access; encryption scheme2026-07-23
T2CyberSecurityNewsStaging IP, note path, timeline, SYSVOL propagation2026-07-23
T2BleepingComputerRust family, PsExec-as-SYSTEM, UAC/RDP, leak deadline2026-07-23
T3Mallory.aiCross-check; single-victim status2026-07-23

Generated 2026-07-23 · HuntPack v0.1 · Defensive detection and hardening content only.