Signed-off-by: Louis Labeyrie <labeyrielouis@gmail.com>
This commit is contained in:
2026-04-27 15:29:07 +02:00
parent 5760eab56a
commit 1e24ec3243
10 changed files with 1501 additions and 125 deletions

View File

@@ -0,0 +1,174 @@
#!/bin/bash
# Partie 1 - Installation de KubeArmor
# À exécuter sur le nœud MASTER
#
# KubeArmor = policies runtime DÉCLARATIVES (allow/block fichiers, processus, réseau)
# Complément à Tetragon : KubeArmor BLOQUE, Tetragon TRACE en profondeur.
# Les deux sont indépendants et complémentaires :
# - Attaque bloquée → KubeArmor (action immédiate)
# - Analyse forensique → Tetragon (logs syscall détaillés)
set -e
KUBEARMOR_VERSION="1.4.3"
echo "=== Installation KubeArmor ${KUBEARMOR_VERSION} ==="
echo ""
# --- Installation via Helm ---
echo "Ajout du repo Helm KubeArmor..."
helm repo add kubearmor https://kubearmor.github.io/charts 2>/dev/null || true
helm repo update
echo ""
echo "Installation de KubeArmor ${KUBEARMOR_VERSION}..."
helm upgrade --install kubearmor kubearmor/kubearmor \
--namespace kubearmor \
--create-namespace \
--version "${KUBEARMOR_VERSION}" \
--set kubearmor.defaultFilePosture=block \
--set kubearmor.defaultCapabilitiesPosture=audit \
--set kubearmor.defaultNetworkPosture=audit \
--wait --timeout=5m
echo ""
echo "Attente que KubeArmor soit opérationnel..."
kubectl wait --for=condition=ready pod \
-l app.kubernetes.io/name=kubearmor \
-n kubearmor \
--timeout=120s
echo " ✓ KubeArmor opérationnel"
# --- ClusterKubeArmorPolicies de base ---
# Ces policies s'appliquent à TOUS les pods du cluster.
# Le mode Audit log les violations sans bloquer — basculer en Block après validation.
# Le mode Block bloque la violation et génère une alerte.
echo ""
echo "Application des ClusterKubeArmorPolicies de base..."
# Policy 1 : Bloquer l'exécution de shells dans les containers
# 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.
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"
spec:
selector:
matchLabels: {}
process:
matchPaths:
- path: /bin/sh
- path: /bin/bash
- path: /usr/bin/sh
- path: /usr/bin/bash
- path: /bin/dash
- path: /bin/zsh
- path: /usr/bin/zsh
action: Block
EOF
# Policy 2 : Bloquer l'accès aux paths sensibles de l'hôte depuis les containers
# POURQUOI: /proc/1/ expose les variables d'environnement du processus init (souvent des tokens).
# /etc/kubernetes/ contient les certificats et kubeconfigs du cluster.
# /var/lib/etcd/ contient les données etcd (même si chiffrées, les lire est suspect).
kubectl apply -f - <<'EOF'
apiVersion: security.kubearmor.com/v1
kind: ClusterKubeArmorPolicy
metadata:
name: block-sensitive-host-paths
annotations:
description: "Bloque l'accès aux paths sensibles de l'hôte depuis les containers"
spec:
selector:
matchLabels: {}
file:
matchDirectories:
- dir: /proc/1/
recursive: false
- dir: /etc/kubernetes/
recursive: true
- dir: /var/lib/etcd/
recursive: true
- dir: /run/secrets/kubernetes.io/
recursive: true
action: Block
EOF
# Policy 3 : Audit des outils de reconnaissance réseau
# POURQUOI: curl, wget, nc sont légitimes dans certaines apps mais sont aussi les premiers
# outils utilisés pour l'exfiltration de données ou la communication C2.
# On commence en Audit pour identifier les usages légitimes avant de bloquer.
kubectl apply -f - <<'EOF'
apiVersion: security.kubearmor.com/v1
kind: ClusterKubeArmorPolicy
metadata:
name: audit-network-recon-tools
annotations:
description: "Audit (puis potentiellement Block) des outils réseau dans les containers"
spec:
selector:
matchLabels: {}
process:
matchPaths:
- path: /usr/bin/curl
- path: /usr/bin/wget
- path: /bin/nc
- path: /usr/bin/nc
- path: /usr/bin/ncat
- path: /usr/bin/nmap
- path: /usr/bin/tcpdump
action: Audit
EOF
# Policy 4 : Bloquer les outils de manipulation de capabilities et namespaces
# POURQUOI: nsenter, unshare, capsh sont utilisés pour l'évasion de containers.
# Un attaquant dans un container peut tenter de rejoindre le namespace hôte.
kubectl apply -f - <<'EOF'
apiVersion: security.kubearmor.com/v1
kind: ClusterKubeArmorPolicy
metadata:
name: block-namespace-escape-tools
annotations:
description: "Bloque les outils d'évasion de containers (nsenter, unshare, capsh)"
spec:
selector:
matchLabels: {}
process:
matchPaths:
- path: /usr/bin/nsenter
- path: /usr/sbin/nsenter
- path: /usr/bin/unshare
- path: /usr/bin/capsh
action: Block
EOF
echo " ✓ 4 ClusterKubeArmorPolicies appliquées"
# --- Vérifications ---
echo ""
echo "=== Vérifications ==="
echo ""
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)"
echo ""
echo "✓ KubeArmor installé avec succès!"
echo ""
echo "Logs KubeArmor en temps réel :"
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\"}}'"