So erstellen Sie ein SIEM mit Suricata und Elastic Stack auf Rocky Linux 8

Einführung

Die vorherigen Anleitungen in dieser Serie haben Sie durch die Installation, Konfiguration und Ausführung von Suricata als Intrusion Detection (IDS) und Intrusion Prevention (IPS) System geführt. Sie haben auch etwas über Suricata-Regeln gelernt und wie Sie Ihre eigenen erstellen können.

In diesem Tutorial werden Sie erkunden, wie Sie Suricata mit Elasticsearch, Kibana und Filebeat integrieren können, um mit dem Elastic Stack und Rocky Linux 8 Ihr eigenes Security Information and Event Management (SIEM)-Tool zu erstellen. SIEM-Tools werden verwendet, um Ereignisdaten zu sammeln, zu aggregieren, zu speichern und zu analysieren, um nach Sicherheitsbedrohungen und verdächtigen Aktivitäten in Ihren Netzwerken und Servern zu suchen.

Die Komponenten, die Sie verwenden werden, um Ihr eigenes SIEM zu erstellen, sind:

  • Elasticsearch zur Speicherung, Indizierung, Korrelation und Suche der Sicherheitsereignisse, die von Ihrem Suricata-Server stammen.
  • Kibana zur Anzeige und Navigation durch die Sicherheitsereignisprotokolle, die in Elasticsearch gespeichert sind.
  • Filebeat zum Parsen der Suricata-Protokolldatei eve.json und zum Senden jedes Ereignisses zur Verarbeitung an Elasticsearch.
  • Suricata, um Ihren Netzwerkverkehr auf verdächtige Ereignisse zu überprüfen und ungültige Pakete zu protokollieren oder abzuweisen.

Zuerst installieren und konfigurieren Sie Elasticsearch und Kibana mit bestimmten Authentifizierungseinstellungen. Dann fügen Sie Filebeat zu Ihrem Suricata-System hinzu, um dessen eve.json-Protokolle an Elasticsearch zu senden.

Schließlich lernen Sie, wie Sie über SSH und Ihren Webbrowser eine Verbindung zu Kibana herstellen und dann Kibana-Dashboards laden und damit interagieren, die Suricatas Ereignisse und Warnungen anzeigen.

Voraussetzungen

Wenn Sie dieser Tutorialreihe gefolgt sind, sollten Sie bereits Suricata auf einem Rocky Linux-Server ausführen. Dieser Server wird als Ihr Suricata-Server bezeichnet.

Sie benötigen auch einen zweiten Server, auf dem Elasticsearch und Kibana gehostet werden sollen. Dieser Server wird als Ihr Elasticsearch-Server bezeichnet. Es sollte ein Rocky Linux 8-Server mit:

Zu Demonstrationszwecken sollten beide Server in der Lage sein, über private IP-Adressen zu kommunizieren. Sie können eine VPN wie WireGuard verwenden, um Ihre Server zu verbinden, oder einen Cloud-Anbieter verwenden, der ein privates Netzwerk zwischen den Hosts hat. Sie können auch wählen, Elasticsearch, Kibana, Filebeat und Suricata auf demselben Server auszuführen, um zu experimentieren.

Schritt 1 — Elasticsearch und Kibana installieren

Der erste Schritt in diesem Tutorial ist die Installation von Elasticsearch und Kibana auf Ihrem Elasticsearch-Server. Um loszulegen, fügen Sie den Elastic-GPG-Schlüssel mit dem folgenden Befehl auf Ihrem Server hinzu:

  1. sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Erstellen Sie als nächstes eine Datei elasticsearch.repo in Ihrem Verzeichnis /etc/yum/yum.repos.d mit folgendem Inhalt, verwenden Sie vi oder Ihren bevorzugten Editor. Dadurch wird sichergestellt, dass die upstream Elasticsearch-Repositories verwendet werden, wenn neue Pakete über yum installiert werden:

  1. sudo vi /etc/yum.repos.d/elasticsearch.repo
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Wenn Sie vi verwenden, drücken Sie nach Abschluss der Änderungen ESC und dann :x, um die Änderungen in die Datei zu schreiben und zu beenden.

Installieren Sie jetzt Elasticsearch und Kibana mit dem Befehl dnf. Drücken Sie Y, um etwaige Aufforderungen zur GPG-Schlüsselfingerabdrücken zu akzeptieren:

  1. sudo dnf install --enablerepo=elasticsearch elasticsearch kibana

