Falco
Falco ist ein Cloud-natives Laufzeitsicherheitstool für Linux-Betriebssysteme. Es ist darauf ausgelegt, ungewöhnliches 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 Systemaufrufe auf der Grundlage benutzerdefinierter Regeln beobachtet. Falco kann diese Ereignisse durch die Integration von Metadaten aus der Containerlaufzeit und Kubernetes verbessern. Die gesammelten Ereignisse können Off-Host in SIEM- oder Data-Lake-Systemen analysiert werden.
Falco, ursprünglich von Sysdig entwickelt, ist ein abgestuftes Projekt der Cloud Native Computing Foundation (CNCF), das von verschiedenen Organisationen in der Produktion eingesetzt wird.
Ausführliche technische Informationen und Einblicke in die Cyber-Bedrohungen, die Falco erkennen kann, finden Sie auf der offiziellen Falco-Website.
Umfassende Informationen zu den neuesten Aktualisierungen und Änderungen am Projekt finden Sie im Änderungsprotokoll. Darüber hinaus haben wir den Release-Prozess für die Bereitstellung neuer Versionen von Falco dokumentiert.
Falco Repo: Den Kern des Falco-Projekts antreiben
Dies ist das Haupt-Falco-Repository, das den Quellcode zum Erstellen der Falco-Binärdatei enthält. Durch die Nutzung seiner Bibliotheken und der Konfigurationsdatei falco.yaml bildet dieses Repository die Grundlage für die Funktionalität von Falco. Das Falco-Repository ist eng mit den folgenden Kernrepositorys verbunden:
- falcosecurity/libs: Falcos Bibliotheken sind der Schlüssel zu seinen grundlegenden Operationen, sie machen den größten Teil des Quellcodes der Falco-Binärdatei aus und stellen wesentliche Funktionen wie Kernel-Treiber bereit.
- falcosecurity/rules: Enthält den offiziellen Regelsatz für Falco, der vordefinierte Erkennungsregeln für verschiedene Sicherheitsbedrohungen und abnormales Verhalten bereitstellt.
- Falcosecurity/Plugins: Falco-Plugins erleichtern die Integration mit externen Diensten, erweitern die Fähigkeiten von Falco über Systemaufrufe und Containerereignisse hinaus und sind so konzipiert, dass sie in zukünftigen Versionen mit speziellen Funktionen weiterentwickelt werden.
- falcosecurity/falcoctl: Befehlszeilen-Dienstprogramm zur Verwaltung und Interaktion mit Falco.
Weitere Informationen finden Sie im offiziellen Hub des Falco-Projekts: falcosecurity/evolution. Es bietet wertvolle Einblicke und Informationen zu den Repositories des Projekts.
Erste Schritte mit Falco
Lesen Sie die offizielle Dokumentation sorgfältig durch und befolgen Sie sie.
Überlegungen und Hinweise für Falco-Anwender:
Abhängigkeiten verstehen: Bewerten Sie die Umgebung, in der Sie Falco ausführen, und berücksichtigen Sie Kernel-Versionen und -Architekturen.
Definieren Sie Ziele für die Bedrohungserkennung: Identifizieren Sie klar die Bedrohungen, die Sie erkennen möchten, und bewerten Sie die Stärken und Grenzen von Falco.
Berücksichtigen Sie Leistung und Kosten: Bewerten Sie den Mehraufwand für die Rechenleistung und stimmen Sie ihn mit Systemadministratoren oder SREs ab. Budgetieren Sie entsprechend.
Wählen Sie den Build- und Anpassungsansatz: Entscheiden Sie sich zwischen dem Open-Source-Falco-Build oder der Erstellung einer benutzerdefinierten Build-Pipeline. Passen Sie den Build- und Bereitstellungsprozess nach Bedarf an, einschließlich der Integration einzigartiger Tests oder Ansätze, um eine belastbare Bereitstellung mit schnellen Bereitstellungszyklen sicherzustellen.
Integration mit Ausgabezielen: Integrieren Sie Falco mit SIEM, Data-Lake-Systemen oder anderen bevorzugten Ausgabezielen, um eine solide Grundlage für eine umfassende Datenanalyse zu schaffen und effektive Arbeitsabläufe zur Reaktion auf Vorfälle zu ermöglichen.
Demo-Umgebung
Eine Demoumgebung wird über eine Docker-Compose-Datei bereitgestellt, die auf einem Docker-Host gestartet werden kann, der Falco, Falcosidekick, Falcosidekick-ui und die erforderliche Redis-Datenbank enthält. Weitere Informationen finden Sie im Abschnitt „Docker-Compose“.
So können Sie einen Beitrag leisten
Weitere Informationen zum Mitwirken finden Sie im Beitragsleitfaden und im Verhaltenskodex.
Treten Sie der Community bei
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 Beitrag haben, zögern Sie nicht, ein Problem einzureichen oder sich an die Falco-Betreuer und Community-Mitglieder zu wenden, um Hilfe zu erhalten.
Wie kann ich Kontakt aufnehmen?
- Treten Sie dem #falco-Kanal im Kubernetes Slack bei.
- Treten Sie der Falco-Mailingliste bei.
- Melden Sie ein Problem oder stellen Sie Funktionsanfragen.
Verpflichtung zur eigenen Sicherheit von Falco
Vollständige Berichte zu verschiedenen Sicherheitsaudits finden Sie hier.
Darüber hinaus finden Sie in den Sicherheitsabschnitten zu Falco und Libs detaillierte Aktualisierungen zu Sicherheitshinweisen und -richtlinien.
Um Sicherheitslücken zu melden, befolgen Sie bitte den in der hier aufgeführten Dokumentation beschriebenen Community-Prozess.
Was kommt als nächstes für Falco?
Bleiben Sie über die sich entwickelnden Fähigkeiten von Falco auf dem Laufenden, indem Sie die Falco-Roadmap erkunden, die Einblicke in die Funktionen bietet, die sich derzeit in der Entwicklung befinden und für zukünftige Versionen geplant sind.
Lizenz
Falco steht Ihnen unter der Open-Source-Lizenz Apache 2.0 zur Verfügung.
Testen
Erweitern Sie Testanweisungen
„Build Falco from Source“ von Falco ist die Anlaufstelle, um zu verstehen, wie man Falco aus dem Quellcode erstellt. Darüber hinaus bietet das Repository falcosecurity/libs zusätzliche wertvolle Informationen zu Tests und 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 Komponententests dieses Repositorys benötigen:
cmake
-DUSE_BUNDLED_DEPS=ON
-DBUILD_LIBSCAP_GVISOR=ON
-DBUILD_BPF=ON
-DBUILD_DRIVER=ON
-DBUILD_FALCO_MODERN_BPF=ON
-DCREATE_TEST_TARGETS=ON
-DBUILD_FALCO_UNIT_TESTS=ON .. ;
Erstellen Sie die Unit-Test-Suite und führen Sie sie aus:
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 ;
Erstellen Sie optional den Treiber Ihrer Wahl und führen Sie einen Testlauf der Falco-Binärdatei aus, um manuelle Tests durchzuführen.
Schließlich hat das Falco-Projekt seine Falco-Regressionstests auf Falcosecurity/Testing umgestellt.
Warum ist Falco in C++ und nicht in Go oder {Sprache}?
Erweitern Sie Informationen
- Die ersten Codezeilen auf der Basis von Falco wurden vor einiger Zeit geschrieben, als Go noch nicht den gleichen Reifegrad und die gleiche Akzeptanz wie heute hatte.
- Das Falco-Ausführungsmodell ist aufgrund der Statefulness-Anforderungen des Tools sequentiell und monothreadig, sodass die meisten der nebenläufigkeitsbezogenen Verkaufsargumente der Go-Laufzeitumgebung überhaupt nicht genutzt werden.
- Der Falco-Code befasst sich an vielen Stellen mit Programmierung auf sehr niedriger Ebene (z. B. werden einige Header mit der eBPF-Sonde und dem Kernel-Modul geteilt), und wir alle wissen, dass die Schnittstelle zwischen Go und C möglich ist, aber eine Menge Komplexität und Kompromisse mit sich bringt .
- Als Sicherheitstool, das einen wahnsinnig hohen Durchsatz an Ereignissen pro Sekunde verarbeiten soll, muss Falco zur Laufzeit die Leistung aller Hot-Pfade unter Druck setzen und erfordert eine umfassende Kontrolle der Speicherzuweisung, die die Go-Laufzeitumgebung nicht bieten kann (es ist auch eine Speicherbereinigung erforderlich). .
- Obwohl Go den technischen Anforderungen des Falco-Kerns nicht entsprach, dachten wir dennoch, dass es ein guter Kandidat für das Schreiben von Falco-Erweiterungen ü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 gewidmet haben.
- Go ist keine Voraussetzung für statisch verknüpfte 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 aktuellen dynamischen Bibliotheksmodell, das wir derzeit haben, nicht unterstützt werden kann.
- Das Plugin-System ist so konzipiert, dass es mehrere Sprachen unterstützt. Daher ist die Pflege einer C-kompatiblen Codebasis für uns die beste Strategie, um maximale sprachübergreifende Kompatibilität sicherzustellen.
- Im Allgemeinen gelten für Plugins GLIBC-Anforderungen/Abhängigkeiten, da sie über Low-Level-C-Bindungen verfügen, die für das dynamische Laden erforderlich sind. Eine mögliche Lösung für die Zukunft könnte darin bestehen, auch die statische Verknüpfung von Plugins zur Kompilierungszeit zu unterstützen und sie so als gebündelt in der Falco-Binärdatei zu veröffentlichen. Obwohl noch keine Arbeiten in dieser Richtung begonnen haben, würde dies die meisten von Ihnen gemeldeten Probleme lösen und auch 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.
- Die Speichersicherheit ist definitiv ein Problem und wir geben unser Bestes, um ein hohes Qualitätsniveau aufrechtzuerhalten, auch wenn C++ ziemlich fehleranfällig ist. Wir versuchen zum Beispiel, wann immer möglich, intelligente Zeiger zu verwenden, wir erstellen die Bibliotheken mit einem Adressbereinigungsprogramm in unserem CI, wir führen Falco vor jeder Veröffentlichung durch Valgrind aus und haben Möglichkeiten, es einem Stresstest zu unterziehen, um Leistungsrückgänge oder ungewöhnliche Speichernutzung zu erkennen ( z.B. https://github.com/falcosecurity/event-generator). Darüber hinaus lassen wir die Codebasis von Zeit zu Zeit von Dritten prüfen. Natürlich ist das alles kein perfekter Sicherheitsaspekt, aber wir versuchen, unsere Chancen zu maximieren. Go würde uns aus dieser Perspektive auf jeden Fall das Leben erleichtern, allerdings haben sich die Kompromisse bisher aufgrund der oben genannten Punkte nie gelohnt.
- Die C++-Codebasis von falcosecurity/libs, die den Kern von Falco bildet, ist ziemlich umfangreich und komplex. Den gesamten Code in eine andere Sprache zu portieren wäre ein großer Aufwand, der viele Entwicklungsressourcen erfordern würde und mit einem hohen Risiko für Fehler und Rückschritte verbunden wäre. Daher bestand unser Ansatz bisher darin, stattdessen Refaktoren und Code-Polierung zu wählen, bis wir für diesen Teil des Codes ein optimales Maß an Stabilität, Qualität und Modularität erreicht haben. Dies würde künftige Weiterentwicklungen reibungsloser und praktikabler gestalten.
Ressourcen
- Regierungsführung
- Verhaltenskodex
- Richtlinien für Betreuer
- Liste der Betreuer
- Richtlinien für Repositories
- Liste der Repositorys
- Adopters-Liste
- Installieren und betreiben
- Fehlerbehebung