Falco
Falco est un outil de sécurité d'exécution natif cloud pour les systèmes d'exploitation Linux. Il est conçu pour détecter et alerter en temps réel sur les comportements anormaux et les menaces potentielles pour la sécurité.
À la base, Falco est un agent de surveillance et de détection du noyau qui observe les événements, tels que les appels système, sur la base de règles personnalisées. Falco peut améliorer ces événements en intégrant les métadonnées du runtime du conteneur et de Kubernetes. Les événements collectés peuvent être analysés hors hôte dans des systèmes SIEM ou Data Lake.
Falco, créé à l'origine par Sysdig, est un projet gradué de la Cloud Native Computing Foundation (CNCF) utilisé en production par diverses organisations.
Pour des informations techniques détaillées et un aperçu des cybermenaces que Falco peut détecter, visitez le site Web officiel de Falco.
Pour des informations complètes sur les dernières mises à jour et modifications apportées au projet, veuillez vous référer au journal des modifications. De plus, nous avons documenté le processus de publication pour la livraison de nouvelles versions de Falco.
Falco Repo : alimenter le cœur du projet Falco
Il s'agit du référentiel Falco principal qui contient le code source pour construire le binaire Falco. En utilisant ses bibliothèques et le fichier de configuration falco.yaml, ce référentiel constitue la base des fonctionnalités de Falco. Le référentiel Falco est étroitement interconnecté avec les référentiels principaux suivants :
- falcosecurity/libs : les bibliothèques de Falco sont essentielles à ses opérations fondamentales, constituant la plus grande partie du code source du binaire Falco et fournissant des fonctionnalités essentielles telles que les pilotes du noyau.
- falcosecurity/rules : contient l'ensemble de règles officielles de Falco, fournissant des règles de détection prédéfinies pour diverses menaces de sécurité et comportements anormaux.
- falcosecurity/plugins : les plugins Falco facilitent l'intégration avec des services externes, étendent les capacités de Falco au-delà des appels système et des événements de conteneur, et sont conçus pour évoluer avec des fonctionnalités spécialisées dans les versions futures.
- falcosecurity/falcoctl : utilitaire de ligne de commande pour gérer et interagir avec Falco.
Pour plus d'informations, visitez le hub officiel du projet Falco : falcosecurity/evolution. Il fournit des informations et des informations précieuses sur les référentiels du projet.
Premiers pas avec Falco
Lisez et suivez attentivement la documentation officielle.
Considérations et conseils pour les adoptants de Falco :
Comprendre les dépendances : évaluez l'environnement dans lequel vous exécuterez Falco et considérez les versions et les architectures du noyau.
Définissez les objectifs de détection des menaces : identifiez clairement les menaces que vous souhaitez détecter et évaluez les forces et les limites de Falco.
Tenez compte des performances et des coûts : évaluez la surcharge de performances de calcul et alignez-vous avec les administrateurs système ou les SRE. Budget en conséquence.
Choisissez une approche de création et de personnalisation : choisissez entre la version open source de Falco ou la création d'un pipeline de version personnalisé. Personnalisez le processus de création et de déploiement si nécessaire, notamment en intégrant des tests ou des approches uniques, pour garantir un déploiement résilient avec des cycles de déploiement rapides.
Intégration aux destinations de sortie : intégrez Falco au SIEM, aux systèmes de lacs de données ou à d'autres destinations de sortie préférées pour établir une base solide pour une analyse complète des données et permettre des flux de travail efficaces de réponse aux incidents.
Environnement de démonstration
Un environnement de démonstration est fourni via un fichier docker-compose qui peut être démarré sur un hôte docker qui comprend falco, falcosidekick, falcosidekick-ui et sa base de données redis requise. Pour plus d'informations, consultez la section docker-compose
Comment contribuer
Veuillez vous référer au guide de contribution et au code de conduite pour plus d'informations sur la manière de contribuer.
Rejoignez la communauté
Pour vous impliquer dans le projet Falco, veuillez visiter le référentiel communautaire pour trouver plus d'informations et les moyens de vous impliquer.
Si vous avez des questions sur Falco ou sur sa contribution, n'hésitez pas à signaler un problème ou à contacter les responsables de Falco et les membres de la communauté pour obtenir de l'aide.
Comment tendre la main ?
- Rejoignez la chaîne #falco sur Kubernetes Slack.
- Rejoignez la liste de diffusion Falco.
- Déposez un problème ou faites des demandes de fonctionnalités.
Engagement envers la propre sécurité de Falco
Les rapports complets de divers audits de sécurité peuvent être consultés ici.
De plus, vous pouvez vous référer aux sections de sécurité falco et libs pour des mises à jour détaillées sur les avis et politiques de sécurité.
Pour signaler des vulnérabilités de sécurité, veuillez suivre le processus communautaire décrit dans la documentation trouvée ici.
Quelle est la prochaine étape pour Falco ?
Restez informé de l'évolution des capacités de Falco en explorant la feuille de route Falco, qui fournit un aperçu des fonctionnalités actuellement en cours de développement et prévues pour les versions futures.
Licence
Falco vous est concédé sous licence open source Apache 2.0.
Essai
Développer les instructions de test
Falco's Build Falco from source est la ressource incontournable pour comprendre comment construire Falco à partir des sources. De plus, le référentiel falcosecurity/libs offre des informations supplémentaires précieuses sur les tests et le débogage des bibliothèques sous-jacentes et des pilotes du noyau de Falco.
Voici un exemple de commande cmake
qui activera tout ce dont vous avez besoin pour tous les tests unitaires de ce référentiel :
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 .. ;
Créez et exécutez la suite de tests unitaires :
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 ;
En option, créez le pilote de votre choix et testez le binaire Falco pour effectuer des tests manuels.
Enfin, The Falco Project a déplacé ses tests de régression Falco vers falcosecurity/testing.
Pourquoi Falco est-il en C++ plutôt qu'en Go ou en {langue} ?
Développer les informations
- Les premières lignes de code à la base de Falco ont été écrites il y a quelque temps, alors que Go n'avait pas encore le même niveau de maturité et d'adoption qu'aujourd'hui.
- Le modèle d'exécution de Falco est séquentiel et mono-thread en raison des exigences d'état de l'outil, et donc la plupart des arguments de vente liés à la concurrence du runtime Go ne seraient pas du tout exploités.
- Le code Falco traite de la programmation de très bas niveau à de nombreux endroits (par exemple, certains en-têtes sont partagés avec la sonde eBPF et le module Kernel), et nous savons tous que l'interfaçage de Go avec C est possible mais apporte des tonnes de complexité et de compromis. .
- En tant qu'outil de sécurité destiné à consommer un débit extrêmement élevé d'événements par seconde, Falco doit réduire les performances de tous les chemins chauds au moment de l'exécution et nécessite un contrôle approfondi sur l'allocation de mémoire, ce que le runtime Go ne peut pas fournir (le garbage collection est également impliqué). .
- Bien que Go ne réponde pas aux exigences techniques du cœur de Falco, nous avons quand même pensé qu'il pourrait être un bon candidat pour écrire des extensions Falco via le système de plugins. C'est la principale raison pour laquelle nous avons accordé une attention particulière et une haute priorité au développement du plugin-sdk-go.
- Go n'est pas une condition nécessaire pour avoir des binaires liés statiquement. En fait, nous proposons des versions Falco entièrement statiques depuis quelques années. Le seul problème avec ceux-ci est que le système de plugins ne peut pas être pris en charge avec le modèle de bibliothèque dynamique actuel dont nous disposons actuellement.
- Le système de plugins a été conçu pour prendre en charge plusieurs langues, donc de notre côté, maintenir une base de code compatible C est la meilleure stratégie pour garantir une compatibilité multilingue maximale.
- En général, les plugins ont des exigences/dépendances GLIBC car ils ont des liaisons C de bas niveau requises pour le chargement dynamique. Une solution potentielle pour l'avenir pourrait être de prendre également en charge le plugin qui serait lié statiquement au moment de la compilation et donc publié tel qu'il est fourni dans le binaire Falco. Bien qu'aucun travail n'ait encore commencé dans cette direction, cela résoudrait la plupart des problèmes que vous avez signalés et fournirait également un binaire totalement statique. Bien sûr, cela ne serait plus compatible avec le chargement dynamique, mais cela pourrait être une solution viable pour notre version statique de Falco.
- La sécurité de la mémoire est définitivement une préoccupation et nous faisons de notre mieux pour maintenir un haut niveau de qualité même si le C++ est assez sujet aux erreurs. Par exemple, nous essayons d'utiliser des pointeurs intelligents autant que possible, nous construisons les bibliothèques avec un désinfectant d'adresses dans notre CI, nous exécutons Falco via Valgrind avant chaque version et disposons de moyens de le tester pour détecter les régressions de performances ou une utilisation étrange de la mémoire ( par exemple https://github.com/falcosecurity/event-generator). En plus de cela, nous faisons également appel à des tiers qui auditent la base de code de temps en temps. Bien sûr, rien de tout cela ne constitue un point de vue parfait en matière de sécurité, mais nous essayons de maximiser nos chances. Go nous faciliterait certainement la vie de ce point de vue, mais les compromis n'en valaient jamais la peine jusqu'à présent en raison des points ci-dessus.
- La base de code C++ de falcosecurity/libs, qui est au cœur de Falco, est assez vaste et complexe. Porter tout ce code dans un autre langage représenterait un effort majeur nécessitant beaucoup de ressources de développement et présentant un risque élevé d'échec et de régression. En tant que telle, notre approche jusqu'à présent a consisté à choisir des refactors et un polissage du code, jusqu'à ce que nous atteignions un niveau optimal de stabilité, de qualité et de modularité sur cette partie du code. Cela permettrait de rendre les développements ultérieurs plus fluides et plus réalisables à l’avenir.
Ressources
- Gouvernance
- Code de conduite
- Directives des responsables
- Liste des responsables
- Lignes directrices sur les référentiels
- Liste des référentiels
- Liste des adoptants
- Installer et exploiter
- Dépannage