Qilin (Agenda) — Ransomware-as-a-Service Hunt & Hardening Pack
Executive Summary
Qilin (aka Agenda) is a Russian-speaking double-extortion RaaS and, per MOXFIVE, the most active ransomware operation of 2026 — ~1,500 victims to date and 500+ in 2026 alone, on an affiliate model paying 80–85%. Affiliates favor edge access: compromised/brute-forced FortiGate & SSL-VPN credentials, Veeam Backup & Replication exploitation (CVE-2023-27532, CVE-2024-40711) to dump stored credentials, ScreenConnect/RMM phishing, and — in June 2026 — a Qilin affiliate was tied to the Check Point VPN zero-day (CVE-2026-50751).
Post-access the playbook is consistent: AD reconnaissance (Get-ADComputer, net group "Domain Admins", nltest /dclist), embedded Mimikatz targeting lsass.exe/winlogon.exe/wininit.exe, defense evasion via systematic event-log clearing and service/process termination, and a tell-tale fsutil behavior set SymlinkEvaluation R2R:1 R2L:1. The encryptor (w.exe, run from C:\temp with a SHA-256 password argument from a .conf) self-propagates via an embedded PsExec v2.43 (randomized filename, -accepteula \\HOST -c -f -h -d) and a -spread-vcenter option, sets MaxMpxCt=65535, destroys backups (delete tape jobs, vssadmin delete shadows /all /quiet, reboot backup/VPN servers), and encrypts with AES-256-CTR or ChaCha20 + RSA-4096.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry |
|---|---|---|---|
| 1 · Vendor research | Picus — Qilin Ransomware Analysis | Full chain: Veeam/VPN access, Mimikatz, log-clearing thread, PsExec spread (-accepteula/-spread-vcenter), VSS deletion, AES/ChaCha encryptor, fsutil symlink-eval | yes |
| 1 · Vendor research | MOXFIVE — Qilin 2026 TTPs & Victims | ~1,500 victims / 500+ in 2026 (most active); VPN + phishing access; affiliate split | yes |
| 2 · Vendor | SANS / Dexpose / CyberEspionage | Agenda lineage, w.exe execution, .conf password arg, MaxMpxCt, RaaS structure | yes |
| 1 · Cross-pack intel | Help Net / BleepingComputer — Check Point CVE-2026-50751 | June-2026 Qilin affiliate tied to Check Point VPN zero-day (new initial-access vector) | yes |
Decisions: behavior-first across the kill chain (the affiliate model means atomic IOCs vary per intrusion); fold in the June-2026 Check Point VPN initial-access vector (cross-references the CVE-2026-50751 pack); lead defenses with Veeam patching + VPN MFA + immutable backups, since the destructive phase is fast once inside.
Hunt Brief & Attack Chain
Working hypothesis: An affiliate enters via VPN/Veeam, performs AD recon from the beachhead, dumps credentials with Mimikatz, clears logs and kills defenses, propagates the encryptor via PsExec/vCenter, destroys backups, then encrypts — typically within hours to days.
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Initial access | FortiGate/VPN creds; Veeam CVE-2023-27532/CVE-2024-40711; Check Point CVE-2026-50751; ScreenConnect phishing | VPN/Veeam logs; UserLogon | N1, N2 |
| 2 · AD recon | Get-ADComputer, net group "Domain Admins", nltest /dclist | ProcessRollup2 | Q1 |
| 3 · Cred access | Embedded Mimikatz → lsass/winlogon/wininit | ProcessRollup2 | Q6 |
| 4 · Defense evasion | Event-log clearing; service/process kill; fsutil … SymlinkEvaluation R2R:1 R2L:1 | ProcessRollup2 | Q4 / Q5 |
| 5 · Lateral / spread | Embedded PsExec v2.43 (-accepteula \\HOST -c -f -h -d); MaxMpxCt=65535; -spread-vcenter | ProcessRollup2, registry | Q2 / Q7 |
| 6 · Backup destruction | Delete tape jobs; vssadmin delete shadows /all /quiet; reboot backup/VPN servers | ProcessRollup2 | Q3 |
| 7 · Encrypt | w.exe from C:\temp w/ SHA-256 password arg; AES-256-CTR / ChaCha20 + RSA-4096; cipher /w | ProcessRollup2 | Q7 |
Affected surface & telemetry
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Edge appliances (Fortinet/Check Point) + Veeam | VPN/appliance + Veeam logs to SIEM | Critical | High — appliance logs often unforwarded |
| Windows endpoints / DCs | Process lineage + command line (ProcessRollup2) | Critical | Low — standard sensor |
| Backup & virtualization (Veeam / vCenter) | Server process + admin-action logs | High | Medium — ensure servers are sensored |
| LSASS credential theft | Process access to lsass; Falcon Identity Protection | High | Low — high-fidelity |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| Behavior | fsutil behavior set SymlinkEvaluation R2R:1 R2L:1 | high | detect | Tell-tale Qilin evasion config |
| Behavior | embedded PsExec (random name) -accepteula \\HOST -c -f -h -d | high | detect | Encryptor self-propagation |
| Behavior | vssadmin delete shadows /all /quiet + reboot backup/VPN servers | high | detect | Backup destruction — impact imminent |
| Behavior | w.exe from C:\temp with SHA-256 password arg / -spread-vcenter | high | detect | Encryptor execution |
| CVE | CVE-2023-27532 · CVE-2024-40711 · CVE-2026-50751 | high | detect | Veeam + Check Point VPN initial access |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1190 / T1133 / T1078 — Exploit public app / external VPN / valid accounts | Veeam CVE, FortiGate/Check Point VPN, brute force | N1, N2; patch |
| Discovery | T1087.002 / T1018 / T1482 — AD account / system / trust discovery | Get-ADComputer, net group, nltest | Q1 |
| Credential Access | T1003.001 — LSASS Memory (Mimikatz) | lsass/winlogon/wininit token theft | Q6 |
| Defense Evasion | T1070.001 — Clear Windows Event Logs | Get-WinEvent/wevtutil log clearing | Q4 |
| Defense Evasion | T1562.001 / T1222 — Disable tools / symlink-eval | Service kill; fsutil SymlinkEvaluation R2R/R2L | Q5 |
| Lateral Movement | T1021.002 / T1570 — SMB admin shares / tool transfer | Embedded PsExec; -spread-vcenter | Q2, Q7 |
| Impact | T1490 — Inhibit System Recovery | vssadmin delete shadows; tape-job deletion; reboots | Q3 |
| Impact | T1486 — Data Encrypted for Impact | w.exe AES-256-CTR / ChaCha20 + RSA-4096; cipher /w | Q7 |
Native Audit-Log Hunts
| Hunt | Source | Logic | Response |
|---|---|---|---|
| N1 · VPN/Veeam access anomaly | FortiGate/Check Point VPN + Veeam logs | VPN brute-force / new-geo logon; Veeam credential-DB access (CVE-2023-27532); CVE-2026-50751 indicators | Patch; reset appliance + stored creds; hunt the host |
| N2 · Interactive logon from VPN pool → recon | Windows Security 4624/4672 | Interactive logon from a VPN-assigned IP followed within ~60 min by AD discovery | Isolate beachhead; escalate (pairs with Q1) |
| N3 · Event-log clears | Security 1102 / System 104 | Audit-log cleared on endpoints/DCs (pre/post-encryption) | Treat as active intrusion; preserve forwarded logs |
| N4 · Backup-job tampering | Veeam / backup-appliance logs | Backup/tape jobs disabled or deleted; backup server reboot | Isolate backups; verify immutability; escalate |
CrowdStrike LogScale CQL Hunt Queries
SyntheticProcessRollup2. Q1/Q2 require an env edit (your VPN CIDRs / deploy allow-list). Run 30–90 days for historical sweeps — dwell can be days to weeks.Looks for: built-in AD enumeration post-compromise. Accomplishes: earliest reliable signal — pair with an interactive VPN logon (N2). FP: sysadmin/helpdesk scripts — allow-list admin AIDs / PAW.
// HUNT: Qilin AD discovery (T1087.002 / T1018 / T1482) // CONF: medium FP: medium COST: low | TIMEFRAME: last 7d // FP NOTES: net.exe by admins from PAW/JIT; nltest in AD health scripts #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | in(field=FileName, values=["net.exe","net1.exe","nltest.exe","dsquery.exe","adfind.exe","whoami.exe"], ignoreCase=true) | CommandLine=/(group\s+"?Domain Admins"?|group\s+"?Enterprise Admins"?|\/dclist|\/domain_trusts|Get-ADComputer|Get-ADUser)/i | groupBy([aid, ComputerName, UserName], function=[count(), collect([FileName, CommandLine], limit=20)]) | sort(_count, order=desc)
Looks for: the embedded-PsExec command pattern (randomized binary name, UNC target, copy-and-run flags). Accomplishes: catches the encryptor spreading over SMB — impact imminent. FP: sanctioned PsExec deploys — allow-list known admin tooling/AIDs.
// HUNT: Qilin encryptor self-propagation via embedded PsExec (T1021.002, T1570) // CONF: high FP: low COST: low | ENV EDIT: allow-list sanctioned PsExec admin AIDs #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/-accepteula\s+\\\\[^\s]+\s+-c\s+-f\s+-h\s+-d/i | table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, CommandLine], limit=200) | sort(@timestamp, order=desc)
Looks for: VSS deletion / recovery-inhibition commands. Accomplishes: the "impact imminent" signal — escalate immediately. FP: rare admin maintenance — alert regardless and verify.
// HUNT: Qilin recovery inhibition (T1490) // CONF: high FP: low COST: low #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/vssadmin(\.exe)?\s+delete\s+shadows|wmic\s+shadowcopy\s+delete|win32_shadowcopy.{0,20}delete|bcdedit.{0,40}recoveryenabled\s+no|wbadmin\s+delete\s+catalog|cipher\s+\/w:/i | table([@timestamp, aid, ComputerName, UserName, FileName, CommandLine], limit=200) | sort(@timestamp, order=desc)
Looks for: bulk event-log clearing via wevtutil/Get-WinEvent/Clear-EventLog. Accomplishes: catches the forensic-obstruction stage. FP: very rare legit clears — alert and verify.
// HUNT: Qilin event-log clearing (T1070.001) // CONF: high FP: low COST: low | pair with native Security 1102 / System 104 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/(wevtutil(\.exe)?\s+(cl|clear-log)|Clear-EventLog|Get-WinEvent.{0,40}-ListLog.{0,40}(ClearLog|RecordCount)|Limit-EventLog.{0,20}-OverflowAction)/i | table([@timestamp, aid, ComputerName, UserName, CommandLine], limit=200)
Looks for: fsutil behavior set SymlinkEvaluation R2R:1 / R2L:1 — a tell-tale Qilin step. Accomplishes: high-fidelity, near-zero FP. FP: none expected — alert on any hit.
// HUNT: Qilin enabling remote symlink evaluation (T1222 / evasion) // CONF: high FP: low COST: low #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/fsutil\s+behavior\s+set\s+SymlinkEvaluation\s+R2(R|L):1/i | table([@timestamp, aid, ComputerName, UserName, CommandLine, ParentBaseFileName], limit=200)
Looks for: comsvcs.dll MiniDump of LSASS or Mimikatz-style command lines. Accomplishes: the credential-theft stage. FP: some IR/EDR tooling dumps LSASS — allow-list sanctioned tools. (Falcon CredTheft IOAs also fire here.)
// HUNT: Qilin LSASS credential theft (T1003.001) // CONF: high FP: low-med COST: low | TUNING: allow-list sanctioned IR/EDR dumpers #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/(comsvcs\.dll.{0,20}MiniDump|sekurlsa|lsadump|privilege::debug|rundll32.{0,30}lsass|procdump.{0,20}lsass|nanodump)/i | table([@timestamp, aid, ComputerName, UserName, FileName, CommandLine], limit=200)
Looks for: the encryptor binary from C:\temp, its -spread-vcenter flag, or the MaxMpxCt tuning. Accomplishes: the encryption stage. FP: low — verify any hit immediately.
// HUNT: Qilin encryptor execution / vCenter spread / SMB tuning (T1486, T1570) // CONF: high FP: low COST: low #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | (ImageFileName=/\\(Temp|temp)\\w\.exe$/i or CommandLine=/-spread-vcenter|-no-vm-snapshot|--password\s+[A-Fa-f0-9]{64}/i or CommandLine=/reg(\.exe)?\s+add.{0,40}MaxMpxCt/i) | table([@timestamp, aid, ComputerName, UserName, ImageFileName, CommandLine], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA Name | Field Patterns | Benign Exclusions | Deployment Path |
|---|---|---|---|
| Qilin — recovery inhibition (VSS delete) | CmdLine vssadmin delete shadows / wbadmin delete catalog / cipher /w | Sanctioned backup-maintenance AIDs (rare) | Custom IOA → Process Creation, high severity, Detect+Block |
| Qilin — embedded-PsExec spread | CmdLine -accepteula \\* -c -f -h -d | Allow-list known admin PsExec AIDs | Custom IOA → Process Creation |
| Qilin — fsutil SymlinkEvaluation R2R/R2L | CmdLine fsutil behavior set SymlinkEvaluation R2R:1|R2L:1 | None expected | Custom IOA → Process Creation |
Machine-Readable IOC Appendix
Grouped IOC Quick-Copy
One-click blocks for Falcon IOC Management, detection, and patch audit. Qilin is RaaS — atomic IOCs vary per affiliate; behavior + the access CVEs are durable.
type,value,action,severity,expiration,description,tags sha256,REPLACE_WITH_ENCRYPTOR_SHA256,prevent,critical,2027-06-12,Qilin encryptor (w.exe),campaign:Qilin sha256,REPLACE_WITH_PSEXEC_HASH,detect,high,2027-06-12,Qilin embedded PsExec v2.43 (renamed),campaign:Qilin ipv4,REPLACE_WITH_C2_IP,detect,medium,2026-09-12,Qilin C2 / exfil (per-affiliate),campaign:Qilin
AD recon: net group "Domain Admins" / nltest /dclist / Get-ADComputer (from VPN host, <60min of logon) Mimikatz: comsvcs.dll MiniDump of lsass / sekurlsa / privilege::debug Log clearing: wevtutil cl / Get-WinEvent -ListLog * | clear (Security 1102, System 104) Evasion: fsutil behavior set SymlinkEvaluation R2R:1 R2L:1 Spread: PsExec (random name) -accepteula \\HOST -c -f -h -d ; reg add ... MaxMpxCt 65535 ; -spread-vcenter Recovery inhibition: vssadmin delete shadows /all /quiet ; wbadmin delete catalog ; cipher /w Encrypt: w.exe from C:\temp with 64-hex --password arg ; AES-256-CTR / ChaCha20 + RSA-4096
CVE-2023-27532 # Veeam Backup & Replication — credential retrieval (PRIMARY) CVE-2024-40711 # Veeam Backup & Replication — RCE / cred access CVE-2026-50751 # Check Point VPN — June-2026 Qilin affiliate access (see CVE-2026-50751 pack) # Plus: FortiGate/SSL-VPN brute force; ScreenConnect/RMM phishing (auth-alert lures) # Patch Veeam + FortiOS now; force VPN MFA; immutable/offline backups
w.exe # Qilin encryptor (run from C:\temp, SHA-256 password arg from .conf) PsExec v2.43 # embedded, renamed to a random filename (self-propagation) Mimikatz # embedded credential theft (lsass/winlogon/wininit) net.exe / nltest.exe / Get-ADComputer # AD discovery vssadmin / wbadmin / cipher # backup & recovery destruction # Aliases: Qilin = Agenda = "Hastalamuerte" ; RaaS affiliate split 80-85%
Hardening — Tiered & Deployable
The destructive phase is fast once inside — close the edge front door and make recovery un-destroyable.
- Patch Veeam (CVE-2023-27532, CVE-2024-40711) & FortiOS; verify Check Point CVE-2026-50751 — M1051. Rotate appliance + Veeam-stored credentials.
- Force MFA on all VPN auth (FIDO2 preferred) — M1032. SMS is inadequate against brute force/cookie theft. Rate-limit/geo-fence SSL-VPN logins.
- Immutable / offline backups (3-2-1) — M1053. Not deletable by a Domain Admin credential; isolate the backup server's management plane.
- Enable Falcon Tamper Protection + vulnerable-driver blocklist (HVCI) — M1054 / M1038. Resist service/process kill.
- Falcon Identity Protection — M1047. The built-in-binary AD recon chain lights up identity policies immediately.
- PowerShell ScriptBlock (4104) + Module logging; forward Security 1102 / System 104 — M1040 / M1047. Feeds Q4/N3.
- Restrict ADMIN$/C$ from non-management hosts; monitor remote service creation — M1037 / M1018. Disrupts PsExec spread (Q2).
- LSA Protection (RunAsPPL) + Credential Guard — M1043. Neuters Mimikatz LSASS dumping (Q6).
- Tier 0/1/2 admin model + LAPS — M1026. Limit lateral reach of a stolen Domain Admin credential; Auth Policy Silos for VPN-pool accounts.
- App allowlisting (WDAC/AppLocker); restrict PsExec/RMM to sanctioned IR hosts — M1038. Blocks the encryptor & abused admin tooling.
- Segment backup & virtualization (vCenter) management networks — M1030. Disrupts
-spread-vcenterand backup destruction.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the beachhead + any Q2/Q7 hosts; cut VPN access for the implicated account; isolate backup/vCenter management plane | SOC L2 | Containment timestamps; Q1/Q2 events |
| Triage | Map the AD-recon → Mimikatz → spread timeline; identify compromised accounts; confirm whether VSS/backups were destroyed (Q3/N4) | IR | Process timeline; backup status |
| Eradicate | Kill the encryptor + renamed PsExec; remove persistence; reset all credentials touched (esp. Domain Admin); revoke VPN sessions | IR | Cred-reset log; removed artifacts |
| Recover | Restore from immutable/offline backups; rebuild DCs/backup servers if needed; verify integrity before reconnecting | IR + IT | Restore evidence; integrity checks |
| Harden | Patch Veeam/VPN; force MFA; deploy Q3/Q5/Q7 IOAs in Detect+Block; LSA Protection + immutable backups | Detection Eng | Patch + IOA status |
Detection Coverage Map & Validation
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1190 / T1133 | Veeam/VPN initial access | — | — | GAP patch + appliance/Veeam logs (N1) |
| T1087.002 / T1018 | AD discovery | Q1 | — | Partial needs VPN CIDRs (N2) |
| T1003.001 | Mimikatz LSASS | Q6 | — | Good (+ Falcon CredTheft IOA) |
| T1070.001 | Event-log clearing | Q4 | — | Good (+ 1102/104) |
| T1222 / T1562.001 | SymlinkEval enable / tool kill | Q5 | IOA-3 | Good |
| T1021.002 / T1570 | PsExec / vCenter spread | Q2, Q7 | IOA-2 | Good tune deploy allow-list |
| T1490 | VSS / backup destruction | Q3 | IOA-1 | Good |
| T1486 | Encryption (w.exe) | Q7 | — | Good |
Validation gates: (1) confirm ProcessRollup2 w/ command line on DCs + servers, and forward 1102/104 + Veeam/VPN logs; (2) populate VPN CIDRs (Q1/N2) and PsExec allow-list (Q2); (3) lab-test benign equivalents (a sanctioned vssadmin list, a benign fsutil behavior query) to confirm Q3/Q5 logic without firing on read-only ops; (4) promote Q3/Q5/Q7 to Custom IOA Detect+Block; keep Q1/Q6 Detect with allow-lists.
Hunt Summary Ticket
TITLE: Hunt — Qilin (Agenda) Ransomware-as-a-Service
SEVERITY: Critical (most-active RaaS 2026; double extortion; backup destruction)
SCOPE: FortiGate/Check Point/Veeam-exposed orgs; Windows/AD/ESXi estates
HYPOTHESIS: VPN/Veeam access -> AD recon -> Mimikatz -> log clear + service kill ->
PsExec/vCenter spread -> backup destruction -> w.exe encrypt (double extortion).
DWELL: hours-to-days (hunt 30-90d historical)
QUERIES RUN: Q1 AD recon* | Q2 PsExec spread (IOA) | Q3 VSS/backup destroy (IOA) |
Q4 log clearing | Q5 fsutil SymlinkEval (IOA) | Q6 Mimikatz LSASS |
Q7 encryptor/vCenter spread
(* = requires env edit: VPN CIDRs / PsExec allow-list)
DO FIRST: Q3, Q2, Q5, Q1 — escalate any hit immediately
FINDINGS: <pending analyst execution>
GAPS: T1190/T1133 pre-endpoint (patch + appliance/Veeam logs)
ACTIONS: Patch Veeam/FortiOS/Check Point + VPN MFA; immutable backups; LSA Protection;
deploy Q3/Q5/Q7 IOAs in Detect+Block
OWNER: HuntPack
VERSION: v0.4 - 2026-06-12
Changelog
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.References
| Tier | Source | Used For |
|---|---|---|
| 1 | Picus — Qilin Ransomware Analysis | Full kill-chain TTPs, command patterns, encryptor internals |
| 1 | MOXFIVE — Qilin 2026 TTPs & Victims | Scale (~1,500 / 500+ in 2026), access vectors, affiliate model |
| 2 | SANS — Evolution of Qilin RaaS · Dexpose — Group Profile/TTPs/IOCs | Agenda lineage, RaaS structure, defense guidance |
| 1 | Help Net — Qilin affiliate exploited Check Point VPN (CVE-2026-50751) | June-2026 initial-access vector (cross-pack) |
HuntPack v0.3 · Qilin (Agenda) · Generated 2026-06-12 · Defensive use only — no offensive code. Atomic IOCs vary by affiliate; the behavioral kill-chain detections are the durable signal. Validate field names and tune VPN-CIDR / PsExec allow-lists in your tenant before promoting any query to alerting.