Die Option --enablerepo wird verwendet, um die standardmäßige deaktivierte Einstellung in der Datei /etc/yum.repos.d/elasticsearch.repo zu überschreiben. Mit diesem Ansatz wird sichergestellt, dass die Elasticsearch- und Kibana-Pakete nicht versehentlich aktualisiert werden, wenn Sie andere Paketupdates auf Ihrem Server installieren.

Nachdem Sie die Pakete installiert haben, finden und notieren Sie die private IP-Adresse Ihres Servers mit dem Befehl ip address show:

  1. ip -brief address show

Sie erhalten eine Ausgabe wie folgt:

Output
lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 159.89.122.115/20 10.20.0.8/16 2604:a880:cad:d0::e56:8001/64 fe80::b832:69ff:fe46:7e5d/64 eth1 UP 10.137.0.5/16 fe80::b883:5bff:fe19:43f3/64

Die private Netzwerkschnittstelle in dieser Ausgabe ist das markierte eth1-Gerät mit der IPv4-Adresse 10.137.0.5. Ihr Gerätename und Ihre IP-Adressen werden unterschiedlich sein. Unabhängig von Ihrem Gerätenamen und Ihrer privaten IP-Adresse stammt die Adresse aus einem der folgenden reservierten Blöcke:

  • 10.0.0.0 bis 10.255.255.255 (10/8-Präfix)
  • 172.16.0.0 bis 172.31.255.255 (172.16/12-Präfix)
  • 192.168.0.0 bis 192.168.255.255 (192.168/16-Präfix)

Wenn Sie mehr darüber erfahren möchten, wie diese Blöcke zugewiesen sind, besuchen Sie die RFC 1918-Spezifikation)

Notieren Sie die private IP-Adresse für Ihren Elasticsearch-Server (in diesem Fall 10.137.0.5). Diese Adresse wird im Rest dieses Tutorials als ihre_private_ip bezeichnet. Beachten Sie auch den Namen der Netzwerkschnittstelle, in diesem Fall eth1. Im nächsten Teil dieses Tutorials konfigurieren Sie Elasticsearch und Kibana so, dass sie Verbindungen über die private IP-Adresse von Ihrem Suricata-Server entgegennehmen.

Schritt 2 — Konfiguration von Elasticsearch

Elasticsearch ist standardmäßig so konfiguriert, dass es nur lokale Verbindungen akzeptiert. Darüber hinaus ist keine Authentifizierung aktiviert, sodass Tools wie Filebeat keine Protokolle an Elasticsearch senden können. In diesem Abschnitt des Tutorials werden die Netzwerkeinstellungen für Elasticsearch konfiguriert und dann das integrierte xpack-Sicherheitsmodul von Elasticsearch aktiviert.

Konfiguration der Elasticsearch-Netzwerke

Da Ihre Elasticsearch- und Suricata-Server getrennt sind, müssen Sie Elasticsearch so konfigurieren, dass es Verbindungen über seine private Netzwerkschnittstelle entgegennimmt.

Öffnen Sie die Datei /etc/elasticsearch/elasticsearch.yml mit vi oder Ihrem bevorzugten Editor:

  1. sudo vi /etc/elasticsearch/elasticsearch.yml

Suchen Sie die auskommentierte Zeile #network.host: 192.168.0.1 zwischen den Zeilen 50–60 und fügen Sie eine neue Zeile hinzu, die die Einstellung network.bind_host konfiguriert, wie unten hervorgehoben:

# Standardmäßig ist Elasticsearch nur über localhost erreichbar. Legen Sie hier eine andere
# Adresse fest, um diesen Knoten im Netzwerk freizugeben:
#
#network.host: 192.168.0.1
network.bind_host: ["127.0.0.1", "your_private_ip"]
#
# Standardmäßig lauscht Elasticsearch auf HTTP-Verkehr am ersten freien Port, den es
# ab 9200 findet. Legen Sie hier einen bestimmten HTTP-Port fest:

Ersetzen Sie Ihre private IP-Adresse durch die Ihre_Private_IP Adresse. Diese Zeile stellt sicher, dass Elasticsearch weiterhin unter seiner lokalen Adresse erreichbar ist, damit Kibana darauf zugreifen kann, sowie unter der privaten IP-Adresse für Ihren Server.

Wechseln Sie anschließend zum Ende der Datei mit der vi Tastenkombination SHIFT+G.

Fügen Sie die folgenden hervorgehobenen Zeilen am Ende der Datei hinzu:

