TIME TO RANSOM
SEQUENCE
VELOCITY
STAGES
DetectionBlue TeamSOCOctober 12, 2026•9 min read

Detecting Compressed Time-to-Ransom Sequences

Public incident reporting shows the gap from first access to encryption shrinking in many cases. Your detection must work on the clock the attacker sets.

Scroll

Some intrusions now move from reconnaissance to encryption in hours rather than weeks. A response that depends on a morning triage queue cannot keep up. Instead of looking for individual events, measure velocity: how many stages of the ransomware lifecycle appear on the same host or account inside a short window, and act automatically when that window is breached.

Signals at a Glance

StageTypical early-warning evidenceATT&CK
Discoverynltest, net group, AdFind-style queries, share enumerationT1087
Credential accessLSASS access, NTDS or SAM extractionT1003
Defense evasionSecurity tool disable, log clearingT1562.001
Lateral movement and deploymentPsExec, WMI, GPO or task fan-outT1570
Impact preparation and encryptionBackup deletion, mass file modificationT1486

Measuring Stage Velocity

Tag each relevant event with a lifecycle stage, then count distinct stages per host and per account in a rolling window. A single stage is administration. Three or more within hours is the pattern to treat as active ransomware preparation:

// Defender / Sentinel (KQL) - distinct lifecycle stages per device within 6 hours
let recon = DeviceProcessEvents
| where FileName in~ ("nltest.exe","net.exe","net1.exe","adfind.exe","dsquery.exe")
| where ProcessCommandLine has_any ("dclist","domain admins","trusted_domains","computer")
| extend Stage = "1-discovery";
let cred = DeviceEvents
| where ActionType == "OpenProcessApiCall" and FileName =~ "lsass.exe"
| extend Stage = "2-credential";
let evade = DeviceProcessEvents
| where ProcessCommandLine has_any ("DisableRealtimeMonitoring","Add-MpPreference","wevtutil cl")
| extend Stage = "3-evasion";
let impact = DeviceProcessEvents
| where ProcessCommandLine has_any ("delete shadows","delete catalog","recoveryenabled")
| extend Stage = "4-impact-prep";
union recon, cred, evade, impact
| summarize stages=make_set(Stage), n=dcount(Stage), first=min(Timestamp), last=max(Timestamp) by DeviceName, bin(Timestamp, 6h)
| where n >= 3
| extend minutes = datetime_diff('minute', last, first)
// tune/validate: replace tags with your own validated detections as inputs

Acting at the Speed of the Attack

The aim is not to predict encryption. It is to make the earlier stages expensive enough that the operator runs out of quiet time before the final one.

Vetted sources

DFIR Report-style kill-chain analyses for stage ordering and timing, CISA #StopRansomware advisories for typical behaviours, MITRE CAR for sequence analytics, and Splunk ESCU risk-based content. Interval claims differ widely between incidents, so rely on your own case data and baseline your environment.

Build Detections That Fire

Mjolnir Security helps blue teams turn threat intelligence into high-fidelity detections across endpoint, network, identity and cloud telemetry.

Detection EngineeringManaged Detection & ResponseThreat HuntingIncident ResponsePurple Teaming
  • Detection Engineering We build and tune detections mapped to ATT&CK from your own telemetry.
  • Threat Hunting as a Service Hypothesis-driven hunts for the behaviours on this page.
  • 24/7 Incident Response Containment when a detection fires. Call +1 833 403 5875.
Written by: Mjolnir Threat Research (MTAC)  |  Published: October 12, 2026  |  Last reviewed: October 12, 2026