T1578.003

Delete Cloud Instance

An adversary may delete a cloud instance after performing malicious activities in an attempt to evade detection and remove evidence of their presence. Deleting an instance or virtual machine can eliminate forensic artifacts including memory contents, running processes, local logs, and volatile state that would otherwise be available for incident response. Adversaries such as LAPSUS$ have deleted target cloud resources to trigger incident response processes and maximize disruption, while ransomware operators like Storm-0501 conduct mass deletion of Azure resources across subscriptions. The technique may be combined with T1578.002 (Create Cloud Instance) where adversaries spin up ephemeral instances for malicious work, then delete them upon completion.

Microsoft Sentinel / Defender
kusto
// T1578.003 — Delete Cloud Instance
// Detects VM/instance deletion events across Azure and AWS in Microsoft Sentinel
let AzureDeleteOps = dynamic([
    "Microsoft.Compute/virtualMachines/delete",
    "Microsoft.Compute/virtualMachineScaleSets/delete",
    "Microsoft.Compute/virtualMachineScaleSets/virtualMachines/delete",
    "Microsoft.ClassicCompute/virtualMachines/delete",
    "Microsoft.ContainerService/managedClusters/delete"
]);
// Azure Activity Log — VM deletions
let AzureVMDeletes = AzureActivity
| where TimeGenerated > ago(24h)
| where OperationNameValue in~ (AzureDeleteOps)
| where ActivityStatusValue in~ ("Success", "Accepted", "Succeeded", "Started")
| extend CloudProvider = "Azure"
| extend CallerIdentity = Caller
| extend OperationType = OperationNameValue
| extend ResourceName = Resource
| extend AccountType = iif(CallerIdentity has "@", "UserAccount", "ServicePrincipal")
| project TimeGenerated, CloudProvider, CallerIdentity, AccountType, OperationType,
          ResourceName, ResourceGroup, SubscriptionId, ResourceId,
          ActivityStatusValue, Properties, HTTPRequest;
// AWS CloudTrail — Instance terminations
let AWSInstanceTerminations = AWSCloudTrail
| where TimeGenerated > ago(24h)
| where EventName in ("TerminateInstances", "DeleteInstance", "DeregisterInstance")
| where isempty(ErrorCode)
| extend CloudProvider = "AWS"
| extend CallerIdentity = UserIdentityArn
| extend AccountType = UserIdentityType
| extend OperationType = EventName
| extend ResourceName = tostring(RequestParameters)
| project TimeGenerated, CloudProvider, CallerIdentity, AccountType, OperationType,
          ResourceName, SourceIpAddress, AWSRegion, UserIdentityAccountId,
          UserIdentityType, SessionCreationDate, AdditionalEventData;
// Union both cloud providers
AzureVMDeletes
| union AWSInstanceTerminations
| sort by TimeGenerated desc
high severity medium confidence

Data Sources

Cloud: Cloud Service Cloud: Instance Deletion Azure Activity Logs AWS CloudTrail

Required Tables

AzureActivity AWSCloudTrail

False Positives

  • Auto-scaling scale-in events where the cloud platform terminates instances to reduce capacity based on policy
  • Infrastructure as Code (Terraform, Pulumi, CloudFormation) teardown operations during legitimate environment decommissioning
  • DevOps CI/CD pipeline cleanup jobs that destroy ephemeral test or staging environments after pipeline completion
  • Cloud cost optimization scripts (AWS Instance Scheduler, Azure DevTest Labs auto-shutdown) deleting idle instances on schedule
  • Spot instance / preemptible VM reclamation by the cloud provider (appears as TerminateInstances from platform service roles)

Unlock Pro Content

Get the full detection package for T1578.003 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections