La plupart des attaques Kubernetes partent d'un unique pod compromis et montent en puissance. Un pod porte une identité (un jeton de compte de service), se trouve sur un réseau plat et s'exécute sur un nœud qui détient des identifiants pour l'ensemble du cluster. Le chemin est classique : énumérer, atteindre les composants exposés, escalader via le RBAC, s'échapper vers le nœud, se déplacer latéralement et persister. S'échapper du pod vers son nœud utilise les primitives indépendantes du runtime décrites dans Évasion de conteneur ; ce domaine est le modèle d'attaque au niveau du cluster qui les entoure.
Premiers gestes depuis un pod#
Ces quelques commandes déterminent quelle branche du domaine s'applique ensuite :
# 1. identity and what it can do (drives the RBAC and lateral branches)
T=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
echo "$T" | cut -d. -f2 | base64 -d 2>/dev/null | python3 -m json.tool # whoami
kubectl --token="$T" --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
--server=https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT auth can-i --list
# 2. am I in an over-privileged pod? (drives pod-escape-to-node)
grep -E 'CapEff|Seccomp' /proc/self/status; cat /proc/self/uid_map
mount | grep -vE 'overlay|proc|sysfs|tmpfs|cgroup' | head # hostPath
# 3. what is reachable? (drives exposed-components, network, cloud)
curl -sk https://$KUBERNETES_SERVICE_HOST/version
curl -s http://169.254.169.254/latest/meta-data/ 2>/dev/null | head # cloud metadata
Lisez les résultats : une sortie can-i étendue pointe vers l'Escalade de privilèges RBAC ; un pod privilégié ou montant des chemins de l'hôte pointe vers l'Évasion de pod vers le nœud ; un kubelet, un etcd ou un dashboard accessible pointe vers les Composants exposés ; un endpoint de métadonnées accessible pointe vers le cloud, via Métadonnées cloud depuis un pod.
Sous-sujets#
- Énumération du cluster : cartographier le cluster et votre identité depuis un pod.
- Composants exposés : composants du plan de contrôle et des nœuds non authentifiés ou accessibles.
- Escalade de privilèges RBAC : transformer des permissions limitées en davantage.
- Évasion de pod vers le nœud : sortir d'un pod vers son nœud.
- Mouvement latéral : se déplacer entre les workloads, les namespaces et vers le cloud.
- Persistance : conserver l'accès à travers les redémarrages et la remédiation.
- Réseau : attaquer le réseau du cluster et le service mesh.
- Chaîne d'approvisionnement : Helm, operators et admission comme voies de déploiement.