SIEM Echtzeit Alarmierung

Wazuh sendet SIEM-Alerts in Echtzeit per ntfy – einfache Integration mit Skript und Konfigurationsupdate.

SIEM Echtzeit Alarmierung

Ich hatte bereits mehrfach über mein SIEM geschrieben. Gelegentlich habe ich auch erwähnt, dass ich Realtime-Informationen bevorzuge. Da ich seit einiger Zeit auf NTFY umgestiegen bin, musste auch wazuh damals entsprechend umgebaut werden, was deutlich einfacher funktionierte, als ich dachte.

Push-Server

Damit überhaupt Nachrichten verschickt werden, braucht man einen Benachrichtigungs-Server: NFTY.

Eigener Push-Notification-Service
Selbstgehostete Push-Benachrichtigungen mit ntfy.

Nachrichten würde ich folgendermaßen versenden:

curl -u "$MM_API_USER":"$MM_API_PASS" -H "Title: SIEM-Alert" -H "Priority: 3" -H "Tag: skull" -d "$ALERT" https://push.mein-server.de/siem

Jetzt muss wazuh noch passend konfiguriert werden.

wazuh-Config anpassen

Damit wazuh weiß, wann eine Nachricht zu senden ist, muss die zentrale Konfiguration angepasst werden. Ich habe folgenden Abschnitt hinzugefügt:

 <command>  
   <name>wazuh2ntfy</name>  
   <executable>wazuh2ntfy.sh</executable>  
   <timeout_allowed>no</timeout_allowed>  
 </command>  
      
<active-response>  
 <command>wazuh2ntfy</command>  
 <location>server</location>  
 <level>11</level>  
</active-response>

Darin erkläre ich zuerst das neue Script. Im zweiten Abschnitt definiere ich, wann es genutzt werden soll. In diesem Fall starte ich es auf dem Wazuh-Server, sobald der Alarm-Level 11 oder größer ist.

Das wazuh Benachrichtigungs-Script

Es ist extrem wichtig, dass dieses Script dem User root:wazuh gehört. Es muss im Verzeichnis /var/ossec/active-response/bin/ liegen und den Rechten 750 ausgestattet sein. Ist das nicht der Fall, startet der wazuh-manager nicht mehr.

root@wazuh:~ # ls -ls /var/ossec/active-response/bin/
total 288
...
24 -rwxr-x--- 1 root wazuh 21032 Jan 15 12:07 firewall-drop
20 -rwxr-x--- 1 root wazuh 19336 Jan 15 12:07 host-deny
...
4 -rwxr-x--- 1 root wazuh   389 Feb  2 14:08 wazuh2ntfy.sh
...

Wenn wazuh das Script aufruft, wird der Alarm über STDOUT auf das Script umgeleitet. Man kann ihn folglich über STDIN entgegennehmen. Ein Alarm sieht im Wesentlichen so aus:

{
  "timestamp": "2025-02-06T07:08:33.330-0500",
  "rule": {
    "level": 3,
    "description": "Host Blocked by firewall-drop Active Response",
    "id": "651",
    "firedtimes": 8,
    "mail": false,
    "groups": [
      "ossec",
...
   "data": {
    "srcip": "190.156.238.162",
    "version": "1",
    "origin": {
      "name": "node01",
      "module": "wazuh-execd"
    },
    "command": "add",
    "parameters": {
      "extra_args": [],
      "alert": {
        "timestamp": "2025-02-06T07:08:31.459-0500",
        "rule": {
          "level": "5",
          "description": "sshd: Attempt to login using a non-existent user",
          "id": "5710",
          "mitre": {
            "id": [
...

Vielleicht ist das Feld "firedtimes": 8 aufgefallen. Dieses werte ich in einer späteren Rule aus.

Uns interessiert hier für die Echtzeitnachricht die description und die scrip.

#!/bin/bash

MM_API_USER="api"
MM_API_PASS="ux7Ttf0Omfqwp2yvhTSmpcMRJakJfbsxTQMmdY1"

# Alarm-Daten aus der Standardeingabe (stdin) lesen
ALARM_MESSAGE="$(cat -)"

# Extrahiert die Beschreibung
description="$(echo $ALARM_MESSAGE | jq -r '.rule.description')"

# Extrahiert die Source IP
source_ip="$(echo $ALARM_MESSAGE | jq -r '.data.srcip')"

# Nachricht an ntfy senden
curl -u "$MM_API_USER:$MM_API_PASS" -H "Title: SIEM-ALERT" -H "Priority: 3" -H "Tag: skull" -d "${source_ip}: ${description}" https://push.my-server.net/siem

exit 0

Der Test

Ich habe eine Rule geschrieben, die beobachtet, ob nach vielen fehlgeschlagenen Loginversuchen plötzlich ein erfolgreicher Login vom selben Host erfolgt. Vereinfacht gesagt: Ob eine Brute-Force-Attack erfolgreich war. Sie ist mit Level 12 eingestuft.

Größte Passwort-Liste zum Download verfügbar
Die RockYou Liste gilt als beste Wortliste, um Passwörter zu knacken. Jetzt ist eine 10 Milliarden Einträge lange Liste online gestellt worden.

Ich werde versuchen diese Rule mit hydra auszulösen:

hydra -l locadmin -P /usr/share/wordlists/rockyou.txt mmcenter.dyndns.org ssh
^C
ssh locadmin@mmcenter.dyndns.org
...

Durch den zertifikatsbasierten Login ist kein Passwort erforderlich und der Alarm kommt sofort:

Fazit

Die Integration von wazuh mit ntfy ermöglicht eine einfache und effiziente Echtzeit-Benachrichtigung für SIEM-Alerts. Durch die Anpassung der Wazuh-Konfiguration und ein simples Bash-Skript werden sicherheitsrelevante Ereignisse sofort per Push-Nachricht übermittelt. Die Lösung ist leicht umzusetzen, zuverlässig und flexibel anpassbar.