Die Suche nach der Quelle von falscher Passwort Eingabe ist eine sisyphusarbeit.
Um die Quelle der Ursache festzustellen kann das folgende Powershellscript helfen zum Zeitpunkt der falschen Passworteingabe den passenden Zeitpunkt und Eventlog Eintrag am Domaincontroller zu liefern.
Der Aufruf erfolgt über die Aufgabenplanung am Domaincontroller an dem das Event erzeugt wird.
Aufgabeplanung Parameter
Allgemein: Die Aufgabe ausführen lassen von einem User der Stapelverarbeitung Rechte und Domainadministrator ist.
Trigger: Aufgabe starten: Bei einem Ereignis
Protokoll: Sicherheit
Quelle: Microsoft Windows security auditing.
Ereignis-ID 4776
Ereignis-ID 4771
Aktionen: Programm starten
Programm / Skript: C:\Windows\System32\cmd.exe
Argumente: /c „C:\tasks\gesperrtADKonto\sendEmailWrongPasswort.bat“
sendEmailWrongPasswort.bat
@echo off
rem Author: Michael Haug
set ROOT_PATH=C:\tasks\gesperrtADKonto
SET LOG_PATH=%ROOT_PATH%
SET LOGFILE=%LOG_PATH%\gesperrtADKonto.log
echo %date:~0% - %time:~0,8% Uhr %0 wurde gestartet >> %LOGFILE%
echo %date:~0% - %time:~0,8% Uhr %0 "Starte Eventlog analyse und Versand" >> %LOGFILE%
rem Pruefe ob im Eventlog fuer den User ein Eintrag vorliegt
powershell \\<DomainSuffic>\NETLOGON\ps\eventlog.ps1 Haug michael.haug@haug.cloud
Eventlog.ps1
# Author: Michael Haug
# Beschreibung: Das Script prueft auf dem Domaincontroller ein Ereignis Events von einem bestimmten Windows-User in der letzten Minute etwas protokolliert wurde. Wenn ja, werden die Eventdetails in eine LOG oder TXT Exportdatei gespeichert.
# Wenn ein Exportfile existiert kann eine Email verschickt werden. Anschließend wird das Export-File geloescht.
#
# Aufruf: Dieses Script wird über die Aufgabenplanung gestartet.
#
# Beispiel: \\<Domainsuffix>\NETLOGON\ps\eventlog.ps1 Tester michael.haug@haug.cloud
#d
# Definition der Parameter
Param(
[string]$WINUSERNAME,
[string]$MailAdress2
)
# Ausgabe der Parameter
Write-host "1. Windowsname: $WINUSERNAME"
Write-host "2. Email Cc an: $MailAdress2"
$current_folder=split-path -parent $MyInvocation.MyCommand.Definition
$ROOT_LOG=$current_folder
$LOGFILE=$ROOT_LOG + "\eventlog.log"
$EXPORTPATH="C:"
$EXPORT_FILE=$EXPORTPATH+"\event_user.log"
$current_username=$env:username
$Datum = get-date -Format "dd.MM.yyyy - HH:mm:ss"
$pcname=$env:computername
$pdc=(Get-ADDomain).pdcemulator
$EventId=4771,4776,6425
$scriptName = $MyInvocation.MyCommand.Name
$textEncoding=New-Object System.Text.utf8encoding
$mailrelay = "<Servername>"
$mail_to1= "<Emailadresse>"
$mail_to2=$null
$mailto_array= @()
$mail_from= $pcname + "@<Sendedomain>"
$mail_bodytext="EVENT: - Falsches Kenntwort wurde um: $Datum eingetragen<br>Computername:$pcname<br>User:$WINUSERNAME<br><br>Sendet with: $scriptName"
"$Datum $scriptName wurde gestartet " >> $logfile
if($MailAdress2){
$mail_to2= $MailAdress2
$mailto_array = @($mail_to1, $mail_to2)
Write-host "Alternative Empfaengeradresse: $mail_to2" -ForegroundColor Green
#"$Datum $scriptName Userueberwachung: $WINUSERNAME Alternative Empfaengeradresse: $mail_to2" >> $logfile
} else{
$mailto_array = @($mail_to1)
Write-host "Kein Alternative Empfaengeradresse angeben" -ForegroundColor Green
#"$Datum $scriptName Kein Alternative Empfaengeradresse angeben" >> $logfile
}
try{
get-winevent -FilterHashTable @{LogName = "Security"; ID = $EventId;Data=$WINUSERNAME; Providername="Microsoft-Windows-Security-Auditing";StartTime=(Get-Date).AddMinutes(-1);} -ErrorAction Stop -ComputerName $pdc | %{
#$Datum +"Starte get-WinEvent " >> $logfile
$array = ($_.ToXml()).event.eventdata.data
$result = $_ | select (($array.name)+"timecreated"+"message"+"ProviderName"+"id")
foreach ($item in $array){
try{
$result.([string]$item.name) = [string]$item.'#text'
}
catch{
Write-host "Da klappt was nicht" -ForegroundColor Yellow
}
}
#Ausgabe in CSV
#"$Datum $scriptName Schreibe Exportdatei $EXPORT_FILE" >> $logfile
Write-host "Fuer $WINUSERNAME liegt ein Event vor" -ForegroundColor Green
$result > $EXPORT_FILE
}
#Wenn ein File erzeugt wurde, verschicke dies per Email
if (Test-Path -Path $EXPORT_FILE) {
Write-host "$Datum Event File gefunden:$EXPORT_FILE" -ForegroundColor Green
"$Datum $scriptName Event Eintrag fuer:$WINUSERNAME gefunden" >> $logfile
try{
Send-MailMessage -SmtpServer $mailrelay -to $mailto_array -from $mail_from -Subject "Eventlog - Falsches PW von $WINUSERNAME" -bodyasHTML -body $mail_bodytext -Encoding $textEncoding -Attachments $EXPORT_FILE -ErrorAction Stop
Write-host "Mail wurde versendet an: $mail_to1 $mail_to2" -ForegroundColor Green
"$Datum $scriptName Mail wurde versendet an: $mail_to1 $mail_to2" >> $logfile
}
catch{
Write-Output "ERROR: Send failed to $mail_to1 $mail_to2 Fehler: $error[0].Exception.Message" -ForegroundColor Red
"$Datum $scriptName User:$WINUSERNAME ERROR: Send failed to $mail_to1 $mail_to2 Fehler: $error[0].Exception.Message" >> $logfile
}
#Email verschicken
Write-host $mailstatus -ForegroundColor Green
#das LOG File entfernen
Remove-Item -Path $EXPORT_FILE -Force
} else {
"$Datum Keinen Event Eintrag fuer:$WINUSERNAME gefunden" >> $logfile
}
}catch [Exception] {
Write-host " Yeah - Keine Falschanmeldungen von: $WINUSERNAME" -ForegroundColor Yellow
#$Datum + " Yeah - Keine Falschanmeldungen von: $WINUSERNAME" >> $logfile
}