Suricata Rules

Aus xinux.net
Zur Navigation springen Zur Suche springen

Tutorial

Understanding Suricata Signatures Published on November 24, 2021 By Jamon Camisso

Einführung

In diesem Tutorial erfahren Sie, wie Suricata-Signaturen strukturiert sind, und einige wichtige Optionen, die in den meisten Regeln verwendet werden. Sobald Sie vertraut sind mit der Struktur und den Feldern einer Signatur, können Sie Ihre eigenen Signaturen schreiben, die Sie zusammen mit einer Firewall verwenden können, um Sie über verdächtigen Datenverkehr zu Ihren Servern zu informieren, ohne externe Regelsätze verwenden zu müssen.

Dieser Ansatz zur Erstellung und Verwaltung von Regeln ermöglicht es Ihnen, Suricata effizienter zu nutzen, da es nur die spezifischen Regeln verarbeiten muss, die Sie geschrieben haben. Sobald Sie einen Regelsatz haben, der den Großteil des legitimen und verdächtigen Datenverkehrs beschreibt, den Sie in Ihrem Netzwerk erwarten, können Sie beginnen, ungültigen Datenverkehr selektiv mit Suricata in seinem aktiven Intrusion Prevention (IPS) -Modus abzulehnen. Im nächsten Tutorial dieser Serie wird erläutert, wie Sie die IPS-Funktion von Suricata aktivieren können.

Voraussetzungen

Für dieses Tutorial können Sie Suricata auf jedem System ausführen, da Signaturen im Allgemeinen kein bestimmtes Betriebssystem erfordern. Wenn Sie dieser Tutorial-Serie folgen, sollten Sie bereits Folgendes haben:

- Suricata installiert und ausgeführt auf einem Server mit Ubuntu 20.04, Debian 11 oder Rocky Linux 8. - Der ET Open Ruleset wurde mit dem Befehl suricata-update heruntergeladen und in Ihre Suricata-Signaturen aufgenommen.

Verständnis der Struktur von Suricata-Signaturen

Suricata-Signaturen können auf den ersten Blick komplex erscheinen, aber sobald Sie verstehen, wie sie strukturiert sind und wie Suricata sie verarbeitet, können Sie Ihre eigenen Regeln erstellen, die den Anforderungen Ihres Netzwerks entsprechen.

Auf einer höheren Ebene bestehen Suricata-Signaturen aus drei Teilen:

1. Eine Aktion, die ausgeführt wird, wenn der Datenverkehr mit der Regel übereinstimmt. 2. Ein Header, der Hosts, IP-Adressen, Ports, Protokolle und die Richtung des Datenverkehrs (eingehend oder ausgehend) beschreibt. 3. Optionen, die Dinge wie die Signature-ID (sid), Log-Nachrichten, reguläre Ausdrücke, die den Inhalt von Paketen abgleichen, Klassifikationstyp und andere Modifikatoren, die helfen können, legitimen und verdächtigen Datenverkehr einzugrenzen.

Die allgemeine Struktur einer Signatur ist wie folgt:

Generische Regelstruktur AKTION HEADER OPTIONEN

Die Header- und Optionsbereiche einer Signatur haben mehrere Abschnitte. Zum Beispiel haben Sie im vorherigen Tutorial Suricata mit der Regel mit der sid 2100498 getestet. Hier ist die vollständige Regel zur Referenz:

sid:2100498 alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)

