Falco est l’outil de référence pour détecter les comportements anormaux dans vos conteneurs Kubernetes en temps réel. Projet CNCF Graduated depuis février 2024, il surveille les appels système (syscalls) et les événements d’audit Kubernetes pour identifier les menaces : shell spawné dans un conteneur, lecture de fichiers sensibles, connexions réseau suspectes. Ce guide vous montre comment déployer Falco, comprendre ses règles de détection, et créer vos propres alertes personnalisées.
Prérequis
Section intitulée « Prérequis »- Cluster Kubernetes Linux fonctionnel
- Nœuds compatibles avec le mode de capture choisi (Modern eBPF, kernel module…)
- Helm v3 installé
- kubectl configuré avec accès cluster-admin
- Bases en sécurité Linux (syscalls, capabilities)
Qu’est-ce que Falco ?
Section intitulée « Qu’est-ce que Falco ? »Falco détecte les comportements suspects au niveau du runtime en analysant deux sources d’événements :
| Source | Description | Exemples de détection |
|---|---|---|
| Syscalls kernel | Appels système des conteneurs via eBPF ou module kernel | Shell spawné, fichier sensible lu, binaire modifié |
| Audit Events K8s | Événements de l’API Server Kubernetes | Pod créé en mode privileged, exec dans un pod, secrets accédés |
Architecture simplifiée
Section intitulée « Architecture simplifiée »┌─────────────────────────────────────────────────────────────────┐│ Nœud Kubernetes ││ ┌─────────────┐ ┌─────────────────────────────────────────┐││ │ Conteneur A │ │ Falco │││ │ └─syscalls──┼────► ┌─────────┐ ┌────────┐ ┌────────┐ │││ └─────────────┘ │ │ Event │──►│ Engine │──►│ Outputs│ │││ ┌─────────────┐ │ │ Source │ │ Rules │ │ Alerts │ │││ │ Conteneur B │ │ └─────────┘ └────────┘ └────────┘ │││ │ └─syscalls──┼────► │││ └─────────────┘ └─────────────────────────────────────────┘│└─────────────────────────────────────────────────────────────────┘Falco fonctionne comme un DaemonSet : un pod par nœud qui capture les événements de tous les conteneurs.
Sources d’événements :
- Kernel : syscalls capturés via Modern eBPF, eBPF legacy ou module kernel
- Plugins : événements Kubernetes Audit, CloudTrail, etc.
Installation avec Helm
Section intitulée « Installation avec Helm »Déploiement standard
Section intitulée « Déploiement standard »-
Ajouter le dépôt Helm Falco
Fenêtre de terminal helm repo add falcosecurity https://falcosecurity.github.io/chartshelm repo update -
Installer Falco avec détection automatique du driver
Fenêtre de terminal helm install falco falcosecurity/falco \--namespace falco \--create-namespace \--set driver.kind=auto \--set tty=true \--set falco.json_output=true \--set falco.json_include_output_property=true -
Vérifier le déploiement
Fenêtre de terminal kubectl get pods -n falcokubectl logs -n falco -l app.kubernetes.io/name=falco --tail=20Résultat attendu :
NAME READY STATUS RESTARTS AGEfalco-xxxxx 2/2 Running 0 2m
Options d’installation avancées
Section intitulée « Options d’installation avancées »| Option | Valeur | Description |
|---|---|---|
tty | true | Obligatoire — active la sortie des alertes sur stdout |
driver.kind | auto | Recommandé — sélection automatique du meilleur driver |
driver.kind | modern_ebpf | Modern eBPF probe (noyau 5.8+, intégré au binaire) |
driver.kind | ebpf | eBPF legacy (historique, cas spécifiques) |
driver.kind | kmod | Module kernel (compatibilité, nécessite headers) |
falco.json_output | true | Sortie JSON structurée (recommandé pour parsing) |
falco.grpc.enabled | true/false | Active l’API gRPC pour intégrations externes |
falcosidekick.enabled | true | Déploie Falcosidekick pour router les alertes |
falco.rules_file | Liste de fichiers | Fichiers de règles à charger |
Comprendre les règles Falco
Section intitulée « Comprendre les règles Falco »Les règles Falco sont écrites en YAML avec trois composants principaux :
Structure d’une règle
Section intitulée « Structure d’une règle »# 1. Listes : ensembles de valeurs réutilisables- list: sensitive_files items: [/etc/shadow, /etc/passwd, /etc/sudoers]
# 2. Macros : conditions réutilisables- macro: container condition: container.id != host
- macro: open_read condition: evt.type in (open, openat) and evt.is_open_read=true
# 3. Règles : logique de détection complète- rule: Read sensitive file in container desc: Detect reading of sensitive files inside containers condition: open_read and container and fd.name in (sensitive_files) output: > Sensitive file read in container (file=%fd.name user=%user.name container=%container.name image=%container.image.repository) priority: WARNING tags: [filesystem, cks]Priorités d’alertes
Section intitulée « Priorités d’alertes »| Priorité | Usage | Exemple |
|---|---|---|
EMERGENCY | Système inutilisable | - |
ALERT | Action immédiate requise | Malware détecté |
CRITICAL | Conditions critiques | Conteneur privileged créé |
ERROR | Erreurs importantes | Échec d’authentification répété |
WARNING | Comportement suspect | Lecture /etc/shadow |
NOTICE | Événement normal mais notable | Shell spawné (peut être légitime) |
INFO | Information | Nouveau conteneur démarré |
DEBUG | Debug | - |
Champs disponibles couramment utilisés
Section intitulée « Champs disponibles couramment utilisés »Pour écrire des conditions de détection efficaces, vous devez connaître les champs Falco disponibles. Ces champs permettent d’accéder aux informations sur les processus, conteneurs, fichiers, réseau et utilisateurs lors de l’évaluation d’un événement :
# Processusproc.name # Nom du processus (bash, python)proc.pname # Nom du processus parentproc.cmdline # Ligne de commande complète
# Conteneurcontainer.id # ID du conteneurcontainer.name # Nom du conteneurcontainer.image.repository # Image sans tag
# Fichiersfd.name # Chemin du fichierfd.directory # Répertoire parent
# Réseaufd.sip # IP sourcefd.sport # Port sourcefd.dip # IP destinationfd.dport # Port destination
# Utilisateuruser.name # Nom utilisateuruser.uid # UIDRègles incluses par défaut
Section intitulée « Règles incluses par défaut »Falco inclut plus de 100 règles de détection. Les plus importantes pour la CKS :
Détection terminal/shell
Section intitulée « Détection terminal/shell »# Observer les alertes en temps réelkubectl logs -n falco -l app.kubernetes.io/name=falco -f | grep -i shellTester la détection :
# Dans un autre terminal, spawner un shellkubectl run test-shell --image=nginx --rm -it -- /bin/bashAlerte générée :
{ "output": "Notice A shell was spawned in a container (user=root container=test-shell shell=bash)", "priority": "Notice", "rule": "Terminal shell in container"}Lecture de fichiers sensibles
Section intitulée « Lecture de fichiers sensibles »Règle incluse par défaut :
- rule: Read sensitive file untrusted desc: Detect reads of sensitive files by non-trusted programs condition: > sensitive_files and open_read and proc_name_exists and not proc.name in (known_sensitive_file_readers) output: > Sensitive file opened (file=%fd.name proc=%proc.name container=%container.name) priority: WARNINGÉcriture dans répertoires système
Section intitulée « Écriture dans répertoires système »- rule: Write below etc desc: Detect writes beneath /etc directory condition: > write and container and fd.name startswith /etc output: > File below /etc written (file=%fd.name container=%container.name) priority: ERRORCréer des règles personnalisées
Section intitulée « Créer des règles personnalisées »Méthode via ConfigMap
Section intitulée « Méthode via ConfigMap »-
Créer un fichier de règles personnalisées
custom-rules.yaml customRules:custom-rules.yaml: |-- list: allowed_imagesitems: [myregistry.io/app, myregistry.io/api]- rule: Container from unauthorized imagedesc: Detect containers from non-approved imagescondition: >container and evt.type=containerand not container.image.repository in (allowed_images)output: >Unauthorized image used(image=%container.image.repository container=%container.namenamespace=%k8s.ns.name)priority: WARNINGtags: [container, compliance]- rule: Crypto mining detectiondesc: Detect potential crypto mining activitycondition: >container and spawned_processand (proc.name in (xmrig, minerd, minergate, cpuminer)or proc.cmdline contains "stratum+tcp://")output: >Crypto mining suspected(proc=%proc.name cmdline=%proc.cmdline container=%container.name)priority: CRITICALtags: [cryptomining, malware] -
Déployer avec Helm
Fenêtre de terminal helm upgrade falco falcosecurity/falco \--namespace falco \--reuse-values \-f custom-rules.yaml -
Vérifier le chargement
Fenêtre de terminal kubectl logs -n falco -l app.kubernetes.io/name=falco | grep -i "custom-rules"
Désactiver une règle par défaut
Section intitulée « Désactiver une règle par défaut »Pour désactiver une règle bruyante sans modifier les fichiers originaux :
customRules: custom-rules.yaml: |- - rule: Terminal shell in container enabled: falseOu remplacer la condition pour un namespace spécifique :
customRules: custom-rules.yaml: |- - rule: Terminal shell in container condition: > spawned_process and container and shell_procs and proc.tty != 0 and not k8s.ns.name in (debug-namespace, dev)Sortie des alertes (Outputs)
Section intitulée « Sortie des alertes (Outputs) »Configuration des canaux de sortie
Section intitulée « Configuration des canaux de sortie »Falco peut envoyer les alertes vers plusieurs destinations :
# values.yaml pour Helmfalco: json_output: true
stdout_output: enabled: true
file_output: enabled: true filename: /var/log/falco/alerts.log
http_output: enabled: true url: http://alertmanager:9093/api/v1/alertsFalcosidekick pour intégrations avancées
Section intitulée « Falcosidekick pour intégrations avancées »helm upgrade falco falcosecurity/falco \ --namespace falco \ --reuse-values \ --set falcosidekick.enabled=true \ --set falcosidekick.config.slack.webhookurl="https://hooks.slack.com/xxx"Vérifier Falcosidekick :
kubectl get pods -n falco -l app.kubernetes.io/name=falcosidekickkubectl logs -n falco -l app.kubernetes.io/name=falcosidekickIntégration avec Kubernetes Audit Logs
Section intitulée « Intégration avec Kubernetes Audit Logs »Falco peut consommer les événements d’audit Kubernetes via des plugins dédiés. Cette intégration est distincte de la capture des syscalls kernel et dépend de votre plateforme.
Concepts clés
Section intitulée « Concepts clés »| Source | Capture | Exemples |
|---|---|---|
| Kernel (syscalls) | DaemonSet Falco sur chaque nœud | Shell spawné, fichier lu, connexion réseau |
| K8s Audit (plugin) | Webhook depuis l’API Server | Pod créé, secret accédé, RBAC modifié |
Activer le plugin K8s Audit
Section intitulée « Activer le plugin K8s Audit »Pour les clusters autogérés, configurez l’API Server pour envoyer les événements d’audit vers Falco :
# values.yaml pour Helmfalco: plugins: - name: k8saudit library_path: libk8saudit.so init_config: "" open_params: "http://:9765/k8s-audit" load_plugins: [k8saudit]Règles K8s Audit incluses
Section intitulée « Règles K8s Audit incluses »# Exemples de règles d'audit Kubernetes- rule: K8s Secret Get Attempted desc: Detect attempts to get secrets condition: > ka.verb in (get, list) and ka.target.resource=secrets output: > Secret access attempted (user=%ka.user.name secret=%ka.target.name ns=%ka.target.namespace) priority: WARNING source: k8s_audit
- rule: Create Privileged Pod desc: Detect creation of privileged pods condition: > ka.verb=create and ka.target.resource=pods and ka.req.pod.containers.privileged=true output: > Privileged pod created (user=%ka.user.name pod=%ka.target.name) priority: CRITICAL source: k8s_auditVérification et tests
Section intitulée « Vérification et tests »Déclencher des alertes de test
Section intitulée « Déclencher des alertes de test »# Test 1 : Shell dans un conteneurkubectl run test-falco --image=alpine --rm -it -- /bin/sh -c "cat /etc/shadow"
# Test 2 : Écriture dans /etckubectl run test-write --image=alpine --rm -it -- /bin/sh -c "touch /etc/test"
# Test 3 : Lecture sensitive filekubectl run test-read --image=alpine --rm -it -- /bin/sh -c "cat /etc/passwd"Surveiller les alertes
Section intitulée « Surveiller les alertes »# JSON formatékubectl logs -n falco -l app.kubernetes.io/name=falco -f | jq .
# Filtrer par prioritékubectl logs -n falco -l app.kubernetes.io/name=falco | grep -i "warning\|error\|critical"Dépannage
Section intitulée « Dépannage »Falco ne démarre pas
Section intitulée « Falco ne démarre pas »# Vérifier les événementskubectl describe pod -n falco -l app.kubernetes.io/name=falco
# Problèmes de driver courantskubectl logs -n falco -l app.kubernetes.io/name=falco -c falco-driver-loaderSolutions courantes :
| Symptôme | Cause probable | Solution |
|---|---|---|
| Driver eBPF échoue | Kernel < 5.8 | Utiliser driver.kind=module |
| Module kernel échoue | Headers kernel manquants | Installer linux-headers-$(uname -r) |
| Pas d’alertes | Règles désactivées | Vérifier falco.rules_file |
Règles personnalisées non chargées
Section intitulée « Règles personnalisées non chargées »# Vérifier la syntaxe YAMLkubectl get configmap -n falco falco-rules -o yaml
# Logs de chargement des règleskubectl logs -n falco -l app.kubernetes.io/name=falco | grep -i "rule\|error\|warn"Bonnes pratiques
Section intitulée « Bonnes pratiques »Filtrage par namespace
Exclure les namespaces de monitoring/debug pour réduire le bruit.
Priorités appropriées
Réserver CRITICAL/ALERT pour les vraies urgences nécessitant une action.
Tags cohérents
Utiliser des tags pour filtrer (mitre, compliance, cks, filesystem).
Tests réguliers
Valider que les règles détectent bien les comportements attendus.
Gestion du bruit et faux positifs
Section intitulée « Gestion du bruit et faux positifs »Falco génère beaucoup d’alertes par défaut. En production, le tuning est essentiel.
Sources de bruit courantes
Section intitulée « Sources de bruit courantes »| Source | Exemple | Solution |
|---|---|---|
| Namespaces de debug | kubectl exec dans kube-system | Exclure le namespace |
| Opérateurs Kubernetes | Controllers qui lisent des secrets | Whitelist par image |
| Jobs d’administration | Backups, maintenance | Exclure par label |
| Conteneurs toolbox | Images de debug avec shells | Exclure par image |
Exemple de règle avec exclusions
Section intitulée « Exemple de règle avec exclusions »customRules: tuning.yaml: |- - rule: Terminal shell in container condition: > spawned_process and container and shell_procs and proc.tty != 0 and not k8s.ns.name in (kube-system, monitoring, debug) and not container.image.repository in (busybox, alpine/debug)Stratégie de tuning recommandée
Section intitulée « Stratégie de tuning recommandée »- Déployer en mode observation : Commencer sans alerting externe
- Collecter les faux positifs : Analyser les logs pendant 1-2 semaines
- Créer des exceptions : Whitelists par namespace, image, ou processus
- Activer les alertes : Connecter Falcosidekick après stabilisation
- Itérer : Ajuster au fil des déploiements
Falcoctl : gestion des artefacts
Section intitulée « Falcoctl : gestion des artefacts »falcoctl est l’outil CLI pour gérer les règles et plugins Falco.
# Installer falcoctlcurl -L https://github.com/falcosecurity/falcoctl/releases/latest/download/falcoctl_linux_amd64.tar.gz | tar xzsudo mv falcoctl /usr/local/bin/
# Lister les règles disponiblesfalcoctl artifact list
# Installer des règles depuis le registryfalcoctl artifact install falco-rulesÀ retenir
Section intitulée « À retenir »| Concept | Description |
|---|---|
| Falco | Outil CNCF Graduated de détection runtime (syscalls + plugins) |
| Driver | auto recommandé → Modern eBPF si noyau 5.8+, sinon fallback |
| Règles | YAML avec listes, macros, et conditions de détection |
| Priorités | EMERGENCY → DEBUG selon la criticité |
| Falcosidekick | Routeur d’alertes vers 50+ destinations |
| K8s Audit | Plugin séparé pour les événements de l’API Server |
| falcoctl | CLI pour gérer les artefacts (règles, plugins) |
Prochaines étapes
Section intitulée « Prochaines étapes »Audit Logs Kubernetes
Configurer les logs d’audit de l’API Server pour traçabilité complète. Configurer les Audit Logs
Network Policies
Compléter la sécurité runtime avec l’isolation réseau. Network Policies
CIS Benchmark
Auditer la configuration du cluster avec kube-bench. CIS Benchmark
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications