Como a Storm-2949 transformou uma identidade comprometida em uma violação ampla na nuvem
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
Detecções
Uso Suspeito de Invoke-RestMethod (via powershell)
Ver
Possível Azure Vault Foi Contatado Por Processo Incomum (via dns_query)
Ver
IOCs (IP de Origem) para detectar: Como a Storm-2949 transformou uma identidade comprometida em uma violação em toda a nuvem
Ver
IOCs (IP de Destino) para detectar: Como a Storm-2949 transformou uma identidade comprometida em uma violação em toda a nuvem
Ver
Detecção de Operações do Plano de Gerenciamento do Azure para Exfiltração de Dados [Logs de Atividade Azure]
Ver
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
operationNameeventos que a regra monitora:- Publicar XML de Aplicativo Web – extrai a configuração do Aplicativo Web (incluindo credenciais de implantação).
- Criar uma nova Conta de Armazenamento – fornece um container para estagiar dados exfiltrados.
- 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
operationNamecorrespondendo à 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."