ADMIN

2022

04

2022-03-31T12:00:00

Automatisierung

PRAXIS

054

Security-Tipp

Intrusion Prevention

Gemeinschaftliche Gefahrenabwehr mit CrowdSec

Auf der Hut

von Dr. Matthias Wübbeling

Veröffentlicht in Ausgabe 04/2022 - PRAXIS

Der Austausch und die systematische Sammlung von Bedrohungsinformationen, sogenannte Threat Intelligence, ist eine moderne und wichtige Form der Informationsbeschaffung für Sicherheitsverantwortliche. Um möglichst automatisiert mit den Erkenntnissen anderer die eigene Infrastruktur absichern zu können, gibt es mit CrowdSec ein quelloffenes Intrusion Prevention System, das besser wird, je mehr Installationen aktiv sind.

Gemeinsam sind wir sicher! Das könnte der Slogan sein, wenn Sie gemeinsam mit den Administratoren anderer Unternehmen ein kooperatives Sicherheitsmonitoring etablieren und Informationen über Angriffe und versuchte Attacken auf Ihre IT-Infrastruktur teilen. Die Idee dafür ist nicht neu, allerdings gibt es immer neue Ansätze, um diese Idee möglichst praktikabel umzusetzen. Was früher an Informationen über Mailinglisten verteilt wurde, wird heute mit Plattformen wie MISP und STIX/CybOX zwischen vertrauten Unternehmen ausgetauscht. Noch einfacher ist es aber, wenn die Analyse und Weitergabe von Informationen über (potenzielle) Angreifer unter allen Teilnehmern automatisch geschieht und Plug-ins in unterschiedlichen Anwendungen für die Sicherheit der eigenen Infrastruktur sorgen. Dafür betrachten wir in diesem Artikel das kooperative Intrusion Prevention Systen (IPS) CrowdSec [1].
Parser im YAML-Format
CrowdSec besteht aus mehreren Komponenten. Der CrowdSec-Agent liest Ihre Logdaten, analysiert lokal auf Ihren Systemen das Verhalten Ihrer Benutzer und wertet die relevante Netzwerkkommunikation aus. Dafür konfigurieren Sie sogenannte Parser. Das sind Dateien im YAML-Format, in denen Sie beschreiben, wie Logdaten gelesen und interpretiert werden sollen. Hauptbestandteil eines Parsers sind sogenannte GROK-Regeln. Dabei handelt es sich um reguläre Ausdrücke mit Named Capturing Groups und möglichen Aktionen auf festgelegte Werte dieser Gruppen. GROK kennen Sie bereits, wenn Sie schon einmal Logstash aufgesetzt haben. Innerhalb der Parser-Definition von CrowdSec lassen sich diese Matches dann zur Auswertung der Logdaten und darauf basierender Anomalie-Erkennung verwenden.
Die notwendigen Parser für Ihre Installation definieren sich durch die installierte Software eines Systems und entsprechende Logdaten. CrowdSec bringt für die üblichen Dienste wie SSH-, Web- und Mailserver sowie Datenbanken bereits fertige Parser mit. An dieser Stelle müssen Sie sich also nicht mit eigenen Definitionen beschäftigen. Unterschiedliche Parser und Prüfungen in CrowdSec werden in einer Art Pipeline mit unterschiedlichen Stufen (Stages) sukzessive ausgeführt. Je nachdem, ob es bereits einen Match gibt oder nicht, kann die Verarbeitung der nächsten Pipeline-Stufen angestoßen oder vermieden werden.
Gemeinsam sind wir sicher! Das könnte der Slogan sein, wenn Sie gemeinsam mit den Administratoren anderer Unternehmen ein kooperatives Sicherheitsmonitoring etablieren und Informationen über Angriffe und versuchte Attacken auf Ihre IT-Infrastruktur teilen. Die Idee dafür ist nicht neu, allerdings gibt es immer neue Ansätze, um diese Idee möglichst praktikabel umzusetzen. Was früher an Informationen über Mailinglisten verteilt wurde, wird heute mit Plattformen wie MISP und STIX/CybOX zwischen vertrauten Unternehmen ausgetauscht. Noch einfacher ist es aber, wenn die Analyse und Weitergabe von Informationen über (potenzielle) Angreifer unter allen Teilnehmern automatisch geschieht und Plug-ins in unterschiedlichen Anwendungen für die Sicherheit der eigenen Infrastruktur sorgen. Dafür betrachten wir in diesem Artikel das kooperative Intrusion Prevention Systen (IPS) CrowdSec [1].
Parser im YAML-Format
CrowdSec besteht aus mehreren Komponenten. Der CrowdSec-Agent liest Ihre Logdaten, analysiert lokal auf Ihren Systemen das Verhalten Ihrer Benutzer und wertet die relevante Netzwerkkommunikation aus. Dafür konfigurieren Sie sogenannte Parser. Das sind Dateien im YAML-Format, in denen Sie beschreiben, wie Logdaten gelesen und interpretiert werden sollen. Hauptbestandteil eines Parsers sind sogenannte GROK-Regeln. Dabei handelt es sich um reguläre Ausdrücke mit Named Capturing Groups und möglichen Aktionen auf festgelegte Werte dieser Gruppen. GROK kennen Sie bereits, wenn Sie schon einmal Logstash aufgesetzt haben. Innerhalb der Parser-Definition von CrowdSec lassen sich diese Matches dann zur Auswertung der Logdaten und darauf basierender Anomalie-Erkennung verwenden.
Die notwendigen Parser für Ihre Installation definieren sich durch die installierte Software eines Systems und entsprechende Logdaten. CrowdSec bringt für die üblichen Dienste wie SSH-, Web- und Mailserver sowie Datenbanken bereits fertige Parser mit. An dieser Stelle müssen Sie sich also nicht mit eigenen Definitionen beschäftigen. Unterschiedliche Parser und Prüfungen in CrowdSec werden in einer Art Pipeline mit unterschiedlichen Stufen (Stages) sukzessive ausgeführt. Je nachdem, ob es bereits einen Match gibt oder nicht, kann die Verarbeitung der nächsten Pipeline-Stufen angestoßen oder vermieden werden.
Angriffsszenarien definieren
Anhand von Szenarien beschreiben Sie in CrowdSec die Aktivitäten eines Angreifers, die Sie erkennen möchten. Damit sind Szenarien also die Grundlage für Ihre Anomalie-Erkennung. Das können etwa fehlerhafte Zugriffe auf Ihren Webserver sein. Viele Angreifer suchen gezielt verwundbare Installationen von WordPress oder anderer Software. Sind diese nicht installiert, verursacht jede Anfrage eine 404-Nachricht in Ihren Logdaten. Viele solcher Einträge von derselben IP-Adresse lassen auf einen systematisierten Angriff schließen.
CrowdSec liefert auch hierfür bereits einige Definitionen von Szenarien mit. Die meisten adressieren Bruteforce-Login-Anfragen, etwa gegen SSH-, Web-, FTP- und Mailserver oder Datenbanken. Es gibt aber auch vorbereitete Szenarien zur Erkennung von Angriffen gegen die Ende letzten Jahres bekannt gewordene Schwachstelle in Log4j oder von Enumerationsversuchen der Benutzer in Asterisk-Telefonanlagen.
Maschinen und Bouncer
Das Herzstück Ihrer CrowdSec-Instanz bildet die lokale API. Dort laufen alle Daten und Entscheidungen aus den unterschiedlichen Richtungen zusammen. Dabei werden zwar Entscheidungen basierend auf den Szenarien und Regeln innerhalb der API getroffen, hier aber nicht umgesetzt. Die aktiven Elemente Ihrer CrowdSec-Instanz sind in zwei Klassen unterteilt: Maschinen und Bouncer. Zu den Maschinen gehören beispielsweise der CrowdSec-Agent und das Kommandozeilenwerkzeug cscli. Der Agent sammelt die Logdaten eines Systems wie zuvor beschrieben und liefert die Ergebnisse an die lokale API, die die Informationen in der Datenbank ablegt. Mit dem Kommandozeilenwerkzeug administrieren Sie Ihre Instanz, konfigurieren die externe Anbindung, erstellen feste Regeln, legen weitere Maschinen an und definieren die Zugriffsberechtigungen und -token für die Komponenten.
Bouncer sind kleine Programme und Plug-ins, die Sie in Ihre Serverdienste integrieren können, oder sie arbeiten selbst als aktive Hintergrunddienste. Im Gegensatz zu den Maschinen erhalten Bouncer ausschließlich Daten aus der lokalen API, können also die Datenbank nicht ändern. Für eine anfragende IP-Adresse werden die Entscheidungen von der API an die Bouncer zurückgegeben. Je nachdem, wie diese Entscheidung aussieht, beantwortet der Dienst die Anfrage, blockiert sie oder fordert vom entfernten Benutzer weitere Informationen an, beispielsweise die Lösung eines Captchas. Diese Bouncer müssen Sie für gängige Software natürlich nicht selbst entwickeln. CrowdSec bietet fertige Bouncer für die Linux-Paketfilter, für Webproxies wie Nginx oder Traefik, aber auch für Software wie WordPress und Magento.
Einfaches Setup
Von CrowdSec gibt es für die gängigen Linux-Distributionen fertige Pakete, für Debian und FreeBSD sind diese sogar in den Repositories der Distributoren enthalten. Damit ist CrowdSec fast überall schnell installiert. Um das Tool in Container-Umgebungen zu starten, gibt es entweder vorbereitete Docker-Container oder einen Helmchart für das Setup auf Kubernetes-Clustern. Für ein einfaches Test-Setup zum Ausprobieren von CrowdSec bietet sich Docker an. Den Container starten Sie mit dem folgenden Kommando:
docker run -d -e COLLECTIONS="crowdsecurity/sshd -v /var/log/ auth.log:/var/log/auth.log -p8080:8080 --name crowdsec crowdsecurity/crowdsec
Wie Sie bereits am Aufruf erkennen können, werden hier die SSH-Logs Ihres Docker-Hosts analysiert. Natürlich können Sie zusätzliche Collections und weitere Logdaten hinzufügen. Um nicht nur Angriffe erkennen, sondern Angreifer auch aktiv aussperren zu können, benötigen Sie für das Setup natürlich noch einen Bouncer. Diesen in Docker laufen zu lassen, wäre nicht sehr effektiv, Sie möchten ja Ihr System selbst schützen und nicht einen Dienst in einem Container. Unter Ubuntu installieren Sie etwa einen Bouncer für iptables mit dem folgenden Kommando:
sudo apt install crowdsec-firewall-bouncer-iptables
Bevor Sie nun die Konfiguration des Bouncers unter "/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml" anpassen, müssen Sie einen API-Key für den Bouncer erstellen. Dafür benutzen Sie mit dem folgenden Aufruf das Kommandozeilenwerkzeug. Beachten Sie dabei aber, dass Sie die CLI in dem zuvor gestarteten Docker-Container aufrufen müssen:
docker exec -ti crowdsec cscli bouncers add iptables-bouncer
Haben Sie die URL, in diesem Fall "localhost:8080", und den API-Key in der Konfiguration hinterlegt, starten Sie den Hintergrunddienst mit folgendem Befehl:
sudo systemctl start crowdsec-firewall-bouncer
Dashboard in der Cloud
Über die CrowdSec-Cloud erhält ihre lokale API die Entscheidungen anderer Teilnehmer. So sperren Sie auch solche IP-Adressen aus, die bei anderen Unternehmen in Ungnade gefallen sind. Laut CrowdSec werden die grundlegenden Anforderungen des Datenschutzes bei diesem Austausch berücksichtigt. Sie müssen also die Rechtsabteilung vor dem Einsatz von CrowdSec nicht zwingend konsultieren.
Mit cscli installieren Sie aus dem Hub der CrowdSec-Community bei Bedarf noch weitere Collections mit Parsern und Szenarios oder umfangreiche Konfigurationen und unterschiedliche Bouncer. Das gestaltet sich so einfach wie die Installation von Software mit dem Paketmanager Ihres Betriebssystems. CrowdSec bietet darüber hinaus einen zentralen Dashboard-Dienst zur Überwachung Ihrer Installationen an. Dafür müssen Sie sich unter [2] für einen Account registrieren, zum Zeitpunkt der Erstellung des Artikels noch in der Beta-Phase. Nach dem Login wählen Sie im Dashboard den Button "Add-Instance" und kopieren das angezeigte cscli-Kommando aus dem Dashboard, um Ihre Instanz daran anzubinden. Führen Sie auch dieses wieder innerhalb des gestarteten Containers aus:
docker exec -ti crowdsec sudo cscli console enroll <KEY>
Die Anfrage samt ID bestätigen Sie entsprechend. Anschließend können Sie im Dashboard die Ergebnisse der bereits eingelesenen Logdaten überprüfen. Hier erhalten Sie auch weitere Informationen darüber, wie Sie zusätzliche Komponenten hinzufügen können.
Fazit
Mit CrowdSec bündeln Sie Ihre Security-Analysen und Entscheidungen an einem Ort im Netzwerk und tauschen mit anderen Teilnehmern Informationen über Angreifer aus. CrowdSec ermöglicht dann die Abfrage aus unterschiedlichen Diensten heraus, wie mit den anfragenden IP-Adressen zu verfahren ist.
(dr)
Link-Codes
[1] CrowdSec: https://crowdsec.net/
[2] Dashboard für CrowdSec: https://app.crowdsec.net/