. . .
discovery.type: single-node
xpack.security.enabled: true

Die Einstellung discovery.type ermöglicht es Elasticsearch, als einzelner Knoten zu laufen, im Gegensatz zu einem Cluster anderer Elasticsearch-Server. Die Einstellung xpack.security.enabled aktiviert einige der Sicherheitsfunktionen, die in Elasticsearch enthalten sind.

Speichern und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind.

Fügen Sie abschließend Firewall-Regeln hinzu, um sicherzustellen, dass Ihr Elasticsearch-Server über seine private Netzwerkschnittstelle erreichbar ist. Wenn Sie den Voraussetzungstutorials gefolgt sind und firewalld verwenden, führen Sie die folgenden Befehle aus:

  1. sudo firewall-cmd --permanent --zone=internal --change-interface=eth1
  2. sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch
  3. sudo firewall-cmd --permanent --zone=internal --add-service=kibana
  4. sudo systemctl reload firewalld.service

Ersetzen Sie den Namen Ihrer privaten Netzwerkschnittstelle durch eth1 im ersten Befehl, wenn Ihrer anders ist. Dieser Befehl ändert die Schnittstellenregeln, um die internal Firewalld-Zone zu verwenden, die offener ist als die Standard-public-Zone.

Die nächsten Befehle fügen Regeln hinzu, um den Elasticsearch-Datenverkehr auf den Ports 9200 und 9300 sowie den Kibana-Datenverkehr auf Port 5601 zu erlauben.

Der letzte Befehl lädt den Firewalld-Dienst mit den neuen permanenten Regeln neu.

Als Nächstes starten Sie den Elasticsearch-Daemon und konfigurieren dann Passwörter für die Verwendung mit dem xpack-Sicherheitsmodul.

Starten von Elasticsearch

Jetzt, da Sie die Netzwerkeinstellungen und die xpack-Sicherheitseinstellungen für Elasticsearch konfiguriert haben, müssen Sie es starten, damit die Änderungen wirksam werden.

Führen Sie den folgenden systemctl-Befehl aus, um Elasticsearch zu starten:

  1. sudo systemctl start elasticsearch.service

Nachdem Elasticsearch den Startvorgang abgeschlossen hat, können Sie zum nächsten Abschnitt dieses Tutorials übergehen, in dem Sie Passwörter für die Standardbenutzer generieren, die in Elasticsearch integriert sind.

Konfigurieren von Elasticsearch-Passwörtern

Jetzt, da Sie die Einstellung xpack.security.enabled aktiviert haben, müssen Sie Passwörter für die standardmäßigen Elasticsearch-Benutzer generieren. Elasticsearch enthält ein Dienstprogramm im Verzeichnis /usr/share/elasticsearch/bin, das automatisch zufällige Passwörter für diese Benutzer generieren kann.

Führen Sie den folgenden Befehl aus, um in das Verzeichnis zu wechseln und dann zufällige Passwörter für alle Standardbenutzer zu generieren:

  1. cd /usr/share/elasticsearch/bin
  2. sudo ./elasticsearch-setup-passwords auto

Sie erhalten eine Ausgabe wie folgt. Wenn Sie zur Fortsetzung aufgefordert werden, drücken Sie y und dann RETURN oder ENTER:

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y


Changed password for user apm_system
PASSWORD apm_system = eWqzd0asAmxZ0gcJpOvn

Changed password for user kibana_system
PASSWORD kibana_system = 1HLVxfqZMd7aFQS6Uabl

Changed password for user kibana
PASSWORD kibana = 1HLVxfqZMd7aFQS6Uabl

Changed password for user logstash_system
PASSWORD logstash_system = wUjY59H91WGvGaN8uFLc

Changed password for user beats_system
PASSWORD beats_system = 2p81hIdAzWKknhzA992m

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 85HF85Fl6cPslJlA8wPG

Changed password for user elastic
PASSWORD elastic = 6kNbsxQGYZ2EQJiqJpgl

Sie werden das Dienstprogramm nicht erneut ausführen können, daher stellen Sie sicher, dass Sie diese Passwörter an einem sicheren Ort notieren. Sie müssen das Passwort des Benutzers kibana_system im nächsten Abschnitt dieses Tutorials verwenden, und das Passwort des Benutzers elastic im Schritt Konfiguration von Filebeat dieses Tutorials.

