Cancellazione via Lifecycle Policy: Lifecycle-Triggered Deletion (T1485.001)
La tecnica T1485.001 — Lifecycle-Triggered Deletion appartiene alla tattica TA0040 (Impact) e descrive l'abuso delle lifecycle policy dei bucket di cloud storage per distruggere in modo automatizzato tutti gli oggetti conservati. Le policy di lifecycle nascono per finalità legittime: migrare oggetti verso storage class più economiche, archiviarli o eliminarli dopo un periodo definito. Un attaccante che dispone dei permessi corretti può però riscrivere queste regole per trasformarle in un meccanismo di data destruction silenzioso e differito.
In ambiente AWS, il permesso critico è s3:PutLifecycleConfiguration, invocato tramite l'API PutBucketLifecycle o PutBucketLifecycleConfiguration. Una policy con Expiration impostata a 1 giorno (o 0 tramite NoncurrentVersionExpiration) elimina l'intero contenuto del bucket al primo ciclo di valutazione, tipicamente entro 24-48 ore. Meccanismi analoghi esistono su Azure Blob Storage (Lifecycle Management rules) e Google Cloud Storage (Object Lifecycle Management).
L'impatto si articola su tre fronti: distruzione di dati produttivi a fini di estorsione o Financial Theft, eliminazione di log bucket per Indicator Removal (mascherando l'intera catena d'attacco), e sabotaggio operativo con effetti ritardati che rendono la detection reattiva inefficace. La tecnica è particolarmente insidiosa perché la modifica della policy è una singola chiamata API a bassa entropia, mentre l'evento distruttivo avviene ore dopo, senza ulteriori interazioni dell'attaccante.
Simulare T1485.001 in un esercizio red team richiede un account cloud di laboratorio isolato e permessi controllati. L'obiettivo è dimostrare l'impatto senza toccare dati produttivi: creare un bucket di test popolato con oggetti fittizi e riprodurre l'intera catena di modifica policy.
Su AWS, la catena minima parte da un principal con s3:PutLifecycleConfiguration sul bucket target. Con AWS CLI (open source) si prepara un file JSON che descrive la regola di scadenza, ad esempio con Status: Enabled, Filter vuoto (match su tutti gli oggetti) e Expiration.Days: 1. Il comando operativo è:
aws s3api put-bucket-lifecycle-configuration --bucket
Per versionamento attivo, aggiungere una regola NoncurrentVersionExpiration.NoncurrentDays: 1 elimina anche le versioni storiche, rendendo il recovery via ListObjectVersions inefficace. La verifica avviene con aws s3api get-bucket-lifecycle-configuration --bucket
Su Azure, il tool nativo è Azure CLI (open source) con az storage account management-policy create, passando un JSON che definisce actions.baseBlob.delete.daysAfterModificationGreaterThan: 1. Su GCP, gsutil lifecycle set policy.json gs://
Per un'operazione red team più realistica, framework come Pacu (open source) — il toolkit di offensive AWS di Rhino Security Labs — includono moduli per l'enumerazione IAM che identificano principal con permessi PutLifecycleConfiguration sfruttabili. ScoutSuite (open source) e CloudSploit (open source) aiutano nella fase di reconnaissance per mappare bucket privi di Object Lock o MFA Delete.
La catena d'attacco tipica in un esercizio prevede: compromissione di credenziali IAM (via phishing o Instance Metadata Service abuse), enumerazione dei bucket con aws s3api list-buckets, identificazione dei target ad alto valore (log bucket CloudTrail, snapshot DB), applicazione della lifecycle policy distruttiva e uscita. L'attaccante non deve restare connesso: il ciclo di valutazione del provider farà il lavoro nelle 24 ore successive.
Per evidenziare l'impatto, documentare i tempi: applicazione policy T+0, primo ciclo di valutazione S3 tipicamente T+12/24h, cancellazione completa entro T+48h. Concludere sempre il test ripristinando la policy originale o cancellando il bucket di laboratorio.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo