Como resolver bloqueios de contas do Active Directory com PowerShell

Como rastrear e resolver uma conta do Active Directory bloqueada? Descubra o que acontece, como encontrar eventos específicos, e como analisar eventos.

Active Directory (AD) é um serviço maravilhoso. Você pode se conectar de qualquer lugar na rede usando o mesmo nome de usuário e senha. Não poderia ser mais fácil — isto é, até que você esqueça de fechar uma sessão remota da área de trabalho, ou um worm se espalha pela rede, ou você esqueça que você está executando uma tarefa agendada como sua conta de usuário, ou… Bem, você entendeu o ponto. O AD é um produto extremamente útil; é por isso que sua taxa de adoção é tão alta. O problema é quando uma conta começa a ser bloqueada sem nenhuma razão. Ou assim você pensa.

AD Políticas de bloqueio de conta

Muitas organizações têm (ou deveriam ter) políticas de bloqueio de conta. Esta política é uma medida de segurança para evitar que partes não autorizadas tentem adivinhar a senha continuamente ou forcem uma senha bruta. As políticas de bloqueio de conta são comuns no Active Directory e consistem em uma abordagem simples para combater uma grande questão de segurança. Tente a senha errada um certo número de vezes, e a conta é inutilizável até que um administrador a reative manualmente novamente. A intenção é verdadeira, mas em alguns casos, a implementação não é.

Em algumas situações, especialmente quando uma senha é alterada, uma conta pode de repente começar a ser bloqueada de forma consistente, sem razão aparente. Um usuário liga para o help desk, o help desk reativa a conta, e um pouco mais tarde, a conta é bloqueada novamente. É uma experiência frustrante tanto para o usuário quanto para o help desk. Às vezes o problema é exacerbado pela origem desconhecida dos bloqueios. Em algum lugar, de alguma forma há uma pessoa, um script, ou um processo tentando continuamente a mesma senha errada, mas ninguém sabe onde.

Então como você rastreia esses bloqueios irritantes? Uma maneira é usando um script PowerShell. Mas primeiro, vamos rever o que acontece quando uma conta é bloqueada.

Resolvendo uma conta AD bloqueada

Em um ambiente Windows Server 2008 ou posterior, há um pequeno vaivém entre o sistema cliente, o controlador de domínio do sistema cliente, e o controlador de domínio que tem a função de emulador do Primary Domain Controller (PDC). Isso ocorre da seguinte forma:

  1. Quando se tenta autenticar uma conta de usuário, as credenciais são enviadas até o controlador de domínio apropriado para a sub-rede do sistema cliente.
  2. Se a senha estiver errada, o controlador de domínio do sistema cliente encaminha a requisição para o controlador de domínio que tem a função de emulador PDC. Isto porque o controlador de domínio do sistema cliente pode não ter a senha mais atual, e como recurso de design do Active Directory, o controlador de domínio que detém a função de emulador PDC sempre terá.
  3. O emulador PDC tenta a senha novamente, e se ainda estiver errado, o emulador PDC aumenta o atributo badPwdCount na conta de usuário.
  4. Um ID de evento 4740 é gerado no emulador PDC com o endereço IP do sistema cliente que iniciou a requisição original e com a conta de usuário.
  5. O emulador PDC então informa o controlador de domínio do sistema cliente que a senha está, de fato, errada.
  6. O controlador de domínio do sistema cliente então notifica o sistema cliente que a senha estava errada.

Onde seria o melhor lugar para encontrar a fonte? A resposta está no emulador PDC. A razão para isso é porque cada bloqueio de conta é registrado lá no log de eventos de segurança. O emulador PDC é um local central que pode ser consultado para todos os eventos de bloqueio de conta.

Usar o PowerShell para localizar a origem dos bloqueios de contas AD

Para consultar o emulador PDC, vamos usar o cmdlet Get-WinEvent do PowerShell. Esta é uma cmdlet extremamente útil para analisar rapidamente um ou mais logs de eventos num servidor. Estamos à procura de um ID de evento de 4740. Primeiro, precisamos encontrar o controlador de domínio que detém o papel de emulador do PDC. Uma maneira de fazer isso é usando o cmdlet Get-AdDomain.

Após conhecermos o emulador PDC, então é só uma questão de consultar seu log de eventos de segurança para o ID de evento 4740.

Eu tenho uma conta chamada abertram que está bloqueada. Vamos ver como localizar o culpado.

Temos agora o emulador PDC, por isso vamos consultar o seu log de segurança com um script PowerShell.

### Definir o nome de utilizador que está bloqueado
$Nome de utilizador = ‘abertram’
### Encontrar o papel do controlador de domínio PDCe
$Pdce = (Get-AdDomain).PDCEmulator
### Constrói os parâmetros a passar para Get-WinEvent
$GweParams = @{
‘Computername’ = $Pdce
‘LogName’ = ‘Security’
‘FilterXPath’ = “* and EventData=’$Username’]]”
}### Consulta o log de eventos de segurança
$Events = Get-WinEvent @GweParams

Esta situação dá-nos o evento de lockout.

Mas ainda não temos o sistema cliente de origem. Para conseguirmos isso, teremos que cavar um pouco mais fundo. O nome de usuário real é enterrado no valor das propriedades de cada evento. Para encontrar o nome de usuário em cada evento, podemos simplesmente usar esta linha.

$Events.Properties.Value

Esta encontra o nome de usuário no primeiro evento e na primeira instância do valor das propriedades. Felizmente, o sistema cliente está apenas na segunda instância do Properties.

$Events.Properties.Value

Após saber onde o nome do sistema cliente está localizado, é apenas uma questão de inseri-lo em um loop, e nós encontramos o culpado.

Agora você está armado e pronto para ir na próxima vez que o help desk lhe tocar com aquela incessante conta de usuário AD que continua sendo bloqueada.

Deixe uma resposta

O seu endereço de email não será publicado.