Wazuh Custom Rule greift nicht bei JSON-Logs: Sonderzeichen in korrekt escapen

Aus maxTechCorner

Ausgangslage

Ein Nutzer wollte ModSecurity-Events im JSON-Format mit einer eigenen Wazuh-Regel erkennen. Die Regel sah korrekt aus, erzeugte aber keine Alerts, obwohl die Events sauber dekodiert wurden.

Regel (ursprünglich):

<group name="modsecurity,web">
  <rule id="100001" level="3">
    <decoded_as>json</decoded_as>
    <field name="transaction.producer.modsecurity">
      ModSecurity v3.0.14 (Linux)
    </field>
    <description>ModSecurity request observed</description>
  </rule>
</group>

Beispiel-Event (Auszug):

"producer": {
  "modsecurity": "ModSecurity v3.0.14 (Linux)",
  "connector": "ModSecurity-nginx v1.0.4"
}

Trotz passendem Feldinhalt wurde kein Alert generiert.

Ursache

Der entscheidende Punkt: Das <field>-Element in Wazuh-Regeln nutzt OS_Regex (osregex)nicht einen reinen String-Vergleich.

In osregex haben bestimmte Zeichen eine Sonderbedeutung, darunter:

  • ( und )

Diese müssen escaped werden, sonst passt der Regex nicht auf den tatsächlichen Feldwert.

Lösung

Die Klammern im Feldwert müssen mit \( und \) escaped werden.

Korrigierte Regel:

<group name="modsecurity,web">
  <rule id="100001" level="3">
    <decoded_as>json</decoded_as>
    <field name="transaction.producer.modsecurity">
      ModSecurity v3.0.14 \(Linux\)
    </field>
    <description>ModSecurity request observed</description>
  </rule>
</group>

Ergebnis

Nach der Anpassung:

  • wazuh-logtest zeigt korrekt:

Phase 2: JSON-Decoding erfolgreich

  • Phase 3: Regel 100001 matched

Alert wird wie erwartet erzeugt

Dashboard zeigt ModSecurity-Events zuverlässig an

Best Practices für Wazuh-Regeln mit <field>

  • <field> verwendet immer osregex
  • Sonderzeichen immer escapen, z. B.:

(\(

  • )\)
  • .\.
  • +\+

Alternativ: bewusst Regex-Patterns nutzen, z. B.: <field name="transaction.producer.modsecurity">ModSecurity v3\.</field>

Takeaway

Wenn eine Regel bei JSON-Logs scheinbar „korrekt aussieht“, aber nicht feuert, ist die Ursache sehr häufig Regex-Syntax. Ein schneller Check: Enthält der Match-String Sonderzeichen? Wenn ja → escapen 👍

https://wazuh.slack.com/archives/C0A933R8E/p1765724985798659

Mehr zu Wazuh …

Mehr zum Wazuh Ambassador Program …

Quelle

Dieser Artikel stammt aus dem Wazuh-Blog von m.a.x. it (veröffentlicht am 23. Februar 2026).

Unterstützung von m.a.x. it

Bei Einführung, Betrieb und Feintuning von Wazuh (SIEM) unterstützt Sie m.a.x. it mit SIEM-Services auf Open-Source-Basis.


Über m.a.x. it Die m.a.x. Informationstechnologie AG ist seit über 30 Jahren IT-Partner mittelständischer und großer Unternehmen in München und bietet maßgeschneiderte Lösungen und Services in den Bereichen Cloud, Cybersecurity, Netzwerk, Windows, Linux und Softwareentwicklung. Sie haben eine Frage zu diesem Artikel oder brauchen Unterstützung? Kontakt aufnehmen