SOC Prime Bias: Alto

20 May 2026 22:10 UTC

Come Storm-2949 ha trasformato un’identità compromessa in una violazione su tutta la nuvola

Author Photo
SOC Prime Team linkedin icon Segui
Come Storm-2949 ha trasformato un’identità compromessa in una violazione su tutta la nuvola
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Sommario

Storm-2949 ha utilizzato l’ingegneria sociale e l’abuso del ripristino password self-service per compromettere gli account Microsoft Entra ID. Dopo aver ottenuto l’accesso privilegiato, l’attore della minaccia ha usato azioni del piano di gestione di Azure per raggiungere App Services, Key Vaults, account di Storage e database SQL. I dati sono stati poi esfiltrati da Microsoft 365, Azure Storage e altre risorse cloud. L’intrusione successivamente è progredita con il dispiegamento dello strumento di accesso remoto ScreenConnect su macchine virtuali per supportare ulteriori riconoscimenti e furti di credenziali.

Indagine

Gli analisti di Microsoft hanno osservato gli attaccanti enumerare utenti e applicazioni tramite l’API Microsoft Graph con strumenti Python personalizzati. Hanno recuperato profili di pubblicazione da Azure App Services, estratto segreti dai Key Vaults, modificato le regole del firewall e utilizzato l’estensione VMAccess per creare account amministratore locali su macchine virtuali. In una fase successiva, uno script PowerShell ha installato ScreenConnect, cancellato i registri e mascherato i servizi per ridurre la visibilità. L’indagine ha collegato questa attività a tre indirizzi IP controllati dagli attaccanti.

Mitigazione

Le organizzazioni dovrebbero abilitare MFA e richiedere autenticazione resistente al phishing per gli account privilegiati. I permessi di Azure RBAC dovrebbero essere strettamente limitati e monitorati, specialmente l’accesso a livello di Proprietario a Key Vaults e App Services. Le estensioni Azure VM non necessarie dovrebbero essere disabilitate e la registrazione dovrebbe essere applicata per l’attività di Run Command e VMAccess. Microsoft Defender for Cloud e Defender for Endpoint dovrebbero anche essere abilitati con protezione dai manomissioni e modalità di blocco.

Risposta

I difensori dovrebbero immediatamente bloccare gli indirizzi IP malevoli identificati e revocare le credenziali compromesse. Le password e le registrazioni MFA per gli account interessati dovrebbero essere resettate, e tutti i segreti memorizzati nei Key Vaults dovrebbero essere ruotati. I team di sicurezza dovrebbero anche effettuare una revisione completa delle assegnazioni di Azure RBAC e rimuovere i privilegi eccessivi. Le regole di rilevamento dovrebbero essere aggiornate per identificare richieste di profili di pubblicazione sospette, accesso ai segreti dei Key Vault e attività di estensione VM inaspettate.

