Suricata/Regeln

Aus Foxwiki
Subpages:

Regelwerk

Mit der Aktualität und Genauigkeit des von Suricata genutzten Regelwerks steht und fällt die Wirksamkeit des Gesamtsystems.
  • Neben frei verfügbaren Regelwerken, die z.B. auf emergingthreats.net[3] heruntergeladen werden können, gibt es mehrere Anbieter kommerzieller Regeln, die meist aktueller sind oder besondere Bereiche abdecken.
  • Suricata sucht die Regeln standardmäßig in /etc/suricata/rules.
  • Dort sind mehrere Regeln thematisch zu rules-Dateien zusammengefasst, die so in die Suricata-Konfigurationsdatei eingebunden werden können.
  • Auch wenn es theoretisch möglich ist, neue Regeln manuell zu installieren, gibt es einfachere Wege.
  • Denn die Suricata-Regeln sind glücklicherweise mit denen von snort kompatibel, sodass sich bestehende Werkzeuge zur Regelaktualisierung nutzen lassen.

oinkmaster

Bei der automatisierten Regelaktualisierung sei zum Beispiel oinkmaster[4] genannt, mit dessen Hilfe das Regelwerk aktuell gehalten werden kann
# oinkmaster -i -u http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz -o /etc/suricata/rules
oinkmaster lädt so ein Archiv des Regelwerks von der angegebenen URL herunter und speichert sie in rules-Dateien im Verzeichnis /etc/suricata/rules/.
  • Dabei werden eventuell vorhandene rules-Dateien überschrieben.
  • Damit dennoch lokale Änderungen vorgenommen werden können und nicht überschrieben werden, verfügt jede einzelne Regel über eine (hoffentlich eindeutige) ID.
  • Diese können über die enablesid, disablesid und modifysid in der Datei /etc/oinkmaster.conf bekannt gemacht werden.
  • Wurde beispielsweise eine ID über disablesid deaktiviert, so sorgt oinkmaster beim Update dafür, dass sie nicht wieder aktiviert wird.
Aktuell finden sich im frei verfügbaren Open Ruleset von Emerging Threats mehr als 80.000 Regeln, die sich auf unterschiedliche Bereiche aufteilen
  • Kommunikation mit Bot-Netzen und deren Infrastruktur
  • Verbindungen, die aus unterschiedlichsten Gründen unerwünscht sein können (IP reputation database)
  • Unerwünschte Web-Inhalte (ActiveX, Chat, Java-Applets)
  • Antworten auf (erfolgreich durchgeführte) Angriffe
  • Protokoll-spezifische Angriffsmuster (z.B. DNS, FTP, ICMP, POP3, RPC, SNMP, SQL, VoIP)
  • DOS-Attacken
  • Angriffe auf bekannte Sicherheitslücken und Standard-Kennwörter
  • Kommunikation von Spyware-Software und Trojanern
  • Kommunikation mit Tauschbörsen und Peer-to-Peer Netzwerken
  • Kommunikation mit bekannten Security-Scannern (Portscans, automatisierte SQL-Injection-Tests, metasploit-Scans)
  • Verschlüsselte Kommunikation (Tor-Netzwerkverkehr)


Regelsyntax

Nun aber ein Blick auf den Aufbau einer einzelnen Regel.
  • Am Beispiel soll der Netzwerkverkehr auf Verbindungsversuche zu einem Kommando-Server eines Bot-Netzes überwacht werden.
  • Solche Verbindungen sind ein starkes Indiz dafür, dass ein Rechner aus dem lokalen (zu schützenden) Netzwerk eine Schadsoftware installiert hat, die eine Fernsteuerung ermöglicht.
  • Die Kommando-Server, die ein solches Bot-Netzwerk steuern, sind in diesem Fall unter den beiden IP-Adressen 69.60.114.5 und 69.64.52.243 erreichbar.
alert ip $HOME_NET any -> [69.60.114.5,69.64.52.243] any (msg:"Communication to CnC";
reference:url,www.shadowserver.org;
threshold: type limit, track by_src, seconds 3600, count 1;
flowbits:set,ET.BotccIP;
classtype:trojan-activity;
sid:2404032; rev:3548;)
Jede Regel fängt man mit der wichtigsten Frage an
Wie soll mit dem Paket weiter verfahren werden?
  • PASS
  • Das Paket wird nicht weiter analysiert und zur weiteren Verarbeitung an den Paketfilter weitergereicht. Über die Aktion können einzelne Regeln übersprungen werden, ohne diese komplett deaktivieren zu müssen.
  • DROP
  • Das Paket wird stillschweigend verworfen.
  • REJECT
  • Das Paket wird abgelehnt.
  • ALERT

