SOC Prime Bias: Alto

20 May 2026 22:10 UTC

Como a Storm-2949 transformou uma identidade comprometida em uma violação ampla na nuvem

Author Photo
SOC Prime Team linkedin icon Seguir
Como a Storm-2949 transformou uma identidade comprometida em uma violação ampla na nuvem
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

A Storm-2949 usou engenharia social e abuso de Redefinição de Senha de Autoatendimento para comprometer contas do Microsoft Entra ID. Após obter acesso privilegiado, o ator da ameaça usou ações do plano de gerenciamento do Azure para acessar App Services, Key Vaults, contas de Armazenamento e bancos de dados SQL. Os dados foram então exfiltrados do Microsoft 365, armazenamento do Azure e outros recursos em nuvem. A intrusão progrediu posteriormente para o implante da ferramenta de acesso remoto ScreenConnect em máquinas virtuais para apoiar maior reconhecimento e roubo de credenciais.

Investigação

Analistas da Microsoft observaram os atacantes enumerando usuários e aplicativos através da API Microsoft Graph com ferramentas Python personalizadas. Eles recuperaram perfis de publicação dos Azure App Services, extraíram segredos dos Key Vaults, alteraram regras de firewall e usaram a extensão VMAccess para criar contas de administrador local em máquinas virtuais. Em um estágio posterior, um script PowerShell instalou o ScreenConnect, limpou logs e disfarçou serviços para reduzir a visibilidade. A investigação vinculou esta atividade a três endereços IP controlados pelos atacantes.

Mitigação

As organizações devem habilitar a MFA e exigir autenticação resistente a phishing para contas privilegiadas. As permissões Azure RBAC devem ser rigorosamente restringidas e monitoradas, especialmente o acesso de nível de Proprietário a Key Vaults e App Services. Extensões Azure VM desnecessárias devem ser desabilitadas, e o registro em log deve ser aplicado para atividades de Run Command e VMAccess. O Microsoft Defender para Cloud e Defender para Endpoint também devem ser habilitados com proteção contra adulteração e modo de bloqueio.

Resposta

Os defensores devem bloquear imediatamente os endereços IP maliciosos identificados e revogar as credenciais comprometidas. As senhas e registros de MFA para contas afetadas devem ser redefinidos, e todos os segredos armazenados em Key Vaults devem ser rotacionados. As equipes de segurança também devem realizar uma revisão completa das atribuições Azure RBAC e remover privilégios excessivos. As regras de detecção devem ser atualizadas para identificar solicitações de perfil de publicação suspeitas, acesso a segredos do Key Vault e atividade inesperada de extensão de VM.

graph TB classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef operator fill:#ff9900 action_phishing[“<b>Ação</b> – <b>T1566 Phishing</b><br/><b>Descrição</b>: O ator da ameaça enviou mensagens de phishing direcionadas que abusaram da reposição de palavra-passe em regime de self-service para levar utilizadores a aprovar pedidos MFA e revelar credenciais válidas.”] class action_phishing action action_valid_accounts[“<b>Ação</b> – <b>T1078 Contas Válidas</b><br/><b>Descrição</b>: Credenciais comprometidas foram usadas para iniciar sessão no Microsoft Entra ID e subscrições do Azure.”] class action_valid_accounts action action_account_manipulation[“<b>Ação</b> – <b>T1098 Manipulação de Contas</b><br/><b>Descrição</b>: O atacante redefiniu palavras-passe, removeu fatores MFA existentes e registou um autenticador malicioso para persistência.”] class action_account_manipulation action action_cloud_role_add[“<b>Ação</b> – <b>T1098.003 Funções de Cloud Adicionais</b><br/><b>Descrição</b>: Foram adicionadas funções privilegiadas de Azure RBAC às contas comprometidas.”] class action_cloud_role_add action action_cloud_account_discovery[“<b>Ação</b> – <b>T1087.004 Descoberta de Contas na Cloud</b><br/><b>Descrição</b>: A Microsoft Graph API foi utilizada para enumerar utilizadores, aplicações e service principals.”] class action_cloud_account_discovery action action_cloud_group_discovery[“<b>Ação</b> – <b>T1069.003 Descoberta de Grupos na Cloud</b><br/><b>Descrição</b>: Grupos e atribuições de funções foram listados para mapear membros com privilégios.”] class action_cloud_group_discovery action action_cloud_service_discovery[“<b>Ação</b> – <b>T1526 Descoberta de Serviços na Cloud</b><br/><b>Descrição</b>: Foram enumerados serviços Azure como App Service, Key Vault, Storage e SQL.”] class action_cloud_service_discovery action action_storage_object_discovery[“<b>Ação</b> – <b>T1619 Descoberta de Objetos de Armazenamento na Cloud</b><br/><b>Descrição</b>: Foram enumerados contentores blob no Azure Storage.”] class action_storage_object_discovery action action_keyvault_secret_access[“<b>Ação</b> – <b>T1555.006 Credenciais de Repositórios de Palavras-passe</b><br/><b>Descrição</b>: Segredos foram extraídos do Azure Key Vault.”] class action_keyvault_secret_access action action_remote_services[“<b>Ação</b> – <b>T1021.007 Serviços Remotos: Serviços na Cloud</b><br/><b>Descrição</b>: Credenciais válidas foram usadas para aceder a recursos Azure.”] class action_remote_services action tool_screenconnect[“<b>Ferramenta</b> – <b>Nome</b>: ScreenConnect (ConnectWise Control)<br/><b>Descrição</b>: Software de acesso remoto instalado em máquinas virtuais comprometidas.”] class tool_screenconnect tool action_automated_collection[“<b>Ação</b> – <b>T1119 Recolha Automatizada</b><br/><b>Descrição</b>: Scripts Python descarregaram grandes volumes de ficheiros do OneDrive, SharePoint e Azure Storage.”] class action_automated_collection action action_scripting_interpreter[“<b>Ação</b> – <b>T1059 Interpretador de Comandos e Scripts</b><br/><b>Descrição</b>: Execução de scripts através de extensões de VMs Azure.”] class action_scripting_interpreter action action_indicator_removal[“<b>Ação</b> – <b>T1070 Remoção de Indicadores</b><br/><b>Descrição</b>: Registos de eventos do Windows e ficheiros temporários foram eliminados.”] class action_indicator_removal action action_file_deletion[“<b>Ação</b> – <b>T1070.004 Eliminação de Ficheiros</b><br/><b>Descrição</b>: Artefactos foram removidos de máquinas virtuais comprometidas.”] class action_file_deletion action action_obfuscation[“<b>Ação</b> – <b>T1027.005 Ofuscação de Informação</b><br/><b>Descrição</b>: Ferramentas de segurança foram modificadas ou ofuscadas.”] class action_obfuscation action action_defeat_defenses[“<b>Ação</b> – <b>T1562.008 Evasão de Defesas</b><br/><b>Descrição</b>: O Microsoft Defender foi desativado e os registos na cloud foram manipulados.”] class action_defeat_defenses action action_phishing –>|leva_a| action_valid_accounts action_valid_accounts –>|leva_a| action_account_manipulation action_account_manipulation –>|leva_a| action_cloud_role_add action_cloud_role_add –>|leva_a| action_cloud_account_discovery action_cloud_account_discovery –>|leva_a| action_cloud_group_discovery action_cloud_group_discovery –>|leva_a| action_cloud_service_discovery action_cloud_service_discovery –>|leva_a| action_storage_object_discovery action_storage_object_discovery –>|leva_a| action_keyvault_secret_access action_keyvault_secret_access –>|leva_a| action_remote_services action_remote_services –>|usa| tool_screenconnect tool_screenconnect –>|permite| action_automated_collection action_automated_collection –>|usa| action_scripting_interpreter action_scripting_interpreter –>|permite| action_indicator_removal action_indicator_removal –>|inclui| action_file_deletion action_file_deletion –>|inclui| action_obfuscation action_obfuscation –>|suporta| 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

