@@ -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\"}}'"
|
||||
|
||||
Reference in New Issue
Block a user