
falco v0.45.0-rc1
Echtzeit-Cloud-nativer Runtime-Sicherheitsagent für Linux, der Syscalls und Container-/Kubernetes-Metadaten überwacht, um anomales Verhalten und Bedrohungen zu erkennen.
Falco
Falco ist ein cloud-natives Laufzeit-Sicherheitstool für Linux-Betriebssysteme. Es wurde entwickelt, um abnormales Verhalten und potenzielle Sicherheitsbedrohungen in Echtzeit zu erkennen und darauf aufmerksam zu machen.
Im Kern ist Falco ein Kernel-Überwachungs- und Erkennungsagent, der Ereignisse wie Syscalls auf der Grundlage benutzerdefinierter Regeln beobachtet. Falco kann diese Ereignisse durch die Integration von Metadaten aus der Container-Laufzeit und Kubernetes anreichern. Die gesammelten Ereignisse können außerhalb des Hosts in SIEM- oder Data-Lake-Systemen analysiert werden.
Falco, ursprünglich von Sysdig entwickelt, ist ein graduiertes Projekt der Cloud Native Computing Foundation (CNCF), das in der Produktion von verschiedenen Organisationen eingesetzt wird.
Detaillierte technische Informationen und Einblicke in die Cyber-Bedrohungen, die Falco erkennen kann, finden Sie auf der offiziellen Falco-Website.
Umfassende Informationen zu den neuesten Updates und Änderungen des Projekts finden Sie im Änderungsprotokoll.
Das Falco-Projekt
Die Codebasis des Falco-Projekts wird unter der falcosecurity GitHub-Organisation gepflegt. Das primäre Repository, falcosecurity/falco, enthält den Quellcode für die Falco-Binärdatei, während andere Unterprojekte in dedizierten Repositories gehostet werden. Dieser Ansatz, Komponenten in spezialisierten Repositories zu isolieren, verbessert die Modularität und die fokussierte Entwicklung. Zu den bemerkenswerten Kern-Repositories gehören:
- falcosecurity/libs: Dieses Repository beherbergt die Kernbibliotheken von Falco, die den Großteil des Quellcodes der Binärdatei ausmachen und wesentliche Funktionen wie Kernel-Treiber bereitstellen.
- falcosecurity/rules: Es enthält das offizielle Regelset für Falco und bietet vordefinierte Erkennungsregeln für verschiedene Sicherheitsbedrohungen und abnormales Verhalten.
- falcosecurity/plugins: Dieses Repository unterstützt die Integration mit externen Diensten über Plugins, die Falcos Fähigkeiten über Syscalls und Container-Ereignisse hinaus erweitern, mit Plänen zur Weiterentwicklung spezialisierter Funktionen in zukünftigen Versionen.
- falcosecurity/falcoctl: Ein Befehlszeilenprogramm zur Verwaltung und Interaktion mit Falco.
- falcosecurity/charts: Dieses Repository veröffentlicht Helm-Charts für die Bereitstellung von Falco und seinem Ökosystem. Der Quellcode des Falco-Charts befindet sich in
chart/falco.
Weitere Einblicke in unsere Repositories und zusätzliche Details zu unserem Governance-Modell erhalten Sie im offiziellen Hub des Falco-Projekts: falcosecurity/evolution.
Erste Schritte mit Falco
Wenn Sie neu bei Falco sind, beginnen Sie mit unserem Leitfaden Erste Schritte. Für Produktionsbereitstellungen lesen Sie bitte unsere umfassende Dokumentation Setup.
Als letzte Empfehlungen vor der Bereitstellung von Falco: Vergewissern Sie sich, dass die Umgebung kompatibel ist, definieren Sie Ihre Erkennungsziele, optimieren Sie die Leistung, wählen Sie den geeigneten Build und planen Sie die SIEM- oder Data-Lake-Integration, um eine effektive Incident-Response zu gewährleisten.
Demo-Umgebung
Eine Demo-Umgebung wird über eine docker-compose-Datei bereitgestellt, die auf einem Docker-Host gestartet werden kann und Falco, falcosidekick, falcosidekick-ui und die erforderliche Redis-Datenbank umfasst. Weitere Informationen finden Sie im docker-compose-Abschnitt.
Werde Teil der Community
Um sich am Falco-Projekt zu beteiligen, besuchen Sie bitte das Community-Repository, um weitere Informationen und Möglichkeiten zur Beteiligung zu finden.
Wenn Sie Fragen zu Falco oder zum Beitragen haben, zögern Sie nicht, ein Issue zu erstellen oder sich an die Falco-Maintainer und Community-Mitglieder zu wenden.
Wie erreichen Sie uns?
- Treten Sie dem #falco-Kanal im Kubernetes Slack bei.
- Treten Sie der Falco-Mailingliste bei.
- Erstellen Sie ein Issue oder stellen Sie Feature-Anfragen.
Engagement für die Sicherheit von Falco
Vollständige Berichte verschiedener Sicherheitsaudits finden Sie hier.
Darüber hinaus können Sie die Sicherheitsbereiche von falco und libs einsehen, um detaillierte Aktualisierungen zu Sicherheitshinweisen und -richtlinien zu erhalten.
Um Sicherheitslücken zu melden, folgen Sie bitte dem in der Dokumentation beschriebenen Community-Prozess, den Sie hier finden.
Erstellen
Eine umfassende Schritt-für-Schritt-Anleitung zum Erstellen von Falco aus dem Quellcode finden Sie in der offiziellen Dokumentation.
Testen
Testanweisungen erweitern
Falcos Build Falco from source ist die erste Anlaufstelle, um zu verstehen, wie Falco aus dem Quellcode erstellt wird. Darüber hinaus bietet das Repository falcosecurity/libs zusätzliche wertvolle Informationen über Tests und das Debugging der zugrunde liegenden Bibliotheken und Kernel-Treiber von Falco.
Hier ist ein Beispiel für einen cmake-Befehl, der alles aktiviert, was Sie für alle Unit-Tests dieses Repositories benötigen:
cmake \
-DUSE_BUNDLED_DEPS=ON \
-DBUILD_DRIVER=ON \
-DBUILD_FALCO_MODERN_BPF=ON \
-DCREATE_TEST_TARGETS=ON \
-DBUILD_FALCO_UNIT_TESTS=ON ..;
Erstellen und Ausführen der Unit-Test-Suite:
nproc=$(grep processor /proc/cpuinfo | tail -n 1 | awk '{print $3}');
make -j$(($nproc-1)) falco_unit_tests;
# Run the tests
sudo ./unit_tests/falco_unit_tests;
Optional können Sie den Treiber Ihrer Wahl erstellen und die Falco-Binärdatei testweise ausführen, um manuelle Tests durchzuführen.
Schließlich hat das Falco-Projekt seine Falco-Regressionstests zu falcosecurity/testing verschoben.
So können Sie beitragen
Weitere Informationen zum Beitragen finden Sie im Contributing-Leitfaden und im Verhaltenskodex.
Häufig gestellte Fragen
Warum ist Falco in C++ und nicht in Go oder {language}?
Informationen erweitern
- Die ersten Zeilen Code, auf denen Falco basiert, wurden vor einiger Zeit geschrieben, als Go noch nicht den gleichen Reifegrad und die gleiche Verbreitung hatte wie heute.
- Das Ausführungsmodell von Falco ist sequenziell und einfädig (mono-thread), da das Tool zustandsbehaftet ist. Daher würden die meisten konkurrenzbezogenen Verkaufsargumente der Go-Laufzeit überhaupt nicht genutzt werden.
- Der Falco-Code befasst sich vielerorts mit sehr hardwarenaher Programmierung, und wir alle wissen, dass die Anbindung von Go an C möglich ist, aber eine Menge Komplexität und Kompromisse mit sich bringt.
- Als Sicherheitstool, das einen wahnsinnig hohen Durchsatz von Ereignissen pro Sekunde verarbeiten soll, muss Falco in allen Hot Paths zur Laufzeit Leistung herausholen und benötigt tiefe Kontrolle über die Speicherzuweisung, die die Go-Laufzeit nicht bieten kann (hinzu kommt auch die Garbage Collection).
- Obwohl Go die technischen Anforderungen des Falco-Kerns nicht erfüllte, dachten wir dennoch, dass es ein guter Kandidat für die Erweiterung von Falco über das Plugin-System sein könnte. Dies ist der Hauptgrund, warum wir der Entwicklung des plugin-sdk-go besondere Aufmerksamkeit und hohe Priorität eingeräumt haben.
- Go ist keine Voraussetzung für statisch gelinkte Binärdateien. Tatsächlich bieten wir seit einigen Jahren vollständig statische Falco-Builds an. Das einzige Problem dabei ist, dass das Plugin-System mit dem derzeitigen dynamischen Bibliotheksmodell nicht unterstützt werden kann.
- Das Plugin-System wurde mit Blick auf die Unterstützung mehrerer Sprachen entwickelt. Daher ist die Pflege einer C-kompatiblen Codebasis für uns die beste Strategie, um eine maximale sprachübergreifende Kompatibilität zu gewährleisten.
- Im Allgemeinen haben Plugins GLIBC-Anforderungen/-Abhängigkeiten, da sie für das dynamische Laden C-Bindings auf niedriger Ebene benötigen. Eine mögliche Lösung für die Zukunft könnte darin bestehen, Plugins auch zur Kompilierzeit statisch zu linken und sie so als Teil der Falco-Binärdatei zu veröffentlichen. Obwohl in diese Richtung noch keine Arbeit begonnen wurde, würde dies die meisten von Ihnen gemeldeten Probleme lösen und ebenfalls eine vollständig statische Binärdatei bereitstellen. Natürlich wäre dies nicht mehr mit dynamischem Laden kompatibel, aber es könnte eine praktikable Lösung für unsere statische Build-Variante von Falco sein.
- Speichersicherheit ist definitiv ein Anliegen, und wir geben unser Bestes, um ein hohes Qualitätsniveau zu halten, auch wenn C++ ziemlich fehleranfällig ist. Zum Beispiel versuchen wir, wann immer möglich Smart Pointer zu verwenden, wir erstellen die Bibliotheken in unserer CI mit einem AddressSanitizer, wir lassen Falco vor jedem Release durch Valgrind laufen und haben Möglichkeiten, es unter Stress zu testen, um Leistungsregressionen oder merkwürdige Speichernutzung zu erkennen (z. B. https://github.com/falcosecurity/event-generator). Darüber hinaus lassen wir die Codebasis auch von Zeit zu Zeit von Dritten prüfen. All dies ergibt natürlich keinen perfekten Sicherheitsstandpunkt, aber wir versuchen, unsere Chancen zu maximieren. Go würde unser Leben aus dieser Perspektive definitiv erleichtern, aber die Kompromisse haben es bisher aufgrund der obigen Punkte nie lohnenswert gemacht.
- Die C++-Codebasis von falcosecurity/libs, die den Kern von Falco bildet, ist recht umfangreich und komplex. Das Portieren des gesamten Codes in eine andere Sprache wäre ein großer Aufwand, der viele Entwicklungsressourcen erfordert und ein hohes Risiko für Fehlschläge und Regressionen birgt. Unser Ansatz war daher bisher, stattdessen Refactorings und Code-Politur zu wählen, bis wir auf diesem Teil des Codes ein optimales Maß an Stabilität, Qualität und Modularität erreicht haben. Dies würde zukünftige Entwicklungen reibungsloser und machbarer machen.
Wie geht es mit Falco weiter?
Bleiben Sie über die sich weiterentwickelnden Fähigkeiten von Falco auf dem Laufenden, indem Sie die Falco-Roadmap erkunden, die Einblicke in die derzeit in Entwicklung befindlichen und für zukünftige Versionen geplanten Funktionen bietet.
Lizenz
Falco ist unter der Open-Source-Lizenz Apache 2.0 lizenziert.