For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/containers-orchestration/managed-kubernetes/runtime-security-falco.md.
Découvrez comment sécuriser votre OVHcloud Managed Kubernetes avec Falco, un outil de sécurité runtime
Objectif
Falco est un outil open source de sécurité runtime cloud-native. Il fournit une détection des menaces en quasi temps réel pour les workloads cloud, conteneurs et Kubernetes en s'appuyant sur des informations collectées au niveau du runtime. Falco peut superviser des événements provenant de différentes sources, dont le noyau Linux, et les enrichir avec des métadonnées issues du serveur API Kubernetes, du runtime de conteneurs, etc.
Concrètement, Falco :
Reçoit des événements
Les compare à un ensemble de règles pour déterminer les actions à effectuer
Génère des alertes : vous pouvez transférer les événements Falco vers différents endpoints (syslog, stdout, https, graph...) ou vers différentes applications (Slack, Discord, Elasticsearch, Kafka...) grâce à falcosidekick
Chez OVHcloud, nous mettons un point d'honneur à vous proposer les meilleurs produits et services. La sécurité étant pour nous un enjeu important, ce guide vous fait découvrir Falco, qui vous aidera à sécuriser votre OVHcloud Managed Kubernetes grâce à un outil de sécurité runtime.
Dans ce guide, vous allez :
Installer Falco et Falcosidekick
Tester le comportement de l'outil
Visualiser les événements dans une interface graphique
Transférer et stocker les événements dans un bucket OVHcloud Object Storage
Vous pouvez utiliser la fonction Réinitialiser le cluster dans la section Public Cloud de l' pour réinitialiser votre cluster avant de suivre ce tutoriel.
Prérequis
Ce tutoriel suppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes fonctionnel, ainsi que de connaissances de base sur son fonctionnement. Pour en savoir plus sur ces sujets, consultez la documentation Déployer une application Hello World.
Ces commandes ajoutent le dépôt Helm de Falco à votre dépôt local de charts Helm et mettent à jour les dépôts de charts installés :
$ helm repo add falcosecurity https://falcosecurity.github.io/chartshelm repo update"falcosecurity" has been added to your repositoriesHang tight while we grab the latest from your chart repositories.........Successfully got an update from the "falcosecurity" chart repository...Update Complete. ⎈Happy Helming!⎈
Installez la dernière version de Falco avec la commande helm install :
Cette commande installe la dernière version de Falco, avec l'interface Falcosidekick, et crée un nouveau namespace falco :
$ helm install falco \ --version 4.0.0 \ --create-namespace \ --namespace falco \ --set tty=true \ --set falcosidekick.enabled=true \ --set falcosidekick.webui.enabled=true \ --set falcosidekick.webui.user=myuser:mypassword \ --set falcosidekick.webui.service.type=LoadBalancer \ falcosecurity/falcoNAME: falcoLAST DEPLOYED: Wed Apr 3 11:48:42 2024NAMESPACE: falcoSTATUS: deployedREVISION: 1NOTES:Falco agents are spinning up on each node in your cluster. After a fewseconds, they are going to start monitoring your containers looking forsecurity issues.No further action should be required.
Comme vous pouvez le constater, nous installons également Falcosidekick grâce à plusieurs paramètres :
--set falcosidekick.enabled=true active le déploiement de Falcosidekick aux côtés de Falco et configure Falco pour envoyer ses événements à Falcosidekick
--set falcosidekick.webui.enabled=true active le déploiement de Falcosidekick-UI et configure Falcosidekick pour l'utiliser comme sortie
--set falcosidekick.webui.service.type=LoadBalancer permet d'accéder à l'interface via un OVHcloud Load Balancer (et une adresse IP externe)
Info
N'oubliez pas de modifier le login et le mot de passe dans la commande helm install, et plus particulièrement dans le paramètre --set falcosidekick.webui.user, afin de pouvoir accéder à l'interface.
Le chart Helm de Falco installe un DaemonSet qui ajoute des pods Falco sur tous les nœuds du cluster Kubernetes afin de superviser les comportements anormaux :
$ kubectl logs -l app.kubernetes.io/name=falco -n falco -c falcoWed Apr 3 12:22:26 2024: Falco version: 0.37.0 (x86_64)Wed Apr 3 12:22:26 2024: Falco initialized with configuration file: /etc/falco/falco.yamlWed Apr 3 12:22:26 2024: System info: Linux version 5.15.0-101-generic (buildd@lcy02-amd64-032) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024Wed Apr 3 12:22:26 2024: Loading rules from file /etc/falco/falco_rules.yamlWed Apr 3 12:22:26 2024: The chosen syscall buffer dimension is: 8388608 bytes (8 MBs)Wed Apr 3 12:22:26 2024: Starting health webserver with threadiness 2, listening on 0.0.0.0:8765Wed Apr 3 12:22:26 2024: Loaded event sources: syscallWed Apr 3 12:22:26 2024: Enabled event sources: syscallWed Apr 3 12:22:26 2024: Opening 'syscall' source with Kernel moduleWed Apr 3 12:21:51 2024: Falco version: 0.37.0 (x86_64)Wed Apr 3 12:21:51 2024: Falco initialized with configuration file: /etc/falco/falco.yamlWed Apr 3 12:21:51 2024: System info: Linux version 5.15.0-101-generic (buildd@lcy02-amd64-032) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024Wed Apr 3 12:21:51 2024: Loading rules from file /etc/falco/falco_rules.yamlWed Apr 3 12:21:51 2024: The chosen syscall buffer dimension is: 8388608 bytes (8 MBs)Wed Apr 3 12:21:51 2024: Starting health webserver with threadiness 2, listening on 0.0.0.0:8765Wed Apr 3 12:21:51 2024: Loaded event sources: syscallWed Apr 3 12:21:51 2024: Enabled event sources: syscallWed Apr 3 12:21:51 2024: Opening 'syscall' source with Kernel moduleWed Apr 3 12:21:57 2024: Falco version: 0.37.0 (x86_64)Wed Apr 3 12:21:57 2024: Falco initialized with configuration file: /etc/falco/falco.yamlWed Apr 3 12:21:57 2024: System info: Linux version 5.15.0-101-generic (buildd@lcy02-amd64-032) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024Wed Apr 3 12:21:57 2024: Loading rules from file /etc/falco/falco_rules.yamlWed Apr 3 12:21:57 2024: The chosen syscall buffer dimension is: 8388608 bytes (8 MBs)Wed Apr 3 12:21:57 2024: Starting health webserver with threadiness 2, listening on 0.0.0.0:8765Wed Apr 3 12:21:57 2024: Loaded event sources: syscallWed Apr 3 12:21:57 2024: Enabled event sources: syscallWed Apr 3 12:21:57 2024: Opening 'syscall' source with Kernel module
Les logs confirment que Falco et ses règles ont bien été chargés.
Tester Falco
Même sans ajouter de nouvelles règles, Falco contient des règles par défaut que nous pouvons utiliser pour tester son comportement.
Suivez les étapes ci-dessous pour déclencher une alerte lorsqu'un shell est exécuté dans un conteneur en cours d'exécution.
Démarrez un conteneur Alpine :
$ kubectl run demo-falco --image alpine -- sh -c "sleep infinity"pod/demo-falco created
Exécutez un shell sur le conteneur en cours d'exécution :
Consultez maintenant les logs de Falco pour voir l'alerte :
$ kubectl logs -c falco -n falco -l app.kubernetes.io/name=falco |\ grep "Notice"{"hostname":"falco-fsvp8","output":"11:36:27.670410771: Notice A shell was spawned in a container with an attached terminal (evt_type=execve user=root user_uid=0 user_loginuid=-1 process=sh proc_exepath=/bin/busybox parent=runc command=sh -c ls -al terminal=34816 exe_flags=EXE_WRITABLE container_id=873807ba3669 container_image=docker.io/library/alpine container_image_tag=latest container_name=alpine k8s_ns=default k8s_pod_name=alpine)","priority":"Notice","rule":"Terminal shell in container","source":"syscall","tags":["T1059","container","maturity_stable","mitre_execution","shell"],"time":"2024-04-03T11:36:27.670410771Z", "output_fields": {"container.id":"873807ba3669","container.image.repository":"docker.io/library/alpine","container.image.tag":"latest","container.name":"alpine","evt.arg.flags":"EXE_WRITABLE","evt.time":1712144187670410771,"evt.type":"execve","k8s.ns.name":"default","k8s.pod.name":"alpine","proc.cmdline":"sh -c ls -al","proc.exepath":"/bin/busybox","proc.name":"sh","proc.pname":"runc","proc.tty":34816,"user.loginuid":-1,"user.name":"root","user.uid":0}}
Vous devriez voir dans les logs le message « Notice A shell was spawned in a container with an attached terminal ».
Utilisation de l'interface Falcosidekick
Maintenant que Falco est installé et testé, nous pouvons visualiser les événements dans l'interface Falcosidekick.
Affichez l'adresse IP externe :
$ kubectl get svc falco-falcosidekick-ui -n falcoNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEfalco-falcosidekick-ui LoadBalancer 10.3.198.190 xx.xx.xx.xx 2802:31222/TCP 130m
Ouvrez votre navigateur et accédez à http://< EXTERNAL-IP >:2802 en utilisant les identifiants suivants :
Login : my-user (ou le login que vous avez défini dans la commande helm install)
Mot de passe : my-password (ou le mot de passe que vous avez défini dans la commande helm install)
Cliquez sur l'onglet « EVENTS » :
Vous devriez voir les événements précédents générés grâce à nos tests.
Archivage des événements dans un conteneur OVHcloud Object Storage
Vous pouvez également enregistrer/transférer les événements vers un bucket OVHcloud Object Storage (compatible avec l'API S31) afin d'archiver les sorties et de pouvoir les analyser ultérieurement si vous le souhaitez.
Pour cela, vous devez disposer d'un conteneur Object Storage. Si vous n'en avez pas déjà un, vous pouvez suivre le guide Créer un conteneur Object Storage.
Pour ce guide, notre conteneur Object Storage est :
un S3 compatible Object Storage - High Performance
dans la région GRA
avec un utilisateur nouvellement créé
nommé falco
Info
Conservez les identifiants Object Storage : vous utiliserez l'Object Storage access key et l'Object Storage secret key dans la prochaine commande helm install.
Cliquez sur le bucket falco pour y accéder et afficher ses informations, notamment l'endpoint, qui vous sera utile.
Il est maintenant temps de mettre à jour notre installation de Falco :
noglob est nécessaire si vous êtes dans un environnement zsh. En effet, zsh essaiera d'interpréter les caractères [], et noglob permet de l'éviter.
Cette commande met à jour votre installation de Falco avec une nouvelle source Falcosidekick afin d'envoyer les sorties vers notre bucket OVHcloud Object Storage :
$ noglob helm upgrade falco \ --version 4.0.0 \ --create-namespace \ --namespace falco \ --set tty=true \ --set falcosidekick.enabled=true \ --set falcosidekick.image.tag=latest \ --set falcosidekick.webui.enabled=true \ --set falcosidekick.webui.user=myuser:mypassword \ --set falcosidekick.webui.service.type=LoadBalancer \ --set falcosidekick.config.aws.accesskeyid=xxxx \ --set falcosidekick.config.aws.secretaccesskey=yyyy \ --set falcosidekick.config.aws.checkidentity=false \ --set falcosidekick.config.aws.s3.bucket=falco \ --set falcosidekick.config.aws.region=gra \ --set falcosidekick.config.extraEnv[0].name=AWS_S3_ENDPOINT,falcosidekick.config.extraEnv[0].value=https://s3.gra.perf.cloud.ovh.net \ falcosecurity/falcoRelease "falco" has been upgraded. Happy Helming!NAME: falcoLAST DEPLOYED: Fri Apr 5 14:46:36 2024NAMESPACE: falcoSTATUS: deployedREVISION: 3NOTES:Falco agents are spinning up on each node in your cluster. After a fewseconds, they are going to start monitoring your containers looking forsecurity issues.No further action should be required.
Info
N'oubliez pas de remplacer l'AWSAccessKeyID et l'AWSSecretAccessKey (dans la commande helm upgrade, et plus particulièrement dans les paramètres --set falcosidekick.config.aws.accesskeyid et --set falcosidekick.config.aws.secretaccesskey) par les identifiants récupérés lors de la création du conteneur OVHcloud Object Storage.
Exécutez la commande qui génère un événement Falco afin d'envoyer la sortie dans le bucket :
$ kubectl logs -l app.kubernetes.io/part-of=falcosidekick --all-containers -n falco -f...2024/04/05 12:46:45 [INFO] : Falcosidekick is up and listening on :28012024/04/05 12:46:45 [INFO] : Enabled Outputs : [AWSS3 WebUI]...2024/04/05 12:58:26 [INFO] : WebUI - Post OK (200)2024/04/05 12:58:27 [INFO] : AWS S3 - Upload payload OK
Les logs confirment que les événements ont bien été envoyés à l'interface ainsi qu'au bucket OVHcloud Object Storage.
Vous pouvez vérifier, dans votre conteneur/bucket OVHcloud Object Storage falco, que la sortie a bien été stockée :
Aller plus loin
Nous avons installé Falco et falcosidekick, découvert comment le tester, visualiser les événements et transférer les alertes vers un bucket, mais nous n'avons pas vu toutes ses fonctionnalités. Si elles vous intéressent, consultez le site officiel de Falco.
Après avoir reçu des événements, nous pouvons par exemple transférer les alertes vers de nombreuses autres applications grâce à Falcosidekick :
Slack
Discord
Elasticsearch
Amazon S3 (fait)
SMTP
Opsgenie
Webhook
Prometheus
Grafana
Datadog
...
Si vous avez des questions ou rencontrez des difficultés avec Falco, consultez la communauté Slack de Falco.
Suppression (nettoyage)
Commencez par supprimer le pod demo-falco avec la commande suivante :
kubectl delete pod demo-falco
Pour désinstaller Falco, puisque vous l'avez installé via Helm, vous pouvez utiliser la commande helm uninstall afin de supprimer le chart Helm installé de Falco :
helm uninstall falco -n falco
Aller plus loin
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
1 : S3 est une marque déposée appartenant à Amazon Technologies, Inc. Les services de OVHcloud ne sont pas sponsorisés, approuvés, ou affiliés de quelque manière que ce soit.