Signed-off-by: Louis Labeyrie <labeyrielouis@gmail.com>
This commit is contained in:
2026-04-27 16:21:21 +02:00
parent 1e24ec3243
commit 1580a13fb6
10 changed files with 760 additions and 40 deletions

View File

@@ -52,16 +52,25 @@ echo "Application des ClusterKubeArmorPolicies de base..."
# POURQUOI: Un attaquant qui obtient l'exécution de code dans un container essaiera
# immédiatement d'ouvrir un shell pour explorer l'environnement.
# Bloquer /bin/sh, /bin/bash, etc. coupe ce vecteur.
# SCOPING : on EXCLUT les namespaces système (kube-system, kubearmor, kyverno) car
# certains pods système (CoreDNS, Cilium init, kubelet probes) lancent
# légitimement /bin/sh — bloquer cela casserait le control plane.
kubectl apply -f - <<'EOF'
apiVersion: security.kubearmor.com/v1
kind: ClusterKubeArmorPolicy
metadata:
name: block-shell-execution
annotations:
description: "Bloque l'exécution de shells dans tous les containers"
description: "Bloque l'exécution de shells dans tous les containers (hors namespaces système)"
spec:
selector:
matchLabels: {}
matchExpressions:
- key: namespace
operator: NotIn
values:
- kube-system
- kubearmor
- kyverno
process:
matchPaths:
- path: /bin/sh
@@ -87,7 +96,13 @@ metadata:
description: "Bloque l'accès aux paths sensibles de l'hôte depuis les containers"
spec:
selector:
matchLabels: {}
matchExpressions:
- key: namespace
operator: NotIn
values:
- kube-system
- kubearmor
- kyverno
file:
matchDirectories:
- dir: /proc/1/
@@ -114,7 +129,13 @@ metadata:
description: "Audit (puis potentiellement Block) des outils réseau dans les containers"
spec:
selector:
matchLabels: {}
matchExpressions:
- key: namespace
operator: NotIn
values:
- kube-system
- kubearmor
- kyverno
process:
matchPaths:
- path: /usr/bin/curl
@@ -124,6 +145,7 @@ spec:
- path: /usr/bin/ncat
- path: /usr/bin/nmap
- path: /usr/bin/tcpdump
- path: /usr/bin/socat
action: Audit
EOF
@@ -139,7 +161,13 @@ metadata:
description: "Bloque les outils d'évasion de containers (nsenter, unshare, capsh)"
spec:
selector:
matchLabels: {}
matchExpressions:
- key: namespace
operator: NotIn
values:
- kube-system
- kubearmor
- kyverno
process:
matchPaths:
- path: /usr/bin/nsenter
@@ -149,7 +177,78 @@ spec:
action: Block
EOF
echo " ✓ 4 ClusterKubeArmorPolicies appliquées"
# Policy 5 : Bloquer l'accès aux sockets containerd / docker
# POURQUOI: Si un attaquant peut monter le socket containerd/docker dans son pod
# (Kyverno bloque hostPath, mais defense in depth), il peut piloter
# directement le container runtime et créer des containers privileged.
# Vecteur classique des CVE de breakout.
kubectl apply -f - <<'EOF'
apiVersion: security.kubearmor.com/v1
kind: ClusterKubeArmorPolicy
metadata:
name: block-container-runtime-sockets
annotations:
description: "Bloque l'accès aux sockets containerd/docker depuis les containers"
spec:
selector:
matchExpressions:
- key: namespace
operator: NotIn
values:
- kube-system
- kubearmor
- kyverno
file:
matchPaths:
- path: /run/containerd/containerd.sock
- path: /var/run/containerd/containerd.sock
- path: /var/run/docker.sock
- path: /run/crio/crio.sock
action: Block
EOF
# Policy 6 : Bloquer l'écriture dans les répertoires système de l'hôte
# POURQUOI: Si un attaquant arrive à monter un répertoire hôte (ou exploite un
# breakout), bloquer l'écriture dans /etc, /usr, /bin, /sbin l'empêche
# de modifier sudoers, d'écrire un binaire setuid, ou de planter un
# CronJob de persistance dans /etc/cron.d.
kubectl apply -f - <<'EOF'
apiVersion: security.kubearmor.com/v1
kind: ClusterKubeArmorPolicy
metadata:
name: block-host-system-writes
annotations:
description: "Bloque l'écriture dans les répertoires système hôte depuis les containers"
spec:
selector:
matchExpressions:
- key: namespace
operator: NotIn
values:
- kube-system
- kubearmor
- kyverno
file:
matchDirectories:
- dir: /etc/
recursive: true
readOnly: true
- dir: /usr/
recursive: true
readOnly: true
- dir: /bin/
recursive: true
readOnly: true
- dir: /sbin/
recursive: true
readOnly: true
- dir: /boot/
recursive: true
readOnly: true
action: Block
EOF
echo " ✓ 6 ClusterKubeArmorPolicies appliquées"
# --- Vérifications ---
echo ""
@@ -159,10 +258,8 @@ echo "1. Pods KubeArmor:"
kubectl get pods -n kubearmor
echo ""
echo "2. ClusterKubeArmorPolicies actives:"
kubectl get clusterubearmorpolicies 2>/dev/null || kubectl get clusterkubearmorpholicies 2>/dev/null || \
kubectl get -f - <<< "$(kubectl api-resources --api-group=security.kubearmor.com -o name 2>/dev/null | head -1)" 2>/dev/null || \
kubectl get kubearmorpholicies --all-namespaces 2>/dev/null || \
echo " (CRDs en cours d'initialisation — vérifier dans 30s)"
kubectl get clusterkubearmorpolicies 2>/dev/null || \
echo " (CRDs en cours d'initialisation — vérifier dans 30s avec: kubectl get clusterkubearmorpolicies)"
echo ""
echo "✓ KubeArmor installé avec succès!"
echo ""
@@ -171,4 +268,4 @@ echo " kubectl logs -n kubearmor -l app=kubearmor -f"
echo ""
echo "NOTE: La policy 'audit-network-recon-tools' est en mode Audit."
echo " Après validation des apps légitimes, passer en Block :"
echo " kubectl patch clusterkubearmorpholicy audit-network-recon-tools --type=merge -p '{\"spec\":{\"action\":\"Block\"}}'"
echo " kubectl patch clusterkubearmorpolicy audit-network-recon-tools --type=merge -p '{\"spec\":{\"action\":\"Block\"}}'"