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:
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()
}
}
}
}