Suricata als Intrusion Prevention System (IPS) konfigurieren

Mit der zunehmenden Beliebtheit von Cyberkriminalität besteht ein dringender Bedarf für Unternehmen, sich besser gegen Hacker zu schützen. Ein Intrusion Prevention System (IPS) ist eine der besten Möglichkeiten, sich gegen Computerangriffe zu verteidigen. Bevor Sie das Internet nach einem IPS durchsuchen, sollten Sie Suricata ausprobieren.

In diesem Tutorial erfahren Sie, wie Sie ein voll funktionsfähiges Suricata IPS auf einem Linux-Server konfigurieren, um Ihr Netzwerk vor Online-Bedrohungen zu schützen.

Bereit? Lesen Sie weiter und beginnen Sie, Ihr Netzwerk zu schützen!

Voraussetzungen

In diesem Tutorial wird eine praktische Demonstration durchgeführt. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
  • A non-root user with sudo privileges.
  • Je nach Netzwerkkonfiguration und der beabsichtigten Verwendung von Suricata benötigen Sie möglicherweise mehr oder weniger CPU und RAM für Ihren Server. Im Allgemeinen sollten Sie für die Inspektion eines größeren Datenverkehrs mehr Ressourcen für Suricata zuweisen. In einer Entwicklerumgebung sollten Sie mindestens 2 CPUs und 8 GB RAM verwenden, damit Suricata seine Aufgaben ohne Beeinträchtigung der Servicequalität für alle Benutzer ausführen kann.

Installation von Suricata und Hinzufügen des PPA-Repositories

Suricata ist standardmäßig nicht auf Ubuntu installiert, aber die Installation von Suricata ist ähnlich wie die Installation anderer Pakete auf Ihrem System.

1. Führen Sie das apt update Befehl aus, um die verfügbaren Pakete in Ihrem System zu aktualisieren.

sudo apt update -y
Updating the list of available packages

2. Führen Sie anschließend den add-apt-repository Befehl aus, um das PPA-Repository zu öffnen, das von der Open Information Security Foundation (OISF) verwaltet wird. Durch Hinzufügen des PPA-Repositorys erhalten Sie die neueste und stabilste Version von Suricata (ppa:oisf/suricata-stable).

sudo add-apt-repository ppa:oisf/suricata-stable
Adding the PPA repository for Suricata

3. Führen Sie erneut den Befehl sudo apt update aus, um das neu hinzugefügte Suricata-Repository in den Paketindex Ihres Systems zu laden.

sudo apt update -y

4. Führen Sie nun den Befehl sudo apt policy aus, um zu überprüfen, ob Sie das Suricata-PPA korrekt hinzugefügt haben. Stellen Sie sicher, dass Sie das Suricata-PPA in der Liste wie unten gezeigt sehen, bevor Sie Suricata installieren

sudo apt policy
Running the sudo apt policy

5. Führen Sie den folgenden Befehl aus, um Suricata auf Ihrem System zu installieren.

sudo apt install suricata -y
Installing Suricata on your system

6. Sobald die Installation abgeschlossen ist, führen Sie den folgenden Befehl aus, um den suricata-Dienststatus mit systemctl status zu überprüfen.

sudo systemctl status suricata

Unten sehen Sie, dass der Suricata-Dienst aktiv (läuft) ist.

Checking the Suricata service status

Konfiguration von Suricata

Das Suricata-Paket wird mit einer Konfigurationsdatei namens suricata.yaml geliefert, die sich im Verzeichnis /etc/suricata befindet. Diese Konfigurationsdatei enthält viele verschiedene Einstellungen für viele andere Anwendungsfälle. Beachten Sie jedoch, dass es einige Einstellungen in der Standardkonfigurationsdatei gibt, die Sie ändern müssen, bevor Sie Suricata verwenden können.

Der Standardmodus für Suricata ist der Intrusion Detection (IDS) -Modus, der den Datenverkehr protokolliert, aber nicht abwirft. Dieser Modus wird verwendet, wenn Sie Suricata konfigurieren und sich damit vertraut machen. Sobald Sie mit Suricata vertrauter sind und die Arten von Datenverkehr besser verstehen, über die Suricata Sie informieren wird, können Sie in den IPS-Modus wechseln.

