Erkennung bösartiger Signaturen

CybersicherheitBeginner
Jetzt üben

Einführung

Intrusion Detection Systeme (IDS) wie Snort stützen sich stark auf Regeln, um bösartigen Netzwerkverkehr zu identifizieren. Eine gut formulierte Regel fungiert als Signatur, die es dem System ermöglicht, einen Alarm auszulösen, wenn bestimmte Muster in den Datenpaketen beobachtet werden.

Signaturbasierte Erkennung funktioniert durch das Erkennen bekannter Muster, nicht durch das direkte Verständnis der Absicht des Angreifers. Das macht sie schnell und nützlich, aber auch unvollkommen. Ist das Muster zu breit gefasst, entstehen Fehlalarme (False Positives). Ist es zu eng gefasst, können Angreifer es mit kleinen Änderungen umgehen. Das Schreiben guter Regeln ist daher eine Übung in der Balance zwischen Präzision und Abdeckung.

In diesem Lab schlüpfen Sie in die Rolle eines Sicherheitsanalysten. Sie schreiben Snort-Regeln mit Inhaltsabgleich, die in der Lage sind, Angriffe auf Anwendungsebene zu erkennen. Konkret analysieren Sie ein simuliertes SQL-Injection-Angriffspayload, das in einer PCAP-Datei (Packet Capture) erfasst wurde, und erstellen präzise Snort-Regeln unter Verwendung von einfachem Inhaltsabgleich sowie fortgeschrittenen regulären Ausdrücken (PCRE), um HTTP-Datenverkehr zu untersuchen und bei Erkennung der bösartigen Zeichenfolge einen Alarm auszulösen.

Analyse des Angriffspayloads (PCAP)

In diesem Schritt analysieren Sie eine Netzwerk-Paketaufzeichnungsdatei, um zu verstehen, wie ein bösartiges Payload aussieht. Bevor ein Sicherheitsanalyst eine Erkennungsregel schreibt, muss er genau wissen, wonach er sucht.

Diese Reihenfolge ist wichtig. Ein häufiger Anfängerfehler besteht darin, mit dem Schreiben von Signaturen zu beginnen, bevor der tatsächliche Datenverkehr untersucht wurde. In der Praxis beginnen Verteidiger normalerweise mit Beweisen: einer PCAP-Datei, einem Log-Beispiel oder einem Proof-of-Concept für einen Exploit. Erst nachdem das beobachtbare Muster verstanden wurde, wird es in eine Regel übersetzt.

Ihre Umgebung wurde mit einer Datei namens sqli_attack.pcap in Ihrem ~/project-Verzeichnis vorkonfiguriert. Diese Datei enthält ein simuliertes Netzwerkpaket, bei dem ein Angreifer versucht, einen SQL-Injection-Angriff gegen einen Webserver durchzuführen.

Um den Inhalt dieser PCAP-Datei zu untersuchen, können Sie ein Tool namens tcpdump verwenden. Der Befehl tcpdump ist ein leistungsstarker Befehlszeilen-Paketanalysator. Mit dem Flag -A können Sie den Paketinhalt im ASCII-Format (Klartext) ausgeben, was ideal zum Lesen von HTTP-Anfragen ist. Das Flag -r weist tcpdump an, aus einer Datei statt von einer Live-Netzwerkschnittstelle zu lesen.

Führen Sie den folgenden Befehl in Ihrem Terminal aus, um das Payload zu analysieren:

tcpdump -A -r sqli_attack.pcap

Sie sollten eine Ausgabe sehen, die der folgenden ähnelt:

reading from file sqli_attack.pcap, link-type EN10MB (Ethernet), snapshot length 262144
10:23:45.123456 IP 192.168.1.100.12345 > 192.168.1.10.http: Flags [P.], seq 1:78, ack 1, win 8192, length 77: HTTP: GET /login.php?user=admin'%20UNION%20SELECT%201,2,3-- HTTP/1.1
E..u..@.@............9.P..P.P.......+......GET /login.php?user=admin'%20UNION%20SELECT%201,2,3-- HTTP/1.1
Host: example.com

Betrachten Sie den Klartextteil der Ausgabe genau. Sie können eine HTTP-GET-Anfrage an /login.php sehen. Achten Sie auf den user-Parameter: admin'%20UNION%20SELECT%201,2,3--.

