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.

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."