Bei dem Begriff Falco erinnern sich die älteren unter den Lesern an den österreichischen Musiker. Mit dem gleichnamigen Open-Source-Projekt steht nun ein interessantes Security-Tool auf der Bühne. Die Software dient primär dem Monitoring und Alerting in komplexen Cloudumgebungen. Wir zeigen, wie Sie mit Falco eine Security-Thread-Detection in Echtzeit umsetzen und Sicherheitslücken ans Licht bringen.
Der globale Ausfall von Servern und kritischen Infrastrukturen im Juli 2024 durch das Einspielen eines fehlerhaften Updates durch Croudstrike hat die hohe Abhängigkeit moderner Gesellschaften von IT-Systemen einmal mehr in das öffentliche Bewusstsein gerückt. Der Kostendruck führt vielerorts dazu, dass kritische Systeme nicht mehr hinreichend durch Fallback-Server abgesichert werden. Die Folgen sind hinlänglich bekannt: Schon einfache Sicherheitsupdates können Millionen Rechner weltweit lahmlegen. Besonders betroffen sind cloudbasierte Umgebungen, weil diese schwerer als lokale Serverinstallationen abzusichern sind.
Ob ein Security-Management-System wie Falco weitreichende Systemausfälle verhindert hätte, lässt sich nicht mit Sicherheit sagen. Sicher ist: Ein Spezialist, der relevante Systemparameter von Cloudumgebungen in Echtzeit überwacht, leistet einen bedeutenden Beitrag für die Steigerung der Sicherheit. Im Fall von Falco kommt Unternehmen dabei zugute, dass die Umgebung über Schnittstellen zu etablierten Monitoring- und Reporting-Umgebungen verfügt und so Admins zeitnah über kritische Vorfälle informiert.
Ganzheitliches Monitoring
In der Regel setzen Unternehmen beim Security-Scanning und dem Überwachen von sicherheitsrelevanten Infrastrukturkomponenten auf statisches Monitoring. Häufig mangelt es Sicherheitsprodukten an der ganzheitlichen Betrachtung von sicherheitsrelevanten Parametern. Hier setzt Falco an: Dieser Sicherheitsspezialist erlaubt das Realtime-Scanning der Ausführung von sicherheitsrelevantem Code. So stellen Sie sicher, dass Angreifer nicht unbemerkt etwaige Schlupflöcher ausnutzen. Falco überwacht dabei, welche Prozesse starten beziehungsweise laufen und wer hierfür verantwortlich ist.
Der globale Ausfall von Servern und kritischen Infrastrukturen im Juli 2024 durch das Einspielen eines fehlerhaften Updates durch Croudstrike hat die hohe Abhängigkeit moderner Gesellschaften von IT-Systemen einmal mehr in das öffentliche Bewusstsein gerückt. Der Kostendruck führt vielerorts dazu, dass kritische Systeme nicht mehr hinreichend durch Fallback-Server abgesichert werden. Die Folgen sind hinlänglich bekannt: Schon einfache Sicherheitsupdates können Millionen Rechner weltweit lahmlegen. Besonders betroffen sind cloudbasierte Umgebungen, weil diese schwerer als lokale Serverinstallationen abzusichern sind.
Ob ein Security-Management-System wie Falco weitreichende Systemausfälle verhindert hätte, lässt sich nicht mit Sicherheit sagen. Sicher ist: Ein Spezialist, der relevante Systemparameter von Cloudumgebungen in Echtzeit überwacht, leistet einen bedeutenden Beitrag für die Steigerung der Sicherheit. Im Fall von Falco kommt Unternehmen dabei zugute, dass die Umgebung über Schnittstellen zu etablierten Monitoring- und Reporting-Umgebungen verfügt und so Admins zeitnah über kritische Vorfälle informiert.
Ganzheitliches Monitoring
In der Regel setzen Unternehmen beim Security-Scanning und dem Überwachen von sicherheitsrelevanten Infrastrukturkomponenten auf statisches Monitoring. Häufig mangelt es Sicherheitsprodukten an der ganzheitlichen Betrachtung von sicherheitsrelevanten Parametern. Hier setzt Falco an: Dieser Sicherheitsspezialist erlaubt das Realtime-Scanning der Ausführung von sicherheitsrelevantem Code. So stellen Sie sicher, dass Angreifer nicht unbemerkt etwaige Schlupflöcher ausnutzen. Falco überwacht dabei, welche Prozesse starten beziehungsweise laufen und wer hierfür verantwortlich ist.
Damit verfügt Falco bereits über einen außergewöhnlichen Ansatz. Doch die Software geht noch einen Schritt weiter und wird kritischen Infrastrukturkomponenten an die Seite gestellt, überwacht relevante Aktivitäten und gibt Warnungen bei Auffälligkeiten aus. Falco ist dabei nicht auf die Überwachung beschränkt, sondern kann mithilfe eines eigenen Regelwerks kritische Aktivitäten frühzeitig identifizieren. Dazu ist zunächst die Alert-Konfiguration erforderlich. Sie profitieren davon, dass Falco mit einem umfänglichen Satz an vordefinierten Regeln ausgestattet ist, der sicherheitskritische Ergebnisse in typischen IT-Infrastrukturen abdeckt.
Falco ist insbesondere in der Lage, abnormales Verhalten und potenzielle Sicherheitsbedrohungen in Echtzeit zu erkennen und zu melden. Konkret identifiziert das Tool Krypto-Mining, Dateiexfiltration, Privilegienerweiterung in Anwendungen und die Installation von Rootkits. Diese bösartigen Verhaltensweisen werden über benutzerdefinierte Regeln erkannt, die Ereignisse von Anwendungsaktivitäten als bösartig oder verdächtig klassifizieren.
Der Fokus liegt bei der Erkennung von kritischen Vorfällen in Cloudumgebungen beziehungsweise Cloud-Clustern. Generiert ein Angreifer beispielsweise in einem Container einer Kubernetes-Umgebung einen neuen Prozess, bleibt dies den meisten Sicherheitsprodukten verborgen. Nicht so bei Falco. Die Software bedient sich der Analyse der Logfiles, die der Container generiert. Mithilfe von Filterfunktionen pickt das Tool die relevanten Logs heraus und gibt diese beispielsweise im JQ-Format aus. Gelingt es einem Angreifer, Root-Rechte zu erlangen und in einem Container neue Prozesse zu generieren, lässt sich dies in der Regel nicht unterbinden. Schlimmer noch: IT-Verantwortliche bekommen hiervon gar nichts mit. Dank Falco entgehen ihnen diese Vorgänge nicht mehr.
Da sich die Software bei der Regelentwicklung auf Standardtechniken und -formate wie YAML stützt, gestaltet sich das Entwickeln von Regeln beziehungsweise die Adaption von vordefinierten Policies einfach. Weitaus anspruchsvoller ist die gezielte Auswahl von Regeln und deren Zusammenspiel. Das Schreiben eigener Vorgaben ist auch deshalb anspruchsvoll, weil Sie tiefe Einblicke in die systemspezifischen Vorgänge entwickeln müssen. Sie müssen insbesondere ein Verständnis für die Vorgänge auf Low-Level-Ebene entwickeln.
Während die Regelentwicklung routinierten Admins leicht von der Hand geht, besteht die Herausforderung vielmehr darin, ein Verständnis für die Zusammenhänge und den sinnvollen Einsatz von Falco-Richtlinien herzustellen. Der Zeitaufwand hierfür ist signifikant. Insbesondere beim Einsatz von Standardpolicies müssen Sie mit der Ausgabe einer hohen Zahl von False Positives rechnen, da diese nicht auf Ihre Umgebung abgestimmt sind. Ein Vorteil bei der Regelerstellung: Sie können mit Makros wiederkehrende Analyseaufgaben vereinfachen. Dadurch reduziert sich der Entwicklungsaufwand erheblich.
Die Identifikation von sicherheitsrelevanten Ereignissen ist das eine, wie die entsprechenden Hinweise generiert werden und was Sie daraus machen, das andere. Falco besitzt hierfür verschiedene Möglichkeiten: Die Software kann Warnmeldungen an einen oder mehrere Ausgabekanäle senden, insbesondere an die Standardausgabe, eine Datei, Syslog, einen HTTP/HTTPS-Endpunkt und an einen Client über die gRPC-API. Die Konfiguration der Kanäle erfolgt über die Falco-Konfigurationsdatei "falco.yaml".
Grundsätzlich lassen sich Warnungen an Drittanbietersysteme wie Off-Host-SIEM, Datenbanken oder Function-as-a-Service (FaaS) weiterleiten. Die meisten Tools können nativ eine Verbindung zu den generischen Ausgabekanälen herstellen, die Falco zur Verfügung stellt. Um das Tool allerdings in ein bestehendes Ökosystem zu integrieren, greifen Sie zu einem Subprojekt von Falco: Der Forwarder-Proxy Falcosidekick erlaubt die Integration in mehr als 50 verschiedene Systeme. Daneben existieren verschiedene Plug-ins, die insbesondere das Zusammenspiel mit bestehenden Infrastrukturkomponenten vereinfachen.
Bild 1: Die Funktionsweise von Falco: Das Security-Tool analysiert auf Basis eines Regelwerks Logfiles in Echtzeit und erkennt dabei kritische Sicherheitsereignisse.
Falco in Betrieb nehmen
Sie können Falco auf einem Linux-Host oder in einer Container-Umgebung ausführen. Im Download-Bereich der Projekt-Website [1] stehen Pakete für Ubuntu, Docker und Kubernetes bereit. Wenn Sie erste Erfahrungen mit dem cloudnativen Tool sammeln möchten, bietet sich die Installation der Docker-basierten Variante an. Wichtig ist dabei, dass Sie einen Linux-Rechner samt aktueller Docker-Version verwenden. Die Docker-Variante ist nicht für den Einsatz mit Docker Desktop unter macOS X und Windows konzipiert.
Zur Installation der aktuellen Falco-Version 0.38 führen Sie folgenden Befehl aus:
sudo docker run --rm -i -t --name falco --privileged \
-v /var/run/docker.sock:/
host/var/run/docker.sock \
-v /dev:/host/dev -v
/proc:/host/proc:ro -v
/boot:/host/boot:ro \
-v /lib/modules:/host/lib/
modules:ro -v /usr:/host/usr:ro
-v /etc:/host/etc:ro \
falcosecurity/falco:0.38.1
Nach der Inbetriebnahme der Docker-basierten Version wird das Linux-System mithilfe der vorinstallierten Regel auf verdächtiges Verhalten überwacht und bei Bedarf ein Hinweis ausgegeben. Um die Funktionstüchtigkeit der Falco-Installation zu prüfen, lösen Sie eine Regel aus. Dazu bietet sich beispielsweise der folgende Befehl an:
sudo cat /etc/shadow
Falco generiert darauf eine Meldung wie die folgende:
Zeitstempel: Warning Sensitive file opened for reading by non-trusted program (file=/etc/shadow gparent=sudo ggparent=bash gggparent=tmux: evt_type=openat user=root user_uid=0 user_loginuid=1000 process=cat proc_exepath=/usr/bin/cat parent=sudo command=cat /etc/shadow terminal=34826 container_id=host container_name=host)
Dabei handelt es sich um das erste Falco-Event. Die zugehörige Regel zeigt das Lesen einer sensiblen Datei an. Um Falco unter Ubuntu in Betrieb zu nehmen, führen Sie folgenden Befehl aus:
sudo apt-get install -y falco
Es folgt die Auswahl des Falco-Treibers. Wählen Sie hier die Option "Automatic selection". Das Installationsprogramm verwendet automatisch den optimalen Treiber. Im nächsten Schritt legen Sie fest, ob das Regelwerk automatisch aktualisiert werden soll. Diese Frage bejahen Sie. Anschließend startet Falco und der Vorgang nimmt beim ersten Mal einige Zeit in Anspruch. Mit stellen Sie sicher, dass Falco als Service läuft. Wenn Sie das Tool in einer Kubernetes-Umgebung ausführen möchten, stellen Sie zunächst sicher, dass Sie auf einen (Test-)Cluster zugreifen können. Außerdem müssen "kubectl" und "helm" installiert und konfiguriert sein. Als Nächstes richten Sie das "helm"-Repository ein mit
Auch in diesem Szenario verfügt Falco bereits über einen vorinstallierten Satz von Regeln, die Sie bei verdächtigem Verhalten warnen. Damit ist die Umgebung mit ihren Standardeinstellungen einsatzbereit.
Regelwerk als Herzstück
Das Herzstück von Falco ist das Regelwerk, mit dem Sie die zu überwachenden Aktivitäten und Prozesse bestimmen. Das Erstellen von Falco-Regeln ist ein iterativer Prozess. Dabei beginnen Sie üblicherweise damit, die gewünschte Grundfunktionalität so anzupassen, dass die relevanten Ereignisse gemeldet werden. Im Laufe der Zeit sind immer wieder Ausschlüsse zu definieren, um die Zahl der False Positives zu reduzieren. Erst mit dem Verringern des Hintergrundrauschens gelingt es Ihnen, den problematischen Ereignissen auf den Grund zu gehen.
Falco-Regeln sind in YAML implementiert und durch die Elemente "Rules", "Macros" und "Lists" gekennzeichnet. Die Policies bestimmen die Bedingungen, unter denen ein Alarm generiert wird. Makros vereinfachen die Ausführung von Standardaktionen und helfen, Redundanzen zu vermeiden. Das Listenkonzept dient dazu, Regeln und Makros zu kombinieren. Außerdem unterstützen Falco-Regeln Versionierungen. Hier ein einfaches Beispiel für eine Regel:
Als wichtigster Teil gilt der Abschnitt "condition", in dem Sie mithilfe eines booleschen Ausdrucks die Parameter für das Erfüllen einer Bedingung definieren. Die Kondition "container.id != host and proc.name = bash" führt zwei Prüfungen durch: Die erste prüft, ob das Ereignis in einem Container registriert wurde, die zweite, ob der Prozessname "bash" lautet. Da die zweite Bedingung keine Klausel mit einem Systemaufruf enthält, findet nur eine Überprüfung der Metadaten des Ereignisses statt. Möchten Sie Informationen zum erfolgreichen Start einer Shell erhalten, fügen Sie der Bedingung den entsprechenden Ereignistyp und die Richtung hinzu:
evt.type = execve and evt.dir = < and container.id != host and proc.name = bash
Bei der Regelausgabe handelt es sich um eine Zeichenkette, die dieselben Felder verwenden kann, die Sie in Ihren Bedingungen einsetzen. Verwenden Sie das Prozentzeichen, um eine Interpolation durchzuführen, ähnlich wie bei "printf". Die Ausgabe erfolgt in der Regel einzeilig, allerdings ergibt es Sinn, diese zur besseren Lesbarkeit auf mehrere Zeilen auszudehnen.
Eine weitere wichtige Option ist das "priority"-Feld. Mit dieser Konfiguration legen Sie fest, wie schwerwiegend ein Regelverstoß ist – ähnlich wie beim Schweregrad von Syslog-Meldungen. Die Bewertung wird mit dem Output ausgegeben. Falco kennt folgende Optionen: "EMERGENCY", "ALERT", "CRITICAL", "ERROR", "WARNING", "NOTICE", "INFORMATIONAL" und "DEBUG". Bezüglich der Verwendung dieser Optionen machen die Falco-Entwickler konkrete Vorgaben. Bezieht sich eine Regel beispielsweise auf das Schreiben eines Zustands, besitzt sie die Priorität "ERROR"; eine Regel für das unbefugte Lesen von Zuständen erhält die Priorität "WARNUNG". Listen und Makros werden einfach über die jeweilige Bezeichnung referenziert.
Bild 2: Das Herzstück von Falco: Die Rules Engine wertet die gesammelten Informationen aus.
Zusammenspiel mit MITRE
Als weitere Besonderheit unterstützt Falco Unternehmen bei der Einhaltung von Branchenvorschriften und bei der Anpassung an bekannte Sicherheits-Frameworks. Konkret lässt sich die Software dazu nutzen, Taktiken, Techniken und Verfahren (Tactics, Techniques and Procedures, TTPs) von Angreifern zu erkennen, die das "MITRE ATT&CK-Framework" [2] beschreibt. Aus dem Zusammenspiel von Software und Framework leiten sich Potenziale zur proaktiven Identifizierung von Bedrohungslagen ab. Das Framework umfasst als etablierte Sicherheitsdatenbank Informationen über Angriffstechniken basierend auf realen Beobachtungen.
Da sich IT-Infrastrukturen permanent weiterentwickeln, ist es wichtig, die neuesten Angriffstechniken in Sicherheitsprodukten abzubilden. Das Falco-Team hat daher die Bedrohungserkennungsfunktionen mit dem ATT&CK-Framework abgeglichen. Insbesondere die Falco-Regeln lassen sich an das Rahmenwerk adaptieren, um mögliche Sicherheitsvorfälle zu identifizieren. Dabei macht sich Falco die eBPF-Technologie (extended Berkeley Packet Filter) zunutze. In der Praxis sind dazu zwei Schritte notwendig: Im ersten tragen Sie die relevanten Details zusammen, im zweiten schreiben Sie entsprechende Falco-Regeln. Dazu müssen Sie insbesondere die Perspektive der potenziellen Angreifer einnehmen.
Datenausgabe mit Falcosidekick
Die Erkennung von sicherheitskritischen Ereignissen bleibt wertlos, wenn niemand davon Notiz nimmt. Hier setzt Falcosidekick an. Ein einfacher Daemon sorgt für die Verbindung zwischen Falco und Ihrem Security-Ökosystem. Konkret nimmt Falcosidekick Informationen über relevante Events entgegen und übergibt diese Daten an Systeme wie Slack, Elasticsearch, Apache Kafka oder Opsgenie. Falcosidekick kann auch SMTP nutzen; einen vollständigen Überblick der unterstützten Drittanwendungen finden Sie auf der GitHub-Projektsite [3].
Da Falcosidekick nicht automatisch mit Falco installiert wird, müssen Sie das Modul getrennt in Betrieb nehmen. Den Daemon führen Sie wie jeden anderen in Ihrer Architektur aus. Wenn Sie mit Docker arbeiten, verwenden Sie die Umgebungsvariablen wie folgt, um die Ausgaben einzurichten:
docker run -d -p 2801:2801 -e SLACK_WEBHOOKURL=<XXXX> -e DATADOG_APIKEY=<XXXX> falcosecurity/falcosidekick
Um die Verbindung zwischen Falco und Falcosidekick herzustellen, passen Sie die Falco-Konfigurationsdatei "falco.yaml" an. Das Zusammenspiel realisieren Sie beispielsweise wie folgt:
json_output: true
json_include_output_property: true
http_output:
enabled: true
url: "http://localhost:2801/"
Die Falcosidekick-Konfigurationsdatei bietet Ihnen vielfältige Anpassungsmöglichkeiten für das Weiterreichen des Outputs an die verschiedenen Ziele.
Bild 3: Mit Falcosidekick steht ein Unterprojekt zur Verfügung, das die Auswertungen visualisiert.
Falco aufgebohrt
Ein wesentliches Merkmal von Falco ist die modulare Architektur. Um das Basissystem funktional zu erweitern, greifen Sie zu speziellen Plug-ins. Über solche Schnittstellen fügen Sie weitere Ereignisquellen zur Auswertung mit Falco-Regeln hinzu, definieren neue Felder, um spezifische Informationen auf den Ereignissen zu extrahieren und fügen Ereignisse asynchron in den Datenstrom ein.
Bei den Plug-ins handelt es sich um dynamische Bibliotheken. Falco lädt diese Bibliotheken bei Bedarf und ruft die bereitgestellten Features auf, um die eigene Funktionalität auszubauen. Grundsätzlich können in Erweiterungen mehrere Funktionen implementiert sein. Die Developer empfehlen die Verwendung von Go für die Plug-in-Entwicklung; SDKs für C und Go stehen bereit. Derzeit unterstützt das Framework vier Plug-in-Fähigkeiten: Event Sourcing, Field Extraction, Event Parsing und Async Event.
Welche Erweiterungen Falco lädt, bestimmen Sie in der Konfigurationsdatei "falco.yaml". Die Eigenschaft "plugins" darin definiert die Anzahl der Plug-ins, die Falco laden kann. Mit der Option "load_plugins" steuern Sie, welche Erweiterungen beim Start von Falco tatsächlich geladen werden. Stand August 2024 können Sie sich aus einer Palette von rund 20 Falco-Erweiterungen bedienen [4].
Angesichts der hohen Komplexität der Regelerstellung stellt sich die Frage, in welchen Szenarien der Einsatz von Falco sinnvoll ist. Des Weiteren fragt sich, wo die Stärken und Schwächen liegen. Manche Experten bewerten Falco als Goldstandard, wenn es um das Alerting geht. Die CNCF (Cloud Native Computing Foundation) der Linux Foundation spricht gar von einer "De facto Kubernetes threat detection engine" [5]. Allerdings schützt Sie Falco nicht vor möglichen Attacken oder Fehlkonfigurationen. Daraus resultiert, dass Falco seine Stärken nur im Zusammenwirken mit anderen Tools ausspielt. Ein sinnvolles Szenario ist beispielsweise die Verwendung von Falcosidekick-Informationen, um das Ausführen von Prozessen zu unterbinden, die nicht laufen sollten.
Wenn Sie in Kubernetes-Umgebungen auch Prevention-Funktionen benötigen, bietet sich die Kombination mit Werkzeugen wie KubeArmor [6] oder Service Mesh-Tools wie Istio [7] an. Ein weiterer Pluspunkt: Falco wurde von der CNCF graduiert. Damit ist die langfristige Weiterentwicklung als Open Source gemäß den Standards der Linux Foundation sichergestellt.
Die Falco-Roadmap
Obwohl Falco noch ein recht junges Projekt ist, hat es aufgrund seines erfolgversprechenden Ansatzes breite internationale Aufmerksamkeit erfahren. Im Herbst 2024 scheint der Release-Zeitpunkt von Falco 1.0 angesichts der aktuellen Version 0.38 noch in weiter Ferne. Gleichwohl deutet einiges darauf hin, dass die Entwickler intensiv an der Reife und Stabilität der Umgebung arbeiten.
Nach der Graduierung durch die CNCF im Februar 2024 liegt der Fokus auf der Weiterentwicklung der Falco-Engine. Das Ziel ist es dabei, die Flaggschiff-Funktionen noch robuster zu machen und die Struktur der "falco.yaml" weiter zu vereinfachen. In Arbeit befinden sich außerdem erweiterte Optionen für Metriken.
Version 1.0 soll außerdem mit bestehenden Sprachinkonsistenzen der Falco-Regeln aufräumen. Diese rühren von der Verpflichtung zur Abwärtskompatibilität her. Zudem ist die Implementierung neuer Syntaxkonstrukte geplant, die sich aus Benutzeranforderungen ergeben.
Aufseiten der Treiber soll eBPF als Standardtreiber etabliert werden. Geplant ist außerdem, das Standard-Image zu einem treiberlosen System zu machen, damit es problemlos auf unterschiedlichen Linux-Distributionen einsetzbar ist.
Nicht zuletzt steht die Verbesserung der Integrationsfähigkeit auf der Agenda. Insbesondere die Stabilität der Container-Laufzeitintegration soll optimiert sowie die modulare Architektur von Falco ausgebaut werden, um die Erweiterbarkeit der Umgebung zu verbessern.
Fazit
Falco verfolgt mit der Echtzeitüberwachung von sicherheitsrelevanten Parametern und Prozessen ein hochinteressantes Konzept. Aktuell befindet sich die Umgebung mit Version 0.38 noch in einer sehr frühen Entwicklungsphase. Mithin ist davon auszugehen, dass die Entwickler bis zum Release von Version 1.0 noch einiges vorhaben.
Allerdings gestaltet sich die Nutzung anspruchsvoll und verlangt einen hohen Einarbeitungsaufwand. Der Nutzen von Falco besteht insbesondere darin, dass es Sie auf kritische Ereignisse aufmerksam macht. Daraus leiten sich Optimierungspotenziale für die Zukunft ab. Gleichwohl stellt die Beschränkung auf das Alerting und damit die fehlende Prävention ein gewisses Manko dar.