Der alert-Teil der Signatur ist die Aktion, der Abschnitt ip any any -> any any ist der Header und der Rest der Signatur, beginnend mit (msg:GPL ATTACK_RESPONSE..., enthält die Optionen der Regel.

In den folgenden Abschnitten werden wir jeden Teil einer Suricata-Regel im Detail betrachten.

Aktionen

Der erste Teil der Signatur sid:2100498 ist die Aktion, in diesem Fall "alert". Der Aktionsteil einer Suricata-Signatur gibt an, welche Aktion ausgeführt wird, wenn ein Paket mit der Regel übereinstimmt. Eine Aktion kann je nachdem, ob Suricata im IDS- oder IPS-Modus arbeitet, eine der folgenden sein:

- Pass - Suricata wird das Scannen des Pakets stoppen und es ohne Erzeugen eines Alarms zulassen. - Drop - Wenn Suricata im IPS-Modus arbeitet, wird Suricata die sofortige Verarbeitung des Pakets stoppen und einen Alarm auslösen. Wenn die Verbindung, die das Paket generiert hat, TCP verwendet, wird sie ablaufen. - Reject - Wenn Suricata im IPS-Modus ausgeführt wird, wird ein TCP-Reset-Paket gesendet und Suricata wird das übereinstimmende Paket verwerfen. - Alert - Suricata wird einen Alarm auslösen und ihn zur weiteren Analyse protokollieren.

Header

Jede Suricata-Signatur hat einen Header-Bereich, der das Netzwerkprotokoll, Quell- und Ziel-IP-Adressen, Ports, Protokolle und die Richtung des Datenverkehrs beschreibt. Unter Bezugnahme auf das Beispiel sid:2100498 ist der Header-Abschnitt der Regel der hervorgehobene Teil ip any any -> any any:

sid:2100498 alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)

Das allgemeine Format eines Regel-Headers ist:

Regel-Format <PROTOKOLL> <QUELLE IP> <QUELLE PORT> -> <ZIEL IP> <ZIEL PORT>

Das Protokoll kann eines der folgenden sein:

- TCP - UDP - ICMP - IP - Eine Reihe anderer Anwendungsprotokolle

Die Quell- und Ziel-Felder können IP-Adressen oder Netzwerkbereiche sein oder den speziellen Wert "any" verwenden, der alle IP-Adressen und Netzwerke abgleicht. Der Pfeil -> gibt die Richtung des Datenverkehrs an.

Hinweis: Signaturen können auch einen nicht-direktionalen Marker <> verwenden, der den Verkehr in beiden Richtungen abgleicht. Die Suricata-Dokumentation zu Richtungsmarkern bemerkt jedoch, dass die meisten Regeln den rechten Übereinstimmungspfeil -> verwenden.

Wenn Sie auf bösartigen ausgehenden Datenverkehr (also Verkehr, der Ihr Netzwerk verlässt) alarmieren möchten, wäre das Quellfeld die IP-Adresse oder der Netzwerkbereich Ihres Systems. Das Ziel könnte die IP oder das Netzwerk eines entfernten Systems oder der spezielle Wert "any" sein.

Umgekehrt, wenn Sie einen Alarm für bösartigen eingehenden Datenverkehr generieren möchten, könnte das Quellfeld auf "any" gesetzt und das Ziel auf die IP-Adresse oder den Netzwerkbereich Ihres Systems festgelegt werden.

Sie können auch den TCP- oder UDP-Port angeben, der mit den Port-Feldern untersucht werden soll. Normalerweise wird dem Verkehr, der von einem System ausgeht, ein zufälliger Port zugewiesen, sodass der Wert "any" für die linke Seite des ->-Indikators geeignet ist. Der Zielport kann ebenfalls "any" sein, wenn Sie den Inhalt jedes eingehenden Pakets überprüfen möchten, oder Sie können eine Signatur darauf beschränken, nur Pakete auf einzelnen Ports zu scannen, wie z.B. 22 für SSH-Verkehr oder 443 für HTTPS.

Der Header ip any any -> any any von sid:2100498 ist ein generischer Header, der zu jedem Verkehr passt, unabhängig vom Protokoll, den Quell- oder Ziel-IP-Adressen oder Ports. Solche Catch-All-Header sind nützlich, wenn Sie sicherstellen möchten, dass eingehender und ausgehender Verkehr auf verdächtigen Inhalt überprüft wird.