Das %20 ist die URL-kodierte Darstellung eines Leerzeichens. Der Ausdruck UNION SELECT ist eine klassische Signatur eines SQL-Injection-Angriffs, bei dem ein Angreifer versucht, die Ergebnisse seiner eigenen bösartigen Datenbankabfrage mit der ursprünglichen Abfrage zu kombinieren. Dies ist genau die Signatur, die wir erkennen wollen.

Schreiben von Regeln mit Inhaltsabgleich

In diesem Schritt schreiben Sie Ihre erste benutzerdefinierte Snort-Regel, um die SQL-Injection-Signatur zu erkennen, die Sie im vorherigen Schritt entdeckt haben.

Das Schlüsselwort content ist die einfachste Form der Payload-Untersuchung. Es ist schnell und leicht nachvollziehbar, da es nach einer wörtlichen Zeichenfolge sucht. Ein wörtlicher Abgleich ist oft der richtige erste Entwurf für eine Signatur, da er die Erkennungslogik transparent macht.

Snort-Regeln werden in einer spezifischen Syntax geschrieben. Eine grundlegende Regel besteht aus einem Regel-Header und Regel-Optionen.

  • Der Header definiert die Aktion, das Protokoll, die Quell-/Ziel-IP-Adressen und die Ports.
  • Die Optionen definieren den spezifischen Inhalt, nach dem gesucht werden soll, und die Nachricht, die angezeigt werden soll, wenn ein Alarm ausgelöst wird.

Wir erstellen eine Regel, die nach der exakten Zeichenfolge UNION%20SELECT in jedem TCP-Datenverkehr sucht, der für Port 80 (den Standard-HTTP-Port) bestimmt ist.

Öffnen Sie die Datei für benutzerdefinierte Regeln mit dem Texteditor nano:

nano ~/project/rules/local.rules

Fügen Sie die folgende Zeile zur Datei hinzu:

alert tcp any any -> any 80 (msg:"Basic SQL Injection Detected"; content:"UNION%20SELECT"; sid:1000001; rev:1;)

Lassen Sie uns aufschlüsseln, was diese Regel bedeutet:

  • alert: Die Aktion, die ausgeführt werden soll, wenn die Regel übereinstimmt (einen Alarm generieren).
  • tcp: Das zu untersuchende Protokoll.
  • any any -> any 80: Quell-IP und Port (beliebig) an Ziel-IP (beliebig) auf Port 80.
  • msg:"...": Die Alarmmeldung, die dem Analysten angezeigt wird.
  • content:"UNION%20SELECT": Die exakte Zeichenfolge, nach der Snort im Paket-Payload sucht.
  • sid:1000001: Die Snort-ID. Benutzerdefinierte Regeln sollten eine ID von 1.000.000 oder höher haben.
  • rev:1: Die Revisionsnummer der Regel.

Nachdem Sie die Zeile hinzugefügt haben, speichern Sie die Datei und beenden Sie nano durch Drücken von Ctrl+O, Enter und dann Ctrl+X.

Sie können den Inhalt Ihrer Regeldatei mit dem Befehl cat überprüfen:

cat ~/project/rules/local.rules

Konfiguration von PCRE (Reguläre Ausdrücke)

In diesem Schritt erweitern Sie Ihre Erkennungsfähigkeiten durch die Verwendung von PCRE (Perl Compatible Regular Expressions).

Reguläre Ausdrücke erhöhen die Flexibilität, da sie Familien von Mustern beschreiben und nicht nur eine exakte Byte-Sequenz. Das ist mächtig, birgt aber auch das Risiko einer zu breiten Übereinstimmung. Verteidiger verwenden PCRE, wenn Angreifer wahrscheinlich die Formatierung variieren, während das zugrunde liegende Verhalten erkennbar bleibt.

Während das Schlüsselwort content schnell und effektiv ist, ist es sehr starr. Angreifer versuchen oft, die Erkennung zu umgehen, indem sie ihre Payloads leicht verändern. Anstatt %20 (URL-kodiertes Leerzeichen) könnte ein Angreifer beispielsweise ein normales Leerzeichen (``), mehrere Leerzeichen oder ein Pluszeichen (+) verwenden. Ein einfacher content-Abgleich würde diese Variationen übersehen.

PCRE ermöglicht es Ihnen, flexible Muster zu schreiben. Wir werden eine zweite Regel schreiben, die einen regulären Ausdruck verwendet, um Variationen des UNION SELECT-Angriffs zu erfassen.

Öffnen Sie Ihre Regeldatei erneut:

nano ~/project/rules/local.rules

Fügen Sie die folgende neue Regel in einer neuen Zeile unter Ihrer ersten Regel hinzu:

