Skip to content
Go back

Revogação e forcing troca de senha via Graph Powershell

Published:  at  10:00 AM

Í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:

  1. Invalidar as sessões ativas do utilizador
  2. Forçar a alteração da palavra-passe no próximo início de sessão
  3. 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:

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:

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:

  1. Obtém o ID do utilizador com base no UPN:

    $user = Get-MgUser -Filter "userPrincipalName eq '$userPrincipalName'"
  2. 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
  3. 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:

  1. Implementar Autenticação Multi-fator (MFA): Configure a MFA para os utilizadores afetados, se ainda não estiver ativa.

  2. Monitorizar Atividades Suspeitas: Utilize os registos de auditoria do Microsoft Entra ID para identificar e investigar atividades suspeitas associadas às contas afetadas.

  3. Verificar Aplicações Consentidas: Revise e revogue, se necessário, as aplicações a que o utilizador concedeu acesso.

  4. 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:

  1. Transformar o Script num Módulo PowerShell: Crie um módulo reutilizável com funções específicas.

  2. Implementar Logs Detalhados: Adicione registo detalhado para fins de auditoria e conformidade.

  3. 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:

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.

Recursos Adicionais


Suggest Changes

Previous Post
Expiração de Certificados e Segredos
Next Post
Administradores Globais