Usuários bloqueados do DC, desbloqueados automaticamente pelo administrador

2



Eu estou trabalhando em uma arquitetura típica do Windows contendo DCs, servidores Exchange, etc ...
Recentemente eu configurei um script para receber uma notificação sempre que um usuário fosse bloqueado. Ele funciona corretamente, no entanto, notei algo muito estranho.

Eu relato várias informações, como a máquina de onde o usuário foi bloqueado, o DC responsável pela ação, etc ... (eu posso obter todas essas informações em logs nos DCs. ID 4740 para bloqueado, 4767 para desbloquear ). A coisa é que regularmente (cerca de 1 ou 2 a cada dia), alguns usuários ficam bloqueados ou de um controlador de domínio (como se ele tivesse falhado sua senha várias vezes neste DC). Claro, os usuários não podem acessar os CDs, então essa é a primeira coisa estranha. Mais estranho é que esses usuários são automaticamente desbloqueados pelo Administrador 1 segundo depois.

Você sabe o que pode causar isso? Tenho certeza que não pode ser nada malicioso.

Note que:

  • É impossível que os usuários tenham acesso aos DCs (ou eu tenho um hacker muito bom escondido entre eles, e eu não sei como ele seria capaz de fazer isso ^^)
  • Usuários bloqueados nunca são os mesmos, parece ser aleatório
  • O atraso entre o bloqueio e o desbloqueio é tão curto (um pouco menos de 1 segundo) que um ser humano precisaria estar pronto para desbloquear a conta assim que ela fosse bloqueada, por isso deve ser feito automaticamente
  • Os usuários bloqueados de seus computadores ficam bloqueados, pois devem ficar. O desbloqueio automático acontece somente quando o evento de bloqueio é feito a partir de um CD.
  • A conta de administrador nunca é usada nem referenciada de qualquer forma para a chamada / execução de script

Obrigado pelo seu tempo! :)

Aqui está o código do script (no entanto, não acho que possa ser de alguma utilidade)

#Get security user lockout events.  61 seconds should be sufficient, as the scheduled task run every minute.
#It leaves 1 sec for execution time.
#EventID 4740 is user lockout. 4767 is unlock.

$startTime = (get-date).addseconds(-61)

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

$DomainControllers = (Get-ADDomainController -Filter *)

foreach ($DC in $DomainControllers) {

    $eventList = Get-WinEvent -ComputerName $DC.Name -filterhashtable @{logname="security";starttime=$startTime;id="4740"} -ErrorAction SilentlyContinue
    $emailBody = $null

    if ($eventList) {

        #Start a walk through the events to collect data.

        $eventList | foreach-object {
            [string]$lockoutTime = $_.timecreated
            $userName = $_.Properties[0].Value
            $user = Get-ADUser -Identity $userName -Properties *
            $name = $user.Name
            $department = $user.Department
            $site = $user.City
            $mail = $user.PrimarySmtpAddress
            $userSID = $_.Properties[2].Value
            $computerName = $_.Properties[1].Value -creplace '^\+',''
            $IPAddress = [System.Net.Dns]::GetHostAddresses($computerName).IPAddressToString

            #Compile the alert text from each event

            $emailBody += "Utilisateur : $name'nDepartment : $department'nSite : $site'nLogin : $userName'nEmail : $mail'nOrdinateur fautif : $computerName'nAdresses IP : $IPAddress'nDate de verrouillage : $lockoutTime'nDC responsable du verrouillage : $($DC.Name)'nSID de l'utilisateur : $userSID"

            #Send mail to report the lockout
            Send-MailMessage -To "<####>" -From "<####>" -Subject "Blocage compte AD" -Body $emailBody -SmtpServer "####"


            #Create a popup on desktop
            $objForm = New-Object System.Windows.Forms.Form 
            $objForm.Text = "Unlocked AD accounts"
            $objForm.Size = New-Object System.Drawing.Size(300,115) 
            $objForm.StartPosition = "CenterScreen"

            $objLabel = New-Object System.Windows.Forms.Label
            $objLabel.Size = New-Object System.Drawing.Size(280,20)
            $objLabel.Location = New-Object System.Drawing.Size(10,15) 
            $objLabel.Text = "Compte de $name verrouillé."
            $objForm.Controls.Add($objLabel)

            $OKButton = New-Object System.Windows.Forms.Button
            $OKButton.Location = New-Object System.Drawing.Size(160,50)
            $OKButton.Size = New-Object System.Drawing.Size(85,23)
            $OKButton.Text = "Tant pis"
            $OKButton.Add_Click({$objForm.Close()})
            $objForm.Controls.Add($OKButton)

            $UnlockButton = New-Object System.Windows.Forms.Button
            $UnlockButton.Location = New-Object System.Drawing.Size(60,50)
            $UnlockButton.Size = New-Object System.Drawing.Size(85,23)
            $UnlockButton.Text = "Déverrouiller"
            $UnlockButton.Add_Click({Unlock-ADAccount $userName; $objForm.Close()})
            $objForm.Controls.Add($UnlockButton)
            if ((Get-ADUser $userName -Properties Lockedout).Lockedout) {
                [void] $objForm.ShowDialog()
            }
        }
    }
}
    
por Gawil 03.10.2017 / 18:48

0 respostas