Suricata fügt ein Feld in seinem JSON-Format hinzu (Gemeinschaftsfluss-ID). Die Gemeinschaftsfluss-ID ist ein 8-Byte-Feld, das es Ihnen ermöglicht, Datensätze zu korrelieren, die von anderen Tools generiert wurden. Diese Funktion ist nützlich, wenn Sie Suricata in Verbindung mit anderen Tools wie Bro oder Elasticsearch verwenden.

1. Öffnen Sie die Datei /etc/suricata/suricata.yaml in Ihrem bevorzugten Texteditor.

Finde eine Zeile, die community-id: false lautet, und ändere sie in community-id: true. Speichere die Änderungen und verlasse den Texteditor.

Jedes Mal, wenn du Ereignisse untersuchst, wirst du die Community-Flow-ID in ihrem JSON-Output sehen.

Enabling Community ID

Führe dann den folgenden Befehl aus, um ein Gerät mit einer Standardroute auf deinem System zu finden (route show default). Die -p-Flag gibt dem ip-Befehl an, das Gerät in einer menschenlesbaren Weise auszugeben, während die -j-Flag den JSON-Output ausgibt.

Suricata ist standardmäßig konfiguriert, um Pakete von jeder verfügbaren Netzwerkschnittstelle zu schnüffeln. Aber du kannst dieses Verhalten ändern und eine Schnittstelle für Suricata angeben, auf die es hören soll, wenn es gestartet wird.

 ip -p -j route show default

Wie unten zu sehen ist, gibt der dev-Parameter die Schnittstelle an, die Suricata zum Schnüffeln von Paketen verwenden wird. In diesem Demo ist die Schnittstelle eth0, aber deine Schnittstelle kann anders sein, wie tun0, wlan0 usw.

Previewing the Network Interface

4. Öffne schließlich die Konfigurationsdatei /etc/suricata/suricata.yaml, finde den interface-Parameter unter dem af-packet-Abschnitt und ändere ihn entsprechend. In diesem Demo wird eth0 als die Schnittstelle zum Schnüffeln von Paketen verwendet.

Speichere die Änderungen, aber halte deinen Texteditor vorerst geöffnet.

Editing the /etc/suricata/suricata.yaml configuration file

Einrichten der Live-Regel-Neuladefunktion

Du hast Suricata jetzt konfiguriert, aber das ist erst der Anfang zum Schutz deines Netzwerks. Normalerweise möchtest du Regeln sofort hinzufügen und automatisch neu laden. Wie? Suricatas Live-Regel-Neuladen-Funktion ermöglicht es dir, Regeln dynamisch zu aktualisieren. Dadurch musst du Suricata nicht manuell neu starten, damit die neuen Regeln wirksam werden.

Öffne die Datei /etc/suricata/suricata.yaml, kopiere/füge die folgenden Direktiven am Ende des Dateiinhalts ein und speichere die Änderungen. Diese Direktiven ermöglichen das Aktivieren der Live-Regel-Neuladen-Funktion.

Mit dieser Einstellung werden Änderungen an deinen Regelsets wirksam, ohne dass du deinen Suricata-Dienst neu starten musst.

detect-engine:
  - rule-reload: true
Setting up the Live Rule Reloading

Führe nun den Befehl kill unten aus, um deinen Suricata-Prozess ($(pidof suricata)) darüber zu informieren, die Regeln ohne Neustart zu aktualisieren.

Der Befehl sendet ein benutzerdefiniertes Signal (-usr2) an die angegebene Prozess-ID. Dann führt Suricata automatisch folgende Schritte durch:

  • Neue Konfiguration laden, um Regelvariablen und -werte zu aktualisieren.
  • Neue Regeln laden
  • Neuen Detektionsmechanismus erstellen
  • Alten und neuen Detektionsmechanismus austauschen
  • Sicherstellen, dass alle Threads aktualisiert sind
  • Alten Detektionsmechanismus freigeben
sudo kill -usr2 $(pidof suricata)

Suricata-Regelsets aktualisieren

