SafePay Ransomware: Closed-Group Double Extortion Against Windows Estates
Executive Summary
SafePay is a closed, operator-run double-extortion ransomware group first seen in September to October 2024. Bitdefender, CloudSEK and Picus report it runs no affiliate program and says so on its leak site, though Blackpoint describes it as a private or semi-private operation, so treat the "no RaaS" framing as the majority view rather than settled fact. Its encryptor shares large parts of the leaked LockBit Black codebase, but researchers stress that code lineage does not establish who the operators are.
Tempo is the story. CloudSEK cites 569 leak-site victims across 47 countries as of 2026-09-17, with Germany and the United States dominant, and Halcyon reports a Q2 2026 rebound that more than doubled the prior quarter's claim total. Several vendors report initial access to encryption in 24 hours or less, though the NCC Group and Huntress cases span two to several days.
Hunt value is the Windows endpoint chain. Entry is valid credentials on VPN gateways and RDP (including a FortiGate local-account MFA bypass), help-desk impersonation over Teams, then ShareFinder.ps1, ScreenConnect and the QDoor loader, WinRAR/FileZilla/Rclone staging, Defender tampering, shadow copy deletion, and an encryptor launched with a distinctive -pass= argument, sometimes through regsvr32.exe. Encrypted files get .safepay and each folder gets readme_safepay.txt. NCC Group also saw hypervisors encrypted.
Source Review & Web Hunter Notes
Nine sources were fetched and snapshotted in full (SafePay-Ransomware-Hunt-sources/). First-party incident or malware research carries the weight: NCC Group (incident response, IOCs) and Bitdefender (group profile, hashes). Vendor and aggregator profiles are used for corroboration only.
| Tier | Source | Key finding | Carry forward |
|---|---|---|---|
| 1 | NCC Group incident analysis (01) | FortiGate local-auth MFA bypass, ScreenConnect service, QDoor soc.dll run via regsvr32 with C2 88.119.167.239:443, 1.exe -pass= -path= -enc=1, shadow/boot commands, hypervisor encryption, full argument table, hashes | yes |
| 1 | Bitdefender group profile (02) | Non-RaaS, LockBit Black overlap, ShareFinder, PsExec, WinRAR + FileZilla, 24h pattern, ransom note, SHA256 hashes | yes |
| 2 | ThreatLocker (03) | Edge-device and leaked-credential entry, ShareFinder, token impersonation, 10 SHA256 hashes, 4 mutexes | yes |
| 2 | Xcitium ThreatLabs (04) | CMSTPLUA UAC bypass, token impersonation, SystemSettingsAdminFlows Defender disable, EDR kill with stolen domain admin rights, MD5/SHA256, IPs | partial (aggregates NCC/Bitdefender; EDR-kill claim single-sourced) |
| 2 | Halcyon threat group page (05) | Regsvr32 + CMSTPLUA + SeDebugPrivilege list, security log clearing, hypervisor targeting, 4 C2 IPs, hashes, Q2 2026 rebound | partial |
| 2 | Red Piranha (06) | RDP entry, DllHost.exe CMSTPLUA parent pattern, three IPs, hash | partial |
| 2 | CloudSEK / Huntress analysis (07) | regsvr32.exe /n /i: with -pass=, locker.dll, 8 flags, Teams/Quick Assist lure, 569 victims as of 2026-09-17, detection guidance | yes |
| 2 | Picus Labs (08) | Closed group, CMSTPLUA, regsvr32/rundll32 DLL execution, WinRAR exclusion command, kill lists | partial |
| 2 | Blackpoint Cyber profile PDF (09) | Private/semi-private operation, LockBit 3.0 builder lineage, TTP list incl. Regsvr32/Rundll32, T1134.001, T1548.002 | partial |
Decisions and disqualified sources
- GuidePoint GRIT Q3 2026 report (https://guidepointsecurity.com/blog/ransomware-insights-q3-2026): not cited. The fetched page text contains no SafePay content, so it cannot back any SafePay claim.
- ransom-db October 2026 analysis (https://www.ransom-db.com/blog/ransomware-threat-landscape-october-2026-analysis): not cited. Returned HTTP 403 to every fetch, nothing could be read or snapshotted.
- SOCRadar group profile (https://socradar.io/blog/dark-web-profile-safepay-ransomware/): not cited. HTTP 403. Surefire Cyber and Barracuda pages were fetched but yielded no usable SafePay body text and were dropped.
- The "up roughly 1,300%, 3 to 42 victims in 30 days" figure is NOT stated in any retained source and is not repeated as fact. Retained numbers: 73 claims in June 2025 and 42 in July 2025 (Bitdefender), 569 victims as of 2026-09-17 (CloudSEK), Q2 2026 claims more than doubled quarter on quarter (Halcyon).
- "Conti-derived TTPs" is not claimed. Sources tie the code to LockBit Black, and some researchers suggest recruits from Conti and Black Basta (CloudSEK, Blackpoint). No Conti-cluster indicators are shipped.
- No retained page contained instructions directed at an AI agent.
Hunt Brief & Attack Chain
Hypotheses are ordered by fidelity. The chain is hands-on-keyboard, so the best hunt window is the staging period before the encryptor runs.
| # | Hypothesis | MITRE | Query | Confidence |
|---|---|---|---|---|
| H1 | An encryptor or loader is run with SafePay's -pass= plus path/enc/network flags | T1486, T1218.010 | Q1, Q2, Q14 | high |
| H2 | Operators map shares with ShareFinder before staging | T1135 | Q7 | high |
| H3 | Recovery is sabotaged: shadow copies deleted, boot recovery disabled | T1490 | Q3 | high |
| H4 | Defender is disabled through SystemSettingsAdminFlows or Set-MpPreference | T1562.001 | Q4 | medium |
| H5 | Data is archived (WinRAR split volumes) and exfiltrated (FileZilla, Rclone) | T1560.001, T1048 | Q8, Q9 | medium |
| H6 | Backup, database and security services are stopped before encryption | T1489 | Q11 | medium |
| H7 | One stolen account RDPs across many hosts; remote tools appear after a help-desk lure | T1021.001, T1219 | Q12, Q10 | medium |
| H8 | UAC bypass through a COM surrogate; logs cleared afterwards | T1548.002, T1070.001 | Q6, Q5 | medium |
| H9 | Known SafePay infrastructure is contacted | T1071.001 | Q13 | high |
Attack chain
| Step | Behavior (source) | Telemetry | Hunt angle |
|---|---|---|---|
| 1 Access | Valid VPN/RDP credentials; FortiGate local accounts bypassing MFA (NCC, CloudSEK, Halcyon); email bombing then Teams/Quick Assist (CloudSEK, Blackpoint) | VPN logs, M365, user logons (Falcon: UserLogon) | Native hunts N1, N3, N4; Q12 |
| 2 Foothold | ScreenConnect service, QDoor soc.dll via regsvr32, batch files C:\ProgramData\<digit>.bat (NCC) | Process creation and service install (Falcon: ProcessRollup2, CreateService) | Q2, Q10, Q14 |
| 3 Discovery | ShareFinder.ps1, net view/use (Bitdefender, Xcitium) | Process creation (Falcon: ProcessRollup2) | Q7 |
| 4 Priv-esc / evasion | CMSTPLUA UAC bypass, token impersonation with SeDebugPrivilege, Defender disable, EDR kill (Xcitium, Halcyon, CloudSEK) | Process creation (Falcon: ProcessRollup2) | Q6, Q4, Q11; token abuse is a GAP |
| 5 Lateral | RDP, SMB admin shares, PsExec, 1.exe pushed to servers (NCC, Bitdefender) | User logons, process creation (Falcon: UserLogon, ProcessRollup2) | Q12, Q1 |
| 6 Exfil | WinRAR a -v5g -ed -r ..., FileZilla, Rclone, RDP clipboard | Process creation (Falcon: ProcessRollup2) | Q8, Q9 |
| 7 Impact | Service/process kill, vssadmin, wmic, bcdedit, .safepay, readme_safepay.txt, admin password resets, hypervisor encryption | Process creation (Falcon: ProcessRollup2) | Q11, Q3, Q1; file artifacts and hypervisors via N8, N9 |
Consolidated IOC Table
Prevent was granted only to two hashes that two or more independent sources publish for the SafePay encryptor. Everything else ships as detect or hunt. IPs are perishable and hashes change per build. Onion addresses and attacker email addresses are published by the sources but omitted here as not actionable on endpoints.
| Type | Value | Confidence | Action | Context |
|---|---|---|---|---|
| sha256 | a0dc80a37eb7e2716c02a94adc8df9baedec192a77bde31669faed228d9ff526 | HIGH | prevent | SafePay encryptor (Bitdefender, ThreatLocker, Xcitium, Halcyon, Red Piranha, CloudSEK) |
| sha256 | 327b8b61eb446cc4f710771e44484f62b804ae3d262b57a56575053e2df67917 | HIGH | prevent | SafePay sample (Bitdefender, ThreatLocker) |
| sha256 | 921df888aaabcd828a3723f4c9f5fe8b8379c6b7067d16b2ea10152300417eae | MED | detect | soc.dll QDoor loader from a SafePay intrusion (NCC Group; also listed by ThreatLocker, Halcyon) |
| sha256 | 6c1d36df94ebe367823e73ba33cfb4f40756a5e8ee1e30e8f0ae55d47e220a6a | MED | detect | RunPE bundled DLL (NCC Group, Halcyon) |
| sha256 | e79608cf1d6b51324c14bef8883054c1238ed5f080222cc464810e6e14adc346 | MED | detect | Injected PE (NCC Group only) |
| sha256 x6 | fd509df7..., 625abbf8..., 22df7d07..., 12139246..., 241c3b02..., 654c1193..., 96134647... (see grab-csv) | MED | detect | ThreatLocker sample list, single-sourced |
| sha1 | 07353237350c35d6dc2c8f143b649cd07c71f62b | MED | detect | 1.exe ransomware binary (NCC Group only) |
| md5 | d1f621b82822b544153f6b531e51a611 | LOW | detect | Sample MD5 (Xcitium only) |
| ipv4 | 88.119.167.239 | HIGH | detect | QDoor C2 port 443 (NCC Group, Xcitium, Halcyon) |
| ipv4 | 45.91.201.247 | MED | detect | C2/exfil (Halcyon, Xcitium, Red Piranha) |
| ipv4 | 77.37.49.40 | MED | detect | C2/exfil (Halcyon, Xcitium, Red Piranha) |
| ipv4 | 80.78.28.63 | MED | detect | C2/exfil (Halcyon, Xcitium, Red Piranha) |
| filename | readme_safepay.txt | HIGH | hunt | Ransom note, every vendor |
| extension | .safepay | HIGH | hunt | Appended to encrypted files |
| filename | ShareFinder.ps1 / soc.dll / locker.dll / 1.exe | MED | hunt | Tooling names; generic names, never block |
| mutex | Global\DB1D-19B4-5094-D570-9841-E4BC-8ABD-29AA-03BB-84AD-C61B-1355-4FF2-194B-96BD-7E49 (+3 in grab-names) | LOW | hunt | ThreatLocker; per-victim mutexes |
Affected Surface & Telemetry Matrix
| Surface | Telemetry | Priority | Gap risk |
|---|---|---|---|
| Windows endpoints and servers | Process creation with command line, network connections, user logons (Falcon: ProcessRollup2, NetworkConnectIP4, UserLogon) | high | Low |
| VPN / FortiGate / remote gateways | Appliance auth logs (native) | high | High: outside endpoint telemetry, MFA-bypass config lives here |
| Active Directory / identity | Windows 4624/4625/4720/4724, Identity Protection | high | Medium |
| Microsoft 365 (email, Teams) | Mail flow, Teams external access audit (native) | medium | High: lure stage is outside endpoint telemetry |
| Hypervisors (VMware ESXi and similar) | Hypervisor syslog / audit (native) | high | High: no endpoint coverage assumed |
| Backup infrastructure | Backup console audit, VSS state | high | Medium |
ATT&CK Mapping
| Tactic | Technique | Observed behavior | Query / control |
|---|---|---|---|
| Initial Access | T1078, T1133, T1190 | Valid VPN/RDP creds, FortiGate local-auth MFA bypass | N1, Q12, hardening |
| Initial Access | T1566.004 | Teams help-desk impersonation after email flood | N4 |
| Execution | T1059.001, T1059.003 | ShareFinder.ps1, batch files in ProgramData | Q7 |
| Persistence | T1543.003, T1219 | ScreenConnect service, QDoor | Q10, Q14, N5 |
| Privilege Escalation | T1548.002 | CMSTPLUA COM UAC bypass | Q6 |
| Privilege Escalation | T1134.001 | Token impersonation, SeDebugPrivilege | GAP (no Falcon event) |
| Defense Evasion | T1218.010 / .011 | Encryptor and loader through regsvr32 / rundll32 | Q1, Q2 |
| Defense Evasion | T1562.001 | Defender disabled, EDR/AV killed | Q4, Q11 |
| Defense Evasion | T1070.001 / .004 | Log clearing, tool uninstall, self-delete | Q5 |
| Discovery | T1135 | ShareFinder | Q7 |
| Lateral Movement | T1021.001 / .002 | RDP, SMB admin shares, PsExec | Q12, Q1 |
| Collection / Exfil | T1560.001, T1048, T1567.002 | WinRAR, FileZilla, Rclone | Q8, Q9 |
| Impact | T1490, T1489, T1486, T1531 | Shadow/boot, service stop, .safepay, admin password resets | Q3, Q11, Q1, N7 |
Native Audit-Log Hunts
| # | Hunt | Where | What to look for |
|---|---|---|---|
| N1 | VPN local-account auth | FortiGate / gateway logs | Local or LDAP-group logins that skipped MFA; logins from cloud-VPS hostnames (NCC saw a Vultr-hosted vultr-guest device) and default WIN- style hostnames (CloudSEK) |
| N2 | RDP from VPN ranges | Windows Security 4624 type 10 | Admin logons to servers users do not normally touch |
| N3 | Failed logons for non-existent accounts | Security 4625 / identity logs | Sudden failures from a host that just authenticated as admin (CloudSEK) |
| N4 | Email flood then external Teams call | M365 mail flow, Teams audit | Spam burst followed by external-tenant call or Quick Assist session |
| N5 | Service install | System 7045 | ScreenConnect Client or unexpected user-mode services (NCC) |
| N6 | Defender events | Defender/Operational 5001, 5007 | Real-time protection disabled or config changed (CloudSEK) |
| N7 | Mass admin password resets | Security 4723/4724 | Bulk resets after encryption (T1531, NCC) |
| N8 | Ransom note / extension sweep | EDR file search, RTR | Search for readme_safepay.txt and *.safepay (no Falcon CQL query is shipped for this, see coverage map) |
| N9 | Hypervisor tampering | ESXi / hypervisor syslog | Unexpected shell or SSH enablement, VM power-off, datastore file changes (NCC, Halcyon) |
| N10 | Log clearing | Security 1102, System 104 | Cleared logs outside change windows |
Hunt Queries: CrowdStrike CQL and SentinelOne PowerQuery
Use your tenant's own address. SentinelOne does not document a link that pre-fills a query, so each "Copy & open SentinelOne" button copies the query and opens this console: paste it into PowerQuery.
Looks for: The encryptor is launched with a mandatory -pass= argument plus -path=, -enc=, -network, -netdrive, -uac or -selfdelete. Sources show it run as an EXE (1.exe -pass= -path= -enc=1) and as a DLL through regsvr32.exe. Matches the argument pattern on any process, so a renamed binary still fires.
Known limitations and deployment notes
- PowerQuery: The CQL SHA256 column is not projected in this tab; the image path is shown instead.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
- PowerQuery assumes: The console time picker supplies the 7 day window; the query carries no time predicate.
// HUNT: SafePay encryptor launch flags (-pass= with -path/-enc/-network/-uac) // MITRE: T1486, T1218.010, T1218.011 // CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: none known. -pass= alone is common in unrelated tools, so a second SafePay flag is required. // NOTE: regsvr32.exe and rundll32.exe are legitimate Windows binaries. This matches the argument pattern, never the binary name. Alert only, do not block the binaries. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/\s-pass=\S+/i | CommandLine=/\s-(path=|enc=|network\b|netdrive\b|uac\b|selfdelete\b)/i | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine, SHA256HashData], limit=200)
2 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating processtgt.process.name: Created process nametgt.process.image.path: Created image path
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.image.path, tgt.process.cmdline
// HUNT: SafePay encryptor launch flags (-pass= with -path/-enc/-network/-uac) // SCHEMA PROFILE: sentinelone-endpoint-ocsf // MITRE: T1486, T1218.010, T1218.011 // CONF: high | FP: low // FALSE POSITIVES: none known. -pass= alone is common in unrelated tools, so a second SafePay flag is required. // EQUIVALENCE: equivalent-with-schema-assumptions - Same process-creation predicate: two regex tests on the command line (a -pass= argument plus a second SafePay flag). Command-line regexes match case-insensitively by default, as the CQL /i flags do. // REQUIRES: SentinelOne endpoint Process Creation events with command line // TUNING: None required. -pass= alone is common in unrelated tools, so the second SafePay flag stays mandatory. // LOOKBACK: 7d // CONFIGURATION: No custom detection rule or lookup table required; run in the Singularity Data Lake PowerQuery editor with the console time picker set to 7d. // KNOWN GAPS: The CQL SHA256 column is not projected in this tab; the image path is shown instead. // VALIDATION LEVEL: static-reviewed event.type = 'Process Creation' tgt.process.cmdline matches '\\s-pass=\\S+' tgt.process.cmdline matches '\\s-(path=|enc=|network\\b|netdrive\\b|uac\\b|selfdelete\\b)' | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline, tgt.process.image.path | limit 200
Looks for: regsvr32.exe or rundll32.exe running a DLL out of ProgramData, Temp, Public or PerfLogs, with the silent /n and /i: switch pattern. NCC Group saw the QDoor soc.dll (DllRegisterServer export) built for regsvr32, and CloudSEK reports the encryptor locker.dll run through regsvr32.exe /n /i:. FP: Software installers and legacy COM registration occasionally use these switches from Temp.
Known limitations and deployment notes
- PowerQuery: The CQL SHA256 column is not projected in this tab.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
- PowerQuery assumes: The console time picker supplies the 7 day window.
// HUNT: regsvr32 / rundll32 proxy execution of a DLL in a writable path // MITRE: T1218.010, T1218.011, T1202 // CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: installers and legacy COM registration run from Temp // TUNING: exclude known installer parents (msiexec.exe, vendor setup executables) and signed vendor DLL paths after a 7 day baseline // NOTE: regsvr32.exe and rundll32.exe are legitimate Windows binaries. Hunt the argument and path context only. Never block the binaries. #event_simpleName=ProcessRollup2 | FileName=/^(regsvr32|rundll32)\.exe$/i | CommandLine=/\\(ProgramData|Temp|Users\\Public|PerfLogs)\\\S*\.dll/i | CommandLine=/(\s.n\s|\s.i:|DllRegisterServer)/i | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine, SHA256HashData], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.name: Created process nametgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating processtgt.process.image.path: Created image path
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.image.path, tgt.process.cmdline
// HUNT: regsvr32 / rundll32 proxy execution of a DLL in a writable path
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1218.010, T1218.011, T1202
// CONF: medium | FP: medium
// FALSE POSITIVES: installers and legacy COM registration run from Temp
// EQUIVALENCE: equivalent-with-schema-assumptions - Same predicate: regsvr32 or rundll32 created with a DLL path under ProgramData, Temp, Users\Public or PerfLogs and a register/install/entry-point argument. Binary names match case-insensitively through in:anycase.
// REQUIRES: SentinelOne endpoint Process Creation events with command line
// TUNING: Exclude known installer parents (src.process.name msiexec.exe, vendor setup executables) and signed vendor DLL paths after a 7 day baseline. Never block regsvr32.exe or rundll32.exe.
// LOOKBACK: 7d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d.
// KNOWN GAPS: The CQL SHA256 column is not projected in this tab.
// VALIDATION LEVEL: static-reviewed
event.type = 'Process Creation'
tgt.process.name in:anycase ('regsvr32.exe', 'rundll32.exe')
tgt.process.cmdline matches '\\\\(ProgramData|Temp|Users\\\\Public|PerfLogs)\\\\\\S*\\.dll'
tgt.process.cmdline matches '(\\s.n\\s|\\s.i:|DllRegisterServer)'
| columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline, tgt.process.image.path
| limit 200Looks for: The encryptor runs vssadmin delete shadows /all /quiet, wmic shadowcopy delete, bcdedit ... bootstatuspolicy ignoreallfailures and bcdedit ... recoveryenabled no. Binaries are stock Windows tools, so the match is on the argument pattern. FP: Backup and imaging software, or an admin pruning shadow copies, can run these. Boot-config changes are rarer.
Known limitations and deployment notes
- PowerQuery: Shadow copy deletion performed through an API call inside a process that never spawns these binaries is not visible in process-creation telemetry.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
- PowerQuery assumes: The console time picker supplies the 7 day window.
// HUNT: Shadow copy deletion and boot recovery disabled (SafePay impact stage) // MITRE: T1490 // CONF: high FP: medium COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: backup agents and imaging jobs pruning shadow copies; admins running bcdedit during repair // TUNING: exclude the backup service account and build/imaging hosts. Do not exclude by binary name. // NOTE: vssadmin.exe, wmic.exe and bcdedit.exe are legitimate Windows tools. Detect the arguments, never block the binaries. #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(vssadmin|wmic|bcdedit|powershell|pwsh)\.exe$/i | CommandLine=/(delete\s+shadows|shadowcopy\s+delete|recoveryenabled\s+no|bootstatuspolicy\s+ignoreallfailures|win32_shadowcopy.*delete)/i | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.name: Created process nametgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating process
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
// HUNT: Shadow copy deletion and boot recovery disabled (SafePay impact stage)
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1490
// CONF: high | FP: medium
// FALSE POSITIVES: backup agents and imaging jobs pruning shadow copies; admins running bcdedit during repair
// EQUIVALENCE: equivalent-with-schema-assumptions - Same predicate: vssadmin, wmic, bcdedit or PowerShell created with a shadow copy deletion or boot recovery disabling argument.
// REQUIRES: SentinelOne endpoint Process Creation events with command line
// TUNING: Exclude the backup service account and build or imaging hosts. Do not exclude by binary name. Alert only, never block vssadmin.exe, wmic.exe or bcdedit.exe.
// LOOKBACK: 7d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d.
// KNOWN GAPS: Shadow copy deletion performed through an API call inside a process that never spawns these binaries is not visible in process-creation telemetry.
// VALIDATION LEVEL: static-reviewed
event.type = 'Process Creation'
tgt.process.name in:anycase ('vssadmin.exe', 'wmic.exe', 'bcdedit.exe', 'powershell.exe', 'pwsh.exe')
tgt.process.cmdline matches '(delete\\s+shadows|shadowcopy\\s+delete|recoveryenabled\\s+no|bootstatuspolicy\\s+ignoreallfailures|win32_shadowcopy.*delete)'
| columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
| limit 200Looks for: SafePay disables Microsoft Defender by driving SystemSettingsAdminFlows.exe (a trusted binary) and PowerShell, turning off real-time monitoring, sample submission and the firewall. CloudSEK notes administrators rarely use this path. FP: Admins legitimately set Defender exclusions or toggle protection during software testing.
Known limitations and deployment notes
- PowerQuery: Defender changes made through registry writes or Group Policy rather than a process are not seen here.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
- PowerQuery assumes: A literal dollar sign is written as [$] in the regex so it is not read as string interpolation.
// HUNT: Defender protections disabled through SystemSettingsAdminFlows / Set-MpPreference // MITRE: T1562.001 // CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: admin troubleshooting; lab and build hosts // TUNING: exclude named lab hosts and the endpoint-management service account. Keep alerting on server and DC hosts. #event_simpleName=ProcessRollup2 | (FileName=/^SystemSettingsAdminFlows\.exe$/i or CommandLine=/(Set-MpPreference\s.*-Disable\w+\s+(\$true|1)|advfirewall\s+set\s+\w+\s+state\s+off)/i) | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.name: Created process nametgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating process
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
// HUNT: Defender protections disabled through SystemSettingsAdminFlows / Set-MpPreference
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1562.001
// CONF: medium | FP: medium
// FALSE POSITIVES: admin troubleshooting; lab and build hosts
// EQUIVALENCE: equivalent-with-schema-assumptions - Same predicate: the SystemSettingsAdminFlows binary, or a command line that disables a Defender protection through Set-MpPreference or turns a firewall profile off.
// REQUIRES: SentinelOne endpoint Process Creation events with command line
// TUNING: Exclude named lab hosts and the endpoint-management service account. Keep alerting on server and domain controller hosts.
// LOOKBACK: 7d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d.
// KNOWN GAPS: Defender changes made through registry writes or Group Policy rather than a process are not seen here.
// VALIDATION LEVEL: static-reviewed
event.type = 'Process Creation'
(tgt.process.name in:anycase ('SystemSettingsAdminFlows.exe') or tgt.process.cmdline matches 'Set-MpPreference\\s.*-Disable\\w+\\s+([$]true|1)|advfirewall\\s+set\\s+\\w+\\s+state\\s+off')
| columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
| limit 200Looks for: Halcyon lists security log clearing and anti-forensics among post-encryption cleanup. This catches wevtutil cl and the PowerShell clear cmdlets. Single-source behavior, so treat as a corroborating signal. FP: Image build pipelines and some admin maintenance clear logs.
Known limitations and deployment notes
- PowerQuery: Log clearing through the Event Log API from an arbitrary process, or Windows event 1102 itself, is not covered by this process-creation hunt.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
// HUNT: Windows event log clearing (anti-forensics) // MITRE: T1070.001, T1562.002 // CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: image build pipelines, scheduled log-rotation scripts // TUNING: exclude build hosts and the sanctioned log-maintenance account // NOTE: wevtutil.exe is a legitimate Windows tool. Detect the clear verb, never block the binary. #event_simpleName=ProcessRollup2 | (FileName=/^wevtutil\.exe$/i CommandLine=/\s(cl|clear-log)\s+\S+/i) or (FileName=/^(powershell|pwsh)\.exe$/i CommandLine=/(Clear-EventLog|Remove-EventLog|ClearLog\()/i) | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.name: Created process nametgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating process
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
// HUNT: Windows event log clearing (anti-forensics)
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1070.001, T1562.002
// CONF: medium | FP: medium
// FALSE POSITIVES: image build pipelines, scheduled log-rotation scripts
// EQUIVALENCE: equivalent-with-schema-assumptions - Same predicate: wevtutil with a clear verb, or PowerShell with a log-clearing cmdlet or method.
// REQUIRES: SentinelOne endpoint Process Creation events with command line
// TUNING: Exclude build hosts and the sanctioned log-maintenance account. Alert only, never block wevtutil.exe.
// LOOKBACK: 7d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d.
// KNOWN GAPS: Log clearing through the Event Log API from an arbitrary process, or Windows event 1102 itself, is not covered by this process-creation hunt.
// VALIDATION LEVEL: static-reviewed
event.type = 'Process Creation'
((tgt.process.name in:anycase ('wevtutil.exe') tgt.process.cmdline matches '\\s(cl|clear-log)\\s+\\S+') or (tgt.process.name in:anycase ('powershell.exe', 'pwsh.exe') tgt.process.cmdline matches 'Clear-EventLog|Remove-EventLog|ClearLog\\('))
| columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
| limit 200Looks for: SafePay relaunches itself elevated through the CMSTPLUA COM interface, which surfaces as DllHost.exe as the parent of a script host or proxy-execution binary. Red Piranha and CloudSEK both describe this parent-child pattern. FP: Some enterprise software legitimately uses COM elevation through dllhost.exe.
Known limitations and deployment notes
- PowerQuery: The query cannot tell a CMSTPLUA elevation from other COM surrogate children; it relies on the baseline exclusions in the tuning note.
- PowerQuery assumes: On Process Creation events src.process.name is the creating process (dllhost.exe here) and tgt.process.name the new process.
- PowerQuery assumes: src.process.user holds the account that launched the process.
// HUNT: dllhost.exe parent spawning shells or proxy-execution binaries (COM UAC bypass) // MITRE: T1548.002 // CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 (ParentBaseFileName) // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: management agents that elevate through COM surrogates // TUNING: baseline the child binaries per environment and exclude signed management-agent children // NOTE: the CMSTPLUA CLSID is not published in the cited sources, so this keys on the parent-child relationship only. #event_simpleName=ProcessRollup2 | ParentBaseFileName=/^dllhost\.exe$/i | FileName=/^(cmd|powershell|pwsh|wscript|cscript|mshta|regsvr32|rundll32)\.exe$/i | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine, SHA256HashData], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typesrc.process.name: Creating process nametgt.process.name: Created process name
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usertgt.process.cmdline: Created command linetgt.process.image.path: Created image path
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' src.process.name = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline, tgt.process.image.path
// HUNT: dllhost.exe parent spawning shells or proxy-execution binaries (COM UAC bypass)
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1548.002
// CONF: medium | FP: medium
// FALSE POSITIVES: management agents that elevate through COM surrogates
// EQUIVALENCE: equivalent-with-schema-assumptions - Same parent-child predicate. On a Process Creation event the creator is src.process.* and the new process is tgt.process.*, so the parent process name maps to src.process.name and the child process name to tgt.process.name.
// REQUIRES: SentinelOne endpoint Process Creation events with the creating process name
// TUNING: Baseline the child binaries per environment and exclude signed management-agent children. The CMSTPLUA CLSID is not published in the cited sources, so this keys on the parent-child relationship only.
// LOOKBACK: 7d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d.
// KNOWN GAPS: The query cannot tell a CMSTPLUA elevation from other COM surrogate children; it relies on the baseline exclusions in the tuning note.
// VALIDATION LEVEL: static-reviewed
event.type = 'Process Creation'
src.process.name in:anycase ('dllhost.exe')
tgt.process.name in:anycase ('cmd.exe', 'powershell.exe', 'pwsh.exe', 'wscript.exe', 'cscript.exe', 'mshta.exe', 'regsvr32.exe', 'rundll32.exe')
| columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline, tgt.process.image.path
| limit 200Looks for: ShareFinder.ps1 (Invoke-ShareFinder, PowerTools/PowerView lineage) is SafePay's consistent share-mapping step before staging, reported by ThreatLocker, Bitdefender, Xcitium, Red Piranha and CloudSEK.
Known limitations and deployment notes
- PowerQuery: ShareFinder loaded in memory from a script block, with no mention on any command line, is not seen here.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
// HUNT: ShareFinder.ps1 / Invoke-ShareFinder share discovery // MITRE: T1135, T1059.001 // CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: red-team and pentest exercises using PowerView // TUNING: exclude the authorised assessment hosts and accounts for the test window #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(invoke-sharefinder|sharefinder\.ps1)/i | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine], limit=200)
2 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating processtgt.process.name: Created process name
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
// HUNT: ShareFinder.ps1 / Invoke-ShareFinder share discovery // SCHEMA PROFILE: sentinelone-endpoint-ocsf // MITRE: T1135, T1059.001 // CONF: high | FP: low // FALSE POSITIVES: red-team and pentest exercises using PowerView // EQUIVALENCE: equivalent-with-schema-assumptions - Same predicate: ShareFinder or Invoke-ShareFinder named in a process command line. // REQUIRES: SentinelOne endpoint Process Creation events with command line // TUNING: Exclude the authorised assessment hosts and accounts for the test window. // LOOKBACK: 7d // CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d. // KNOWN GAPS: ShareFinder loaded in memory from a script block, with no mention on any command line, is not seen here. // VALIDATION LEVEL: static-reviewed event.type = 'Process Creation' tgt.process.cmdline matches 'invoke-sharefinder|sharefinder\\.ps1' | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline | limit 200
Looks for: Bitdefender, Picus and CloudSEK report WinRAR archiving user data over admin shares with split-volume (-v5g) and long exclusion lists before exfiltration. This matches the a (add) verb with a split-volume switch. FP: Backup and archiving jobs can use split volumes.
Known limitations and deployment notes
- PowerQuery: Archivers renamed to a different binary name, and archive tools not in the list, are not matched.
- PowerQuery assumes: src.process.name is the creating process on Process Creation events, which the field model attests.
- PowerQuery assumes: The console time picker supplies the 7 day window; the query carries no time predicate.
- PowerQuery assumes: The \\b and \\s regex classes are standard; confirm they behave the same on the tenant's PowerQuery engine.
// HUNT: WinRAR / 7-Zip split-volume archive staging (pre-exfiltration) // MITRE: T1560.001 // CONF: medium FP: medium COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: sanctioned archiving jobs, backup tooling // TUNING: exclude the backup service account and known archive hosts. Raise priority when the command line contains a UNC path to an admin share. #event_simpleName=ProcessRollup2 | FileName=/^(winrar|rar|7z|7za|7zg)\.exe$/i | CommandLine=/\sa\s+(\S+\s+)*-v[0-9]+[kmg]\b/i | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.name: Created process nametgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating process
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.name = * tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, tgt.process.name, tgt.process.cmdline
// HUNT: WinRAR / 7-Zip split-volume archive staging (pre-exfiltration) // SCHEMA PROFILE: sentinelone-endpoint-ocsf // MITRE: T1560.001 // CONF: medium | FP: medium // FALSE POSITIVES: sanctioned archiving jobs, backup tooling // EQUIVALENCE: equivalent-with-schema-assumptions - Same process-creation predicate as the corrected CQL: an archiver binary (WinRAR, rar, 7-Zip) run with the add verb and a split-volume switch such as -v100m or -v5g, with or without other switches in between. Command-line regexes match case-insensitively by default, as the CQL /i flag does. // REQUIRES: SentinelOne endpoint Process Creation events with command line // TUNING: Exclude the backup service account and known archive hosts. Raise priority when the command line contains a UNC path to an admin share. // LOOKBACK: 7d // CONFIGURATION: No custom detection rule or lookup table required; run in the Singularity Data Lake PowerQuery editor with the console time picker set to 7d. // KNOWN GAPS: Archivers renamed to a different binary name, and archive tools not in the list, are not matched. // VALIDATION LEVEL: static-reviewed event.type = 'Process Creation' tgt.process.name matches '^(winrar|rar|7z|7za|7zg)\\.exe$' tgt.process.cmdline matches '\\sa\\s+(\\S+\\s+)*-v[0-9]+[kmg]\\b' | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline | limit 200
Looks for: SafePay stages data then exfiltrates with FileZilla (often installed, used and uninstalled) or Rclone. Server hosts that have no business running either are the signal. FP: Sanctioned cloud sync, SFTP workflows and admin workstations running FileZilla.
Known limitations and deployment notes
- PowerQuery: A renamed rclone binary run with a verb other than copy, sync, move or copyto is not matched.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
// HUNT: Rclone / FileZilla execution for data exfiltration // MITRE: T1048, T1567.002 // CONF: medium FP: high COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: sanctioned cloud sync, SFTP admin workflows // TUNING: scope to server hosts and domain controllers first, then exclude named sanctioned transfer hosts and service accounts #event_simpleName=ProcessRollup2 | (FileName=/^(rclone|filezilla|fzsftp)\.exe$/i or CommandLine=/rclone(\.exe)?"?\s+(copy|sync|move|copyto)\b/i) | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.name: Created process nametgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating process
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
// HUNT: Rclone / FileZilla execution for data exfiltration
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1048, T1567.002
// CONF: medium | FP: high
// FALSE POSITIVES: sanctioned cloud sync, SFTP admin workflows
// EQUIVALENCE: equivalent-with-schema-assumptions - Same predicate: Rclone, FileZilla or fzsftp binaries, or an rclone transfer verb on the command line.
// REQUIRES: SentinelOne endpoint Process Creation events with command line
// TUNING: Scope to server hosts and domain controllers first, then exclude named sanctioned transfer hosts and service accounts.
// LOOKBACK: 7d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d.
// KNOWN GAPS: A renamed rclone binary run with a verb other than copy, sync, move or copyto is not matched.
// VALIDATION LEVEL: static-reviewed
event.type = 'Process Creation'
(tgt.process.name in:anycase ('rclone.exe', 'filezilla.exe', 'fzsftp.exe') or tgt.process.cmdline matches 'rclone(\\.exe)?"?\\s+(copy|sync|move|copyto)\\b')
| columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
| limit 200Looks for: SafePay operators install or abuse remote-access tools: ScreenConnect as a service for persistence (NCC Group), AnyDesk (Halcyon), and Quick Assist after email-bombing and Teams help-desk impersonation (CloudSEK, Blackpoint). The tools are legitimate, so this is an inventory-and-baseline hunt, not an alert. FP: Sanctioned RMM and help-desk sessions are common.
Known limitations and deployment notes
- PowerQuery: Remote-access tools renamed or run from a different binary name are not inventoried.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
- PowerQuery assumes: min and max over event.time return the first and last execution time.
// HUNT: Remote-access tool execution inventory (Quick Assist / ScreenConnect / AnyDesk) // MITRE: T1219, T1133 // CONF: low FP: high COST: low // REQUIRES: ProcessRollup2 // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: sanctioned RMM, help-desk sessions // TUNING: exclude the sanctioned RMM vendor and fleet. Investigate first-seen tools on servers and any use following a burst of inbound email or an external Teams call. // NOTE: these are legitimate products. Hunt, never block on the binary name. #event_simpleName=ProcessRollup2 | FileName=/^(quickassist|anydesk|screenconnect\.clientservice|screenconnect\.windowsclient)\.exe$/i | groupBy([ComputerName, UserName, FileName], function=[count(as=Execs), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=20000) | sort(FirstSeen, order=desc, limit=200)
5 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.name: Created process nameevent.time: Event timeendpoint.name: Hostsrc.process.user: Launching user
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.name = * | limit 5 | columns event.time, endpoint.name, src.process.user, tgt.process.name
// HUNT: Remote-access tool execution inventory (Quick Assist / ScreenConnect / AnyDesk)
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1219, T1133
// CONF: low | FP: high
// FALSE POSITIVES: sanctioned RMM, help-desk sessions
// EQUIVALENCE: equivalent-with-schema-assumptions - Same inventory: executions of Quick Assist, AnyDesk and ScreenConnect binaries grouped per host, user and binary with first and last seen times.
// REQUIRES: SentinelOne endpoint Process Creation events
// TUNING: Exclude the sanctioned RMM vendor and fleet. Investigate first-seen tools on servers and any use following a burst of inbound email or an external Teams call. These are legitimate products: hunt, never block on the binary name.
// LOOKBACK: 7d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d.
// KNOWN GAPS: Remote-access tools renamed or run from a different binary name are not inventoried.
// VALIDATION LEVEL: static-reviewed
event.type = 'Process Creation'
tgt.process.name in:anycase ('quickassist.exe', 'anydesk.exe', 'screenconnect.clientservice.exe', 'screenconnect.windowsclient.exe')
| group runs = count(), first_run = min(event.time), last_run = max(event.time) by endpoint.name, src.process.user, tgt.process.name
| sort -first_run
| limit 200Looks for: The encryptor stops VSS, SQL, Veeam, backup and Sophos services and kills database, mail and Office processes. Xcitium also reports operators uninstalling or killing EDR agents with stolen domain admin rights (single source). Matches stop and disable verbs against those service names. FP: Patch windows, backup jobs and maintenance scripts stop these services routinely.
Known limitations and deployment notes
- PowerQuery: Service stops issued through the Service Control Manager API or WMI without spawning these binaries are not visible.
- PowerQuery assumes: src.process.user holds the account that launched the process on Process Creation events.
// HUNT: Stop or disable of backup, database and security services (pre-encryption) // MITRE: T1489, T1562.001 // CONF: medium FP: high COST: low // REQUIRES: ProcessRollup2 with CommandLine // LOOKBACK: 7d (set with the console time picker) // FALSE POSITIVES: patch windows, backup jobs, maintenance scripts // TUNING: exclude change-window hosts and the patching/backup service accounts. Prioritise matches that touch several of these services within minutes. #event_simpleName=ProcessRollup2 | FileName=/^(net|net1|sc|powershell|pwsh)\.exe$/i | CommandLine=/(\sstop\s|stop-service|start=\s*disabled)/i | CommandLine=/(vss|sophos|veeam|backup|gxvss|sqlsvc|msexchange|mssql|sense|windefend|csagent)/i | table([@timestamp, ComputerName, UserName, FileName, ParentBaseFileName, CommandLine], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint Process Creation events
Required fields
event.type: Event typetgt.process.name: Created process nametgt.process.cmdline: Created command line
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Launching usersrc.process.name: Creating process
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'Process Creation' tgt.process.cmdline = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
// HUNT: Stop or disable of backup, database and security services (pre-encryption)
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1489, T1562.001
// CONF: medium | FP: high
// FALSE POSITIVES: patch windows, backup jobs, maintenance scripts
// EQUIVALENCE: equivalent-with-schema-assumptions - Same predicate: net, net1, sc or PowerShell with a stop or disable-start verb, and a backup, database or security service name on the command line.
// REQUIRES: SentinelOne endpoint Process Creation events with command line
// TUNING: Exclude change-window hosts and the patching and backup service accounts. Prioritise matches that touch several of these services within minutes.
// LOOKBACK: 7d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 7d.
// KNOWN GAPS: Service stops issued through the Service Control Manager API or WMI without spawning these binaries are not visible.
// VALIDATION LEVEL: static-reviewed
event.type = 'Process Creation'
tgt.process.name in:anycase ('net.exe', 'net1.exe', 'sc.exe', 'powershell.exe', 'pwsh.exe')
tgt.process.cmdline matches '(\\sstop\\s|stop-service|start=\\s*disabled)'
tgt.process.cmdline matches '(vss|sophos|veeam|backup|gxvss|sqlsvc|msexchange|mssql|sense|windefend|csagent)'
| columns event.time, endpoint.name, src.process.user, src.process.name, tgt.process.name, tgt.process.cmdline
| limit 200Looks for: SafePay moves by RDP and SMB admin shares with stolen domain credentials, and pushes the encryptor to many servers within hours. One account with interactive RDP logons (LogonType 10) to four or more distinct hosts is the pattern. FP: Jump-host users, admins and monitoring accounts.
Known limitations and deployment notes
- PowerQuery: Source IP addresses are not collected: src.endpoint.ip.address is documented but unattested. CACHED_REMOTE_INTERACTIVE logons are not counted.
- PowerQuery assumes: event.login.type value REMOTE_INTERACTIVE corresponds to CQL LogonType 10.
- PowerQuery assumes: agent.uuid is populated on Login events and identifies the destination endpoint.
- PowerQuery assumes: Machine accounts are excluded by a trailing dollar sign in the user name.
// HUNT: One account RDP logon to many distinct hosts // MITRE: T1021.001, T1078 // CONF: medium FP: medium COST: medium // REQUIRES: UserLogon (LogonType 10) // LOOKBACK: 24h (set with the console time picker) // FALSE POSITIVES: sanctioned admins, jump hosts, monitoring accounts // TUNING: exclude named admin accounts and PAM jump hosts, then raise the DistinctHosts threshold to fit your baseline #event_simpleName=UserLogon | LogonType=10 | UserName!=/\$$/ | groupBy([UserName], function=[count(aid, distinct=true, as=DistinctHosts), count(as=Logons), collect(RemoteAddressIP4, limit=10), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=20000) | DistinctHosts >= 4 | sort(DistinctHosts, order=desc, limit=200)
6 required fields · View requirements
Required telemetry
- SentinelOne Login events
Required fields
event.type: Event typeevent.login.type: Logon typeevent.login.loginIsSuccessful: Logon successevent.login.userName: Logon useragent.uuid: Destination endpointevent.time: Event time
Fallbacks
agent.uuid→endpoint.name: Hosts that share a name are counted once.
Readiness test
event.type = 'Login' event.login.type = * | limit 5 | columns event.time, agent.uuid, event.login.type, event.login.loginIsSuccessful, event.login.userName
// HUNT: One account RDP logon to many distinct hosts // SCHEMA PROFILE: sentinelone-endpoint-ocsf // MITRE: T1021.001, T1078 // CONF: medium | FP: medium // FALSE POSITIVES: sanctioned admins, jump hosts, monitoring accounts // EQUIVALENCE: approximate-analytic - Same fan-out analytic (one account, successful RDP-type logons, four or more distinct hosts counted exactly by a two-stage group) on SentinelOne Login events. The numeric LogonType 10 becomes the REMOTE_INTERACTIVE logon type word, and the CQL RemoteAddressIP4 collection is not carried over. // REQUIRES: SentinelOne Login events with logon type and success flag // TUNING: Exclude named admin accounts and PAM jump hosts, then raise the host_count threshold to fit your baseline. // LOOKBACK: 24h // CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 24h. // KNOWN GAPS: Source IP addresses are not collected: src.endpoint.ip.address is documented but unattested. CACHED_REMOTE_INTERACTIVE logons are not counted. // VALIDATION LEVEL: static-reviewed event.type = 'Login' event.login.type = 'REMOTE_INTERACTIVE' event.login.loginIsSuccessful = true !(event.login.userName matches '\\$$') | group logon_count = count(), first_logon = min(event.time), last_logon = max(event.time) by event.login.userName, agent.uuid | group host_count = count(), logon_total = sum(logon_count), first_logon = min(first_logon), last_logon = max(last_logon) by event.login.userName | filter host_count >= 4 | sort -host_count | limit 200
Looks for: Outbound connections to the four IPs reported by Halcyon, with three also in Xcitium and Red Piranha and 88.119.167.239 documented by NCC Group as the QDoor C2 on port 443. Infrastructure is perishable, so confirm each hit with process context.
Known limitations and deployment notes
- PowerQuery: Retention of IP Connect events in the data lake may be shorter than 30d on some tenants.
- PowerQuery assumes: On IP Connect events the acting process is src.process.*.
- PowerQuery assumes: src.process.user holds the account that owns the connecting process.
// HUNT: Outbound connections to reported SafePay infrastructure // MITRE: T1071.001, T1041 // CONF: high FP: low COST: low // REQUIRES: NetworkConnectIP4 // LOOKBACK: 30d (set with the console time picker) // FALSE POSITIVES: IP reassignment by hosting providers over time // TUNING: confirm the initiating process and timing before escalating. Expire stale hits after 6 months. #event_simpleName=NetworkConnectIP4 | in(field=RemoteAddressIP4, values=["45.91.201.247", "77.37.49.40", "80.78.28.63", "88.119.167.239"]) | table([@timestamp, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
2 required fields · View requirements
Required telemetry
- SentinelOne endpoint IP Connect events
Required fields
event.type: Event typedst.ip.address: Destination IP
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.user: Process usersrc.process.name: Connecting processdst.port.number: Destination port
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'IP Connect' dst.ip.address = * | limit 5 | columns event.time, endpoint.name, src.process.user, src.process.name, dst.ip.address, dst.port.number
// HUNT: Outbound connections to reported SafePay infrastructure
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1071.001, T1041
// CONF: high | FP: low
// FALSE POSITIVES: IP reassignment by hosting providers over time
// EQUIVALENCE: equivalent-with-schema-assumptions - Same predicate: outbound IP connections to the four reported SafePay addresses.
// REQUIRES: SentinelOne endpoint IP Connect events
// TUNING: Confirm the initiating process and timing before escalating. Expire stale hits after 6 months.
// LOOKBACK: 30d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 30d.
// KNOWN GAPS: Retention of IP Connect events in the data lake may be shorter than 30d on some tenants.
// VALIDATION LEVEL: static-reviewed
event.type = 'IP Connect'
dst.ip.address in ('45.91.201.247', '77.37.49.40', '80.78.28.63', '88.119.167.239')
| columns event.time, endpoint.name, src.process.user, src.process.name, dst.ip.address, dst.port.number
| limit 200Looks for: SHA256 matches against the 12 hashes published by ThreatLocker, Bitdefender, NCC Group, Halcyon and CloudSEK. Run in hunt mode over a 90 day window first; hashes churn between builds so a miss is not clearance.
Known limitations and deployment notes
- PowerQuery: Process-creation image hashes are not matched in this tab, so a SafePay binary that ran without a file write or module load event in the window is missed. Hunt it on the CQL tab, or use the SentinelOne threat and hash-reputation views.
- PowerQuery assumes: File and module events carry SHA256 on this tenant; hashes are lowercase hex as stored by the agent.
- PowerQuery assumes: Retention in the data lake may be shorter than the 90 day CQL window.
// HUNT: SafePay published SHA256 hashes // MITRE: T1486, T1204.002 // CONF: high FP: low COST: low // REQUIRES: ProcessRollup2 / PeFileWritten / NewExecutableWritten // LOOKBACK: 90d (set with the console time picker) // FALSE POSITIVES: none expected for exact SHA256 matches // TUNING: none required. A miss is not clearance because hashes change per build. #event_simpleName=/^(ProcessRollup2|PeFileWritten|NewExecutableWritten)$/ | in(field=SHA256HashData, values=["a0dc80a37eb7e2716c02a94adc8df9baedec192a77bde31669faed228d9ff526", "327b8b61eb446cc4f710771e44484f62b804ae3d262b57a56575053e2df67917", "fd509df74a8d6a9e96762337efd46280ebf8d154c6c5dfbac7b3e8f7bb61f191", "625abbf876f256662f33a88c122bf787edf74b882c35adbd61562b5bd1b2ac27", "921df888aaabcd828a3723f4c9f5fe8b8379c6b7067d16b2ea10152300417eae", "22df7d07369d206f8d5d02cf6d365e39dd9f3b5c454a8833d0017f4cf9c35177", "12139246b8c5232d6d074df37acddc20f0bc233e42ed8eb00dfe2af5d3de3275", "241c3b02a8e7d5a2b9c99574c28200df2a0f8c8bd7ba4d262e6aa8ed1211ba1f", "654c11935448b3229434ec7d9d165a5f135ae4735d35700cffcb3b84f6a0fbc3", "961346470d15d7795c5e35bc90c17d293fba7a8b811f8f5c26a3dc7c971cdc4e", "6c1d36df94ebe367823e73ba33cfb4f40756a5e8ee1e30e8f0ae55d47e220a6a", "e79608cf1d6b51324c14bef8883054c1238ed5f080222cc464810e6e14adc346"]) | table([@timestamp, ComputerName, UserName, FileName, ImageFileName, SHA256HashData], limit=200)
3 required fields · View requirements
Required telemetry
- SentinelOne endpoint File Creation, File Modification and Module Load events
Required fields
event.type: Event typetgt.file.sha256: Written file hashmodule.sha256: Loaded module hash
Recommended fields
event.time: Event timeendpoint.name: Hostsrc.process.name: Acting processtgt.file.path: Written file pathmodule.path: Loaded module path
Fallbacks
endpoint.name→agent.uuid: Changes the displayed host identifier only.
Readiness test
event.type = 'File Creation' tgt.file.sha256 = * | limit 5 | columns event.time, endpoint.name, event.type, tgt.file.path, tgt.file.sha256, module.sha256
// HUNT: SafePay published SHA256 hashes
// SCHEMA PROFILE: sentinelone-endpoint-ocsf
// MITRE: T1486, T1204.002
// CONF: high | FP: low
// FALSE POSITIVES: none expected for exact SHA256 matches
// EQUIVALENCE: telemetry-gap - Partial pivot only: hashes are matched on files written (tgt.file.sha256) and on module loads (module.sha256). The CQL also matched the hash of every started process; that arm (tgt.process.image.sha256 on Process Creation) is not included in this tab, so executables that ran without being written or loaded in the window are not covered.
// REQUIRES: SentinelOne endpoint File Creation, File Modification and Module Load events with SHA256
// TUNING: None required. A miss is not clearance because hashes change per build.
// LOOKBACK: 90d
// CONFIGURATION: No custom detection rule or lookup table required; run in the PowerQuery editor with the console time picker set to 90d where retention allows.
// KNOWN GAPS: Process-creation image hashes are not matched in this tab, so a SafePay binary that ran without a file write or module load event in the window is missed. Hunt it on the CQL tab, or use the SentinelOne threat and hash-reputation views.
// VALIDATION LEVEL: static-reviewed
(event.type in ('File Creation', 'File Modification') tgt.file.sha256 in ('a0dc80a37eb7e2716c02a94adc8df9baedec192a77bde31669faed228d9ff526', '327b8b61eb446cc4f710771e44484f62b804ae3d262b57a56575053e2df67917', 'fd509df74a8d6a9e96762337efd46280ebf8d154c6c5dfbac7b3e8f7bb61f191', '625abbf876f256662f33a88c122bf787edf74b882c35adbd61562b5bd1b2ac27', '921df888aaabcd828a3723f4c9f5fe8b8379c6b7067d16b2ea10152300417eae', '22df7d07369d206f8d5d02cf6d365e39dd9f3b5c454a8833d0017f4cf9c35177', '12139246b8c5232d6d074df37acddc20f0bc233e42ed8eb00dfe2af5d3de3275', '241c3b02a8e7d5a2b9c99574c28200df2a0f8c8bd7ba4d262e6aa8ed1211ba1f', '654c11935448b3229434ec7d9d165a5f135ae4735d35700cffcb3b84f6a0fbc3', '961346470d15d7795c5e35bc90c17d293fba7a8b811f8f5c26a3dc7c971cdc4e', '6c1d36df94ebe367823e73ba33cfb4f40756a5e8ee1e30e8f0ae55d47e220a6a', 'e79608cf1d6b51324c14bef8883054c1238ed5f080222cc464810e6e14adc346')) or (event.type = 'Module Load' module.sha256 in ('a0dc80a37eb7e2716c02a94adc8df9baedec192a77bde31669faed228d9ff526', '327b8b61eb446cc4f710771e44484f62b804ae3d262b57a56575053e2df67917', 'fd509df74a8d6a9e96762337efd46280ebf8d154c6c5dfbac7b3e8f7bb61f191', '625abbf876f256662f33a88c122bf787edf74b882c35adbd61562b5bd1b2ac27', '921df888aaabcd828a3723f4c9f5fe8b8379c6b7067d16b2ea10152300417eae', '22df7d07369d206f8d5d02cf6d365e39dd9f3b5c454a8833d0017f4cf9c35177', '12139246b8c5232d6d074df37acddc20f0bc233e42ed8eb00dfe2af5d3de3275', '241c3b02a8e7d5a2b9c99574c28200df2a0f8c8bd7ba4d262e6aa8ed1211ba1f', '654c11935448b3229434ec7d9d165a5f135ae4735d35700cffcb3b84f6a0fbc3', '961346470d15d7795c5e35bc90c17d293fba7a8b811f8f5c26a3dc7c971cdc4e', '6c1d36df94ebe367823e73ba33cfb4f40756a5e8ee1e30e8f0ae55d47e220a6a', 'e79608cf1d6b51324c14bef8883054c1238ed5f080222cc464810e6e14adc346'))
| columns event.time, endpoint.name, event.type, src.process.name, tgt.file.path, tgt.file.sha256, module.path, module.sha256
| limit 200Detection Rules by Platform
All IOA candidates ship as Detect. The behaviors match legitimate Windows tools, so none are recommended for Prevent. Promote only after a clean baseline.
CrowdStrike: Custom IOA
| IOA | Pattern | Exclusions | Path |
|---|---|---|---|
| SafePay encryptor flags | Process CommandLine matches \s-pass=\S+ and one of -path=, -enc=, -network, -netdrive, -uac, -selfdelete (Q1) | None expected | Detect only |
| Recovery inhibition | vssadmin / wmic / bcdedit arguments in Q3 | Backup service account, imaging hosts | Detect only (legitimate tools) |
| ShareFinder | CommandLine contains Invoke-ShareFinder or ShareFinder.ps1 (Q7) | Authorised assessment hosts | Detect |
| Defender tamper | SystemSettingsAdminFlows.exe or Set-MpPreference -Disable* (Q4) | Lab hosts | Detect |
prevent. Every other indicator is detect.SentinelOne: custom detection rules
| Rule | Source query | Run as | Notes |
|---|---|---|---|
| SafePay encryptor flags | Q1, PowerQuery tab | Scheduled custom detection rule | Bind entities so the alert names the host instead of "Unknown Device". This pack's own text mentions a baseline or pilot; follow it as written |
| Recovery inhibition | Q3, PowerQuery tab | Scheduled custom detection rule | Bind entities so the alert names the host instead of "Unknown Device". This pack's own text mentions a baseline or pilot; follow it as written |
| ShareFinder | Q7, PowerQuery tab | Scheduled custom detection rule | Bind entities so the alert names the host instead of "Unknown Device". This pack's own text mentions a baseline or pilot; follow it as written |
| Defender tamper | Q4, PowerQuery tab | Scheduled custom detection rule | Bind entities so the alert names the host instead of "Unknown Device". This pack's own text mentions a baseline or pilot; follow it as written |
Create the rule with POST /web/api/v2.1/cloud-detection/rules, queryType: "scheduled" and queryLang: "2.0", with the query in data.scheduledParams.query. Use 2.0 operator spellings: a rule written with the 1.0 token ContainsCIS was accepted and never fired on a tenant. The API does not warn, so lint the body before deploying.
Machine-Readable IOC Appendix
Grouped IOC Quick-Copy
One-click blocks. Every atomic indicator in the CSV traces to a saved source snapshot. Only the two multi-source hashes are set to prevent.
type,value,action,severity,expiration,description,tags sha256,a0dc80a37eb7e2716c02a94adc8df9baedec192a77bde31669faed228d9ff526,prevent,critical,2027-10-08,SafePay encryptor sample,campaign:SafePay sha256,327b8b61eb446cc4f710771e44484f62b804ae3d262b57a56575053e2df67917,prevent,high,2027-10-08,SafePay sample,campaign:SafePay sha256,fd509df74a8d6a9e96762337efd46280ebf8d154c6c5dfbac7b3e8f7bb61f191,detect,medium,2027-04-08,SafePay sample (ThreatLocker),campaign:SafePay sha256,625abbf876f256662f33a88c122bf787edf74b882c35adbd61562b5bd1b2ac27,detect,medium,2027-04-08,SafePay sample (ThreatLocker),campaign:SafePay sha256,921df888aaabcd828a3723f4c9f5fe8b8379c6b7067d16b2ea10152300417eae,detect,high,2027-04-08,soc.dll QDoor loader (SafePay intrusion),campaign:SafePay sha256,22df7d07369d206f8d5d02cf6d365e39dd9f3b5c454a8833d0017f4cf9c35177,detect,medium,2027-04-08,SafePay sample (ThreatLocker),campaign:SafePay sha256,12139246b8c5232d6d074df37acddc20f0bc233e42ed8eb00dfe2af5d3de3275,detect,medium,2027-04-08,SafePay sample (ThreatLocker),campaign:SafePay sha256,241c3b02a8e7d5a2b9c99574c28200df2a0f8c8bd7ba4d262e6aa8ed1211ba1f,detect,medium,2027-04-08,SafePay sample (ThreatLocker),campaign:SafePay sha256,654c11935448b3229434ec7d9d165a5f135ae4735d35700cffcb3b84f6a0fbc3,detect,medium,2027-04-08,SafePay sample (ThreatLocker),campaign:SafePay sha256,961346470d15d7795c5e35bc90c17d293fba7a8b811f8f5c26a3dc7c971cdc4e,detect,medium,2027-04-08,SafePay sample (ThreatLocker),campaign:SafePay sha256,6c1d36df94ebe367823e73ba33cfb4f40756a5e8ee1e30e8f0ae55d47e220a6a,detect,medium,2027-04-08,RunPE bundled DLL (SafePay intrusion),campaign:SafePay sha256,e79608cf1d6b51324c14bef8883054c1238ed5f080222cc464810e6e14adc346,detect,medium,2027-04-08,Injected PE (SafePay intrusion),campaign:SafePay sha1,07353237350c35d6dc2c8f143b649cd07c71f62b,detect,medium,2027-04-08,SafePay 1.exe ransomware binary,campaign:SafePay md5,d1f621b82822b544153f6b531e51a611,detect,low,2027-04-08,SafePay sample MD5,campaign:SafePay ipv4,88.119.167.239,detect,high,2027-01-08,SafePay reported C2 or exfil server,campaign:SafePay ipv4,45.91.201.247,detect,medium,2027-01-08,SafePay reported C2 or exfil server,campaign:SafePay ipv4,77.37.49.40,detect,medium,2027-01-08,SafePay reported C2 or exfil server,campaign:SafePay ipv4,80.78.28.63,detect,medium,2027-01-08,SafePay reported C2 or exfil server,campaign:SafePay
This pack does not ship a SentinelOne import block: the import format could not be verified against SentinelOne's own documentation. Export a sample from your console and the block can be added with confidence.
regsvr32.exe / rundll32.exe / any process: CommandLine has -pass= plus -path= | -enc= | -network | -netdrive | -uac | -selfdelete regsvr32.exe /n /i: with a DLL in ProgramData, Temp, Public (legitimate binary: hunt the arguments only) vssadmin delete shadows | wmic shadowcopy delete | bcdedit recoveryenabled no | bootstatuspolicy ignoreallfailures SystemSettingsAdminFlows.exe or Set-MpPreference -Disable* before encryption DllHost.exe as parent of cmd / powershell / regsvr32 / rundll32 (COM UAC bypass) Invoke-ShareFinder / ShareFinder.ps1 in PowerShell command lines WinRAR a -v5g ... against \\host\C$\Users, then FileZilla or Rclone, then removal of the tool net/sc stop of vss, sql, veeam, backup, sophos services in a short burst One account RDP (LogonType 10) to 4+ distinct hosts in 24h wevtutil cl Security / Clear-EventLog outside change windows Files named readme_safepay.txt, extension .safepay
readme_safepay.txt # ransom note *.safepay # encrypted file extension ShareFinder.ps1 # share discovery (PowerTools / PowerView lineage) soc.dll # QDoor loader, DllRegisterServer export locker.dll # encryptor DLL run via regsvr32 (CloudSEK / Huntress) 1.exe # encryptor pushed to servers (NCC Group) C:\ProgramData\<digit>.bat # operator batch files SystemSettingsAdminFlows.exe # abused to disable Defender (legitimate binary) WinRAR.exe, 7-Zip, FileZilla, rclone.exe # staging and exfil (hunt, do not block by name) ScreenConnect Client service # persistence (NCC Group) Global\DB1D-19B4-5094-D570-9841-E4BC-8ABD-29AA-03BB-84AD-C61B-1355-4FF2-194B-96BD-7E49 Global\347F-7B6B-6AFB-3C55-2602-369D-65B9-58A0-16F1-0F42-35DA-0B37-52C3-293C-8975-CAB4 Global\622D-BA6A-4BE9-5D15-5C84-898C-1760-4BAF-2BB1-D7D1-389D-6C01-AAFC-1645-BB6E-DC88 Global\A8D1-50A2-679B-3D55-D639-9810-8679-7409-02EC-EF50-EA87-5641-0086-74B7-A14E-EE4C
# Verify Defender tamper protection and ASR state (read-only) Get-MpComputerStatus | Select-Object IsTamperProtected, RealTimeProtectionEnabled Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Actions # Remote access exposure Get-NetFirewallRule -DisplayName "Remote Desktop*" | Select-Object DisplayName, Enabled, Profile # VPN: confirm no local or LDAP group bypasses MFA (gateway console)
Detection Validation Gates
| Gate | Requirement | Evidence |
|---|---|---|
| 1 · Telemetry ready | Process creation with command line, user logons and network connections flowing (Falcon: ProcessRollup2, UserLogon, NetworkConnectIP4); VPN, M365 and hypervisor logs forwarded to a log store | 7 day event volume per source |
| 2 · Benign baseline | Run Q1 to Q14 in hunt mode for 7 days; catalogue sanctioned RMM, Rclone/FileZilla users, backup accounts, patch windows | Per-query exclusion list |
| 3 · Positive tests | In a lab, run a harmless binary with -pass=x -path=C:\test, vssadmin list shadows equivalents, a test Set-MpPreference change on a throwaway VM | Q1, Q4 fire as expected |
| 4 · Promotion | Promote IOA candidates after 0 unexplained hits over the baseline window; keep all behavior-on-legitimate-tool IOAs at Detect | Change record |
Hardening: Tiered & Deployable
Controls are tied to the access paths in the sources, not to a generic ransomware list. MITRE mitigations in italics; platform guidance named per control.
- Phishing-resistant MFA on every VPN, RDP gateway and remote-management login, and close the local-account bypass. NCC Group's intrusion came from a FortiGate policy that let local accounts skip MFA. Audit gateway auth policy; no local or LDAP-group path may authenticate without MFA. *M1032, M1042. CIS Controls v8 6.3/6.4; vendor firewall hardening guide.*
- Remove direct RDP exposure and require NLA. Put RDP behind a gateway or jump host. *M1035, M1042. CIS Windows Benchmark (Remote Desktop Services).*
- Enable Defender tamper protection and Falcon uninstall/tamper protection, so a signed-in admin cannot disable the sensor or Defender. *M1024, M1038. Microsoft Defender documentation.*
- Confirm backups are immutable and offline-tested, with backup consoles outside the domain admin trust path. *M1053. CIS Controls v8 11.*
- Reset and monitor leaked credentials (infostealer and breach exposure). CloudSEK links infostealer infections to 20.5% of SafePay victims with a known domain. *M1027, M1017.*
- Enable ASR rules in audit, then block the safe ones: advanced ransomware protection and LSASS credential theft move to Block after a clean audit. The PsExec/WMI process-creation rule stays in Audit permanently as a telemetry source, because PsExec is a legitimate admin tool and is never blocked here. *M1040. Microsoft ASR documentation.*
- Restrict external Teams access and Quick Assist to approved users to blunt the help-desk lure. *M1017, M1042. Microsoft Teams external access guidance.*
- Application control on servers for unapproved archivers, FileZilla, Rclone and unsanctioned RMM. Control by policy and publisher; do not rely on blocking stock Windows binaries. *M1038. CIS Controls v8 2.5.*
- LAPS and tiered admin accounts: domain admin credentials must not be usable on workstations or by remote tools. *M1026, M1018. Microsoft privileged access model.*
- Enable command-line process auditing and larger Security log retention so Q1 to Q12 have data and log clearing is visible. *M1047. CIS Windows Benchmark (Audit Policy).*
- Harden the hypervisor tier: dedicated management network, hypervisor lockdown, MFA-backed identity not tied to the production domain. NCC Group and Halcyon report hypervisors encrypted. *M1030, M1032. Hypervisor vendor hardening guide (not a formal benchmark here: best-practice).*
- Segment so a VPN user cannot reach every share and server, and restrict SMB admin shares between server tiers. *M1030. CIS Controls v8 12.*
- Ingest VPN, M365 and hypervisor logs into the same hunting platform to close the native-hunt gaps. *M1047.*
Deployable Playbooks
PB1 · Defender attack surface reduction (audit first)
Prerequisites: Defender is the active AV, local admin, Intune or GPO not already managing ASR. Reboot required: no. Rollback: set the rule action back to Disabled (0) or remove it with Remove-MpPreference.
# Audit mode first. After a clean 14 days, move ONLY the ransomware and LSASS rules to Block. # The PsExec/WMI rule stays in Audit (PsExec is a legitimate admin tool). Add-MpPreference -AttackSurfaceReductionRules_Ids d1e49aac-8f56-4280-b9ba-993a6d77406c -AttackSurfaceReductionRules_Actions AuditMode # PsExec and WMI process creation Add-MpPreference -AttackSurfaceReductionRules_Ids c1db55ab-c21a-4637-bb3f-a12568109d35 -AttackSurfaceReductionRules_Actions AuditMode # advanced ransomware protection Add-MpPreference -AttackSurfaceReductionRules_Ids 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 -AttackSurfaceReductionRules_Actions AuditMode # LSASS credential theft # Verify Get-MpPreference | Select-Object AttackSurfaceReductionRules_Ids, AttackSurfaceReductionRules_Actions # Rollback # Remove-MpPreference -AttackSurfaceReductionRules_Ids <rule-guid>
PB2 · Restrict RDP to a jump-host range and require NLA
Prerequisites: confirm the jump-host subnet (the example uses the documentation range 192.0.2.0/24, replace it) and that you have console access. Reboot required: no. Rollback: remove the rule and set UserAuthentication back to its prior value.
# Require Network Level Authentication Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 1 # Allow RDP only from the jump-host range (replace the example range) New-NetFirewallRule -DisplayName 'RDP from jump hosts only' -Direction Inbound -Protocol TCP -LocalPort 3389 -RemoteAddress 192.0.2.0/24 -Action Allow Set-NetFirewallRule -DisplayGroup 'Remote Desktop' -Enabled False # Verify Get-NetFirewallRule -DisplayName 'RDP from jump hosts only' | Get-NetFirewallAddressFilter # Rollback # Remove-NetFirewallRule -DisplayName 'RDP from jump hosts only'; Set-NetFirewallRule -DisplayGroup 'Remote Desktop' -Enabled True
PB3 · Command-line auditing and Security log size
Prerequisites: local admin; storage headroom for a larger Security log. Reboot required: no. Rollback: set ProcessCreationIncludeCmdLine_Enabled to 0 and restore the previous log size.
auditpol /set /subcategory:"Process Creation" /success:enable New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' -Force | Out-Null Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' -Name ProcessCreationIncludeCmdLine_Enabled -Value 1 -Type DWord wevtutil sl Security /ms:1073741824 # Verify auditpol /get /subcategory:"Process Creation" wevtutil gl Security # Rollback # Set-ItemProperty ... ProcessCreationIncludeCmdLine_Enabled -Value 0; wevtutil sl Security /ms:<previous bytes>
PB4 · Limit external Teams access and Quick Assist
Prerequisites: Teams admin role; business agreement on which partner domains need federation. Reboot required: no. Rollback: set federation back to open and re-add the Quick Assist capability.
# Teams: block unmanaged external federation, then allow-list partners Set-CsTenantFederationConfiguration -AllowFederatedUsers $false # Endpoints: remove Quick Assist where it is not sanctioned Remove-WindowsCapability -Online -Name 'App.Support.QuickAssist~~~~0.0.1.0' # Verify Get-CsTenantFederationConfiguration | Select-Object AllowFederatedUsers Get-WindowsCapability -Online -Name 'App.Support.QuickAssist*' # Rollback # Set-CsTenantFederationConfiguration -AllowFederatedUsers $true # Add-WindowsCapability -Online -Name 'App.Support.QuickAssist~~~~0.0.1.0'
Post-deployment spot-check: re-run Q1 to Q12 over 7 days and confirm the pre-encryption chain would still alert after the ASR rules move to Block.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain affected hosts in Falcon but keep them powered on for memory capture; terminate VPN and RDP sessions; disable compromised and recently reset admin accounts | SOC / IR lead | Containment timestamps; session kill records |
| Isolate: by platform | CrowdStrike: network-contain the host. SentinelOne: network quarantine (Disconnect from Network; confirm the label in your console version). Keep the host powered on for memory capture on all of them. | SOC / IR lead | Containment timestamps; session kill records |
| Eradicate | Remove ScreenConnect/QDoor persistence and operator batch files; reset all credentials the operator touched and revoke tokens (valid credentials survive a rebuild); close the VPN MFA gap; remove staged archives and exfil tools | IR / IT ops | Credential rotation log; service and file removal list |
| Recover | Rebuild affected servers and hypervisors from known-good images; restore from immutable backups; validate before reconnecting; re-enable services in order | IT ops | Restore test results; integrity checks |
| Preserve | Collect VPN logs, Defender operational logs and command history before reimaging | DFIR | Evidence hash list |
| Notify | Engage legal and regulators per double-extortion data-theft obligations; check downstream customers if you are a provider | Legal / leadership | Notification timeline |
| Post-incident | Promote validated detections to IOA; run Q1 to Q14 estate-wide; fix the access path that was used | Detection eng | Lessons-learned record |
Detection Coverage Map
| Technique / behavior | CQL | IOA | CrowdStrike coverage | SentinelOne |
|---|---|---|---|---|
| Encryptor launch flags (T1486, T1218) | Q1, Q2 | Yes | Good | Good, with assumptions |
| Recovery inhibition (T1490) | Q3 | Yes (Detect) | Good | Good, with assumptions |
| Defender tamper (T1562.001) | Q4 | Yes | Partial | Partial: same limit as CrowdStrike |
| Log clearing (T1070.001) | Q5 | No | Partial | Partial: same limit as CrowdStrike |
| COM UAC bypass (T1548.002) | Q6 | No | Partial: CLSID not sourced | Partial: same limit as CrowdStrike |
| Share discovery (T1135) | Q7 | Yes | Good | Good, with assumptions |
| Archive staging (T1560.001) | Q8 | No | Partial | Partial: same limit as CrowdStrike |
| Exfil tooling (T1048) | Q9 | No | Partial: sanctioned-use overlap | Partial: same limit as CrowdStrike |
| Remote tools (T1219) | Q10 | No | Partial | Partial: same limit as CrowdStrike |
| Service and EDR kill (T1489) | Q11 | No | Partial: EDR-kill is single-sourced | Partial: same limit as CrowdStrike |
| RDP fan-out (T1021.001) | Q12 | No | Partial | Partial: Q12 approximate |
| Known C2 / hashes | Q13, Q14 | IOC Mgmt | Good, perishable | Partial: Q14 telemetry gap |
| Token impersonation / SeDebugPrivilege (T1134.001) | None | No | GAP: no Falcon event | GAP |
| Ransom note and .safepay file writes | None | No | GAP: no CQL shipped, use N8 and Falcon ransomware prevention | GAP |
| Hypervisor encryption | None | No | GAP: native hypervisor logs | GAP |
| VPN MFA bypass, Teams lure | None | No | GAP: outside Falcon, N1/N4 | GAP |
Validation gates (s11) apply: baseline for 7 days before promoting any IOA.
Hunt Summary Ticket
TITLE: SafePay Ransomware: Windows Endpoint Hunt (VPN/RDP credential entry to encryption)
SEVERITY: HIGH (active double-extortion operation)
SCOPE: Windows endpoints and servers, AD/identity, VPN gateways, M365 Teams, hypervisors
HYPOTHESIS: An operator with valid VPN/RDP credentials is staging (ShareFinder, archive, exfil,
Defender tamper) ahead of an encryptor launched with -pass= plus path/enc flags.
QUERIES RUN: Q1 launch flags | Q2 regsvr32 DLL | Q3 recovery | Q4 Defender | Q5 log clear |
Q6 COM UAC | Q7 ShareFinder | Q8 archive | Q9 exfil | Q10 RMM | Q11 svc stop |
Q12 RDP fan-out | Q13 C2 IPs | Q14 hashes (+10 native hunts)
DATA SOURCES: Process creation, user logons, network connections and PE file writes (Falcon: ProcessRollup2, UserLogon, NetworkConnectIP4, PeFileWritten); VPN, M365,
hypervisor logs (native)
FINDINGS: <pending analyst execution>
GAPS: Token impersonation, ransom-note file writes, hypervisor and VPN/Teams stages have
no endpoint query. The 1,300% growth claim in the request is unverified.
ACTIONS: MFA on all remote paths incl. local accounts; tamper protection; ASR audit-to-block;
promote Q1, Q3, Q7 to Custom IOA (Detect only); prevent only the 2 multi-source hashes.
OWNER: HuntPack
VERSION: v0.3 (Draft) - 2026-10-09Changelog
References
| Tier | Source | Used for | Accessed |
|---|---|---|---|
| 1 | NCC Group: Weak Passwords Led to (SafePay) Ransomware | Incident, IOCs, arguments, commands | 2026-10-08 |
| 1 | Bitdefender: SafePay, a Non-RaaS Group | Profile, TTPs, hashes | 2026-10-08 |
| 2 | ThreatLocker: SafePay ransomware explained | Hashes, mutexes, TTPs | 2026-10-08 |
| 2 | Xcitium ThreatLabs: SafePay technical analysis | CMSTPLUA, IPs, TTPs | 2026-10-08 |
| 2 | Halcyon: SafePay threat group | TTP list, IPs, 2026 activity | 2026-10-08 |
| 2 | Red Piranha: What is SafePay Ransomware | DllHost pattern, IPs | 2026-10-08 |
| 2 | CloudSEK: SafePay Ransomware guide | Huntress case, regsvr32 pattern, victim counts | 2026-10-08 |
| 2 | Picus Labs: Inside SafePay | Command lines, kill lists | 2026-10-08 |
| 2 | Blackpoint Cyber: SafePay threat profile | ATT&CK list, lineage | 2026-10-08 |
HuntPack v0.3 (Draft) · SafePay Ransomware · Generated 2026-10-09 · Defensive use only. No exploit code or encryptor internals. Contains no victim, company or environment-specific identifiers. Validate field names and tune exclusions in your own tenant before promoting any query to alerting.