graph TB classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef operator fill:#ff9900 action_phishing[“<b>Azione</b> – <b>T1566 Phishing</b><br/><b>Descrizione</b>: L’attore della minaccia ha usato messaggi di phishing mirati sfruttando il reset password self-service per indurre utenti ad approvare MFA e fornire credenziali valide.”] class action_phishing action action_valid_accounts[“<b>Azione</b> – <b>T1078 Account Validi</b><br/><b>Descrizione</b>: Credenziali compromesse usate per Microsoft Entra ID e Azure.”] class action_valid_accounts action action_account_manipulation[“<b>Azione</b> – <b>T1098 Manipolazione Account</b><br/><b>Descrizione</b>: L’attaccante ha reimpostato password, rimosso MFA e registrato un autenticatore malevolo.”] class action_account_manipulation action action_cloud_role_add[“<b>Azione</b> – <b>T1098.003 Ruoli Cloud Aggiuntivi</b><br/><b>Descrizione</b>: Ruoli Azure RBAC privilegiati aggiunti agli account compromessi.”] class action_cloud_role_add action action_cloud_account_discovery[“<b>Azione</b> – <b>T1087.004 Scoperta Account Cloud</b><br/><b>Descrizione</b>: Usata Microsoft Graph API per enumerare utenti, app e service principal.”] class action_cloud_account_discovery action action_cloud_group_discovery[“<b>Azione</b> – <b>T1069.003 Scoperta Gruppi Cloud</b><br/><b>Descrizione</b>: Gruppi e ruoli elencati per identificare privilegi.”] class action_cloud_group_discovery action action_cloud_service_discovery[“<b>Azione</b> – <b>T1526 Scoperta Servizi Cloud</b><br/><b>Descrizione</b>: Enumerati servizi Azure come App Service, Key Vault, Storage e SQL.”] class action_cloud_service_discovery action action_storage_object_discovery[“<b>Azione</b> – <b>T1619 Scoperta Oggetti Storage Cloud</b><br/><b>Descrizione</b>: Enumerati container blob Azure Storage.”] class action_storage_object_discovery action action_keyvault_secret_access[“<b>Azione</b> – <b>T1555.006 Credenziali da Password Store</b><br/><b>Descrizione</b>: Segreti estratti da Azure Key Vault.”] class action_keyvault_secret_access action action_remote_services[“<b>Azione</b> – <b>T1021.007 Servizi Remoti Cloud</b><br/><b>Descrizione</b>: Credenziali valide usate per Azure.”] class action_remote_services action tool_screenconnect[“<b>Strumento</b> – <b>Nome</b>: ScreenConnect (ConnectWise Control)<br/><b>Descrizione</b>: Software di accesso remoto su VM compromesse.”] class tool_screenconnect tool action_automated_collection[“<b>Azione</b> – <b>T1119 Raccolta Automatica</b><br/><b>Descrizione</b>: Script Python hanno scaricato grandi quantità di file.”] class action_automated_collection action action_scripting_interpreter[“<b>Azione</b> – <b>T1059 Interprete di Script</b><br/><b>Descrizione</b>: Script eseguiti tramite estensioni Azure VM.”] class action_scripting_interpreter action action_indicator_removal[“<b>Azione</b> – <b>T1070 Rimozione Indicatori</b><br/><b>Descrizione</b>: Log ed eventi cancellati.”] class action_indicator_removal action action_file_deletion[“<b>Azione</b> – <b>T1070.004 Eliminazione File</b><br/><b>Descrizione</b>: Artefatti rimossi dalle VM.”] class action_file_deletion action action_obfuscation[“<b>Azione</b> – <b>T1027.005 Offuscamento</b><br/><b>Descrizione</b>: Strumenti di sicurezza modificati e offuscati.”] class action_obfuscation action action_defeat_defenses[“<b>Azione</b> – <b>T1562.008 Evasione Difese</b><br/><b>Descrizione</b>: Microsoft Defender disabilitato e log cloud manipolati.”] class action_defeat_defenses action action_phishing –>|porta_a| action_valid_accounts action_valid_accounts –>|porta_a| action_account_manipulation action_account_manipulation –>|porta_a| action_cloud_role_add action_cloud_role_add –>|porta_a| action_cloud_account_discovery action_cloud_account_discovery –>|porta_a| action_cloud_group_discovery action_cloud_group_discovery –>|porta_a| action_cloud_service_discovery action_cloud_service_discovery –>|porta_a| action_storage_object_discovery action_storage_object_discovery –>|porta_a| action_keyvault_secret_access action_keyvault_secret_access –>|porta_a| action_remote_services action_remote_services –>|usa| tool_screenconnect tool_screenconnect –>|abilita| action_automated_collection action_automated_collection –>|usa| action_scripting_interpreter action_scripting_interpreter –>|abilita| action_indicator_removal action_indicator_removal –>|include| action_file_deletion action_file_deletion –>|include| action_obfuscation action_obfuscation –>|supporta| action_defeat_defenses class action_phishing,action_valid_accounts,action_account_manipulation,action_cloud_role_add,action_cloud_account_discovery,action_cloud_group_discovery,action_cloud_service_discovery,action_storage_object_discovery,action_keyvault_secret_access,action_remote_services,action_automated_collection,action_scripting_interpreter,action_indicator_removal,action_file_deletion,action_obfuscation,action_defeat_defenses action class tool_screenconnect tool