Beachten Sie, dass die Felder Quelle, Ziel und Port auch den speziellen !-Negationsoperator verwenden können, der den Verkehr verarbeitet, der nicht mit dem Wert des Felds übereinstimmt.

Zum Beispiel würde die folgende Signatur Suricata dazu bringen, auf alle eingehenden SSH-Pakete von einem beliebigen Netzwerk aus, die für Ihr Netzwerk bestimmt sind (dargestellt durch den IP-Block 203.0.113.0/24), die nicht für Port 22 bestimmt sind, einen Alarm auszulösen:

Beispiel-Header alert ssh any any -> 203.0.113.0/24 !22 (sid:1000000;)

Dieser Alarm wäre jedoch nicht sehr nützlich, da er keine Informationen über das Paket oder einen Klassifikationstyp enthält. Um einem Alarm zusätzliche Informationen hinzuzufügen und auf spezifischere Kriterien abzugleichen, verfügen Suricata-Regeln über einen Optionsbereich, in dem Sie eine Vielzahl zusätzlicher Einstellungen für eine Signatur festlegen können.

Optionen

Die Argumente in Klammern (...) in einer Suricata-Signatur enthalten verschiedene Optionen und Schlüsselwörter, die Sie verwenden können, um Teile eines Pakets abzugleichen, eine Regel zu klassifizieren oder benutzerdefinierte Nachrichten zu protokollieren. Während die Argumente im Header einer Regel auf Headerdaten auf IP-, Port- und Protokollebene abzielen, gleichen Optionen den Inhalt eines Pakets ab.

Optionen in einer Suricata-Regel müssen durch ein Semikolon ; getrennt werden und verwenden in der Regel das Format Schlüssel:Wert. Einige Optionen haben keine Einstellungen und es muss nur der Name in einer Regel angegeben werden.

Unter Verwendung der Beispiel-Signatur aus dem vorherigen Abschnitt könnten Sie die Option msg mit dem Wert "SSH-Verkehr auf Nicht-SSH-Port erkannt" hinzufügen, um zu erklären, worum es bei dem Alarm geht:

Beispiel-Header alert ssh any any -> 203.0.113.0/24 !22 (msg:"SSH-Verkehr auf Nicht-SSH-Port erkannt"; sid:1000000;)

Eine vollständige Erklärung, wie Sie jede Option in einer Suricata-Regel verwenden können, ist über den Umfang dieses Tutorials hinaus. Die Suricata-Regeln-Dokumentation ab Abschnitt 6.2 beschreibt jeden Schlüsselbegriff in Detail.

Es gibt jedoch einige Kernoptionen wie das Schlüsselwort content und verschiedene Meta-Schlüsselwörter, die in den meisten Signaturen verwendet werden, die wir in den folgenden Abschnitten genauer betrachten werden.

Das Schlüsselwort "Content"

Eine der wichtigsten Optionen für jede Regel ist das Schlüsselwort "content". Erinnern Sie sich an die Beispiel-Signatur sid:2100498:

sid:2100498 alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)

Der hervorgehobene Teil content:"uid=0|28|root|29|"; enthält das Schlüsselwort "content" und den Wert, den Suricata im Paket suchen wird. Im Fall dieser Beispiel-Signatur werden alle Pakete von jeder IP-Adresse an jedem Port überprüft, um sicherzustellen, dass sie nicht den Zeichenfolgenwert "uid=0|28|root|29|" enthalten (der im vorherigen Tutorial als Beispiel für einen kompromittierten Host verwendet wurde).

Das Schlüsselwort "content" kann mit den meisten Protokollen verwendet werden und ermöglicht es Ihnen, spezifische Zeichenfolgen oder Muster im Paketinhalt zu suchen. Es ist äußerst vielseitig und leistungsstark.

Metadaten

