
falco v0.45.0-rc1
Agent de sécurité runtime cloud-native en temps réel pour Linux qui surveille les appels système et les métadonnées des conteneurs/Kubernetes afin de détecter les comportements anormaux et les menaces.
Falco
Falco est un outil de sécurité runtime cloud natif 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 de sécurité potentielles.
Au cœur de Falco se trouve un agent de surveillance et de détection du noyau qui observe des événements, tels que les appels système (syscalls), sur la base de règles personnalisées. Falco peut enrichir ces événements en intégrant des métadonnées du runtime de conteneurs et de Kubernetes. Les événements collectés peuvent être analysés hors de l'hôte dans des systèmes SIEM ou de data lake.
Falco, créé à l'origine par Sysdig, est un projet diplômé au sein 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, consultez le site web officiel de Falco.
Pour des informations complètes sur les dernières mises à jour et modifications du projet, veuillez consulter le Change Log.
Le projet Falco
La base de code du projet Falco est maintenue au sein de l'organisation GitHub falcosecurity. Le dépôt principal, falcosecurity/falco, contient le code source du binaire Falco, tandis que les autres sous-projets sont hébergés dans des dépôts dédiés. Cette approche, qui consiste à isoler les composants dans des dépôts spécialisés, améliore la modularité et un développement ciblé. Parmi les dépôts principaux notables figurent :
- falcosecurity/libs : Ce dépôt héberge les bibliothèques principales de Falco, qui constituent la majeure partie du code source du binaire et fournissent des fonctionnalités essentielles, telles que les pilotes du noyau.
- falcosecurity/rules : Il contient l'ensemble de règles officiel pour Falco, offrant des règles de détection prédéfinies pour diverses menaces de sécurité et comportements anormaux.
- falcosecurity/plugins : Ce dépôt prend en charge l'intégration avec des services externes via des plugins qui étendent les capacités de Falco au-delà des appels système et des événements de conteneurs, avec des plans pour faire évoluer des fonctionnalités spécialisées dans les futures versions.
- falcosecurity/falcoctl : Un utilitaire en ligne de commande conçu pour gérer Falco et interagir avec lui.
- falcosecurity/charts : Ce dépôt publie des charts Helm pour déployer Falco et son écosystème. Le code source du chart Falco se trouve dans
chart/falco.
Pour en savoir plus sur nos dépôts et obtenir des détails supplémentaires sur notre modèle de gouvernance, veuillez visiter le hub officiel du projet Falco : falcosecurity/evolution.
Premiers pas avec Falco
Si vous débutez avec Falco, commencez votre parcours avec notre guide Premiers pas. Pour les déploiements en production, veuillez consulter notre documentation complète Configuration.
En guise de recommandations finales avant de déployer Falco, vérifiez la compatibilité de l'environnement, définissez vos objectifs de détection, optimisez les performances, choisissez le build approprié et planifiez l'intégration SIEM ou data lake pour garantir une réponse efficace 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. Il comprend falco, falcosidekick, falcosidekick-ui et sa base de données redis requise. Pour plus d'informations, consultez la section docker-compose.
Rejoignez la communauté
Pour vous impliquer dans le projet Falco, veuillez visiter le dépôt Community pour trouver plus d'informations et des moyens de participer.
Si vous avez des questions sur Falco ou sur la contribution, n'hésitez pas à ouvrir une issue ou à contacter les mainteneurs de Falco et les membres de la communauté pour obtenir de l'aide.
Comment nous contacter ?
- Rejoignez le canal #falco sur le Slack Kubernetes.
- Rejoignez la liste de diffusion Falco.
- Ouvrez une issue ou faites des demandes de fonctionnalités.
Engagement envers la sécurité de Falco
Les rapports complets des différents audits de sécurité sont disponibles ici.
En outre, vous pouvez consulter les sections sécurité de falco et de libs pour des mises à jour détaillées sur les avis de sécurité et les politiques.
Pour signaler des vulnérabilités de sécurité, veuillez suivre le processus communautaire décrit dans la documentation disponible ici.
Compilation
Pour des instructions complètes, étape par étape, sur la compilation de Falco à partir des sources, veuillez consulter la documentation officielle.
Tests
Déplier les instructions de test
La page Build Falco from source de Falco est la ressource de référence pour comprendre comment compiler Falco à partir des sources. En outre, le dépôt falcosecurity/libs offre des informations précieuses supplémentaires 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 dépôt :
cmake \
-DUSE_BUNDLED_DEPS=ON \
-DBUILD_DRIVER=ON \
-DBUILD_FALCO_MODERN_BPF=ON \
-DCREATE_TEST_TARGETS=ON \
-DBUILD_FALCO_UNIT_TESTS=ON ..;
Compilez 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;
Vous pouvez éventuellement compiler le driver de votre choix et tester l'exécution du binaire Falco pour effectuer des tests manuels.
Enfin, le projet Falco a déplacé ses tests de régression Falco vers falcosecurity/testing.
Comment contribuer
Veuillez consulter le guide Contributing et le Code de conduite pour plus d'informations sur la façon de contribuer.
FAQ
Pourquoi Falco est-il en C++ plutôt qu'en Go ou en {langage} ?
Déplier les informations
- Les premières lignes de code à la base de Falco ont été écrites il y a quelque temps, à une époque où 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 de suivi d'état de l'outil, de sorte que la plupart des atouts du runtime Go liés à la concurrence ne seraient pas du tout exploités.
- Le code de Falco touche à de la programmation de très bas niveau à de nombreux endroits, et nous savons tous qu'interfacer Go avec C est possible, mais apporte énormément de complexité et de compromis.
- En tant qu'outil de sécurité conçu pour absorber un débit extrêmement élevé d'événements par seconde, Falco doit extraire le maximum de performances sur tous les chemins critiques à l'exécution et nécessite un contrôle approfondi de l'allocation mémoire, ce que le runtime Go ne peut pas offrir (le garbage collection entre également en jeu).
- Bien que Go ne corresponde pas aux exigences techniques du cœur de Falco, nous avons tout de même pensé qu'il pourrait être un bon candidat pour écrire des extensions de Falco via le système de plugins. C'est la raison principale 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 requise pour obtenir des binaires liés statiquement. En fait, nous fournissons des builds 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 actuel de bibliothèques dynamiques que nous avons aujourd'hui.
- Le système de plugins a été conçu pour prendre en charge plusieurs langages ; de notre côté, maintenir une base de code compatible C est la meilleure stratégie pour garantir une compatibilité inter-langages maximale.
- En général, les plugins ont des exigences/dépendances GLIBC car ils disposent de liaisons C de bas niveau nécessaires au chargement dynamique. Une solution potentielle pour l'avenir pourrait être de permettre également aux plugins d'être liés statiquement au moment de la compilation et d'être ainsi publiés intégrés au binaire Falco. Bien qu'aucun travail n'ait encore été entrepris 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 variante de build statique de Falco.
- La sécurité mémoire est certainement une préoccupation, et nous faisons de notre mieux pour maintenir un niveau de qualité élevé, même si le C++ est assez sujet aux erreurs. Par exemple, nous essayons d'utiliser des pointeurs intelligents (smart pointers) chaque fois que possible, nous compilons les bibliothèques avec un address sanitizer dans notre CI, nous exécutons Falco avec Valgrind avant chaque version, et nous avons des moyens de le soumettre à des tests de stress pour détecter des régressions de performances ou une utilisation anormale de la mémoire (par exemple https://github.com/falcosecurity/event-generator). En plus de cela, des tiers audient également la base de code de temps en temps. Rien de tout cela ne constitue bien sûr une garantie parfaite en matière de sécurité, mais nous essayons de maximiser nos chances. Go nous faciliterait certainement la vie de ce point de vue ; cependant, les compromis n'ont jamais rendu cela rentable 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 vers un autre langage représenterait un effort majeur nécessitant d'importantes ressources de développement et comportant un risque élevé d'échec et de régression. C'est pourquoi notre approche jusqu'à présent a été de privilégier les refactorisations et le 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 aux développements futurs d'être plus fluides et plus réalisables à l'avenir.
Quelle est la suite pour Falco ?
Restez informé de l'évolution des capacités de Falco en explorant la Feuille de route Falco, qui donne un aperçu des fonctionnalités actuellement en cours de développement et prévues pour les futures versions.
Licence
Falco vous est concédé sous la licence open source Apache 2.0.