174
partie-01-installation/05-install-kubearmor.sh
Executable file
174
partie-01-installation/05-install-kubearmor.sh
Executable 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\"}}'"
|
||||
Reference in New Issue
Block a user