Custom Decoder & Rules korrekt umsetzen (inkl. typischer Stolperfallen)
Einleitung
Viele Organisationen betreiben CMS-basierte Webanwendungen wie Drupal und stehen vor der Herausforderung, End-of-Life-Versionen (EOL) zuverlässig zu erkennen.
Wazuh bietet dafür alle notwendigen Bausteine – Logsammlung, Decoder und Regeln – allerdings mit einigen syntaktischen und logischen Feinheiten.
Dieser Artikel zeigt anhand eines realen Community-Falls:
- wie Drupal-Versionen korrekt dekodiert werden
- warum Regeln trotz korrektem Decoder nicht feuern
- und wie man das Problem sauber und regelkonform löst
1. Ausgangssituation & Ziel
Ziel
Wazuh soll Alarm schlagen, wenn eine nicht unterstützte Drupal-Version auf einem Webserver erkannt wird.
Voraussetzungen
- Webserver loggt Drupal-Versionen (z. B. via Skript oder Health-Check)
- Wazuh Agent liest das Log korrekt ein
- Decoder extrahiert:
urldrupal_version(Major.Minor)
Beispiel-Log:
test1.com : 10.5.4
test2.com : 11.2
2. Custom Decoder – korrekt und bewusst reduziert
Da nur Major.Minor relevant sind (Patchlevel ignorieren), ist folgender Decoder sinnvoll:
<decoder name="drupal_version">
<prematch> : </prematch>
<regex type="pcre2">^(\S+)\s:\s([0-9]+\.[0-9]+)</regex>
<order>url,drupal_version</order>
</decoder>
Ergebnis im wazuh-logtest
Phase 2: Completed decoding.
name: 'drupal_version'
url: 'test1.com'
drupal_version: '10.5'
📌 Wichtig:
Decoder funktionieren korrekt – das Problem liegt nicht hier.
3. Der erste Fehler: Regel ohne Kontext
Der ursprüngliche Regelversuch:
<rule id="100051" level="10">
<field name="drupal_version" negate="yes">^(10\.5|11\.2)$</field>
</rule>
Typischer Fehler
ERROR: (5107): Syntax error on tag 'drupal_version'
Ursachen
- Kein Bezug zum Decoder
- Regel wird isoliert ausgeführt
- Wazuh weiß nicht, wann diese Regel geprüft werden soll
📌 In Wazuh gilt:
Regeln müssen immer an einen Decoder oder eine Parent-Rule gebunden sein
4. Die korrekte Lösung: Parent-Rule + Child-Rule
Schritt 1: Baseline-Regel (Decoder-Bindung)
<rule id="100052" level="0">
<decoded_as>drupal_version</decoded_as>
<description>Drupal Version erkannt</description>
</rule>
Diese Regel:
- verknüpft den Decoder mit dem Regelwerk
- erzeugt keinen Alert
- dient als Einstiegspunkt (
if_sid)
Schritt 2: EOL-Prüfung als Folge-Regel
<rule id="100053" level="3">
<if_sid>100052</if_sid>
<field name="drupal_version" negate="yes" type="pcre2">10.5|11.2</field>
<description>
Unsupported Drupal version detected on $(url): $(drupal_version)
</description>
</rule>
Funktionsweise
- Regel 100053 wird nur geprüft, wenn:
- Decoder
drupal_versionaktiv war
- Decoder
- Alert feuert, wenn:
- Version nicht
10.5oder11.2ist
- Version nicht
5. Warum diese Struktur zwingend notwendig ist
Wazuh Regel-Pipeline (vereinfacht)
- Log → Decoder
- Decoder → Parent-Rule (
decoded_as) - Parent-Rule → Child-Rules (
if_sid) - Feldbedingungen → Alert
Ohne diesen Ablauf:
- wird die Regel nie evaluiert
- oder führt zu Syntax-Fehlern
6. Regex-Best Practices in Wazuh
<field>nutzt OSRegex oder PCRE2- Für Versionsvergleiche:
- PCRE2 verwenden
- Klammern, Punkte, Pipes bewusst einsetzen
📘 Offizielle Regex-Doku:
- Wazuh Regex Syntax
https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/regex.html
7. Drupal EOL – externe Referenzen
Damit die Regel fachlich korrekt bleibt, sollte sie sich an offiziellen Drupal-Lifecycle-Informationen orientieren:
- Drupal Release & EOL Policy
https://www.drupal.org/about/core/policies/core-release-cycle - Aktuelle Drupal Versionen
https://www.drupal.org/project/drupal
➡️ Empfehlung:
EOL-Versionen regelmäßig prüfen und Regex anpassen.
8. Zusammenfassung
Was war das Problem?
- Regel war syntaktisch korrekt, aber logisch nicht eingebunden
Was ist die Lösung?
- Trennung in:
- Decoder-Rule
- Prüf-Rule mit
if_sid
Best Practice
- Decoder ≠ Regel
- Eine Regel = eine Aufgabe
- Kontext immer explizit herstellen
9. Weiterführende Wazuh-Quellen
- Custom Rules
https://documentation.wazuh.com/current/user-manual/ruleset/rules/custom.html - Rules Syntax
https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/rules.html - Decoder Syntax
https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/decoders.html - wazuh-logtest
https://documentation.wazuh.com/current/user-manual/reference/tools/wazuh-logtest.html
Fazit
Mit der richtigen Regelstruktur eignet sich Wazuh hervorragend für Compliance-Checks, EOL-Überwachung und Application Security Monitoring – auch jenseits klassischer System-Logs.
🛡️ Decoder liefern Kontext – Regeln liefern Bedeutung.
https://wazuh.slack.com/archives/C07CCCCGHHP/p1766134461965409