In diesem Schritt lernen Sie, wie Sie Ihre eigene Suricata-Regel erstellen und testen, um bestimmte Muster im Netzwerkverkehr zu erkennen. Wir konzentrieren uns auf die Erkennung von HTTP-Anfragen an eine Testdomäne (example.com) als praktisches Beispiel. Benutzerdefinierte Regeln ermöglichen es Ihnen, die Erkennungsfähigkeiten von Suricata über die Standard-Regelsätze hinaus zu erweitern.
-
Navigieren Sie zunächst zum Verzeichnis, in dem Suricata seine Erkennungsregeln speichert:
cd /var/lib/suricata/rules
Hier werden normalerweise alle Suricata-Regeldateien gespeichert. Wir werden unsere benutzerdefinierten Regeln hier hinzufügen, um sie mit den vorhandenen Regeln zu organisieren.
-
Erstellen Sie eine neue Regeldatei speziell für Ihre benutzerdefinierten Regeln:
sudo nano custom.rules
Die Verwendung von sudo
ist erforderlich, da das Regelnverzeichnis administrative Berechtigungen zur Änderung erfordert. Wir benennen die Datei custom.rules
, um sie deutlich von Suricata's Standard-Regeldateien zu unterscheiden.
-
Fügen Sie die folgende Regel hinzu, um HTTP-Anfragen an example.com zu erkennen:
alert http any any -> any any (msg:"HTTP Request to example.com"; flow:to_server; http.host; content:"example.com"; nocase; sid:1000002; rev:1;)
Lassen Sie uns analysieren, was diese Regel tut:
alert http
: Löst einen Alarm für HTTP-Verkehr aus
any any -> any any
: Wird auf Verkehr von jedem Quellport zu jedem Zielport angewendet
msg
: Liefert eine menschenlesbare Alarmmeldung
flow:to_server
: Passt nur auf Verkehr zu Servern
http.host
: Untersucht den HTTP-Host-Header
content:"example.com"
: Sucht nach dieser bestimmten Domäne
nocase
: Macht die Übereinstimmung unabhängig von Groß- und Kleinschreibung
sid:1000002
: Gibt der Regel eine eindeutige ID (über 1.000.000 für benutzerdefinierte Regeln)
rev:1
: Gibt an, dass dies die erste Version der Regel ist
-
Speichern Sie die Datei im Nano-Editor, indem Sie Strg+O drücken (ausschreiben), dann Enter zum Bestätigen und Strg+X zum Beenden.
-
Jetzt müssen wir Suricata mitteilen, dass es unsere neue Regeldatei laden soll. Bearbeiten Sie die Hauptkonfiguration:
sudo nano /etc/suricata/suricata.yaml
Suchen Sie den Abschnitt rule-files:
(normalerweise um Zeile 50 - 60) und fügen Sie hinzu:
- custom.rules
Diese Ergänzung stellt sicher, dass Suricata unsere benutzerdefinierten Regeln beim Starten lädt.
-
Überprüfen Sie vor der Anwendung der Änderungen, ob die Regelsyntax korrekt ist:
sudo suricata -T -c /etc/suricata/suricata.yaml -v
Das -T
-Flag teilt Suricata mit, die Konfiguration zu testen, ohne tatsächlich zu starten. Dies hilft, Syntaxfehler in Ihren Regeln zu finden, bevor sie verwendet werden.
-
Starten Sie Suricata neu, um die neue Regel zu laden:
sudo pkill suricata
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
Der erste Befehl stoppt alle laufenden Suricata-Instanzen, während der zweite es frisch mit unserer aktualisierten Konfiguration startet.
-
Um zu testen, ob unsere Regel funktioniert, generieren Sie etwas HTTP-Verkehr zu example.com:
curl http://example.com
Dieser Befehl macht eine einfache HTTP-Anfrage, die unsere neue Regel auslösen sollte.
-
Überprüfen Sie schließlich, ob Suricata den Verkehr erkannt hat, indem Sie die neuesten Alarme anzeigen:
sudo tail -n 5 /var/log/suricata/fast.log
Sie sollten einen Alarm sehen, der der Meldung unserer benutzerdefinierten Regel über HTTP-Anfragen an example.com entspricht. Wenn nicht, überprüfen Sie jeden Schritt noch einmal und vergewissern Sie sich, dass die Regelsyntax korrekt ist.