Einführung
Suricata ist ein Network Security Monitoring (NSM)-Tool, das Sets von von der Gemeinschaft erstellten und benutzerdefinierten Signaturen (auch als Regeln bezeichnet) verwendet, um Netzwerkverkehr zu untersuchen und zu verarbeiten. Suricata kann Protokollevents generieren, Alarme auslösen und den Datenverkehr abweisen, wenn es verdächtige Pakete oder Anfragen an eine beliebige Anzahl verschiedener Dienste auf einem Server erkennt.
Standardmäßig fungiert Suricata als passives Intrusion Detection System (IDS), um nach verdächtigem Datenverkehr auf einem Server oder Netzwerk zu suchen. Es generiert und protokolliert Alarme zur weiteren Untersuchung. Es kann auch als aktives Intrusion Prevention System (IPS) konfiguriert werden, um Netzwerkverkehr zu protokollieren, Alarme auszulösen und vollständig zu blockieren, der bestimmten Regeln entspricht.
Sie können Suricata auf einem Gateway-Host in einem Netzwerk bereitstellen, um den gesamten eingehenden und ausgehenden Netzwerkverkehr von anderen Systemen zu überprüfen, oder Sie können es lokal auf einzelnen Maschinen in einem der beiden Modi ausführen.
In diesem Tutorial erfahren Sie, wie Sie Suricata installieren und einige seiner Standardeinstellungen auf Centos 8 Stream anpassen können, um Ihren Anforderungen gerecht zu werden. Sie lernen auch, wie Sie vorhandene Sets von Signaturen (in der Regel als Regelwerke bezeichnet) herunterladen, die Suricata verwendet, um den Netzwerkverkehr zu überprüfen. Schließlich erfahren Sie, wie Sie testen können, ob Suricata korrekt funktioniert, wenn es verdächtige Anfragen und Daten in einer Antwort erkennt.
Voraussetzungen
Je nach Ihrer Netzwerkkonfiguration und wie Sie Suricata verwenden möchten, benötigen Sie möglicherweise mehr oder weniger CPU und RAM für Ihren Server. Im Allgemeinen sollten Sie Suricata mehr Ressourcen zuweisen, je mehr Datenverkehr Sie inspizieren möchten. In einer Produktionsumgebung planen Sie, zunächst mindestens 2 CPUs und 4 oder 8 GB RAM zu verwenden. Von dort aus können Sie die Ressourcen entsprechend der Leistung von Suricata und der Menge des zu verarbeitenden Datenverkehrs skalieren.
Wenn Sie planen, Suricata zu verwenden, um den Server zu schützen, auf dem es ausgeführt wird, benötigen Sie:
- Einen Centos 8 Stream-Server mit 2 oder mehr CPUs, einen sudo-Nicht-Root-Benutzer und eine aktivierte Firewall. Um dies einzurichten, können Sie unserem Anleitung zum Initialisieren des Servers mit CentOS Linux 8 folgen.
Andernfalls, wenn Sie planen, Suricata auf einem Gateway-Host zu verwenden, um mehrere Server zu überwachen und zu schützen, müssen Sie sicherstellen, dass das Netzwerk des Hosts korrekt konfiguriert ist.
Wenn Sie DigitalOcean verwenden, können Sie dieser Anleitung folgen, wie Sie einen Droplet als VPC-Gateway konfigurieren könnenSo konfigurieren Sie einen Droplet als VPC-Gateway. Diese Anweisungen sollten auch für die meisten CentOS-, Fedora- und anderen von RedHat abgeleiteten Server funktionieren.
Schritt 1 — Suricata installieren
Um mit der Installation von Suricata zu beginnen, müssen Sie die Repository-Informationen der Open Information Security Foundation (OISF) zu Ihrem CentOS-System hinzufügen. Sie können den Befehl dnf copr enable
verwenden, um dies zu tun. Sie müssen auch das Repository „Extra Packages for Enterprise Linux“ (EPEL) hinzufügen.
Um das Unterbefehl „Community Projects“ (copr
) für das Paket-Tool dnf
zu aktivieren, führen Sie folgendes aus:
Sie werden aufgefordert, einige zusätzliche Abhängigkeiten zu installieren, sowie den GPG-Schlüssel für die CentOS Linux-Distribution zu akzeptieren. Drücken Sie jedes Mal y
und ENTER
, um die Installation des copr
-Pakets abzuschließen.
Führen Sie anschließend den folgenden Befehl aus, um das OISF-Repository zu Ihrem System hinzuzufügen und die Liste der verfügbaren Pakete zu aktualisieren:
Drücken Sie y
und ENTER
, wenn Sie aufgefordert werden zu bestätigen, dass Sie das Repository hinzufügen möchten.
Fügen Sie nun das Paket epel-release
hinzu, das einige zusätzliche Abhängigkeiten für Suricata verfügbar macht:
Wenn Sie aufgefordert werden, den GPG-Schlüssel zu importieren, drücken Sie y
und ENTER
, um zu akzeptieren.
Jetzt, da Sie die erforderlichen Software-Repositories aktiviert haben, können Sie das Paket suricata
mit dem Befehl dnf
installieren:
Wenn Sie aufgefordert werden, den GPG-Schlüssel für das OISF-Repository hinzuzufügen, drücken Sie y
und ENTER
. Das Paket und seine Abhängigkeiten werden nun heruntergeladen und installiert.
Als nächstes aktivieren Sie den suricata.service
, damit er beim Neustart Ihres Systems ausgeführt wird. Verwenden Sie das systemctl
-Befehl, um ihn zu aktivieren:
Sie sollten eine Ausgabe wie die folgende erhalten, die anzeigt, dass der Dienst aktiviert ist:
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/suricata.service → /usr/lib/systemd/system/suricata.service.
Bevor Sie zum nächsten Abschnitt dieses Tutorials übergehen, der erläutert, wie Sie Suricata konfigurieren, stoppen Sie den Dienst mit dem Befehl systemctl
:
Das Stoppen von Suricata stellt sicher, dass, wenn Sie die Konfigurationsdatei bearbeiten und testen, alle Änderungen, die Sie vornehmen, validiert und geladen werden, wenn Suricata beim nächsten Mal gestartet wird.
Schritt 2 — Konfigurieren von Suricata zum ersten Mal
Das Suricata-Paket aus den OISF-Repositories wird mit einer Konfigurationsdatei geliefert, die eine Vielzahl von Anwendungsfällen abdeckt. Der Standardmodus für Suricata ist IDS-Modus, sodass kein Datenverkehr verworfen, sondern nur protokolliert wird. Es ist eine gute Idee, diesen Modus standardmäßig beizubehalten, während Sie Suricata kennenlernen. Sobald Sie Suricata konfiguriert und in Ihre Umgebung integriert haben und eine Vorstellung davon haben, welche Arten von Verkehr Sie benachrichtigen werden, können Sie sich dafür entscheiden, den IPS-Modus einzuschalten.
Die Standardkonfiguration hat jedoch immer noch einige Einstellungen, die je nach Umgebung und Bedarf geändert werden müssen.
(Optional) Aktivieren der Community-Flow-ID
Suricata kann ein Feld für die Community-ID in seiner JSON-Ausgabe enthalten, um es einfacher zu machen, einzelne Ereignisdatensätze mit Datensätzen zu verbinden, die von anderen Tools generiert wurden.
Wenn Sie planen, Suricata mit anderen Tools wie Zeek oder Elasticsearch zu verwenden, ist es eine gute Idee, jetzt die Community-ID hinzuzufügen.
Um die Option zu aktivieren, öffnen Sie /etc/suricata/suricata.yaml
mit vi
oder Ihrem bevorzugten Editor:
Suchen Sie die Zeile 120, die # Community Flow ID
lautet. Wenn Sie vi
verwenden, geben Sie 120gg
ein, um direkt zur Zeile zu gelangen. Unterhalb dieser Zeile befindet sich der community-id
-Schlüssel. Setzen Sie ihn auf true
, um die Einstellung zu aktivieren:
. . .
# Community Flow ID
# Fügt den EVE-Datensätzen ein 'community_id'-Feld hinzu. Diese sollen
# Datensätzen eine vorhersehbare Fluss-ID geben, die verwendet werden kann, um Datensätze mit
# der Ausgabe anderer Tools wie Zeek (Bro) abzugleichen.
#
# Nimmt einen 'Seed' entgegen, der über Sensoren und Tools hinweg gleich sein muss
# , um die ID weniger vorhersehbar zu machen.
# Aktivieren/Deaktivieren der Community-ID-Funktion.
community-id: true
. . .
Nun, wenn Sie Ereignisse untersuchen, haben sie eine ID wie 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=
, die Sie verwenden können, um Datensätze in verschiedenen NMS-Tools zu korrelieren.
Speichern und schließen Sie die Datei /etc/suricata/suricata.yaml
. Wenn Sie vi
verwenden, können Sie dies mit ESC
und dann :x
und dann ENTER
tun, um die Datei zu speichern und zu verlassen.
Bestimmung der zu verwendenden Netzwerkschnittstelle(n)
Sie müssen möglicherweise die Standardnetzwerkschnittstelle oder Schnittstellen überschreiben, die Sie von Suricata überwachen lassen möchten. Die Konfigurationsdatei, die mit dem OISF Suricata-Paket geliefert wird, ist standardmäßig so konfiguriert, dass der Datenverkehr auf einem Gerät namens eth0
überwacht wird. Wenn Ihr System eine andere Standardnetzwerkschnittstelle verwendet oder wenn Sie den Datenverkehr auf mehr als einer Schnittstelle überwachen möchten, müssen Sie diesen Wert ändern.
Um den Gerätenamen Ihrer Standardnetzwerkschnittstelle zu bestimmen, können Sie das ip
-Befehl wie folgt verwenden:
Das Flag -p
formatiert die Ausgabe so, dass sie besser lesbar ist, und das Flag -j
druckt die Ausgabe als JSON.
Sie sollten eine Ausgabe wie folgt erhalten:
Output[ {
"dst": "default",
"gateway": "203.0.113.254",
"dev": "eth0",
"protocol": "static",
"metric": 100,
"flags": [ ]
} ]
Die dev
-Zeile gibt das Standardgerät an. In diesem Beispieloutput ist das Gerät die markierte eth0
-Schnittstelle. Ihr Output kann einen Gerätenamen wie ens...
oder eno...
anzeigen. Was auch immer der Name ist, machen Sie sich eine Notiz davon.
Jetzt können Sie die Konfiguration von Suricata bearbeiten und den Schnittstellennamen überprüfen oder ändern. Öffnen Sie die Konfigurationsdatei /etc/suricata/suricata.yaml
mit vi
oder Ihrem bevorzugten Editor:
Blättern Sie durch die Datei, bis Sie zu einer Zeile kommen, die etwa bei Zeile 580 af-packet:
lautet. Wenn Sie vi
verwenden, können Sie auch direkt zur Zeile gehen, indem Sie 580gg
eingeben. Unter dieser Zeile befindet sich die Standard-Schnittstelle, die Suricata verwenden wird, um den Datenverkehr zu inspizieren. Bearbeiten Sie die Zeile so, dass sie Ihrer Schnittstelle entspricht, wie im folgenden markierten Beispiel:
# Linux-Hochgeschwindigkeits-Capture-Unterstützung
af-packet:
- interface: eth0
# Anzahl der Empfangsthreads. "auto" verwendet die Anzahl der Kerne
#threads: auto
# Standard-Cluster-ID. AF_PACKET wird Pakete basierend auf dem Fluss lastenausgleichen.
cluster-id: 99
. . .
Wenn Sie den Datenverkehr auf zusätzlichen Schnittstellen inspizieren möchten, können Sie weitere - interface: eth...
-YAML-Objekte hinzufügen. Um beispielsweise ein Gerät namens enp0s1
hinzuzufügen, blättern Sie zum Ende des af-packet
-Abschnitts etwa bei Zeile 650. Um eine neue Schnittstelle hinzuzufügen, fügen Sie sie vor dem Abschnitt - interface: default
wie im folgenden markierten Beispiel ein:
# Für die Einrichtung von eBPF und XDP einschließlich Bypass, Filterung und Lastausgleich, bitte
# siehe doc/userguide/capture-hardware/ebpf-xdp.rst für weitere Informationen.
- interface: enp0s1
cluster-id: 98
- interface: default
#threads: auto
#use-mmap: no
#tpacket-v3: yes
Wählen Sie unbedingt einen eindeutigen cluster-id
-Wert für jedes - Interface
-Objekt.
Halten Sie Ihren Editor geöffnet und fahren Sie mit dem nächsten Abschnitt fort, in dem Sie die Konfiguration des Live-Regel-Reloadings vornehmen. Wenn Sie diese Einstellung nicht aktivieren möchten, können Sie die Datei /etc/suricata/suricata.yaml
speichern und schließen. Wenn Sie vi
verwenden, können Sie dies mit ESC
, dann :x
und ENTER
tun, um zu speichern und zu verlassen.
Konfiguration des Live-Regel-Reloadings
Suricata unterstützt das Live-Regel-Reloading, was bedeutet, dass Sie Regeln hinzufügen, entfernen und bearbeiten können, ohne den laufenden Suricata-Prozess neu starten zu müssen. Um die Live-Reload-Option zu aktivieren, scrollen Sie zum Ende der Konfigurationsdatei und fügen Sie die folgenden Zeilen hinzu:
. . .
detect-engine:
- rule-reload: true
Mit dieser Einstellung können Sie das SIGUSR2
-Systemsignal an den laufenden Prozess senden, und Suricata wird alle geänderten Regeln in den Arbeitsspeicher neu laden.
A command like the following will notify the Suricata process to reload its rulesets, without restarting the process:
Der Teil $(pidof suricata)
des Befehls ruft eine Unter-Shell auf und findet die Prozess-ID des laufenden Suricata-Daemons. Der Anfangsteil des Befehls sudo kill -usr2
verwendet das kill
-Dienstprogramm, um das SIGUSR2
-Signal an die Prozess-ID zu senden, die von der Unter-Shell zurückgemeldet wird.
Sie können diesen Befehl verwenden, wenn Sie suricata-update
ausführen oder wenn Sie eigene benutzerdefinierte Regeln hinzufügen oder bearbeiten.
Speichern und schließen Sie die Datei /etc/suricata/suricata.yaml
. Wenn Sie vi
verwenden, können Sie dies mit ESC
, dann :x
und ENTER
bestätigen.
Schritt 3 — Aktualisieren der Suricata-Regelsätze
Zu diesem Zeitpunkt im Tutorial würden Sie beim Starten von Suricata eine Warnmeldung wie die folgende in den Protokollen erhalten, dass keine geladenen Regeln vorhanden sind:
Output<Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/suricata.rules
Standardmäßig enthält das Suricata-Paket einen begrenzten Satz von Erkennungsregeln (im Verzeichnis /etc/suricata/rules
), daher würde das Einschalten von Suricata zu diesem Zeitpunkt nur eine begrenzte Menge an schlechtem Traffic erkennen.
Suricata enthält ein Werkzeug namens suricata-update
, das Regelsätze von externen Anbietern abrufen kann. Führen Sie es wie folgt aus, um einen aktuellen Regelsatz für Ihren Suricata-Server herunterzuladen:
Sie sollten eine Ausgabe wie folgt erhalten:
Output19/10/2021 -- 19:31:03 - <Info> -- Using data-directory /var/lib/suricata.
19/10/2021 -- 19:31:03 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
19/10/2021 -- 19:31:03 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules.
. . .
19/10/2021 -- 19:31:03 - <Info> -- No sources configured, will use Emerging Threats Open
19/10/2021 -- 19:31:03 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.3/emerging.rules.tar.gz.
100% - 3062850/3062850
. . .
19/10/2021 -- 19:31:06 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 31011; enabled: 23649; added: 31011; removed 0; modified: 0
19/10/2021 -- 19:31:07 - <Info> -- Writing /var/lib/suricata/rules/classification.config
19/10/2021 -- 19:31:07 - <Info> -- Testing with suricata -T.
19/10/2021 -- 19:31:32 - <Info> -- Done.
Die markierten Zeilen zeigen an, dass suricata-update
die kostenlosen Emerging Threats ET Open Regeln abgerufen und sie in die Datei /var/lib/suricata/rules/suricata.rules
von Suricata gespeichert hat. Es wird auch die Anzahl der verarbeiteten Regeln angezeigt, in diesem Beispiel wurden 31011 hinzugefügt und davon waren 23649 aktiviert.
Hinzufügen von Regel-Anbietern
Das Tool suricata-update
kann Regeln von verschiedenen kostenlosen und kommerziellen Regel-Anbietern abrufen. Einige Regelsets wie das bereits hinzugefügte ET Open Set sind kostenlos verfügbar, während andere ein kostenpflichtiges Abonnement erfordern.
Sie können die Standardliste der Regel-Anbieter mithilfe des Flags list-sources
an suricata-update
wie folgt auflisten:
Sie erhalten eine Liste von Quellen wie folgt:
Output. . .
19/10/2021 -- 19:27:34 - <Info> -- Adding all sources
19/10/2021 -- 19:27:34 - <Info> -- Saved /var/lib/suricata/update/cache/index.yaml
Name: et/open
Vendor: Proofpoint
Summary: Emerging Threats Open Ruleset
License: MIT
. . .
Wenn Sie beispielsweise das Regelset tgreen/hunting
einschließen möchten, könnten Sie es mit dem folgenden Befehl aktivieren:
Führen Sie dann erneut suricata-update
aus, und das neue Regelset wird hinzugefügt, zusätzlich zu den bestehenden ET Open Regeln und allen anderen, die Sie heruntergeladen haben.
Schritt 4 — Validierung der Konfiguration von Suricata
Nachdem Sie die Konfigurationsdatei von Suricata bearbeitet haben, um die optionale Community-ID einzuschließen, das Standardnetzwerkinterface anzugeben und das automatische Neuladen von Regeln aktiviert haben, ist es eine gute Idee, die Konfiguration zu testen.
Suricata verfügt über einen eingebauten Testmodus, der die Konfigurationsdatei und alle enthaltenen Regeln auf Gültigkeit überprüft. Überprüfen Sie Ihre Änderungen aus dem vorherigen Abschnitt mit der -T
-Option, um Suricata im Testmodus auszuführen. Die -v
-Option druckt einige zusätzliche Informationen aus, und die -c
-Option gibt Suricata an, wo es seine Konfigurationsdatei finden soll:
Der Test kann je nach der Menge an CPU, die Sie Suricata zugewiesen haben, und der Anzahl der hinzugefügten Regeln einige Zeit dauern. Seien Sie also darauf vorbereitet, ein bis zwei Minuten auf den Abschluss zu warten.
Mit dem Standard-ET-Open-Regelsatz sollten Sie eine Ausgabe wie folgt erhalten:
Output21/10/2021 -- 15:00:40 - <Info> - Running suricata under test mode
21/10/2021 -- 15:00:40 - <Notice> - This is Suricata version 6.0.3 RELEASE running in SYSTEM mode
21/10/2021 -- 15:00:40 - <Info> - CPUs/cores online: 2
21/10/2021 -- 15:00:40 - <Info> - fast output device (regular) initialized: fast.log
21/10/2021 -- 15:00:40 - <Info> - eve-log output device (regular) initialized: eve.json
21/10/2021 -- 15:00:40 - <Info> - stats output device (regular) initialized: stats.log
21/10/2021 -- 15:00:46 - <Info> - 1 rule files processed. 23879 rules successfully loaded, 0 rules failed
21/10/2021 -- 15:00:46 - <Info> - Threshold config parsed: 0 rule(s) found
21/10/2021 -- 15:00:47 - <Info> - 23882 signatures processed. 1183 are IP-only rules, 4043 are inspecting packet payload, 18453 inspect application layer, 107 are decoder event only
21/10/2021 -- 15:01:13 - <Notice> - Configuration provided was successfully loaded. Exiting.
21/10/2021 -- 15:01:13 - <Info> - cleaning up signature grouping structure... complete
Wenn ein Fehler in Ihrer Konfigurationsdatei vorliegt, generiert der Testmodus einen spezifischen Fehlercode und eine Nachricht, die Ihnen bei der Fehlerbehebung helfen können. Zum Beispiel würde das Einbinden einer nicht vorhandenen Regeldatei namens test.rules
einen Fehler wie folgt generieren:
Output21/10/2021 -- 15:10:15 - <Info> - Running suricata under test mode
21/10/2021 -- 15:10:15 - <Notice> - This is Suricata version 6.0.3 RELEASE running in SYSTEM mode
21/10/2021 -- 15:10:15 - <Info> - CPUs/cores online: 2
21/10/2021 -- 15:10:15 - <Info> - eve-log output device (regular) initialized: eve.json
21/10/2021 -- 15:10:15 - <Info> - stats output device (regular) initialized: stats.log
21/10/2021 -- 15:10:21 - <Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/test.rules
Mit diesem Fehler könnten Sie dann Ihre Konfigurationsdatei bearbeiten, um den richtigen Pfad einzuschließen oder ungültige Variablen und Konfigurationsoptionen zu korrigieren.
Sobald der Testmodus von Suricata erfolgreich abgeschlossen ist, können Sie zum nächsten Schritt übergehen, der darin besteht, Suricata im Daemon-Modus zu starten.
Schritt 5 — Suricata ausführen
Jetzt, da Sie eine gültige Suricata-Konfiguration und Regelset haben, können Sie den Suricata-Server starten. Führen Sie den folgenden systemctl
-Befehl aus:
Sie können den Status des Dienstes mit dem Befehl systemctl status
überprüfen:
Sie sollten eine Ausgabe wie die folgende erhalten:
Output● suricata.service - Suricata Intrusion Detection Service
Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-10-21 18:22:56 UTC; 1min 57s ago
Docs: man:suricata(1)
Process: 24588 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS)
Main PID: 24590 (Suricata-Main)
Tasks: 1 (limit: 23473)
Memory: 80.2M
CGroup: /system.slice/suricata.service
└─24590 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i eth0 --user suricata
Oct 21 18:22:56 suricata systemd[1]: Starting Suricata Intrusion Detection Service..
Oct 21 18:22:56 suricata systemd[1]: Started Suricata Intrusion Detection Service.
. . .
Wie beim Befehl für den Testmodus dauert es ein oder zwei Minuten, bis Suricata alle Regeln geladen und analysiert hat. Sie können den Befehl tail
verwenden, um nach einer bestimmten Meldung in den Protokollen von Suricata zu suchen, die anzeigt, dass es mit dem Starten fertig ist:
Sie erhalten eine Reihe von Ausgaben, und das Terminal kann während des Ladens von Suricata stecken bleiben. Warten Sie weiter auf Ausgaben, bis Sie eine Zeile wie die folgende erhalten:
Output19/10/2021 -- 19:22:39 - <Info> - All AFP capture threads are running.
Diese Zeile zeigt an, dass Suricata ausgeführt wird und bereit ist, den Datenverkehr zu inspizieren. Sie können den Befehl tail
mit STRG+C
beenden.
Jetzt, da Sie überprüft haben, dass Suricata läuft, ist der nächste Schritt in diesem Tutorial zu überprüfen, ob Suricata eine Anfrage an eine Test-URL erkennt, die darauf abzielt, einen Alarm auszulösen.
Schritt 6 — Testen von Suricata-Regeln
Das heruntergeladene ET Open-Regelset enthält über 30000 Regeln. Eine vollständige Erklärung, wie Suricata-Regeln funktionieren und wie man sie konstruiert, fällt nicht in den Rahmen dieses einführenden Tutorials. Ein nachfolgendes Tutorial in dieser Serie wird erklären, wie Regeln funktionieren und wie man seine eigenen erstellt.
Zu Testzwecken reicht es für dieses Tutorial aus, zu überprüfen, ob Suricata verdächtigen Datenverkehr mit der generierten Konfiguration erkennt. Der Suricata Quickstart empfiehlt, die ET Open-Regel mit der Nummer 2100498
mit dem curl
-Befehl zu testen.
Führen Sie folgendes aus, um eine HTTP-Anfrage zu generieren, die eine Antwort liefert, die der Suricata-Alarmregel entspricht:
Der curl
-Befehl gibt eine Antwort wie folgt aus:
Outputuid=0(root) gid=0(root) groups=0(root)
Diese Beispielantwortdaten sind so gestaltet, dass sie einen Alarm auslösen, indem sie vorgeben, die Ausgabe eines Befehls wie id
zurückzugeben, der über eine Webshell auf einem kompromittierten Remote-System ausgeführt werden könnte.
Jetzt können Sie die Suricata-Protokolle auf einen entsprechenden Alarm überprüfen. Es gibt zwei Protokolle, die mit der Standard-Suricata-Konfiguration aktiviert sind. Das erste befindet sich in /var/log/suricata/fast.log
und das zweite ist ein maschinenlesbares Protokoll in /var/log/suricata/eve.log
.
Untersuchen Sie /var/log/suricata/fast.log
Um einen Protokolleintrag in /var/log/suricata/fast.log
zu überprüfen, der Ihrem curl
-Anforderung entspricht, verwenden Sie den Befehl grep
. Verwenden Sie die Regelkennung 2100498
aus der Schnellstartdokumentation, um Einträge zu suchen, die mit ihr übereinstimmen, und verwenden Sie den folgenden Befehl:
Wenn Ihre Anforderung IPv6 verwendet hat, sollten Sie eine Ausgabe wie folgt erhalten, wobei 2001:DB8::1
die öffentliche IPv6-Adresse Ihres Systems ist:
Output10/21/2021-18:35:54.950106 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 2600:9000:2000:4400:0018:30b3:e400:93a1:80 -> 2001:DB8::1:34628
Wenn Ihre Anforderung IPv4 verwendet hat, sollte Ihr Protokoll eine Meldung wie diese enthalten, wobei 203.0.113.1
die öffentliche IPv4-Adresse Ihres Systems ist:
Output10/21/2021-18:35:57.247239 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 204.246.178.81:80 -> 203.0.113.1:36364
Beachten Sie den hervorgehobenen Wert 2100498
in der Ausgabe, der die Signature-ID (sid
) ist, die Suricata verwendet, um eine Regel zu identifizieren.
Untersuchen Sie /var/log/suricata/eve.log
Suricata protokolliert auch Ereignisse in /var/log/suricata/eve.log
(auch als EVE-Protokoll bezeichnet) und verwendet JSON zum Formatieren der Einträge.
Die Suricata-Dokumentation empfiehlt die Verwendung des Dienstprogramms jq
, um die Einträge in dieser Datei zu lesen und zu filtern. Installieren Sie jq
, wenn Sie es nicht auf Ihrem System haben, mit dem folgenden dnf
-Befehl:
Sobald Sie jq
installiert haben, können Sie die Ereignisse im EVE-Protokoll filtern, indem Sie nach der Signatur 2100498
mit dem folgenden Befehl suchen:
Der Befehl überprüft jeden JSON-Eintrag und druckt alle aus, die ein alert
-Objekt mit einem signature_id
-Schlüssel haben, der mit dem Wert 2100498
übereinstimmt, den Sie suchen. Die Ausgabe wird wie folgt aussehen:
Output{
"timestamp": "2021-10-21T19:42:47.368856+0000",
"flow_id": 775889108832281,
"in_iface": "eth0",
"event_type": "alert",
"src_ip": "203.0.113.1",
"src_port": 80,
"dest_ip": "147.182.148.159",
"dest_port": 38920,
"proto": "TCP",
"community_id": "1:vuSfAFyy7oUq0LQC5+KNTBSuPxg=",
"alert": {
"action": "allowed",
"gid": 1,
"signature_id": 2100498,
"rev": 7,
"signature": "GPL ATTACK_RESPONSE id check returned root",
"category": "Potentially Bad Traffic",
. . .
}
Beachten Sie die markierte Zeile "signature_id": 2100498,
, nach der jq
sucht. Beachten Sie auch die markierte Zeile "community_id": "1:vuSfAFyy7oUq0LQC5+KNTBSuPxg=",
in der JSON-Ausgabe. Dieser Schlüssel ist der generierte Community-Flow-Identifier, den Sie in der Konfigurationsdatei von Suricata aktiviert haben.
Jedes Alert generiert einen eindeutigen Community-Flow-Identifier. Andere NMS-Tools können auch denselben Identifier generieren, um ein Cross-Referenzieren eines Suricata-Alerts mit Ausgaben anderer Tools zu ermöglichen.
A matching log entry in either log file means that Suricata successfully inspected the network traffic, matched it against a detection rule, and generated an alert for subsequent analysis or logging. A future tutorial in this series will explore how to send Suricata alerts to a Security Information Event Management (SIEM) system for further processing.
Schritt 7 — Umgang mit Suricata-Alarmen
Sobald Sie Benachrichtigungen eingerichtet und getestet haben, können Sie auswählen, wie Sie damit umgehen möchten. Für einige Anwendungsfälle kann das Protokollieren von Benachrichtigungen zu Überprüfungszwecken ausreichend sein. Oder Sie bevorzugen einen aktiveren Ansatz, um den Datenverkehr von Systemen zu blockieren, die wiederholt Benachrichtigungen generieren.
Wenn Sie den Datenverkehr basierend auf den von Suricata generierten Benachrichtigungen blockieren möchten, ist ein Ansatz, Einträge aus dem EVE-Protokoll zu verwenden und dann Firewall-Regeln hinzuzufügen, um den Zugriff auf Ihr System oder Ihre Systeme einzuschränken. Sie können das jq
-Tool verwenden, um bestimmte Felder aus einer Benachrichtigung zu extrahieren, und dann UFW- oder IPtables-Regeln hinzufügen, um Anfragen zu blockieren.
Nochmals, dieses Beispiel ist ein hypothetisches Szenario unter Verwendung bewusst erstellter Anfrage- und Antwortdaten. Ihr Wissen über die Systeme und Protokolle, auf die Ihre Umgebung zugreifen können sollte, ist entscheidend, um zu bestimmen, welcher Datenverkehr legitim ist und welcher blockiert werden kann.
Abschluss
In diesem Tutorial haben Sie Suricata aus den OISF-Software-Repositories installiert. Die Installation von Suricata auf diese Weise stellt sicher, dass Sie Updates erhalten, sobald eine neue Version von Suricata veröffentlicht wird. Nach der Installation von Suricata haben Sie die Standardkonfiguration bearbeitet, um eine Community Flow ID für die Verwendung mit anderen Sicherheitstools hinzuzufügen. Sie haben auch das Live-Regelladen aktiviert und einen ersten Satz von Regeln heruntergeladen.
Sobald Sie die Konfiguration von Suricata validiert haben, haben Sie den Prozess gestartet und einige Test-HTTP-Traffic generiert. Sie haben überprüft, ob Suricata verdächtigen Traffic erkennen konnte, indem Sie sowohl die Standardprotokolle untersucht haben, um sicherzustellen, dass sie einen Alarm enthalten, der der von Ihnen getesteten Regel entspricht.
Weitere Informationen zu Suricata finden Sie auf der offiziellen Suricata-Website. Für weitere Details zu den von Ihnen in diesem Tutorial konfigurierten Konfigurationsoptionen lesen Sie das Suricata-Benutzerhandbuch.
Jetzt, da Sie Suricata installiert und konfiguriert haben, können Sie mit dem nächsten Tutorial in dieser Reihe Understanding Suricata Signatures fortfahren, in dem Sie lernen, wie Sie Ihre eigenen benutzerdefinierten Suricata-Regeln schreiben. Sie werden verschiedene Möglichkeiten kennenlernen, Alarme zu erstellen oder sogar den gesamten Traffic basierend auf Kriterien wie ungültigen TCP/IP-Paketen, dem Inhalt von DNS-Anfragen, HTTP-Anfragen und -Antworten sowie sogar TLS-Handshakes zu blockieren.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-suricata-on-centos-8-stream