Einleitung
In produktiven SIEM-Umgebungen mit Wazuh ist ein präzises Alert-Tuning essenziell. Gerade auf Windows-Systemen entstehen regelmäßig Events, die sicherheitsrelevant erscheinen, in der Praxis jedoch legitime Systemprozesse darstellen. Ein typisches Beispiel sind temporäre Dateien mit dem Präfix __PSScriptPolicyTest_, die im Zusammenhang mit PowerShell-Ausführungsrichtlinien erzeugt werden.
Wenn diese Dateien durch Windows Event Logs erfasst werden, können mehrere Wazuh-Regeln aus dem Windows-Sysmon- oder Security-Regelwerk ausgelöst werden. Ohne gezielte Filterung führt dies zu unnötigen Alerts und erhöhtem Rauschen im SIEM. Dieser Artikel zeigt, wie solche Events korrekt über eine Custom Rule unterdrückt werden, wenn bestimmte Dateipfade im Feld win.eventdata.targetFilename auftreten.
Ausgangslage / Problemstellung
In einer Wazuh-Installation wurden regelmäßig Alerts durch die folgenden Regel-IDs erzeugt:
92201922059221292213
Diese Regeln reagierten auf Dateioperationen, bei denen temporäre PowerShell-Testdateien erzeugt wurden. Die betroffenen Dateipfade hatten stets das folgende Muster:
C:\Windows\Temp\__PSScriptPolicyTest_*
C:\Windows\SystemTemp\__PSScriptPolicyTest_*
C:\Users\<user>\AppData\Local\Temp\__PSScriptPolicyTest_*
Ziel war es, diese Events vollständig zu unterdrücken, indem eine Custom Rule mit Level 0 erstellt wird. Dadurch werden entsprechende Alerts im Wazuh Manager ignoriert.
Eine erste Implementierung sah folgendermaßen aus:
<rule id="121233" level="0">
<if_sid>92201,92205,92212,92213</if_sid>
<match>C:\\Windows\\Temp\\__PSScriptPolicyTest_|C:\\Windows\\SystemTemp\\__PSScriptPolicyTest_.*|C:\\Users\\<user>\\AppData\\Local\\Temp\\__PSScriptPolicyTest_.*</match>
<options>no_full_log</options>
<description>Ignore RULE</description>
</rule>
Die Regel wurde jedoch nicht ausgelöst und die Alerts blieben weiterhin aktiv.
Technische Analyse
Die Ursache lag in der Verwendung des falschen Matching-Mechanismus innerhalb der Wazuh-Regel.
Problem 1: Verwendung von <match>
Das <match>-Element durchsucht den kompletten Log-String nach einem Pattern. In strukturierten Windows-Events arbeitet Wazuh jedoch mit dekodierten Feldern, die gezielt adressiert werden können.
Der relevante Wert befindet sich in:
win.eventdata.targetFilename
Wenn stattdessen <match> verwendet wird, erfolgt keine gezielte Prüfung auf dieses Feld.
Problem 2: Regex-Escaping für Windows-Pfade
Windows-Dateipfade enthalten Backslashes (\). In Wazuh-Regeln müssen diese:
- Für XML interpretiert werden
- Für Regex korrekt escaped sein
Dadurch entsteht ein doppeltes Escaping.
Beispiel:
C:\Windows\Temp
wird in der Regel zu:
C:\\\\Windows\\\\Temp
Problem 3: Feldbasierte Filterung
Wazuh unterstützt direkte Feldprüfungen über das <field>-Element. Dadurch kann eine Regel exakt auf den Wert eines dekodierten Logfeldes reagieren.
Dies ist wesentlich robuster als ein globales Pattern-Matching.
Lösung / Best Practices
Die korrekte Lösung besteht darin, das Feld win.eventdata.targetFilename direkt zu prüfen und die Regel auf die betroffenen Rule-IDs zu beschränken.
Die funktionierende Custom Rule lautet:
<rule id="121233" level="0">
<if_sid>92201,92205,92212,92213</if_sid>
<field name="win.eventdata.targetFilename" type="pcre2">
C:\\\\Windows\\\\Temp\\\\__PSScriptPolicyTest_.*|
C:\\\\Windows\\\\SystemTemp\\\\__PSScriptPolicyTest_.*|
C:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\__PSScriptPolicyTest_.*
</field>
<options>no_full_log</options>
<description>Ignore PowerShell Script Policy Test Files</description>
</rule>
Funktionsweise der Regel
- if_sid
Die Regel wird nur angewendet, wenn eine der folgenden Regeln bereits ausgelöst wurde:- 92201
- 92205
- 92212
- 92213
- field-Prüfung
Das Feldwin.eventdata.targetFilenamewird gegen einen PCRE2-Regex geprüft. - Regex-Muster
Die Regel erkennt drei mögliche Pfade:
C:\Windows\Temp\__PSScriptPolicyTest_*
C:\Windows\SystemTemp\__PSScriptPolicyTest_*
C:\Users\*\AppData\Local\Temp\__PSScriptPolicyTest_*
- Level 0
Events, die diese Bedingungen erfüllen, werden vollständig unterdrückt.
Deployment-Schritte
- Regel in einer Custom Rules Datei ablegen, z. B.:
/var/ossec/etc/rules/local_rules.xml
- Wazuh Manager neu starten:
systemctl restart wazuh-manager
- Funktion testen:
/var/ossec/bin/wazuh-logtest
Lessons Learned / Best Practices
1. Immer feldbasierte Regeln verwenden
Bei strukturierten Logs (Windows Events, JSON Logs) sollte immer <field> statt <match> verwendet werden.
2. Regex-Escaping sorgfältig prüfen
Windows-Pfade benötigen doppeltes Escaping:
\ → \\\\
Fehler in diesem Bereich führen häufig dazu, dass Regeln nicht matchen.
3. Alert-Suppression gezielt auf Parent-Regeln beschränken
Mit <if_sid> wird verhindert, dass die Regel unbeabsichtigt andere Events beeinflusst.
4. Regeln immer mit wazuh-logtest validieren
Damit lassen sich Parsing- und Regex-Probleme sofort erkennen.
5. Temporäre Systemdateien frühzeitig filtern
Viele Windows-Systemprozesse erzeugen temporäre Artefakte. Werden diese nicht gefiltert, steigt die Alert-Frequenz unnötig.
Fazit
Das Unterdrücken legitimer Systemereignisse ist ein zentraler Bestandteil eines sauberen SIEM-Betriebs. In Wazuh sollten hierfür gezielte Feldprüfungen genutzt werden, anstatt globale Log-Matches.
Durch die Kombination aus <if_sid> und einer feldbasierten Regex-Prüfung auf win.eventdata.targetFilename lassen sich PowerShell-Testdateien zuverlässig ignorieren, ohne das übrige Regelwerk zu beeinflussen. Das reduziert Alert-Noise erheblich und sorgt für eine präzisere Erkennung tatsächlich sicherheitsrelevanter Aktivitäten.
Quellen
Wazuh Rules Syntax
https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/rules.html#field
Wazuh Regex Syntax
https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/regex.html
Mehr zu Wazuh …
https://wazuh.com/?utm_source=ambassadors&utm_medium=referral&utm_campaign=ambassadors+program
Mehr zum Wazuh Ambassador Program …
https://wazuh.com/ambassadors-program/?utm_source=ambassadors&utm_medium=referral&utm_campaign=ambassadors+program
https://wazuh.slack.com/archives/C0A933R8E/p1772695158154109