Zu diesem Zeitpunkt im Tutorial haben Sie die Konfiguration von Elasticsearch abgeschlossen. Der nächste Abschnitt erläutert, wie Sie die Netzwerkeinstellungen von Kibana und das xpack-Sicherheitsmodul konfigurieren.

Schritt 3 – Konfigurieren von Kibana

In dem vorherigen Abschnitt dieses Tutorials haben Sie Elasticsearch so konfiguriert, dass es Verbindungen über die private IP-Adresse Ihres Elasticsearch-Servers akzeptiert. Sie müssen dasselbe für Kibana tun, damit Filebeats auf Ihrem Suricata-Server darauf zugreifen können.

Zuerst aktivieren Sie die Sicherheitsfunktionalität von Kibana’s xpack, indem Sie einige Geheimnisse generieren, die Kibana verwenden wird, um Daten in Elasticsearch zu speichern. Dann konfigurieren Sie Kibanas Netzwerkeinstellungen und Authentifizierungsdetails, um eine Verbindung zu Elasticsearch herzustellen.

Aktivierung von xpack.security in Kibana

Um mit den xpack-Sicherheitseinstellungen in Kibana zu beginnen, müssen Sie einige Verschlüsselungsschlüssel generieren. Kibana verwendet diese Schlüssel, um Sitzungsdaten (wie Cookies) sowie verschiedene gespeicherte Dashboards und Datenansichten in Elasticsearch zu speichern.

Sie können die erforderlichen Verschlüsselungsschlüssel mithilfe des Dienstprogramms kibana-encryption-keys generieren, das im Verzeichnis /usr/share/kibana/bin enthalten ist. Führen Sie Folgendes aus, um zum Verzeichnis zu cd und dann die Schlüssel zu generieren:

  1. cd /usr/share/kibana/bin/
  2. sudo ./kibana-encryption-keys generate -q --force

Der -q-Flag unterdrückt die Anweisungen des Tools, und der --force-Flag stellt sicher, dass Sie neue Schlüssel erstellen. Sie sollten eine Ausgabe ähnlich der folgenden erhalten:

Output
xpack.encryptedSavedObjects.encryptionKey: 66fbd85ceb3cba51c0e939fb2526f585 xpack.reporting.encryptionKey: 9358f4bc7189ae0ade1b8deeec7f38ef xpack.security.encryptionKey: 8f847a594e4a813c4187fa93c884e92b

Kopieren Sie diese drei Schlüssel an einen sicheren Ort. Sie werden sie nun zur Konfigurationsdatei von Kibana /etc/kibana/kibana.yml hinzufügen.

Öffnen Sie die Datei mit vi oder Ihrem bevorzugten Editor:

  1. sudo vi /etc/kibana/kibana.yml

Gehen Sie mit der vi-Verknüpfung SHIFT+G ans Ende der Datei. Fügen Sie die drei xpack-Zeilen am Ende der Datei ein:

/etc/kibana/kibana.yml
. . .

# Legt die zu verwendende Gebietsschema für alle lokalisierbaren Zeichenfolgen, Datum- und Zahlenformate fest.
# Unterstützte Sprachen sind folgende: Englisch - en, standardmäßig, Chinesisch - zh-CN.
#i18n.locale: "en"

xpack.encryptedSavedObjects.encryptionKey: 66fbd85ceb3cba51c0e939fb2526f585
xpack.reporting.encryptionKey: 9358f4bc7189ae0ade1b8deeec7f38ef
xpack.security.encryptionKey: 8f847a594e4a813c4187fa93c884e92b

Halten Sie die Datei geöffnet und gehen Sie zum nächsten Abschnitt, in dem Sie die Netzwerkeinstellungen von Kibana konfigurieren.

Konfigurieren des Kibana-Netzwerks

Um das Netzwerk von Kibana so zu konfigurieren, dass es über die private IP-Adresse Ihres Elasticsearch-Servers verfügbar ist, finden Sie die auskommentierte #server.host: "localhost"-Zeile in /etc/kibana/kibana.yml. Die Zeile befindet sich am Anfang der Datei. Fügen Sie eine neue Zeile hinzu, die Ihre Serverprivate IP-Adresse enthält, wie unten hervorgehoben:

/etc/kibana/kibana.yml
# Kibana wird von einem Backend-Server bereitgestellt. Diese Einstellung legt den zu verwendenden Port fest.
#server.port: 5601

