Fondamentaux de la sécurité runtime¶
Shift-left vs sécurité runtime¶
L'approche shift-left consiste à détecter les problèmes de sécurité le plus tôt possible dans le cycle de développement (code review, scanning CI, admission control). C'est nécessaire mais insuffisant :
- Les vulnerabilites zero-day n'ont pas de signature connue au moment du build
- Un conteneur sain peut etre compromis apres déploiement (exploitation d'une API, credential vole)
- Les configurations drift en production (modification manuelle, misconfiguration)
- Les attaques supply chain injectent du code malveillant dans des dependances legitimes
La sécurité runtime est le dernier rempart : elle détecte ce qui a echappe a toutes les couches précédentes.
Defense in depth¶
La sécurité runtime s'inscrit dans une stratégie de defense en profondeur :
graph TD
C1["Couche 1 : Code<br/>SAST, code review, secrets scan"] --> C2
C2["Couche 2 : Build<br/>scanning images, SBOM, signing"] --> C3
C3["Couche 3 : Deploy<br/>admission control, OPA"] --> C4
C4["Couche 4 : Runtime<br/>Falco, eBPF, MAC"] --> C5
C5["Couche 5 : Reseau<br/>NetworkPolicy, mTLS, WAF"] --> C6
C6["Couche 6 : Donnees<br/>chiffrement, backup, audit"] Chaque couche reduit la surface d'attaque. La couche runtime (couche 4) est critique car elle observe les comportements reels du système.
MITRE ATT&CK pour conteneurs¶
Le framework MITRE ATT&CK for Containers cartographie les techniques d'attaque spécifiques aux environnements conteneurises :
Accès initial¶
| Technique | Description | Detection |
|---|---|---|
| Exploiter une application publique | Exploitation d'une vulnérabilité dans un service expose | Falco : connexion entrante anormale |
| Supply chain compromise | Image malveillante dans le registre | Trivy : scanning continu des images déployées |
| Credentials valides voles | Utilisation de tokens ou kubeconfig voles | Audit log Kubernetes : accès depuis IP inconnue |
Execution¶
| Technique | Description | Detection |
|---|---|---|
| Exec dans un conteneur | kubectl exec ou API exec non autorise | Falco : regle Terminal shell in container |
| Déploiement de conteneur malveillant | Creation d'un pod avec image non approuvee | OPA : contrainte sur les registres autorises |
| Exploitation de l'API Kubernetes | Appels API non autorises | Audit log : requêtes vers des ressources sensibles |
Persistence¶
| Technique | Description | Detection |
|---|---|---|
| Backdoor dans une image | Modification d'une image déployée | Trivy : hash d'image modifie, Falco : écriture dans /usr/bin |
| CronJob malveillant | Creation d'un CronJob pour maintenir l'accès | OPA : contrainte sur la creation de CronJobs |
| Modification de ServiceAccount | Elevation de privileges via token SA | Falco : lecture de token ServiceAccount |
Privilege escalation¶
| Technique | Description | Detection |
|---|---|---|
| Container escape | Sortie du conteneur vers le host | Falco : accès a /proc, montage de volumes sensibles |
| Privileged container | Conteneur lance en mode privileged | OPA : interdiction des conteneurs privilegies |
| hostPath mount | Montage de répertoires sensibles du host | OPA : contrainte sur les hostPath autorises |
Lateral movement¶
| Technique | Description | Detection |
|---|---|---|
| Accès au service account | Utilisation du token SA pour pivoter | Falco : lecture de /var/run/secrets |
| Exploitation du réseau interne | Scan de ports depuis un pod compromis | NetworkPolicy + Falco : connexion sortante anormale |
| Accès a l'API server | Requêtes vers le kube-apiserver depuis un pod | Falco : connexion vers l'IP du cluster API |
Menaces runtime courantes¶
Container escape¶
Un attaquant exploite une vulnérabilité du kernel ou du runtime (runc, containerd) pour sortir de l'isolation du conteneur et accéder au host.
Impact critique
Un container escape donne accès a tous les conteneurs du nœud, aux secrets montes, et potentiellement au cluster entier via le kubelet.
Detection : Falco détecte les appels système anormaux (mount, ptrace, accès /proc/1).
Crypto mining¶
Un conteneur compromis est utilisé pour miner de la cryptomonnaie. Le symptome principal est une consommation CPU anormale.
Detection : metriques Prometheus (CPU > seuil), Falco (connexion vers des pools de mining connus).
Lateral movement¶
Depuis un pod compromis, l'attaquant pivote vers d'autres services du cluster en exploitant les tokens ServiceAccount, le réseau interne non segmente, ou les API Kubernetes.
Detection : NetworkPolicy strictes + Falco (connexions sortantes inattendues).
Approches de detection et d'enforcement¶
Policy-as-code (OPA / Rego)¶
L'Open Policy Agent (OPA) permet d'écrire des politiques de sécurité en code (langage Rego). Gatekeeper integre OPA dans Kubernetes comme admission controller.
# Interdire les conteneurs privilegies
package k8s.admission
deny[msg] {
input.request.kind.kind == "Pod"
container := input.request.object.spec.containers[_]
container.securityContext.privileged == true
msg := sprintf("Conteneur privilegie interdit : %s", [container.name])
}
Mode d'action : prevention a l'admission (le pod est rejete avant d'etre cree).
Detection comportementale (Falco / eBPF)¶
Falco utilise eBPF pour observer les appels système du kernel en temps reel. Il compare les comportements observes a des regles et génère des alertes.
# Regle Falco : detection de shell dans un conteneur
- rule: Terminal shell in container
desc: Detect a shell spawned in a container
condition: >
spawned_process and container and
proc.name in (bash, sh, zsh, dash) and
proc.pname != entrypoint
output: >
Shell lance dans un conteneur
(user=%user.name container=%container.name shell=%proc.name
parent=%proc.pname image=%container.image.repository)
priority: WARNING
tags: [container, shell, mitre_execution]
Mode d'action : detection apres le fait (le comportement est observe et une alerte est générée).
Admission control vs runtime detection¶
| Aspect | Admission control (OPA) | Runtime detection (Falco) |
|---|---|---|
| Quand | A la creation/modification de la ressource | Pendant l'execution |
| Action | Bloque la creation | Alerte (et optionnellement kill) |
| Granularité | Manifeste Kubernetes (YAML) | Appels système, processus, fichiers, réseau |
| Faux positifs | Rares (politique deterministe) | Possibles (heuristique comportementale) |
| Couverture | Configurations uniquement | Comportements reels |
Recommandation
Utilisez OPA/Gatekeeper pour prevenir les mauvaises configurations et Falco pour détecter les comportements anormaux en runtime. Les deux sont complementaires et couvrent des angles différents.
Concepts cles a retenir¶
| Concept | Définition |
|---|---|
| eBPF | Extended Berkeley Packet Filter — technologie kernel permettant d'observer les appels système sans modifier le kernel |
| Admission controller | Webhook Kubernetes qui intercepte les requêtes API avant qu'elles soient persistees |
| Policy-as-code | Politiques de sécurité écrites en code, versionnees, testées, déployées via CI/CD |
| MITRE ATT&CK | Framework de référence qui cartographie les techniques d'attaque |
| MAC | Mandatory Access Control — contrôle d'accès au niveau du kernel (AppArmor, SELinux) |
| SBOM | Software Bill of Materials — inventaire des composants d'une image |