#!/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\"}}'"