# Legt die Adresse fest, an die der Kibana-Server gebunden wird. IP-Adressen und Hostnamen sind beide gültige Werte.
# Die Standardeinstellung ist 'localhost', was normalerweise bedeutet, dass entfernte Maschinen keine Verbindung herstellen können.
# Um Verbindungen von entfernten Benutzern zuzulassen, setzen Sie diesen Parameter auf eine Nicht-Loopback-Adresse.
#server.host: "localhost"
server.host: "your_private_ip"

Ersetzen Sie Ihre private IP-Adresse durch die Ihre_private_IP-Adresse.

Speichern Sie die Datei und schließen Sie sie, wenn Sie mit der Bearbeitung fertig sind. Als Nächstes müssen Sie den Benutzernamen und das Passwort konfigurieren, das Kibana verwendet, um eine Verbindung zu Elasticsearch herzustellen.

Konfigurieren von Kibana-Anmeldeinformationen

Es gibt zwei Möglichkeiten, den Benutzernamen und das Passwort festzulegen, das Kibana zur Authentifizierung bei Elasticsearch verwendet. Die erste Möglichkeit besteht darin, die Werte in der Konfigurationsdatei /etc/kibana/kibana.yml zu bearbeiten und dort hinzuzufügen. Die zweite Methode besteht darin, die Werte im keystore von Kibana zu speichern, einer verschleierten Datei, die Kibana verwenden kann, um Geheimnisse zu speichern.

In diesem Tutorial verwenden wir die Methode des Keystores, da sie das direkte Bearbeiten der Konfigurationsdatei von Kibana vermeidet.

Wenn Sie stattdessen die Datei bearbeiten möchten, sind die Einstellungen, die darin konfiguriert werden müssen, elasticsearch.username und elasticsearch.password.

Wenn Sie sich entscheiden, die Konfigurationsdatei zu bearbeiten, überspringen Sie den Rest der Schritte in diesem Abschnitt.

Um ein Geheimnis zum Keystore mithilfe des Dienstprogramms kibana-keystore hinzuzufügen, navigieren Sie zunächst zum Verzeichnis /usr/share/kibana/bin. Führen Sie dann den folgenden Befehl aus, um den Benutzernamen für Kibana festzulegen:

  1. cd /usr/share/kibana/bin
  2. sudo ./kibana-keystore add elasticsearch.username

Sie erhalten eine Aufforderung wie folgt:

Username Entry
Enter value for elasticsearch.username: *************

Geben Sie kibana_system ein, wenn Sie dazu aufgefordert werden, entweder durch Kopieren und Einfügen oder durch sorgfältiges Eintippen des Benutzernamens. Jedes Zeichen, das Sie eingeben, wird mit einem * Sternchen maskiert. Drücken Sie ENTER oder RETURN, wenn Sie mit der Eingabe des Benutzernamens fertig sind.

Wiederholen Sie den Vorgang nun, um das Passwort zu speichern. Stellen Sie sicher, dass Sie das Passwort für den Benutzer kibana_system kopieren, das Sie im vorherigen Abschnitt dieses Tutorials generiert haben. Zur Referenz: Im Beispiel dieses Tutorials lautet das Passwort 1HLVxfqZMd7aFQS6Uabl.

Führen Sie den folgenden Befehl aus, um das Passwort festzulegen:

  1. sudo ./kibana-keystore add elasticsearch.password

Wenn Sie dazu aufgefordert werden, fügen Sie das Passwort ein, um etwaige Übertragungsfehler zu vermeiden:

Password Entry
Enter value for elasticsearch.password: ********************

Starten von Kibana

Nachdem Sie die Netzwerkeinstellungen und die xpack-Sicherheitseinstellungen für Kibana konfiguriert und Anmeldeinformationen zum Keystore hinzugefügt haben, müssen Sie es starten, damit die Änderungen wirksam werden.

Führen Sie den folgenden systemctl-Befehl aus, um Kibana neu zu starten:

  1. sudo systemctl start kibana.service

Sobald Kibana gestartet ist, können Sie zum nächsten Abschnitt dieses Tutorials übergehen, in dem Sie Filebeat auf Ihrem Suricata-Server konfigurieren, um seine Protokolle an Elasticsearch zu senden.

Schritt 4 — Installation von Filebeat

Nun, da Ihre Elasticsearch- und Kibana-Prozesse mit den richtigen Netzwerk- und Authentifizierungseinstellungen konfiguriert sind, ist der nächste Schritt die Installation und Konfiguration von Filebeat auf Ihrem Suricata-Server.