Jede Suricata-Signatur kann Metadaten enthalten, die Informationen über die Signatur selbst bereitstellen. Diese Metadaten werden in der Regel in den Feldern metadata:created_at und metadata:updated_at aufgezeichnet. Hier ist ein Beispiel, wie sie in einer Signatur aussehen können:

metadata:created_at 2010_09_23, updated_at 2010_09_23;

Die Metadaten zeigen das Datum der Erstellung und das Datum der letzten Aktualisierung der Signatur an. Diese Informationen sind nützlich, um die Gültigkeit und Aktualität einer Signatur zu überprüfen.

Klassifikation

Die Klassifikationsoption (classtype) kann verwendet werden, um eine Signatur einer bestimmten Kategorie oder Klasse zuzuordnen. Dies kann bei der Organisation und Filterung von Signaturen hilfreich sein. Hier ist ein Beispiel:

classtype:bad-unknown;

In diesem Beispiel wird die Signatur der Kategorie "bad-unknown" zugeordnet. Sie können beliebige Kategorienamen verwenden, die für Ihre Organisation sinnvoll sind.

Weitere Optionen

Es gibt viele andere Optionen und Schlüsselwörter, die Sie in Suricata-Signaturen verwenden können, um den Verkehr genauer zu überprüfen und Alarme auszulösen. Einige der häufigsten Optionen wurden in diesem Tutorial behandelt, aber Suricata bietet eine umfangreiche Palette von Möglichkeiten zur Feinabstimmung Ihrer Regeln.

Die Bedeutung der Signature-ID (sid)

Eine der wichtigsten Teile einer Suricata-Signatur ist die Signatur-ID oder sid. Diese ID ist ein eindeutiger Wert, der der Signatur zugeordnet ist und zur Identifizierung und Verwaltung von Signaturen verwendet wird. SIDs werden normalerweise in aufsteigender Reihenfolge vergeben und sollten in Ihrer Suricata-Konfiguration eindeutig sein.

Die Verwendung eindeutiger SIDs ist entscheidend, da sie Ihnen ermöglicht, Signaturen zu aktivieren, zu deaktivieren oder zu ändern, ohne dass dies andere Signaturen beeinflusst. Wenn Sie eine Signatur aktualisieren oder deaktivieren müssen, können Sie dies anhand ihrer SID tun.

Beachten Sie, dass einige Regelsets, wie das Emerging Threats-Regelset, ihre eigenen SIDs verwenden. Wenn Sie Ihre eigenen Signaturen erstellen, sollten Sie sicherstellen, dass Ihre SIDs eindeutig sind und nicht mit denen anderer Regelsets kollidieren.

In Suricata können Sie Signaturen aktivieren oder deaktivieren, indem Sie die entsprechende SID in der Konfigurationsdatei Ihrer Regelsätze festlegen. Sie können auch individuelle Signaturen anhand ihrer SIDs aktivieren oder deaktivieren. Die Verwendung von SIDs ist eine wichtige Methode zur Verwaltung und Anpassung Ihrer Suricata-Regeln.

Fazit

Suricata-Signaturen sind ein leistungsfähiges Werkzeug zur Erkennung von Netzwerkbedrohungen und verdächtigem Datenverkehr. Mit einer grundlegenden Kenntnis der Struktur von Suricata-Signaturen und der verschiedenen Optionen, die in Regeln verwendet werden können, können Sie Ihre eigenen Regelsätze erstellen und anpassen, um die Sicherheit Ihres Netzwerks zu verbessern.

In den folgenden Tutorials dieser Serie werden wir weitere Aspekte der Suricata-Konfiguration und -Nutzung erkunden, einschließlich der Aktivierung des Intrusion Prevention Systems (IPS) und der Verwendung von Suricata zur Analyse von Netzwerkprotokollen.

Wir hoffen, dass dieses Tutorial Ihnen geholfen hat, ein besseres Verständnis für Suricata-Signaturen zu entwickeln und wie Sie sie in Ihrem Netzwerk einset

Quelle