Detection rules › Panther
Azure Storage Immutability Policy Deleted
Detects deletion of Azure Storage immutability policies that provide WORM protection. Storm-0501 ransomware operators delete these policies before encrypting data, as WORM-protected blobs cannot be modified even by administrators. Critical pre-ransomware indicator.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Stealth | T1562.001 Impair Defenses: Disable or Modify Tools |
| Impact | T1485 Data Destruction, T1490 Inhibit System Recovery |
Rule body yaml
AnalysisType: rule
Filename: azure_storage_immutability_policy_deleted.py
RuleID: "Azure.MonitorActivity.Storage.ImmutabilityPolicyDeleted"
DisplayName: "Azure Storage Immutability Policy Deleted"
Enabled: true
LogTypes:
- Azure.MonitorActivity
Severity: High
Description: >
Detects deletion of Azure Storage immutability policies that provide WORM protection.
Storm-0501 ransomware operators delete these policies before encrypting data, as
WORM-protected blobs cannot be modified even by administrators. Critical pre-ransomware indicator.
Reports:
MITRE ATT&CK:
- TA0005:T1562 # Defense Evasion: Impair Defenses
- TA0005:T1562.001 # Defense Evasion: Disable or Modify Tools
- TA0040:T1490 # Impact: Inhibit System Recovery
- TA0040:T1485 # Impact: Data Destruction
Reference: https://www.microsoft.com/en-us/security/blog/2025/08/27/storm-0501s-evolving-techniques-lead-to-cloud-based-ransomware/
Tags:
- Defense Evasion
- Impair Defenses
- Inhibit System Recovery
- Data Destruction
- Ransomware
- Storm-0501
- WORM
Runbook: |
1. Query Azure Monitor Activity logs for all immutability policy deletions by the callerIpAddress and caller identity in the past 6 hours to calculate the total number of containers affected
2. Search for resource lock deletions on the same storage account by the same caller in the 2 hours before this policy deletion to identify the Storm-0501 attack pattern
3. Find all destructive operations on the affected storage account (DeleteBlob, PutBlob with CPK encryption, storage account deletion) in the 2 hours after policy deletion to assess if data destruction has begun
4. Check if the storage account has been accessed from external IPs or if bulk GetBlob operations occurred after policy deletion to identify potential data exfiltration
5. Review Azure.Audit logs for authentication events from the callerIpAddress in the 48 hours before to identify credential compromise indicators (unusual locations, failed MFA, privilege escalations)
6. Search for other immutability policy or backup-related alerts triggered by the same callerIpAddress across all storage accounts in the past 7 days to determine attack scope
SummaryAttributes:
- resourceId
- callerIpAddress
- correlationId
Tests:
- Name: Immutability Policy Deleted Successfully
ExpectedResult: true
Log:
{
"time": "2025-01-27T14:45:00.0000000Z",
"resourceId": "/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/data-rg/providers/Microsoft.Storage/storageAccounts/criticaldata001/blobServices/default/containers/backups/immutabilityPolicies/default",
"operationName": "MICROSOFT.STORAGE/STORAGEACCOUNTS/BLOBSERVICES/CONTAINERS/IMMUTABILITYPOLICIES/DELETE",
"operationVersion": "2021-09-01",
"category": "Administrative",
"resultType": "Success",
"resultSignature": "200",
"callerIpAddress": "203.0.113.42",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"level": "Informational",
"location": "eastus",
"tenantId": "87654321-4321-4321-4321-111111111111",
"identity": {
"claims": {
"name": "attacker@example.com",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn": "attacker@example.com"
}
}
}
- Name: Immutability Policy Deleted Case Insensitive
ExpectedResult: true
Log:
{
"time": "2025-01-27T15:20:00.0000000Z",
"resourceId": "/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/compliance-rg/providers/Microsoft.Storage/storageAccounts/compliancedata/blobServices/default/containers/audit-logs/immutabilityPolicies/default",
"operationName": "microsoft.storage/storageaccounts/blobservices/containers/immutabilitypolicies/delete",
"category": "Administrative",
"resultType": "Succeeded",
"callerIpAddress": "198.51.100.50",
"correlationId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
"level": "Information",
"location": "westus2",
"tenantId": "11111111-1111-1111-1111-111111111111"
}
- Name: Multiple Containers Immutability Deleted - Ransomware Pattern
ExpectedResult: true
Log:
{
"time": "2025-01-27T16:00:00.0000000Z",
"resourceId": "/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/prod-rg/providers/Microsoft.Storage/storageAccounts/proddata/blobServices/default/containers/financial-records/immutabilityPolicies/default",
"operationName": "Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete",
"category": "Administrative",
"resultType": "Success",
"callerIpAddress": "192.0.2.100",
"correlationId": "c3d4e5f6-a7b8-9012-cdef-345678901234",
"tenantId": "22222222-2222-2222-2222-222222222222"
}
- Name: Failed Immutability Policy Deletion
ExpectedResult: false
Log:
{
"time": "2025-01-27T17:00:00.0000000Z",
"resourceId": "/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/locked-rg/providers/Microsoft.Storage/storageAccounts/protecteddata/blobServices/default/containers/legal-hold/immutabilityPolicies/default",
"operationName": "MICROSOFT.STORAGE/STORAGEACCOUNTS/BLOBSERVICES/CONTAINERS/IMMUTABILITYPOLICIES/DELETE",
"category": "Administrative",
"resultType": "Failed",
"resultSignature": "409",
"callerIpAddress": "198.18.0.50",
"correlationId": "d4e5f6a7-b8c9-0123-def0-456789012345",
"tenantId": "33333333-3333-3333-3333-333333333333"
}
- Name: Different Operation - Immutability Policy Extended
ExpectedResult: false
Log:
{
"time": "2025-01-27T18:00:00.0000000Z",
"resourceId": "/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/data-rg/providers/Microsoft.Storage/storageAccounts/storageacct/blobServices/default/containers/archives/immutabilityPolicies/default",
"operationName": "MICROSOFT.STORAGE/STORAGEACCOUNTS/BLOBSERVICES/CONTAINERS/IMMUTABILITYPOLICIES/EXTEND",
"category": "Administrative",
"resultType": "Success",
"callerIpAddress": "203.0.113.10",
"correlationId": "e5f6a7b8-c9d0-1234-ef01-567890123456",
"tenantId": "44444444-4444-4444-4444-444444444444"
}
Detection logic
Condition
operationName eq "MICROSOFT.STORAGE/STORAGEACCOUNTS/BLOBSERVICES/CONTAINERS/IMMUTABILITYPOLICIES/DELETE"
resultType in ["Success", "Succeeded"]
Indicators
Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.
| Field | Kind | Values |
|---|---|---|
operationName | eq |
|
resultType | in |
|