Um mit der Installation von Filebeat zu beginnen, fügen Sie den Elastic GPG-Schlüssel Ihrem Suricata-Server mit dem folgenden Befehl hinzu:

  1. sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Erstellen Sie als nächstes eine elasticsearch.repo-Datei in Ihrem Verzeichnis /etc/yum/yum.repos.d mit folgendem Inhalt, verwenden Sie vi oder Ihren bevorzugten Editor:

  1. sudo vi /etc/yum.repos.d/elasticsearch.repo
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Wenn Sie mit den Änderungen fertig sind, speichern und verlassen Sie die Datei. Installieren Sie nun das Filebeat-Paket mit dem Befehl dnf:

  1. sudo dnf install --enablerepo=elasticsearch filebeat

Als nächstes müssen Sie Filebeat konfigurieren, um eine Verbindung sowohl zu Elasticsearch als auch zu Kibana herzustellen. Öffnen Sie die Konfigurationsdatei /etc/filebeat/filebeat.yml mit vi oder Ihrem bevorzugten Editor:

  1. sudo vi /etc/filebeat/filebeat.yml

Suchen Sie den Abschnitt Kibana in der Datei, ungefähr in Zeile 100. Fügen Sie eine Zeile nach der auskommentierten Zeile #host: "localhost:5601" hinzu, die auf die private IP-Adresse und den Port Ihrer Kibana-Instanz zeigt:

/etc/filebeat/filebeat.yml
. . .
# Ab Beats-Version 6.0.0 werden die Dashboards über die Kibana-API geladen.
# Dies erfordert eine Konfiguration des Kibana-Endpunkts.
setup.kibana:

  # Kibana-Host
  # Schema und Port können ausgelassen werden und werden auf die Standardwerte (http und 5601) gesetzt.
  # Falls Sie einen zusätzlichen Pfad angeben, ist das Schema erforderlich: http://localhost:5601/path
  # IPv6-Adressen sollten immer wie folgt definiert sein: https://[2001:db8::1]:5601
  #host: "localhost:5601"
  host: "your_private_ip:5601"

. . .

Diese Änderung stellt sicher, dass Filebeat eine Verbindung zu Kibana herstellen kann, um die verschiedenen SIEM-Indizes, Dashboards und Verarbeitungspipelines in Elasticsearch zu erstellen, um Ihre Suricata-Protokolle zu verarbeiten.

Als nächstes finden Sie den Abschnitt Elasticsearch Output der Datei um Zeile 130 herum und bearbeiten die Einstellungen für hosts, username und password, um die Werte für Ihren Elasticsearch-Server anzupassen:

output.elasticsearch:
  # Array der Hosts, mit denen eine Verbindung hergestellt werden soll.
  hosts: ["your_private_ip:9200"]

  # Protokoll - entweder `http` (Standard) oder `https`.
  #protocol: "https"

  # Authentifizierungsanmeldeinformationen - entweder API-Schlüssel oder Benutzername/Passwort.
  #api_key: "id:api_key"
  username: "elastic"
password: "6kNbsxQGYZ2EQJiqJpgl"

. . .

Ersetzen Sie auf der hosts-Zeile die private IP-Adresse Ihres Elasticsearch-Servers. Kommentieren Sie das Feld username aus und lassen Sie es auf den Benutzer elastic eingestellt. Ändern Sie das Feld password von changeme auf das Passwort für den Benutzer elastic, das Sie im Abschnitt Konfigurieren von Elasticsearch-Passwörtern dieses Tutorials generiert haben.

Speichern und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind. Aktivieren Sie als nächstes das integrierte Suricata-Modul von Filebeat mit dem folgenden Befehl:

  1. sudo filebeat modules enable suricata

Da Filebeat nun so konfiguriert ist, dass es eine Verbindung zu Elasticsearch und Kibana herstellt und das Suricata-Modul aktiviert ist, ist der nächste Schritt das Laden der SIEM-Dashboards und Pipelines in Elasticsearch.

Führen Sie den Befehl filebeat setup aus. Es kann einige Minuten dauern, bis alles geladen ist:

  1. sudo filebeat setup

Sobald der Befehl abgeschlossen ist, sollten Sie eine Ausgabe wie folgt erhalten:

Output
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. See more: https://www.elastic.co/guide/en/machine-learning/current/index.html It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat. Loaded machine learning job configurations Loaded Ingest pipelines

Wenn keine Fehler vorliegen, verwenden Sie den systemctl-Befehl, um Filebeat zu starten. Es wird beginnen, Ereignisse aus Suricatas eve.json-Protokoll an Elasticsearch zu senden, sobald es läuft.

  1. sudo systemctl start filebeat.service