Fluxo de Ataque

Execução de Simulação

Pré-requisito: O Check de Pré-voo de Telemetria & Baseline deve ter sido aprovado.

  • Narrativa do Ataque & Comandos:

    Um adversário que obteve uma conta válida do Azure AD (ou principal de serviço padrão) deseja exfiltrar o código-fonte de aplicações e snapshots de bancos de dados. O atacante realiza os seguintes passos completamente via Azure CLI, gerando o exato operationName eventos que a regra monitora:

    1. Publicar XML de Aplicativo Web – extrai a configuração do Aplicativo Web (incluindo credenciais de implantação).
    2. Criar uma nova Conta de Armazenamento – fornece um container para estagiar dados exfiltrados.
    3. Adicionar uma regra de firewall ao servidor SQL – abre o servidor para o intervalo de IP do atacante, permitindo cópia direta de dados.

    Cada etapa produz uma entrada no Log de Atividade com operationName correspondendo à lista de permissões da regra, assim acionando a detecção.

  • Script de Teste de Regressão:

    #!/usr/bin/env bash
    # Pré-requisito: o CLI az está logado com um principal Azure AD comprometido/válido.
    set -euo pipefail
    
    # Variáveis – modifique conforme necessário para o inquilino de teste
    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 "=== Criar grupo de recursos ==="
    az group create --name "$RG" --location "$LOCATION"
    
    echo "=== Implantar um Aplicativo Web de teste ==="
    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 "=== Publicar configuração XML (aciona detecção) ==="
    az webapp config backup create 
        --resource-group "$RG" 
        --webapp-name "$WEBAPP" 
        --backup-name "xmlbackup-$(date +%s)" 
        --output none
    
    echo "=== Criar uma Conta de Armazenamento (aciona detecção) ==="
    az storage account create 
        --name "$STORAGE" 
        --resource-group "$RG" 
        --location "$LOCATION" 
        --sku Standard_LRS 
        --kind StorageV2 
        --output none
    
    echo "=== Criar um Servidor SQL (necessário para a regra de firewall) ==="
    az sql server create 
        --name "$SQLSERVER" 
        --resource-group "$RG" 
        --location "$LOCATION" 
        --admin-user "sqladmin" 
        --admin-password "P@ssw0rd1234!" 
        --output none
    
    echo "=== Adicionar regra de firewall ao Servidor SQL (aciona detecção) ==="
    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 "=== Simulação completa. Verifique alertas no Azure Sentinel. ==="
  • Comandos de Limpeza:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Variáveis devem coincidir com aquelas usadas no script de simulação
    RG="test-rg-..."
    # Se você manteve os nomes exatos da execução anterior, substitua os locais reservados de acordo.
    
    echo "=== Excluir grupo de recursos e todos os recursos contidos ==="
    az group delete --name "$RG" --yes --no-wait
    echo "Limpeza iniciada."