Die Funktion zum Live-Regel-Neuladen ist bereit, erfüllt jedoch ihren Zweck nicht, es sei denn, du aktualisierst deine Regelsets. Standardmäßig enthält das Suricata-Paket ein begrenztes Regelset, das nur die häufigsten Internetprotokolle erkennt und sich im Verzeichnis /etc/suricata/rules befindet.

An diesem Punkt erhalten Sie eine Fehlermeldung „Keine Regeldateien entsprechen dem Muster“, ähnlich der unten stehenden, wenn Sie versuchen, Ihren Suricata-Dienst zu starten und zu verwenden. Diese Fehlermeldung deutet darauf hin, dass es keine Regelsets für Suricata gibt.

Previewing Error Message when No Rulesets Exist

Um diesen Fehler zu beheben, stellen Sie Regelset-Dateien für Ihre Suricata-Instanz bereit. Glücklicherweise gibt es ein Tool namens suricata-update, das Ihnen dabei hilft, weitere Regelsets von Drittanbietern zu erhalten.

1. Führen Sie den folgenden Befehl aus, um ein Update für Ihre Suricata-Instanz zu erhalten.

sudo suricata-update

Wie Sie unten sehen können, zeigt die Ausgabe an, dass der suricata-update-Befehl die Regeln heruntergeladen hat, indem er eine Verbindung zu https://rules.emergingthreats.net/open/ herstellt. Der Befehl speichert dann die neuen Regeln im Verzeichnis /var/lib/suricata/rules/.

Die Ausgabe gibt auch Folgendes aus:

  • Die Gesamtanzahl (31737) der Regelsets
  • Die Anzahl der aktivierten Regeln (24355)
  • Die Anzahl der hinzugefügten (31737)/entfernten (0) Regeln.
Updating Your Suricata Rulesets

Führen Sie anschließend den folgenden Befehl aus, um alle Regelset-Anbieter aufzulisten (list-sources).

Der Befehl suricata-update lädt Regelsets von vielen Anbietern herunter, einschließlich kostenloser und kommerzieller Anbieter.

sudo suricata-update list-sources

Unten sehen Sie einen kleinen Teil der Liste. Notieren Sie sich den Namen eines Regelsets, von dem Sie möchten, dass Suricata speziell Regelsets abruft. In diesem Tutorial werden Regelsets von et/open zu Demonstrationszwecken abgerufen (Schritt drei).

Listing all ruleset providers

3. Führen Sie den folgenden Befehl aus, um die Regelsets et/open für Suricata abzurufen und einzuschließen (enable-source).

sudo suricata-update enable-source et/open
Fetching the et/open rulesets

Zuletzt führen Sie den Befehl suricata-update erneut aus, um das neu ausgewählte Regelset zu laden.

sudo suricata-update

Validierung der Suricata-Konfiguration

Sie haben Suricata konfiguriert und sogar Regelsets hinzugefügt. Es ist jetzt an der Zeit, Ihre Änderungen zu validieren und sicherzustellen, dass alles wie erwartet funktioniert. Das Suricata-Paket verfügt über einen integrierten Validierungsdienst, der es Ihnen ermöglicht, Abweichungen von der aktuellen Konfiguration zu sehen.

Führen Sie den Befehl suricata unten aus, um die Änderungen in der Suricata-Konfigurationsdatei zu validieren (-c /etc/suricata/suricata.yaml). Der Befehl zeigt auch alle Validierungsmeldungen an (-v).

Die Flagge -T teilt Suricata mit, im „Testmodus“ und „Top-Down-Modus“ zu laufen. Beide Modi haben strengere Regeln für das Abgleichen von Paketen und neigen weniger dazu, falsch positiv zu sein.

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Da Suricata eine hoch konfigurierbare Firewall ist, kann der Test mehrere Minuten dauern. Bei fehlerfreier Ausführung sehen Sie eine Ausgabe ähnlich der unten stehenden, die eine komplette Meldung zeigt.

Validating Your Suricata Configuration: complete

Wenn Ihre Konfigurationsdatei Fehler aufweist, ähnlich wie unten dargestellt, gibt Suricata jeden Fehler aus und gibt die spezifischen Zeilen an, die Probleme verursachen. Wenn Sie diese Fehler erhalten, beheben Sie jedes Konfigurationsproblem nacheinander, bis die Validierung erfolgreich ist.

Validating Your Suricata Configuration: errors

