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
    }
 
 
 
 




Kategorien: IT