Flusso di Attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo Pre-volo di Telemetria e Baseline deve essere superato.

  • Narrazione dell’Attacco & Comandi:

    Un avversario che ha ottenuto un account Azure AD valido (o un service principal predefinito) vuole esfiltrare il codice sorgente delle applicazioni e gli snapshot del database. L’attaccante esegue i seguenti passaggi interamente tramite Azure CLI, generando esattamente operationName eventi che la regola controlla:

    1. Pubblica Web App XML – estrae la configurazione della Web App (incluse le credenziali di distribuzione).
    2. Crea un nuovo Account di Storage – fornisce un contenitore per mettere in scena i dati esfiltrati.
    3. Aggiungi una regola di firewall al server SQL – apre il server all’intervallo IP dell’attaccante, consentendo la copia diretta dei dati.

    Ogni passaggio produce un’entrata di Log di Attività con operationName corrispondente alla whitelist della regola, attivando così il rilevamento.

  • Script di Test di Regressione:

    #!/usr/bin/env bash
    # Prerequisito: az CLI è connesso con un principal Azure AD compromesso/valido.
    set -euo pipefail
    
    # Variabili – modificare come necessario per il tenant di test
    RG="test-rg-$(date +%s)"
    WEBAPP="test-webapp-$RANDOM"
    STORAGE="teststorage$RANDOM"
    LOCATION="eastus"
    SQLSERVER="testsql$RANDOM"
    MY_IP=$(curl -s https://api.ipify.org)
    
    echo "=== Crea gruppo di risorse ==="
    az group create --name "$RG" --location "$LOCATION"
    
    echo "=== Distribuisci una Web App fittizia ==="
    az appservice plan create --name "${WEBAPP}Plan" --resource-group "$RG" --sku B1 --is-linux
    az webapp create --resource-group "$RG" --plan "${WEBAPP}Plan" --name "$WEBAPP"
    
    echo "=== Pubblica configurazione XML (attiva il rilevamento) ==="
    az webapp config backup create 
        --resource-group "$RG" 
        --webapp-name "$WEBAPP" 
        --backup-name "xmlbackup-$(date +%s)" 
        --output none
    
    echo "=== Crea un Account di Storage (attiva il rilevamento) ==="
    az storage account create 
        --name "$STORAGE" 
        --resource-group "$RG" 
        --location "$LOCATION" 
        --sku Standard_LRS 
        --kind StorageV2 
        --output none
    
    echo "=== Crea un Server SQL (necessario per la regola del firewall) ==="
    az sql server create 
        --name "$SQLSERVER" 
        --resource-group "$RG" 
        --location "$LOCATION" 
        --admin-user "sqladmin" 
        --admin-password "P@ssw0rd1234!" 
        --output none
    
    echo "=== Aggiungi regola di firewall al server SQL (attiva il rilevamento) ==="
    az sql server firewall-rule create 
        --resource-group "$RG" 
        --server "$SQLSERVER" 
        --name "AllowMyIP" 
        --start-ip-address "$MY_IP" 
        --end-ip-address "$MY_IP" 
        --output none
    
    echo "=== Simulazione completata. Controllare Azure Sentinel per gli avvisi. ==="
  • Comandi per la Pulizia:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Le variabili devono corrispondere a quelle utilizzate nello script di simulazione
    RG="test-rg-..."
    # Se hai mantenuto gli esatti nomi dall'esecuzione precedente, sostituire di conseguenza i segnaposto.
    
    echo "=== Elimina gruppo di risorse e tutte le risorse contenute ==="
    az group delete --name "$RG" --yes --no-wait
    echo "Pulizia avviata."