|
|
| Zeile 1: |
Zeile 1: |
| =Wazuh-Anbindung der WAF (Coraza)=
| | *[[Wazuh-Anbindung der WAF (Coraza) Debian]] |
| Die '''WAF''' (HAProxy + Coraza-SPOA) liefert die Abwehr-Telemetrie an das SIEM: welcher Angriff wurde von welcher Regel geblockt. Das ergänzt die VulnSite-Sicht — dort sieht Wazuh den Angriffsversuch im Apache-Log, hier sieht es die '''Abwehr davor'''.
| | *[[Wazuh-Anbindung der WAF (Coraza) Rocky]] |
| | |
| '''Hinweis:''' Wazuhs eingebaute ModSecurity-Regeln greifen nur auf das Apache-error.log klassischer ModSecurity. Coraza-SPOA schreibt ein eigenes Audit-Log und läuft nicht über Apache — daher binden wir das Coraza-JSON-Audit-Log ein und ergänzen einen eigenen Decoder samt Regel auf dem Manager.
| |
| | |
| ==== Repository einrichten ====
| |
| ;GPG-Schlüssel importieren
| |
| <syntaxhighlight lang="bash">
| |
| curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import
| |
| chmod 644 /usr/share/keyrings/wazuh.gpg
| |
| </syntaxhighlight>
| |
| ;Repository hinzufügen
| |
| <syntaxhighlight lang="bash">
| |
| echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" > /etc/apt/sources.list.d/wazuh.list
| |
| apt update
| |
| </syntaxhighlight>
| |
| | |
| ==== Agent installieren ====
| |
| ;Agent mit Manager-Adresse und Namen installieren
| |
| <syntaxhighlight lang="bash">
| |
| WAZUH_MANAGER="wazuh.dkbi.com" WAZUH_AGENT_NAME="waf" apt install -y wazuh-agent
| |
| </syntaxhighlight>
| |
| ;Dienst aktivieren und starten
| |
| <syntaxhighlight lang="bash">
| |
| systemctl daemon-reload
| |
| systemctl enable --now wazuh-agent
| |
| </syntaxhighlight>
| |
| ;Repository deaktivieren
| |
| <syntaxhighlight lang="bash">
| |
| sed -i "s/^deb /#deb /" /etc/apt/sources.list.d/wazuh.list
| |
| apt update
| |
| </syntaxhighlight>
| |
| | |
| ==== Coraza-Audit-Log auf JSON umstellen ====
| |
| Das Audit-Log liegt standardmäßig im nativen ModSecurity-Format (Multiline mit Trennern wie ''--aaCuCNaqNi-A--''). Das kann Wazuh nicht sauber parsen. Auf JSON umstellen.
| |
| ;In ''/etc/coraza-spoa/coraza-spoa.yaml'' ergänzen
| |
| <pre>
| |
| SecAuditLogFormat JSON
| |
| </pre>
| |
| ;Daemon neu starten
| |
| * systemctl restart coraza-spoa
| |
| ;Eine Zeile prüfen — muss jetzt mit { beginnen
| |
| * tail -1 /var/log/coraza/audit.log
| |
| | |
| ==== Audit-Log anbinden ====
| |
| ;In ''/var/ossec/etc/ossec.conf'' auf der WAF
| |
| <pre>
| |
| <localfile>
| |
| <log_format>json</log_format>
| |
| <location>/var/log/coraza/audit.log</location>
| |
| </localfile>
| |
| </pre>
| |
| | |
| ==== Leserechte für den Agent ====
| |
| Der ''wazuh''-User muss das Audit-Log lesen können, sonst werden keine Ereignisse übertragen.
| |
| ;Zugriff testen
| |
| * sudo -u wazuh cat /var/log/coraza/audit.log > /dev/null
| |
| ;Bei "Permission denied" Gruppe/Rechte setzen
| |
| <syntaxhighlight lang="bash">
| |
| chmod 640 /var/log/coraza/audit.log
| |
| setfacl -m u:wazuh:rx /var/log/coraza/
| |
| setfacl -m u:wazuh:r /var/log/coraza/audit.log
| |
| </syntaxhighlight>
| |
| === Neustarten des Wazuh Agents ===
| |
| *systemctl restart wazuh-agent.service
| |
| | |
| ==== Decoder und Regel (auf dem Wazuh-Manager) ====
| |
| Coraza-JSON wird vom generischen JSON-Decoder zerlegt, aber von keiner eingebauten Regel klassifiziert. Beides ergänzen.
| |
| | |
| ;Decoder in ''/var/ossec/etc/decoders/local-coraza_decoders.xml''
| |
| <pre>
| |
| <decoder name="coraza-audit">
| |
| <prematch>^{"transaction":</prematch>
| |
| <plugin_decoder>JSON_Decoder</plugin_decoder>
| |
| </decoder>
| |
| </pre>
| |
| ;Regel in ''/var/ossec/etc/rules/local_rules.xml'' ergänzen
| |
| <pre>
| |
| <group name="coraza,waf,">
| |
| <rule id="100100" level="0">
| |
| <decoded_as>json</decoded_as>
| |
| <field name="transaction.client_ip">\.+</field>
| |
| <description>Coraza WAF Audit-Log.</description>
| |
| </rule>
| |
| <rule id="100101" level="10">
| |
| <if_sid>100100</if_sid>
| |
| <field name="transaction.is_interrupted">true</field>
| |
| <description>Coraza WAF: Angriff geblockt auf $(transaction.request.uri) von $(transaction.client_ip).</description>
| |
| <group>attack,web,</group>
| |
| </rule>
| |
| </group>
| |
| </pre>
| |
| ;Eigentümer und Rechte setzen
| |
| <syntaxhighlight lang="bash">
| |
| chown wazuh:wazuh /var/ossec/etc/decoders/local-coraza_decoders.xml /var/ossec/etc/rules/local_rules.xml
| |
| chmod 660 /var/ossec/etc/decoders/local-coraza_decoders.xml /var/ossec/etc/rules/local_rules.xml
| |
| </syntaxhighlight>
| |
| ;Vor dem Neustart mit logtest prüfen — eine echte JSON-Audit-Zeile reinpasten
| |
| * /var/ossec/bin/wazuh-logtest
| |
| Erwartete Ausgabe: ''transaction.is_interrupted: 'true''' in Phase 2 und ''Rule id: '100101''' in Phase 3.
| |
| ;Erst dann Manager neu starten
| |
| * systemctl restart wazuh-manager
| |
| | |
| ==== Kontrolle ====
| |
| ;Angriff von der Kali gegen die WAF
| |
| <syntaxhighlight lang="bash">
| |
| curl "http://waf.it213.xinmen.de/?id=1'+OR+'1'='1"
| |
| </syntaxhighlight>
| |
| ;Im Dashboard
| |
| * Öffne ''Threat Hunting'', Filter ''rule.id:100101''
| |
| * Der Alert "Coraza WAF: Angriff geblockt" muss erscheinen
| |
| | |
| [[Kategorie:WAZUH]]
| |
| [[Kategorie:Coraza]]
| |