Angesichts der zunehmenden Popularität von Cyberkriminalität müssen Unternehmen dringend besser vor Hackern geschützt werden. Ein Intrusion Prevention System (IPS) ist eine der besten Möglichkeiten, sich gegen Computerangriffe zu verteidigen. Aber bevor Sie das Internet nach einem IPS durchsuchen, probieren Sie Suricata aus.
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 schützen Sie Ihr Netzwerk!
Voraussetzungen
Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben:
- Ein Linux-Server – Diese Demo verwendet Ubuntu 20.04 LTS, aber jede Linux-Distribution funktioniert.
- Ein Nicht-Root-Benutzer mit sudo-Berechtigungen.
- Abhängig von Ihrer Netzwerkkonfiguration und davon, wie Sie Suricata verwenden möchten, benötigen Sie möglicherweise mehr oder weniger CPU und RAM für Ihren Server. Im Allgemeinen gilt:Je mehr Datenverkehr Sie untersuchen möchten, desto mehr Ressourcen werden Sie Suricata zuweisen. Planen Sie in einer Entwicklerumgebung die Verwendung von mindestens 2 CPUs und 8 GB RAM ein, damit Suricata seine Aufgaben ausführen kann, ohne die Servicequalität für alle Benutzer zu beeinträchtigen.
Suricata installieren und hinzufügen PPA-Repository
Suricata wird nicht standardmäßig auf Ubuntu installiert, aber die Installation von Suricata ähnelt der Installation anderer Pakete auf Ihrem System.
1. Führen Sie apt update
aus Befehl, um die verfügbaren Pakete in Ihrem System zu aktualisieren.
sudo apt update -y
2. Führen Sie als Nächstes add-apt-repository
aus Befehl, um das von der Open Information Security Foundation (OISF) verwaltete PPA-Repository hinzuzufügen. Durch Hinzufügen des PPA-Repositorys erhalten Sie die neueste und stabile Version von Suricata (ppa:oisf/suricata-stable
).
sudo add-apt-repository ppa:oisf/suricata-stable
3. Führen Sie sudo apt update
erneut aus Befehl, um das neu hinzugefügte Suricata-Repository in den Paketindex Ihres Systems zu laden.
sudo apt update -y
4. Führen Sie nun sudo apt policy
aus Befehl, um zu überprüfen, ob Sie das Suricata-PPA korrekt hinzugefügt haben. Stellen Sie sicher, dass Sie Suricata PPA in der unten gezeigten Liste sehen, bevor Sie Suricata
sudo apt policy
5. Führen Sie den folgenden Befehl zu install suricata
aus auf Ihrem System.
sudo apt install suricata -y
6. Führen Sie nach Abschluss der Installation systemctl status
aus Befehl unten, um suricata
zu überprüfen Dienst status
.
sudo systemctl status suricata
Unten sehen Sie, dass der Suricata-Dienst aktiv (wird ausgeführt) ist
Suricata konfigurieren
Das Suricata-Paket wird mit einer Konfigurationsdatei namens suricata.yaml geliefert befindet sich unter /etc/suricata Verzeichnis. Diese Konfigurationsdatei hat viele verschiedene Einstellungen für viele andere Anwendungsfälle. Beachten Sie jedoch, dass es einige Einstellungen in der Standardkonfigurationsdatei gibt, die Sie anpassen müssen, bevor Sie Suricata verwenden.
Der Standardmodus für Suricata ist der Intrusion Detection (IDS)-Modus, der Datenverkehr protokolliert, aber nicht unterbricht. Dieser Modus wird beim Konfigurieren und Kennenlernen von Suricata verwendet. Sobald Sie mit Suricata besser vertraut sind und besser verstehen, vor welchen Verkehrsarten Suricata Sie warnt, können Sie den IPS-Modus aktivieren.
Suricata fügt ein Feld in seinem JSON-Format (Community Flow ID) an. Die Community-Flow-ID ist ein 8-Byte-Feld, mit dem Sie von anderen Tools generierte Datensätze korrelieren können. Diese Funktion ist praktisch, wenn Sie Suricata in Verbindung mit anderen Tools wie Bro oder Elasticsearch verwenden.
1. Öffnen Sie /etc/suricata/suricata.yaml Datei in Ihrem bevorzugten Texteditor.
2. Suchen Sie eine Zeile mit der Aufschrift community-id:false und ändern Sie es in community-id:true . Speichern Sie die Änderungen und beenden Sie den Texteditor.
Jedes Mal, wenn Sie Ereignisse untersuchen, sehen Sie die Community-Flow-ID in ihrer JSON-Ausgabe.
Führen Sie als Nächstes den folgenden Befehl aus, um ein Gerät mit einer Standardroute auf Ihrem System zu finden (route show default
). Die -p
Flag teilt dem ip
mit Befehl, um das Gerät menschenlesbar zu drucken, während der -j
flag druckt die JSON-Ausgabe.
Suricata ist standardmäßig so konfiguriert, dass es Pakete von jeder verfügbaren Netzwerkschnittstelle ausspioniert. Sie können dieses Verhalten jedoch ändern und eine Schnittstelle angeben, auf die Suricata beim Start hören soll.
ip -p -j route show default
Wie Sie unten sehen, ist die dev Der Parameter gibt die Schnittstelle an, die Suricata zum Sniffen von Paketen verwendet. In dieser Demo ist die Schnittstelle eth0 , aber Ihre Schnittstelle kann anders sein, wie tun0, wlan0 und so weiter.
4. Öffnen Sie abschließend die Datei /etc/suricata/suricata.yaml Konfigurationsdatei, suchen Sie die Schnittstelle Parameter unter dem af-packet Abschnitt und ändern Sie ihn entsprechend. In dieser Demo ist eth0 wird als Schnittstelle zum Sniffen von Paketen verwendet.
Speichern Sie die Änderungen, aber lassen Sie Ihren Texteditor vorerst geöffnet.
Einrichten der Funktion zum erneuten Laden von Live-Regeln
Sie haben Suricata jetzt konfiguriert, aber das ist erst der Anfang des Schutzes Ihres Netzwerks. Normalerweise möchten Sie Regeln sofort hinzufügen und die Regeln automatisch neu laden. Wie? Mit der Live-Regel-Neuladefunktion von Suricata können Sie Regeln im Handumdrehen aktualisieren. Daher müssen Sie Suricata nicht manuell neu starten, damit die neuen Regeln wirksam werden.
Öffnen Sie /etc/suricata/suricata.yaml Datei, kopieren/fügen Sie die folgenden Anweisungen am Ende des Dateiinhalts ein und speichern Sie die Änderungen. Mit diesen Anweisungen können Sie die Funktion zum erneuten Laden von Live-Regeln aktivieren.
Mit dieser Einstellung werden Änderungen beim Bearbeiten/Aktualisieren Ihrer Regelsätze wirksam, ohne dass Ihr Suricata-Dienst neu gestartet werden muss.
detect-engine:
- rule-reload: true
Führen Sie nun kill
aus Befehl unten, um Ihren Suricata-Prozess zu benachrichtigen ($(pidof suricata)
), um die Regeln ohne Neustart zu aktualisieren.
Der Befehl sendet ein benutzerdefiniertes Signal (-usr2
) an die angegebene Prozess-ID, dann führt Suricata automatisch Folgendes aus:
- Neue Konfiguration laden, um Regelvariablen und -werte zu aktualisieren.
- Neue Regeln laden
- Neue Erkennungsmaschine konstruieren
- Alte und neue Erkennungsmodule austauschen
- Stellen Sie sicher, dass alle Threads aktualisiert sind
- Altes Erkennungsmodul freigeben
sudo kill -usr2 $(pidof suricata)
Aktualisierung der Suricata-Regelsätze
Die Funktion zum erneuten Laden von Live-Regeln ist bereit, aber sie erfüllt keinen Zweck, es sei denn, Sie aktualisieren Ihre Regelsätze. Standardmäßig verfügt das Suricata-Paket über einen eingeschränkten Regelsatz, der nur die gängigsten Internetprotokolle erkennt, die sich in /etc/suricata/rules befinden Verzeichnis.
An dieser Stelle erhalten Sie die Meldung Keine Regeldateien stimmen mit dem Muster überein Fehlermeldung wie die folgende, wenn Sie versuchen, Ihren Suricata-Dienst zu starten und zu verwenden. Diese Fehlermeldung weist darauf hin, dass es keine Regelsätze für Suricata gibt, die verwendet werden können.
Um diesen Fehler zu beheben, stellen Sie Regelsatzdateien für Ihre Suricata-Instanz bereit. Glücklicherweise hat Suricata ein Tool namens suricata-update
das hilft Ihnen beim Abrufen weiterer Regelsätze von Drittanbietern.
1. Führen Sie den folgenden Befehl aus, um ein Update für Ihre Suricata-Instance zu erhalten.
sudo suricata-update
Wie Sie unten sehen können, gibt die Ausgabe an, dass der suricata-update
Der Befehl hat die Regeln abgerufen, indem er eine Verbindung zu https://rules.emergingthreats.net/open/ herstellte. Der Befehl speichert dann die neuen Regeln im Verzeichnis /var/lib/suricata/rules/ .
Die Ausgabe gibt außerdem Folgendes aus:
- Die Gesamtzahl (31737 ) von Regelsätzen
- Die Anzahl der aktivierten Regeln (24355 )
- Die Anzahl, wie viele hinzugefügt werden (31737 )/removed(0 ).
Führen Sie als Nächstes den folgenden Befehl aus, um alle Regelsatzanbieter aufzulisten (list-sources
).
Die
suricata-update
Befehl ruft Regelsätze von vielen Anbietern ab, einschließlich kostenloser und kommerzieller Anbieter.
sudo suricata-update list-sources
Unten sehen Sie einen kleinen Teil der Liste. Notieren Sie sich einen Regelsatznamen, von dem Suricata speziell Regelsätze abrufen soll. Dieses Tutorial ruft et/open ab Regelsätze zur Demonstration (Schritt drei).
3. Führen Sie den folgenden Befehl aus, um (enable-source
) die et/open
Regelsätze zu Ihren Suricata-Regeln.
sudo suricata-update enable-source et/open
Führen Sie abschließend den suricata-update
erneut aus Befehl zum Laden des neu ausgewählten Regelsatzes.
sudo suricata-update
Validieren der Suricata-Konfiguration
Sie haben Suricata konfiguriert und sogar Regelsätze hinzugefügt, also ist es an der Zeit, Ihre Änderungen zu validieren und sicherzustellen, dass alles wie erwartet funktioniert. Das Suricata-Paket verfügt über einen integrierten Validierungsdienst, mit dem Sie alle Abweichungen von der aktuellen Konfiguration sehen können.
Führen Sie suricata
aus Befehl unten, um die Änderungen in der Suricata-Konfigurationsdatei (-c /etc/suricata/suricata.yaml
). Der Befehl zeigt auch alle Validierungsmeldungen an (-v
).
Der -T
Flag weist Suricata an, im „Testmodus“ und im „Top-Down“-Modus zu laufen. Beide Modi haben strengere Regeln für den Abgleich von Paketen und führen mit geringerer Wahrscheinlichkeit zu Fehlalarmen.
sudo suricata -T -c /etc/suricata/suricata.yaml -v
Da Suricata eine hochgradig konfigurierbare Firewall ist, kann der Test mehrere Minuten dauern. Wenn es keine Fehler gibt, sehen Sie eine Ausgabe ähnlich der untenstehenden, die ein complete anzeigt Nachricht.
Wenn Ihre Konfigurationsdatei ähnliche Fehler wie den folgenden aufweist, druckt Suricata jeden Fehler aus und weist auf bestimmte Zeilen hin, die Probleme verursachen. Wenn Sie diese Fehler erhalten, beheben Sie jedes Konfigurationsproblem nacheinander, bis die Validierung erfolgreich ist.
Testen der Suricata-Regeln
Nachdem Ihre Suricata-Konfigurationsdateien validiert wurden, können Sie Suricata ausführen, um zu sehen, ob sie ordnungsgemäß funktionieren. Sie werden Suricata verwenden, um das ET Open (2100498) mit dem curl
zu testen Befehl zur Erkennung verdächtiger Aktivitäten/Datenverkehrs.
Im Moment hat Ihre Suricata-Instanz über 30.000 Regeln, die Suricata aus verschiedenen Regelsätzen abgerufen hat. Ein vollständiger Test aller Regeln mit ihrer Erklärung passt also nicht in dieses Tutorial.
1. Führen Sie curl
aus Befehl unten, um einige Traffic-/HTTP-Anfragen/Aktivitäten von der TestMyNIDS-Website zu generieren. TestMyNIDS ist ein E-Learning-Projekt, das sich der Unterstützung von NIDS-Tests, -Validierung und -Vergleichen widmet. Die Website bietet eine einzigartige Plattform für die vergleichende Analyse von NIDS und verwandten Tools.
Sie können diese Website verwenden, um verdächtige Aktivitäten/Datenverkehr zu testen, um festzustellen, ob Ihr konfigurierter Regelsatz wie erwartet funktioniert.
curl http://testmynids.org/uid/index.html
Die Antwortdaten sollen einen falschen Alarm auslösen, der vorgibt, ein Linux/Unix-Root zu sein Benutzer. Und diese Wurzel Benutzer befindet sich auf einem System, das möglicherweise kompromittiert ist.
Führen Sie als Nächstes grep
aus Befehl unten, um fast.log
zu untersuchen Datei im Verzeichnis /var/log/suricata/ Verzeichnis für eine passende Warnmeldung 2100498
. Dieser Befehl überprüft die Protokolldatei auf Benutzerwarnungen.
Neben der fast.log-Datei ist eine weitere Protokolldatei, auf die Sie achten sollten, die eve.log-Datei im selben Verzeichnis.
grep 2100498 /var/log/suricata/fast.log
Sie sehen eine Ausgabe ähnlich der folgenden, die die öffentliche IPv4-Adresse Ihres Systems anzeigt.
3. Führen Sie nun jq
aus Befehl unten, um die eve.log zu untersuchen Datei. Das eve.log Datei wird auch zum Protokollieren von Ereignissen verwendet, jedoch im JSON-Format (/var/log/suricata/eve.json
). Es ist die eve.json und fast.log Dateien, auf die Sie bei verdächtigem Datenverkehr und blockierten Versuchen verweisen. Sobald Sie ihn gefunden haben, ergreifen Sie die erforderlichen Maßnahmen.
jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json
Unten sehen Sie "signature_id":2100498 in der Ausgabe, die die Warnungssignatur-ID ist, die Sie im Befehl angegeben haben.
Sie können auch die "community_id":"1:ETRbv54GHTVCayHTUR5OIovK4gh2=" sehen in der Ausgabe, die die Community Flow ID ist, die Sie in /etc/suricata/suricata.yaml eingerichtet haben Datei.
Diese community_id ist praktisch, wenn Sie Suricata in Verbindung mit anderen Tools wie Elasticsearch verwenden, um einen vollständigen „Sicherheitsüberwachungs-Stack“ zu angemessen niedrigen Kosten zu erhalten.
Schlussfolgerung
In diesem Tutorial haben Sie gelernt, wie Sie Suricata mit Regelsätzen installieren und konfigurieren, um Ihr Netzwerk zu schützen. Sie haben auch getestet, ob die Regelsätze funktionieren, indem Sie Datenverkehr in Ihrem Netzwerk generiert haben.
An diesem Punkt läuft Suricata perfekt mit Ihrem benutzerdefinierten Regelsatz, um verdächtige Aktivitäten/Datenverkehr in Ihrem Netzwerk zu erkennen.
Warum also nicht auf diesem neu gewonnenen Wissen aufbauen? Beginnen Sie vielleicht mit der Installation und Konfiguration von Suricata, Zeek, dem Elasticsearch-Stack, um einen vollständigen „Sicherheitsüberwachungs-Stack“ einzurichten?