Jetzt, da Filebeat, Kibana und Elasticsearch konfiguriert sind, um Ihre Suricata-Protokolle zu verarbeiten, ist der letzte Schritt in diesem Tutorial, sich mit Kibana zu verbinden und die SIEM-Dashboards zu erkunden.

Schritt 5 – Navigation durch Kibanas SIEM-Dashboards

Kibana ist die grafische Komponente des Elastic-Stacks. Sie werden Kibana mit Ihrem Browser verwenden, um Suricatas Ereignis- und Alarmdaten zu erkunden. Da Sie Kibana so konfiguriert haben, dass es nur über die private IP-Adresse Ihres Elasticsearch-Servers verfügbar ist, müssen Sie eine SSH-Verbindung verwenden, um sich mit Kibana zu verbinden.

Verbindung zu Kibana über SSH

SSH hat eine Option -L, die es Ihnen ermöglicht, den Netzwerkverkehr auf einem lokalen Port über seine Verbindung zu einer entfernten IP-Adresse und Port auf einem Server weiterzuleiten. Sie werden diese Option verwenden, um den Datenverkehr von Ihrem Browser zu Ihrer Kibana-Instanz weiterzuleiten.

Auf Linux, macOS und aktualisierten Versionen von Windows 10 und höher können Sie den integrierten SSH-Client verwenden, um den Tunnel zu erstellen. Sie verwenden diesen Befehl jedes Mal, wenn Sie eine Verbindung zu Kibana herstellen möchten. Sie können diese Verbindung jederzeit schließen und dann den SSH-Befehl erneut ausführen, um den Tunnel wiederherzustellen.

Führen Sie den folgenden Befehl in einem Terminal auf Ihrem lokalen Desktop oder Laptop aus, um den SSH-Tunnel zu Kibana zu erstellen:

  1. ssh -L 5601:your_private_ip:5601 sammy@203.0.113.5 -N

Die verschiedenen Argumente für SSH sind:

  • Die -L-Flag leitet den Datenverkehr an Ihr lokales System auf Port 5601 zum Remote-Server weiter.
  • Der Teil Ihre_Private_IP:5601 des Befehls gibt den Dienst auf Ihrem Elasticsearch-Server an, zu dem Ihr Datenverkehr weitergeleitet wird. In diesem Fall handelt es sich um Kibana. Ersetzen Sie unbedingt die private IP-Adresse Ihres Elasticsearch-Servers durch Ihre_Private_IP.
  • Die Adresse 203.0.113.5 ist die öffentliche IP-Adresse, die Sie zum Verbinden und Verwalten Ihres Servers verwenden. Ersetzen Sie diese durch die öffentliche IP-Adresse Ihres Elasticsearch-Servers.
  • Die -N-Flag weist SSH an, keinen Befehl wie eine interaktive /bin/bash-Shell auszuführen, sondern nur die Verbindung offen zu halten. Sie wird im Allgemeinen verwendet, wenn Ports weitergeleitet werden, wie in diesem Beispiel.

Wenn Sie den Tunnel jederzeit schließen möchten, drücken Sie CTRL+C.

Auf Windows sollte Ihr Terminal dem folgenden Screenshot ähneln:

Hinweis: Es kann sein, dass Sie aufgefordert werden, ein Passwort einzugeben, wenn Sie keinen SSH-Schlüssel verwenden. Geben Sie es ein oder fügen Sie es in die Eingabeaufforderung ein und drücken Sie ENTER oder RETURN.

Unter macOS und Linux wird Ihr Terminal ähnlich wie im folgenden Screenshot aussehen:

Nachdem Sie sich über SSH mit dem Elasticsearch-Server verbunden haben und die Portweiterleitung eingerichtet wurde, öffnen Sie Ihren Browser und besuchen Sie http://127.0.0.1:5601. Sie werden zur Anmeldeseite von Kibana weitergeleitet:

Wenn Ihr Browser keine Verbindung zu Kibana herstellen kann, erhalten Sie eine Meldung wie die folgende in Ihrem Terminal:

Output
channel 3: open failed: connect failed: No route to host

Dieser Fehler zeigt an, dass Ihr SSH-Tunnel den Kibana-Dienst auf Ihrem Server nicht erreichen kann. Stellen Sie sicher, dass Sie die richtige private IP-Adresse für Ihren Elasticsearch-Server angegeben haben, und laden Sie die Seite in Ihrem Browser neu.

