← All hunts medium TLP:CLEAR

Ransomware Recovery Inhibition and Encryption

An adversary is inhibiting system recovery by deleting volume shadow copies using standard tools or scripts before performing mass file encryption with rare extensions.

Based on research by Huntress 2026-10-15 10 steps · 4 queries T1486 T1490

Brief

Recovery Inhibition Correlation

In the recent article Microsoft VSS: Still Essential, But Not the Whole Story (https://www.huntress.com/blog/microsoft-vss-limits-and-best-practices), the team explores the limits of volume shadow copies. Building on those insights, we developed a hunt that focuses on the moment an adversary turns a system's recovery tools against it. An adversary inhibits system recovery by deleting volume shadow copies using standard tools or scripts before performing mass file encryption with rare extensions. This strategy ensures that even if the encryption is detected, the victim cannot simply roll back to a previous state. While VSS is a standard feature of Windows, its fragility makes it a primary target during the impact phase of an intrusion. Detecting the deletion of a shadow copy in isolation often yields too much noise, as backup agents and administrators perform these actions regularly. This hunt solves that by looking for the sequence of inhibition followed by impact.

How the Hunt Flows

The hunt starts by scoping the environment for process activity. The initial query identifies hosts where the adversary is actively dismantling recovery options by looking for specific command-line arguments in vssadmin.exe, wmic.exe, and PowerShell that indicate a delete shadow operation. Once the hunt identifies a potential lead, it fans out to gather corroborating evidence. The second phase monitors for script-based deletions using WMI calls like Win32_ShadowCopy. This catches attackers who avoid the command line by calling the WMI methods directly through script blocks. Simultaneously, the hunt checks for the creation of common ransom notes such as readme.txt or decrypt.txt and calculates a baseline of file rename activity. The final phase of the hunt uses an agent to evaluate the combined evidence. It specifically looks for a high volume of file renames to extensions that are rare across the rest of the fleet. The agent evaluates if the deletion and encryption processes share the same parent or user context, which is a high-confidence indicator of a compromise. It also checks for the prevalence of these actions across the fleet to ensure that a site-wide backup job isn't misidentified as an attack. By matching the process responsible for VSS deletion with the process performing the renames, the hunt distinguishes a live ransomware event from scheduled maintenance. An analyst reviews the cited evidence to confirm the final verdict before initiating isolation.

Blind Spots

This hunt has two primary blind spots. If an adversary uses a custom binary to call VSS APIs directly without using the CLI or script engines, the initial scoping query will not see the activity. Additionally, some endpoint sensors truncate event logs when they detect high-volume file activity. This can mask the full scale of the encryption, though the presence of rare extensions usually remains visible.

Running the Playbook

You can run this hunt as a hunt.md playbook. It imports directly into Huntbase or any other runtime that supports the hunt.md standard. This allows you to parameterize the lookback period and the list of known ransom notes to fit your environment. Because this is a hunt.md playbook, it remains portable. You can run it manually against a single host if you suspect an ongoing incident, or schedule it as a periodic check across your entire estate. The parameters allow you to add custom ransomware extensions or exclude specific administrative accounts that perform legitimate shadow copy deletions.

Steps

  1. Lead: VSS Snapshot Deletion Command

    Query · scoping

    Identify execution of tools known to delete shadow copies by matching binary names and looking for deletion keywords in the command line.

    reads hb_process_activitysql
    SELECT device_hostname, process_name, process_cmd_line, user_name, time FROM hb_process_activity WHERE (instr(',' || '{{vss_tools}}' || ',', ',' || LOWER(process_original_file_name) || ',') > 0 OR instr(',' || '{{vss_tools}}' || ',', ',' || LOWER(process_name) || ',') > 0) AND (instr(LOWER(process_cmd_line), 'delete') > 0 AND instr(LOWER(process_cmd_line), 'shadow') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Rows showing specific hosts and processes attempting shadow copy deletion. Silence suggests no obvious recovery inhibition via command line tools.

  2. Scripted WMI Shadow Copy Deletion

    Query · enrichment

    Find programmatic shadow copy deletion in script blocks that might bypass process monitoring.

    reads hb_script_activitysql
    SELECT device_hostname, script_name, script_content, actor_user_name, time FROM hb_script_activity WHERE (instr(LOWER(script_content), 'win32_shadowcopy') > 0 AND instr(LOWER(script_content), '.delete()') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Script blocks calling the WMI Delete method on shadow objects. Silence proof of absence depends on script block logging coverage.

  3. Ransom Note Creation

    Query · enrichment

    Find creation of files matching a known list of ransom-note names.

    reads hb_file_activitysql
    SELECT device_hostname, file_name, file_path, process_name, time FROM hb_file_activity WHERE instr(',' || '{{ransom_notes}}' || ',', ',' || LOWER(file_name) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Creation of files like readme.txt or decrypt.txt in multiple directories.

  4. Mass Renames to Rare Extensions

    Query · baseline

    Stack-count file renames to identify anomalous volume of extensions that are rare across the fleet.

    reads hb_file_activitysql
    SELECT device_hostname, process_name, actor_user_name AS user_name, LOWER(SUBSTR(file_name, INSTR(file_name, '.') + 1)) AS extension, COUNT(*) AS event_count, MIN(time) AS first_seen FROM hb_file_activity WHERE activity_id = 5 AND file_name LIKE '%.%' AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) GROUP BY device_hostname, process_name, user_name, extension HAVING event_count > 500

    What a hit looks like. A high volume of renames to a single extension that is not common across the fleet.

  5. Evaluate Evidence Triage

    Agent triage

    Determine if recovery inhibition and file activity patterns indicate a ransomware event on a per-host basis.

  6. Route on Verdict

    Decision

    Route the workflow based on the agent's finding of malicious encryption activity.

  7. Isolate Host

    Response action

    Isolate the host to stop the encryption process and prevent lateral movement.

  8. Analyst Review

    Analyst task

    Provide manual oversight for suspicious or indeterminate cases.

  9. Close Out

    Analyst task

    Finalize the hunt when no malicious activity is found.

Coverage

Scenario coverage

StageCoveredHow, or why not
VSS Snapshot Deletion
T1490
Yes vss-deletion-lead, scripted-shadow-deletion
Data Encryption for Impact
T1486
Yes ransom-note-creation, mass-encryption-baseline

Blind spots

  • Needs Direct VSS API monitoring via EDR. Adversaries using custom binaries to call VSS APIs directly will not be caught by command-line based queries. It would answer Was the shadow copy deletion performed using direct API calls rather than command-line tools?.
  • Needs High-fidelity file modification logging. Mass encryption generates thousands of events; sensor-level truncation can mask the scale of the impact. It would answer Did the endpoint sensor truncate high-volume rename events during the encryption phase?.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
lookback_daysnumber14Days of history to examine.
ransom_noteslist[string]readme.txt, decrypt.txt, restore_files.txt, how_to_decrypt.htmlCommon filenames for ransom notes.
scope_hostslist[host]—Optional list of hosts to narrow the investigation.
vss_toolslist[string]vssadmin.exe, wmic.exe, powershell.exe, pwsh.exeBinary names of tools used to delete shadow copies.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: This hunt correlates recovery inhibition across process and script surfaces
  with fleet-wide file activity baselining, providing the context needed to distinguish
  a live intrusion from administrative backup maintenance.
blind_spots:
- id: no-vss-api-telemetry
  question: Was the shadow copy deletion performed using direct API calls rather than
    command-line tools?
  requires: Direct VSS API monitoring via EDR
  risk: Adversaries using custom binaries to call VSS APIs directly will not be caught
    by command-line based queries.
  stage: inhibit-recovery-vss-deletion
- id: event-truncation
  question: Did the endpoint sensor truncate high-volume rename events during the
    encryption phase?
  requires: High-fidelity file modification logging
  risk: Mass encryption generates thousands of events; sensor-level truncation can
    mask the scale of the impact.
  stage: impact-data-encryption
coverage:
- stage: inhibit-recovery-vss-deletion
  status: covered
  steps:
  - vss-deletion-lead
  - scripted-shadow-deletion
- stage: impact-data-encryption
  status: covered
  steps:
  - ransom-note-creation
  - mass-encryption-baseline
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: keep-as-periodic-hunt
  justification: Ransomware recovery depends on VSS integrity; identifying its disruption
    confirms a critical disruption of disaster recovery processes.
  methodology: model-assisted
  trigger: intel-report
hypothesis: An adversary is inhibiting system recovery by deleting volume shadow copies
  using standard tools or scripts before performing mass file encryption with rare
  extensions.
labels:
- hunt
- attack.t1486
- attack.t1490
- impact
name: Ransomware Recovery Inhibition and Encryption
parameters:
  lookback_days:
    default: '14'
    description: Days of history to examine.
    type: number
  ransom_notes:
    default:
    - readme.txt
    - decrypt.txt
    - restore_files.txt
    - how_to_decrypt.html
    description: Common filenames for ransom notes.
    from:
      kind: manual
      observed: '2026-10-14'
      ref: common-ransom-notes
    type: list[string]
  scope_hosts:
    default: []
    description: Optional list of hosts to narrow the investigation.
    type: list[host]
  vss_tools:
    default:
    - vssadmin.exe
    - wmic.exe
    - powershell.exe
    - pwsh.exe
    description: Binary names of tools used to delete shadow copies.
    from:
      kind: article
      observed: '2026-10-14'
      ref: huntress-vss
    type: list[string]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://www.huntress.com/blog/microsoft-vss-limits-and-best-practices
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: Focus on file servers and database servers where VSS snapshots are critical
  for recovery. Start with any host showing vssadmin or wmic deletion activity.
references:
- name: 'Microsoft VSS: Still Essential, But Not the Whole Story'
  url: https://www.huntress.com/blog/microsoft-vss-limits-and-best-practices
related:
- hunt: ransomware-exfiltration-detection
  reason: Data exfiltration typically precedes encryption and requires network/cloud
    telemetry analysis.
  relation: out-of-scope-alternative
scenario:
  stages:
  - name: VSS Snapshot Deletion
    observables:
    - vssadmin.exe delete shadows /all /quiet
    - wmic.exe shadowcopy delete
    - powershell.exe -Command Get-WmiObject Win32_Shadowcopy | ForEach-Object { $_.Delete()
      }
    - Execution of vssadmin.exe with administrative privileges
    slug: inhibit-recovery-vss-deletion
    tactic: impact
    techniques:
    - T1490
  - name: Data Encryption for Impact
    observables:
    - High volume of file modification events
    - Creation of ransom notes (e.g., .txt, .html files in multiple directories)
    - Renaming of files to include ransomware-specific extensions
    - Modification of files on SQL Server or Active Directory database volumes
    slug: impact-data-encryption
    tactic: impact
    techniques:
    - T1486
  summary: Ransomware operators frequently target the Windows Volume Shadow Copy Service
    (VSS) to delete local snapshots before or during the encryption process. By inhibiting
    system recovery, adversaries ensure that victims cannot use 'Previous Versions'
    or other local restore points to recover data, thereby increasing the likelihood
    of ransom payment.
severity: medium
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
tlp: clear
type: investigation
---


# Ransomware Recovery Inhibition and Encryption

This hunt identifies the destructive impact phase of a ransomware intrusion by looking for recovery inhibition and data encryption. It lead-scopes the estate for the use of VSS-manipulation tools, then fans out to corroborate this with scripted shadow copy deletion, the creation of known ransom-note filenames, and fleet-wide anomalous file rename activity. An agent evaluates the combined evidence to distinguish between legitimate administrative maintenance and a live ransomware event.

## vss-deletion-lead
<!-- Lead: VSS Snapshot Deletion Command -->
Identify execution of tools known to delete shadow copies by matching binary names and looking for deletion keywords in the command line.

```sqlite target=endpoint role=scoping params=(lookback_days=lookback_days, vss_tools=vss_tools, scope_hosts=scope_hosts)
~~~yaml
expected: Rows showing specific hosts and processes attempting shadow copy deletion.
  Silence suggests no obvious recovery inhibition via command line tools.
reads:
- device_hostname
- process_name
- process_cmd_line
- process_original_file_name
- user_name
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-10-15'
~~~
SELECT device_hostname, process_name, process_cmd_line, user_name, time FROM hb_process_activity WHERE (instr(',' || '{{vss_tools}}' || ',', ',' || LOWER(process_original_file_name) || ',') > 0 OR instr(',' || '{{vss_tools}}' || ',', ',' || LOWER(process_name) || ',') > 0) AND (instr(LOWER(process_cmd_line), 'delete') > 0 AND instr(LOWER(process_cmd_line), 'shadow') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## corroborate-evidence
<!-- Corroborate Recovery Inhibition and Impact -->
parallel:
- → scripted-shadow-deletion
- → ransom-note-creation
- → mass-encryption-baseline
join: → agent-triage

## scripted-shadow-deletion
<!-- Scripted WMI Shadow Copy Deletion -->
Find programmatic shadow copy deletion in script blocks that might bypass process monitoring.

```sqlite target=endpoint role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Script blocks calling the WMI Delete method on shadow objects. Silence proof
  of absence depends on script block logging coverage.
reads:
- device_hostname
- script_name
- script_content
- actor_user_name
- time
silence: not_evidence_of_absence
source: hb_script_activity
verified: dry-run
verified_at: '2026-10-15'
~~~
SELECT device_hostname, script_name, script_content, actor_user_name, time FROM hb_script_activity WHERE (instr(LOWER(script_content), 'win32_shadowcopy') > 0 AND instr(LOWER(script_content), '.delete()') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## ransom-note-creation
<!-- Ransom Note Creation -->
Find creation of files matching a known list of ransom-note names.

```sqlite target=endpoint role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts, ransom_notes=ransom_notes)
~~~yaml
expected: Creation of files like readme.txt or decrypt.txt in multiple directories.
reads:
- device_hostname
- file_name
- file_path
- process_name
- time
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-10-15'
~~~
SELECT device_hostname, file_name, file_path, process_name, time FROM hb_file_activity WHERE instr(',' || '{{ransom_notes}}' || ',', ',' || LOWER(file_name) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## mass-encryption-baseline
<!-- Mass Renames to Rare Extensions -->
Stack-count file renames to identify anomalous volume of extensions that are rare across the fleet.

```sqlite target=endpoint role=baseline params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
baseline:
  compare: new_this_window
  window: '{{lookback_days}}d'
expected: A high volume of renames to a single extension that is not common across
  the fleet.
prevalence:
  by: device_hostname
  key:
  - extension
  rare_below: 3
reads:
- device_hostname
- file_name
- activity_id
- time
- process_name
- actor_user_name
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-10-15'
~~~
SELECT device_hostname, process_name, actor_user_name AS user_name, LOWER(SUBSTR(file_name, INSTR(file_name, '.') + 1)) AS extension, COUNT(*) AS event_count, MIN(time) AS first_seen FROM hb_file_activity WHERE activity_id = 5 AND file_name LIKE '%.%' AND time >= datetime('now', '-{{lookback_days}} days') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) GROUP BY device_hostname, process_name, user_name, extension HAVING event_count > 500
```

## agent-triage
<!-- Evaluate Evidence Triage -->
```agent target=hunter
cite: required
context:
- vss-deletion-lead
- scripted-shadow-deletion
- ransom-note-creation
- mass-encryption-baseline
max_iterations: 6
objective: Identify hosts where shadow deletion was followed by ransom note creation
  or mass file renames with rare extensions, specifically examining if the same process
  is responsible for both deletion and encryption.
success_criteria: A verdict per host citing specific rows and indicators.
tools:
- endpoint
```

## route-on-verdict
<!-- Route on Verdict -->
if~: "the agent-triage verdict is malicious for at least one host showing both recovery inhibition and impact indicators" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → analyst-review
unavailable: → analyst-review (blind_spot: no-vss-api-telemetry)
else: → close-out

## isolate-host
<!-- Isolate Host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host from the network immediately and initiate incident response protocols for confirmed ransomware.
```
→ analyst-review

## analyst-review
<!-- Analyst Review -->
```manual target=analyst
Review the cited evidence. Confirm if the 'rare extensions' are known encryption markers and if the process performing them is unauthorized. Check if deletion was part of scheduled backup maintenance.
```
→ end

## close-out
<!-- Close Out -->
```manual target=analyst
Document absence of malicious recovery inhibition. Record benign administrative VSS manipulation for tuning.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.