Drupal EOL-Erkennung mit Wazuh

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:
    • url
    • drupal_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

  1. Kein Bezug zum Decoder
  2. Regel wird isoliert ausgeführt
  3. 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_version aktiv war
  • Alert feuert, wenn:
    • Version nicht 10.5 oder 11.2 ist

5. Warum diese Struktur zwingend notwendig ist

Wazuh Regel-Pipeline (vereinfacht)

  1. Log → Decoder
  2. Decoder → Parent-Rule (decoded_as)
  3. Parent-Rule → Child-Rules (if_sid)
  4. 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:


7. Drupal EOL – externe Referenzen

Damit die Regel fachlich korrekt bleibt, sollte sie sich an offiziellen Drupal-Lifecycle-Informationen orientieren:

➡️ 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


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