Melden Sie sich auf Ihrem Kibana-Server mit elastic als Benutzername und dem Passwort an, das Sie zuvor in diesem Tutorial für den Benutzer kopiert haben.

Durchsuchen von Kibana SIEM-Dashboards

Nachdem Sie sich bei Kibana angemeldet haben, können Sie die von Filebeat für Sie konfigurierten Suricata-Dashboards erkunden.

In das Suchfeld oben auf der Kibana-Startseite geben Sie die Suchbegriffe type:dashboard suricata ein. Diese Suche liefert zwei Ergebnisse: die Suricata-Ereignisse und die Suricata-Alarme-Dashboards gemäß dem folgenden Screenshot:

Klicken Sie auf das Ergebnis [Filebeat Suricata] Ereignisübersicht, um das Kibana-Dashboard zu besuchen, das eine Übersicht aller protokollierten Suricata-Ereignisse anzeigt:

Um das Suricata Alerts-Dashboard zu besuchen, wiederholen Sie die Suche oder klicken Sie auf den Alerts-Link, der im Ereignis-Dashboard enthalten ist. Ihre Seite sollte dem folgenden Screenshot ähneln:

Wenn Sie die Ereignisse und Warnungen, die jedes Dashboard anzeigt, überprüfen möchten, scrollen Sie nach unten auf der Seite, wo Sie eine Tabelle finden, die jedes Ereignis und jede Warnung auflistet. Sie können jeden Eintrag erweitern, um den Original-Protokolleintrag von Suricata anzuzeigen, und die verschiedenen Felder wie Quell- und Ziel-IPs für eine Warnung, den Angriffstyp, die Suricata-Signatur-ID und andere im Detail untersuchen.

Kibana verfügt auch über einen eingebauten Satz von Sicherheits-Dashboards, auf die Sie über das Menü auf der linken Seite des Browserfensters zugreifen können. Navigieren Sie zum Netzwerk Dashboard für eine Übersicht über Ereignisse, die auf einer Karte dargestellt werden, sowie aggregierte Daten zu Ereignissen in Ihrem Netzwerk. Ihr Dashboard sollte dem folgenden Screenshot ähneln:

Sie können zum Ende des Netzwerk-Dashboards scrollen, um eine Tabelle zu finden, die alle Ereignisse auflistet, die Ihrem festgelegten Suchzeitraum entsprechen. Sie können auch jedes Ereignis im Detail untersuchen oder ein Ereignis auswählen, um eine Kibana-Zeitleiste zu generieren, die Sie dann verwenden können, um spezifische Verkehrsflüsse, Warnungen oder Community-IDs zu untersuchen.

Fazit

In diesem Tutorial haben Sie Elasticsearch und Kibana auf einem eigenständigen Server installiert und konfiguriert. Sie haben beide Tools so eingerichtet, dass sie unter einer privaten IP-Adresse verfügbar sind. Außerdem haben Sie die Authentifizierungseinstellungen von Elasticsearch und Kibana mithilfe des xpack-Sicherheitsmoduls konfiguriert, das bei jedem Tool enthalten ist.

Nach Abschluss der Konfigurationsschritte für Elasticsearch und Kibana haben Sie auch Filebeat auf Ihrem Suricata-Server installiert und konfiguriert. Sie haben Filebeat verwendet, um die Dashboards von Kibana zu befüllen und Suricata-Protokolle an Elasticsearch zu senden.

Zuletzt haben Sie einen SSH-Tunnel zu Ihrem Elasticsearch-Server erstellt und sich in Kibana eingeloggt. Dort haben Sie die neuen Dashboards für Suricata-Ereignisse und -Warnungen sowie das Netzwerk-Dashboard gefunden.

Im letzten Tutorial dieser Serie werden Sie durch die Verwendung der SIEM-Funktionalität von Kibana zur Verarbeitung Ihrer Suricata-Warnungen geführt. Dabei werden Sie erkunden, wie Sie Fälle erstellen, um bestimmte Warnungen zu verfolgen, Zeitachsen erstellen, um Netzwerkflüsse zu korrelieren, und Regeln erstellen, um bestimmte Suricata-Ereignisse anzupassen, die Sie genauer verfolgen oder analysieren möchten.

Source:
https://www.digitalocean.com/community/tutorials/how-to-build-a-siem-with-suricata-and-elastic-stack-on-rocky-linux-8