Es wird eine Warnung erzeugt und z.B. zur weiteren Analyse in eine Logdatei gespeichert.

Im IDS-Modus ist stets nur die passive ALERT-Aktion zulässig.
  • Eine Filterung über PASS, DROP oder REJECT ist nur im Inline-Modus möglich.
  • Der Unterschied zwischen DROP und REJECT liegt in der Art, wie die Verbindung abgelehnt und beendet wird.
  • Bei REJECT wird der Absender über die Ablehnung informiert (z.B.
  • mit einem TCP-RST Paket), während bei einem DROP der Verbindungsaufbau in einem Timeout endet.
Es folgt das Protokoll, das entweder namentlich auf Transportebene (ip, tcp, udp, icmp) oder auf Anwendungsebene (http, tls, ftp, smb) angegeben wird.
  • Auf Anwendungsebene versucht Suricata das eingesetzte Protokoll unabhängig vom Port zu erkennen und kann daher eigenständig auch z.B.
  • eine HTTP-Kommunikation auf nicht-Standard-Ports erkennen und überwachen.
Anschließend müssen noch die IP-Adressen und TCP-Ports von Absender und Empfänger angegeben werden.
  • Dabei kann zur Unterstützung auf Variablen wie zum Beispiel $HOME_NET zurückgegriffen werden:
$HOME_NET any -> [69.60.114.5,69.64.52.243] any

überwacht alle Verbindungen aus dem zu schützenden Netz auf die beiden IP-Adressen 69.60.114.5 und 69.64.52.243.

In Klammern folgen weitere optionale Parameter
  • msg: Die Meldung, die im Erfolgsfall ausgegeben und geloggt werden soll: »Communication to CnC«.
  • reference: Hier können weitere Informationen wie URLs angegeben werden, die ein Output-Plugin verarbeiten kann.
  • Viele existierende Regeln verweisen hier z.B.
  • auf externe Angriffidentifizierungssysteme, wie bugtraq oder CVE.
  • sid und rev: Jede einzelne Regel wird mit einer eindeutigen Signature-ID (sid) in Verbindung mit der Revision des Regelwerks (rev) versehen.
  • Dies ermöglicht z.B. eine automatisierte Pflege des Regelwerks, da jede Regel individuell über die sid angesprochen werden kann.
  • classtype: Eine grobe Klassifikation, die die Relevanz des Regelverstoßes einordnet.
  • Der hier spezifizierte classtype muss in der Datei /etc/suricata/classification.rules näher beschrieben werden und reicht von leichten Verstößen, wie nicht zuzuordnender Netzwerkverkehr, bis hin zu schwerwiegenderen Ereignissen, wie z.B. Einbruchsversuchen.
  • priority: Überschreibt die aus der classtype abgeleitete Priorität.
  • content: Analysiert den Datenbereich eines Pakets.
  • Hier sind umfangreiche Abfragen bis hin zu regulären Ausdrücken möglich.
  • flowbits: Ermöglicht die Analyse von zusammenhängenden Paketen, sodass eine Regel nur dann zutrifft, wenn auch andere zutreffen.
  • So lässt sich z.B. ein Alarm wegen Übermittlung eines Passworts auf eine vorhergehende Login-Abfrage beschränken.
  • flow: Ermöglicht Einschränkungen bezüglich der Verbindung, z.B. ob eine TCP-Verbindung tatsächlich vollständig aufgebaut wurde.
  • vthreshold: Es können Schwellenwerte definiert werden und erst nach Überschreitung wird ein Alarm ausgelöst.
  • So können z.B. fehlerhafte Login-Versuche als Brute Force erkannt werden, wenn innerhalb von 30 Sekunden mehr als 10 Versuche unternommen wurden, sich per SSH auf einem Rechner einzuloggen.
  • luajit: Wurde Suricata mit Unterstützung für den Just-In-Time Compiler für LUA kompiliert, kann für eine sehr komplexe Regel ein LUA-Skript herangezogen werden.
Datei:.png
Alexander Hosfeld Volle Ausbaustufe: Suricata mit Echtzeit-Analyse und grafischer Oberfläche

Ausgabe und Alarmierung

Wird ein Alarm ausgelöst, gibt es viele Möglichkeiten, wie die Protokollierung erfolgen kann und wie die Regelverstöße auswertet werden können.
  • Die einfachste Methode wäre ein »fastlog«, das jeden IDS-Alarm in einer Zeile einer Logdatei festhält und z.B. über ein eigenes Skript aufbereitet werden kann.
  • Bis zum komplexen Logging und einem (u.U. datenbankgestützten) JSON-basierten Format EVE, das durch ElasticSearch, Logstash und Kibana aufbereitet und analysiert werden kann, sind viele Zwischenstufen denkbar.