alert tcp any any -> any 80 (msg:"Advanced SQL Injection Detected"; pcre:"/UNION(%20|\s|\+)SELECT/i"; sid:1000002; rev:1;)

Lassen Sie uns die pcre-Option aufschlüsseln:

  • pcre:"/ ... /i": Die Schrägstriche markieren den Anfang und das Ende des regulären Ausdrucks. Das i am Ende macht die Suche unabhängig von Groß- und Kleinschreibung (es findet union, UNION, UnIoN usw.).
  • UNION: Stimmt mit dem Wort UNION überein.
  • (%20|\s|\+): Dies ist eine Erfassungsgruppe mit ODER-Logik (|). Sie stimmt entweder mit %20, ODER einem Leerzeichen (\s), ODER einem Pluszeichen (\+) überein.
  • SELECT: Stimmt mit dem Wort SELECT überein.

Speichern Sie die Datei und beenden Sie nano (Ctrl+O, Enter, Ctrl+X).

Ihre local.rules-Datei sollte nun zwei verschiedene Regeln enthalten, die darauf ausgelegt sind, SQL-Injection-Versuche abzufangen.

Validierung der Regelerkennung

In diesem letzten Schritt stellen Sie Ihre benutzerdefinierten Regeln auf die Probe. Sie führen Snort im Offline-Modus aus und weisen es an, die Datei sqli_attack.pcap zu lesen und die Regeln anzuwenden, die Sie gerade in local.rules geschrieben haben.

Das Testen mit einem bekannten Beispiel ist unerlässlich, da eine Regel, die auf dem Papier korrekt aussieht, in der Praxis dennoch versagen kann. Die Validierung bestätigt, dass die Regel tatsächlich bei dem beabsichtigten Datenverkehr auslöst, was die Mindestanforderung ist, bevor man ihr in einer Live-Umgebung vertraut.

Snort kann mit verschiedenen Flags ausgeführt werden. Hier ist, was wir verwenden werden:

  • -q: Quiet-Modus. Dies unterdrückt das große Banner und den Initialisierungstext, wodurch die Ausgabe leichter zu lesen ist.
  • -c: Gibt die Konfigurations- oder Regeldatei an, die verwendet werden soll.
  • -r: Gibt die zu lesende PCAP-Datei an.
  • -A console: Weist Snort an, Alarme direkt in der Terminal-Konsole auszugeben.

Führen Sie den folgenden Befehl aus, um Ihre Regeln gegen das bösartige Payload zu testen:

sudo snort -q -c rules/local.rules -r sqli_attack.pcap -A console

Wenn Ihre Regeln korrekt geschrieben wurden, sollten Sie eine Ausgabe sehen, die der folgenden ähnelt:

10/23-10:23:45.123456  [**] [1:1000001:1] Basic SQL Injection Detected [**] [Priority: 0] {TCP} 192.168.1.100:12345 -> 192.168.1.10:80
10/23-10:23:45.123456  [**] [1:1000002:1] Advanced SQL Injection Detected [**] [Priority: 0] {TCP} 192.168.1.100:12345 -> 192.168.1.10:80

Herzlichen Glückwunsch! Beide Regeln wurden erfolgreich ausgelöst. Die erste Regel stimmte mit der exakten Zeichenfolge überein, und die zweite Regel stimmte mit dem Muster unter Verwendung regulärer Ausdrücke überein. Sie haben erfolgreich als Sicherheitsanalyst agiert, eine Bedrohung identifiziert und eine Signatur bereitgestellt, um diese zu erkennen.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit der Netzwerkerkennung von Eindringlingen gesammelt, indem Sie benutzerdefinierte Snort-Regeln geschrieben haben. Sie begannen mit der Analyse einer rohen Paketaufzeichnung, um die spezifische Signatur eines SQL-Injection-Angriffs zu identifizieren. Anschließend lernten Sie, wie man diese Signatur in eine grundlegende Snort-Regel mit Inhaltsabgleich übersetzt. Schließlich haben Sie Ihre Erkennungsfähigkeiten durch die Implementierung von Perl Compatible Regular Expressions (PCRE) erweitert, um Variationen des Angriffs abzufangen, und Ihre Regeln erfolgreich validiert, indem Sie Snort gegen den bösartigen Datenverkehr ausgeführt haben. Diese Fähigkeiten sind grundlegend für jeden Cybersicherheitsexperten, der mit der Verteidigung der Netzwerkinfrastruktur betraut ist.