Zabbix soll pro Event eine Email versenden
Moin zusammen,
ich hätte gerne, dass mir Funde vom Defender als Email versendet werden. In der Email sollten dann die dementsprechenden Pfade zu sehen sein, wo der Admin schauen soll.
Defender meldet es als Ereignis ID 1116.
Ich habe, weil es bereits vorhanden ist, Zabbix damit gefüttert:
Item:
logeventid(/antivirus-vm/eventlog[Microsoft-Windows-Windows Defender/Operational,,,,1116,,skip],#1,"1")>1
Trigger:
logeventid(/antivirus-vm/eventlog[Microsoft-Windows-Windows Defender/Operational,,,,1116,,skip],#1,"1")>1
Das funktioniert schon mal, in der Email sieht man den kompletten Inhalt der Ereignis ID inklusive dem Pfad wo Defender den Fund gemacht hat.
Nur:
Defender meldet mehrere Funde gleichzeitig erst am Ende des Scans und schreibt mehrere Ereignisse gleichzeitig in die Event Datenbank. Zabbix registriert nur das letzte Event und man könnte so ein paar Pfade von Treffern übersehen. Es bleibt dann nichts anderes übrig als sich nochmal mit der Ereignisanzeige zu verbinden und alle Ereignisse des Tages zu durchsuchen.
Ist es möglich eine Email "pro Event" zu versenden? Evtl mit anderen Mitteln?
Danke schon mal and keep rockin'
Der Mike
ich hätte gerne, dass mir Funde vom Defender als Email versendet werden. In der Email sollten dann die dementsprechenden Pfade zu sehen sein, wo der Admin schauen soll.
Defender meldet es als Ereignis ID 1116.
Ich habe, weil es bereits vorhanden ist, Zabbix damit gefüttert:
Item:
logeventid(/antivirus-vm/eventlog[Microsoft-Windows-Windows Defender/Operational,,,,1116,,skip],#1,"1")>1
Trigger:
logeventid(/antivirus-vm/eventlog[Microsoft-Windows-Windows Defender/Operational,,,,1116,,skip],#1,"1")>1
Das funktioniert schon mal, in der Email sieht man den kompletten Inhalt der Ereignis ID inklusive dem Pfad wo Defender den Fund gemacht hat.
Nur:
Defender meldet mehrere Funde gleichzeitig erst am Ende des Scans und schreibt mehrere Ereignisse gleichzeitig in die Event Datenbank. Zabbix registriert nur das letzte Event und man könnte so ein paar Pfade von Treffern übersehen. Es bleibt dann nichts anderes übrig als sich nochmal mit der Ereignisanzeige zu verbinden und alle Ereignisse des Tages zu durchsuchen.
Ist es möglich eine Email "pro Event" zu versenden? Evtl mit anderen Mitteln?
Danke schon mal and keep rockin'
Der Mike
Please also mark the comments that contributed to the solution of the article
Content-ID: 667933
Url: https://administrator.de/contentid/667933
Printed on: October 15, 2024 at 03:10 o'clock
11 Comments
Latest comment
Ist es möglich eine Email "pro Event" zu versenden? Evtl mit anderen Mitteln?
Eventtrigger im Taskplaner importieren:<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<URI>\Aufgaben der Ereignisanzeige\Windows Defender Malware Notification</URI>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription><QueryList><Query Id="0" Path="Microsoft-Windows-Windows Defender/Operational"><Select Path="Microsoft-Windows-Windows Defender/Operational">*[System[(EventID=1116)]]</Select></Query></QueryList></Subscription>
<ValueQueries>
<Value name="EventRecordID">Event/System/EventRecordID</Value>
</ValueQueries>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-18</UserId>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>powershell</Command>
<Arguments>-EP ByPass -File "C:\malware-info.ps1" -eventrecordid $(EventRecordID)</Arguments>
</Exec>
</Actions>
</Task>
Powershell Script anlegen (Beispiel: C:\malware-info.ps1
param(
[string]$eventrecordid
)
$event = Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" -FilterXPath "*[System/EventRecordID = '$eventrecordid']"
if ($event){
Send-MailMessage -From 'from@domain.tld' -To 'to@domain.tld' -Subject "New Malware Threat" -Body $event.Message -SmtpServer 'smpt.domain.tld' -Port 587 -UseSsl -Encoding ([System.Text.Encoding]::UTF8) -Credential (new-Object PSCredential('USERNAME',(ConvertTo-SecureString 'PASS' -AsPlainText -Force)))
}
Schon kommt bei jedem 1116 Event eine Mail mit den Infos aus dem Event.
Gruß
Zitat von @NordicMike:
Was ich noch nicht aus dem Code erkannt habe: Wie merkt es sich welche EventRecordId bereits bearbeitet wurde und welche "noch" nicht?
Die EventRecordID wird aus dem Event als Variable an das Skript übergeben somit entspricht das Event automatisch dem durch welches es getriggert wurde .Was ich noch nicht aus dem Code erkannt habe: Wie merkt es sich welche EventRecordId bereits bearbeitet wurde und welche "noch" nicht?
Die Variable wurde im XML des Triggers deklariert
<ValueQueries>
<Value name="EventRecordID">Event/System/EventRecordID</Value>
</ValueQueries>
so wird sie an das Skript als Parameter übergeben
-eventrecordid $(EventRecordID)
Und hier wird die Variable im Skript in den Filter für die Abfrage des Events eingebaut
......... -FilterXPath "*[System/EventRecordID = '$eventrecordid']"
Du kannst auch direkt einzelne Werte aus dem Event direkt an das Skript übergeben wenn du nicht alle brauchst, so verringert halt man nur die Anzahl der an das Skript übergebenen Parameter wenn man alle Eigenschaften des Events benötigt.
Zitat von @NordicMike:
Hmmm... aber er kann sich nicht "merken", dass diese Event ID bereits gesendet wurde. Beim nächsten Durchlauf wird doch die selbe Event ID wieder verarbeitet und gesendet, oder nicht?
Hmmm... aber er kann sich nicht "merken", dass diese Event ID bereits gesendet wurde. Beim nächsten Durchlauf wird doch die selbe Event ID wieder verarbeitet und gesendet, oder nicht?
Nein! Die EventRecordID ist immer die aus dem jeweiligen Event, die wird aus dem Event extrahiert und an das Skript per Parameter übergeben, das ist ja der Trick 😉....
Du verwechselst hier EventID mit EventRecordID, das sind zwei ganz unterschiedliche IDs!
Das erste ist der Typ eines Events und das zweite der eindeutige Bezeichner des Events innerhalb des Defender Logs.
Zitat von @NordicMike:
Ich glaube jetzt bin ich der Sache auf der Spur: Die Aufgabenplanung wird nicht alle paar Minuten das Script neu starten, sondern nur, wenn ein neues Event rein kommt.
So ist es, deswegen heißen die Dinger "Eventtrigger" 🙂Ich glaube jetzt bin ich der Sache auf der Spur: Die Aufgabenplanung wird nicht alle paar Minuten das Script neu starten, sondern nur, wenn ein neues Event rein kommt.
Vermutlich holt sich das Script auch nur die Letzte.
Nö, klappt hier einwandfrei bei allen Events (Server 2022) ...Im Moment hänge ich, dass Send-MailMessage den Body "$event.Message" nicht mag. Es kommt nicht zur Sendung.
Kann ich nicht nachvollziehen, klappt hier im Test auch einwandfrei, Body des Events kommt problemlos an.Lass dir doch einfach mal die Fehlermeldungen in eine Datei ausgeben, Start-Transcript ist dein Freund