Índice
A resposta rápida e eficaz a incidentes de segurança envolvendo contas de utilizador comprometidas é fundamental para minimizar o impacto de potenciais violações de dados. Este artigo apresenta uma abordagem automatizada para tratar múltiplas contas comprometidas no Microsoft Entra ID (anteriormente Azure AD) utilizando o Microsoft Graph PowerShell.
Contexto
Quando um ataque de comprometimento de credenciais é detetado, os profissionais de segurança precisam agir rapidamente para:
- Invalidar as sessões ativas do utilizador
- Forçar a alteração da palavra-passe no próximo início de sessão
- Possivelmente implementar medidas de autenticação adicionais
Os ataques modernos raramente se limitam a uma única conta, pelo que ter uma ferramenta para remediar vários utilizadores em simultâneo torna-se essencial. O Microsoft Graph PowerShell SDK permite-nos executar estas ações de forma programática e eficiente.
Pré-requisitos
Para seguir este guia, necessitará de:
- PowerShell 7.0 ou superior
- Módulo Microsoft Graph PowerShell instalado
Install-Module Microsoft.Graph -Scope CurrentUser
- Conta de administrador com permissões adequadas no Microsoft Entra ID
- Ficheiro CSV com os identificadores dos utilizadores comprometidos
Permissões Necessárias
Para executar as operações de remediação, o seu utilizador ou a aplicação utilizada precisa das seguintes permissões:
- User.ReadWrite.All: Permite ler e atualizar perfis de utilizador
- Directory.ReadWrite.All: Permite operações de escrita em recursos do diretório
- Directory.AccessAsUser.All: Permite acesso privilegiado ao diretório
O Script de Remediação
A solução abaixo utiliza um ficheiro CSV contendo os UPNs (User Principal Names) dos utilizadores comprometidos e executa as ações de remediação necessárias para cada um:
# Conectar ao Microsoft Graph com os escopos necessários
Connect-MgGraph -Scopes "User.ReadWrite.All", "Directory.ReadWrite.All", "Directory.AccessAsUser.All"
# Caminho para o arquivo CSV contendo os UPNs dos utilizadores
$csvFilePath = "C:\Users\Documents\UserPrincipalName.csv"
# Carregar o CSV
$utilizadores = Import-Csv -Path $csvFilePath
# Parâmetros para a atualização do perfil de senha
$params = @{
passwordProfile = @{
forceChangePasswordNextSignIn = $true
}
}
# Loop para processar todos os utilizadores do CSV
foreach ($utilizador in $utilizadores) {
$userPrincipalName = $utilizador.userPrincipalName
# Obter o UserId com base no UserPrincipalName
$user = Get-MgUser -Filter "userPrincipalName eq '$userPrincipalName'"
# Verificar se o utilizador foi encontrado
if ($user) {
# Atualizar a senha do utilizador, forçando a troca no próximo login
Update-MgUser -UserId $user.Id -BodyParameter $params
Write-Host "Senha configurada para troca no próximo login para do utilizador $userPrincipalName."
# Revogar as sessões de login ativas do utilizador via a API Graph
$uri = "https://graph.microsoft.com/v1.0/users/$($user.Id)/revokeSignInSessions"
Invoke-MgGraphRequest -Method POST -Uri $uri
Write-Host "Sessões ativas para o utilizador $userPrincipalName foram revogadas."
} else {
Write-Host "utilizador não encontrado: $userPrincipalName"
}
}
# Desconectar do Microsoft Graph
Disconnect-MgGraph
Estrutura do Ficheiro CSV
O ficheiro CSV deve ter a seguinte estrutura simples:
userPrincipalName
utilizador1@dominio.com
utilizador2@dominio.com
utilizador3@dominio.com
Certifique-se de que o cabeçalho da coluna seja exatamente userPrincipalName
para que o script possa processar corretamente os dados.
Explicação Detalhada do Script
1. Autenticação no Microsoft Graph
Connect-MgGraph -Scopes "User.ReadWrite.All", "Directory.ReadWrite.All", "Directory.AccessAsUser.All"
Este comando inicia uma sessão autenticada com o Microsoft Graph API, solicitando os escopos necessários para as operações que iremos realizar. Será apresentada uma janela de autenticação interativa ou, se configurado, o script utilizará a autenticação especificada no seu ambiente.
2. Carregamento da Lista de Utilizadores
$csvFilePath = "C:\Users\1501923\Documents\UserPrincipalName.csv"
$utilizadores = Import-Csv -Path $csvFilePath
Estas linhas especificam o caminho para o ficheiro CSV e carregam os dados na variável $utilizadores
. Ajuste o caminho conforme necessário para o seu ambiente.
3. Definição dos Parâmetros de Atualização
$params = @{
passwordProfile = @{
forceChangePasswordNextSignIn = $true
}
}
Aqui definimos o objeto que será utilizado para atualizar o perfil de palavra-passe de cada utilizador, configurando a opção para forçar a alteração da palavra-passe no próximo início de sessão.
4. Processamento de Cada Utilizador
Para cada utilizador no ficheiro CSV, o script:
-
Obtém o ID do utilizador com base no UPN:
$user = Get-MgUser -Filter "userPrincipalName eq '$userPrincipalName'"
-
Atualiza o perfil de palavra-passe para forçar a alteração no próximo início de sessão:
Update-MgUser -UserId $user.Id -BodyParameter $params
-
Revoga todas as sessões ativas do utilizador:
$uri = "https://graph.microsoft.com/v1.0/users/$($user.Id)/revokeSignInSessions" Invoke-MgGraphRequest -Method POST -Uri $uri
5. Encerramento da Sessão
Disconnect-MgGraph
Finalmente, o script encerra a sessão com o Microsoft Graph para garantir a limpeza dos recursos e tokens utilizados.
Medidas de Segurança Adicionais
Além das ações implementadas no script, considere as seguintes medidas adicionais para melhorar a segurança das contas comprometidas:
-
Implementar Autenticação Multi-fator (MFA): Configure a MFA para os utilizadores afetados, se ainda não estiver ativa.
-
Monitorizar Atividades Suspeitas: Utilize os registos de auditoria do Microsoft Entra ID para identificar e investigar atividades suspeitas associadas às contas afetadas.
-
Verificar Aplicações Consentidas: Revise e revogue, se necessário, as aplicações a que o utilizador concedeu acesso.
-
Implementar Políticas de Acesso Condicional: Considere aplicar políticas específicas para os utilizadores afetados, como restrições de localização ou dispositivo.
Expansão do Script para Ações Adicionais
O script básico pode ser expandido para incluir outras ações de remediação, como:
# Exemplo: Adicionar o utilizador a um grupo de monitorização especial
Add-MgGroupMember -GroupId "id-do-grupo-de-monitorização" -DirectoryObjectId $user.Id
# Exemplo: Desativar temporariamente o utilizador em caso de comprometimento grave
Update-MgUser -UserId $user.Id -AccountEnabled:$false
Automatização e Agendamento
Para cenários de resposta a incidentes regulares ou equipas de segurança maiores, considere:
-
Transformar o Script num Módulo PowerShell: Crie um módulo reutilizável com funções específicas.
-
Implementar Logs Detalhados: Adicione registo detalhado para fins de auditoria e conformidade.
-
Integrar com Sistemas SOAR: Se utilizar uma plataforma SOAR (Security Orchestration, Automation and Response), integre este script como parte dos seus playbooks de resposta a incidentes.
Considerações de Segurança
Ao utilizar este script, tenha em atenção:
- O script deve ser executado apenas por pessoal autorizado com as permissões adequadas.
- Armazene o CSV de forma segura e elimine-o após a utilização para evitar exposição acidental das contas afetadas.
- Considere encriptar ou proteger o ficheiro de script, especialmente se contiver credenciais.
- Implemente testes adequados em ambientes não produtivos antes de executar em produção.
Conclusão
A remediação rápida e eficaz de contas comprometidas é um componente crítico de qualquer plano de resposta a incidentes. Utilizando o Microsoft Graph PowerShell, as equipas de segurança podem automatizar e agilizar este processo, reduzindo significativamente o tempo de resposta e o potencial impacto de um comprometimento de credenciais.
O script apresentado neste artigo fornece uma base sólida que pode ser adaptada e expandida conforme as necessidades específicas da sua organização, integrando-se nos procedimentos de resposta a incidentes existentes.