Testen der Suricata-Regeln

Jetzt, da Ihre Suricata-Konfigurationsdateien validiert sind, können Sie Suricata ausführen, um zu sehen, ob sie korrekt funktionieren. Sie werden Suricata verwenden, um den ET Open (2100498) mit dem curl-Befehl auszuführen, um verdächtige Aktivitäten/Verkehr zu erkennen.

Derzeit hat Ihre Suricata-Instanz über 30.000 Regeln, die Suricata aus verschiedenen Regelwerken bezogen hat. Ein vollständiger Test aller Regeln mit ihren Erklärungen passt daher nicht in dieses Tutorial.

1. Führen Sie den folgenden curl-Befehl aus, um einige Verkehr/HTTP-Anfragen/Aktivitäten von der TestMyNIDS-Website zu generieren. TestMyNIDS ist ein E-Learning-Projekt, das die Tests, Validierung und Vergleiche von NIDS unterstützt. Die Website bietet eine einzigartige Plattform für den vergleichenden Analyse von NIDS und verwandten Tools.

Sie können diese Website verwenden, um verdächtige Aktivitäten/Verkehr zu testen und zu sehen, ob Ihr konfiguriertes Regelwerk wie erwartet funktioniert.

curl http://testmynids.org/uid/index.html

Die Antwortdaten sind so konzipiert, dass sie einen falschen Alarm auslösen, der vorgibt, ein Linux/Unix root-Benutzer zu sein. Und dieser root-Benutzer befindet sich auf einem möglicherweise kompromittierten System.

Testing Your Suricata Rules

Führen Sie anschließend den unten stehenden grep-Befehl aus, um die Datei fast.log im Verzeichnis /var/log/suricata/ nach einer übereinstimmenden Alarmmeldung 2100498 zu untersuchen. Dieser Befehl überprüft die Protokolldatei auf Benachrichtigungen von Benutzern.

Neben der fast.log-Datei ist eine weitere Protokolldatei zu beachten: die eve.log im selben Verzeichnis.

grep 2100498 /var/log/suricata/fast.log

Sie werden eine Ausgabe ähnlich der untenstehenden sehen, die die öffentliche IPv4-Adresse Ihres Systems anzeigt.

Examining the fast.log file

3. Führen Sie nun den jq-Befehl unten aus, um die eve.log-Datei zu untersuchen. Die eve.log-Datei wird ebenfalls für das Protokollieren von Ereignissen verwendet, jedoch im JSON-Format (/var/log/suricata/eve.json). Es sind die eve.json– und fast.log-Dateien, auf die Sie sich bei verdächtigem Verkehr und blockierten Versuchen beziehen werden. Wenn Sie diese gefunden haben, ergreifen Sie die notwendigen Maßnahmen.

jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

Im Folgenden sehen Sie “signature_id”: 2100498 in der Ausgabe, dies ist die von Ihnen im Befehl angegebene Warnsignatur-ID.

Sie können auch die “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” in der Ausgabe sehen, dies ist die Community Flow ID, die Sie in der Datei /etc/suricata/suricata.yaml eingerichtet haben.

Diese community_id ist nützlich, wenn Sie Suricata in Verbindung mit anderen Tools wie Elasticsearch verwenden, um einen vollständigen „Security Monitoring Stack“ zu einem vernünftigen Preis zu erhalten.

Examining the eve.log file

Fazit

In diesem Tutorial haben Sie gelernt, wie Sie Suricata mit Regelsets installieren und konfigurieren, um Ihr Netzwerk zu schützen. Sie haben auch getestet, ob die Regelsets funktionieren, indem Sie Verkehr in Ihrem Netzwerk generieren.

Zu diesem Zeitpunkt läuft Suricata perfekt mit Ihrem benutzerdefinierten Regelset, um verdächtige Aktivitäten/Verkehr in Ihrem Netzwerk zu erkennen.

Nun, warum nicht auf diesem neu gewonnenen Wissen aufbauen? Vielleicht beginnen Sie mit der Installation und Konfiguration von Suricata, Zeek, dem Elasticsearch-Stack, um einen vollständigen „Sicherheitsüberwachungs-Stack“ einzurichten?

Source:
https://adamtheautomator.com/suricata/