Comment pirater Kubernetes pour retrouver les mots de passe stockés dans les ressources Secret
(insight.infograb.net)- Ce contenu vise à rappeler l’importance de la sécurité de Kubernetes
- Emplacements de stockage des Secret
- Lorsqu’un utilisateur déclare une ressource via la commande
kubectl, Kubernetes crée le fichier manifeste qui définit cette ressource et le stocke dans etcd - Lorsqu’un utilisateur déclare une ressource Secret, celle-ci est également stockée dans etcd
- Lorsqu’un utilisateur crée un pod qui lit un Secret via un volume ou une variable d’environnement, le Secret est stocké dans ce pod
- Si l’on compromet etcd, où les Secret sont stockés, ainsi que le pod qui les utilise, il est possible de connaître le mot de passe stocké dans le Secret
- Lorsqu’un utilisateur déclare une ressource via la commande
- Préparation
- Création d’un cluster avec kubeadm
- Pour l’exercice, création préalable de trois ressources : le Secret
credit-card, le podapp1et le podapp2
- Piratage d’etcd
- etcd : magasin de données clé-valeur qui stocke l’état du cluster Kubernetes. Toutes les informations déclarées dans Kubernetes y sont stockées. On peut aussi y retrouver les Secret
- 1.1 Retrouver le mot de passe avec
etcdctl- Consulter le manifeste de
kube-apiserverpour récupérer la certificate authority, la clé publique et la clé privée du serveur etcd - Retrouver le mot de passe via la commande
etcdctl, qui permet de manipuler etcd plus facilement
- Consulter le manifeste de
- 1.2 Récupération via un accès direct à la base de données etcd
- Identifier le processus où etcd s’exécute, puis parcourir toutes les données de ce processus pour retrouver le mot de passe
ps aux | grep etcd- récupérer le PID d’etcdll /proc/<pid>/fd- repérer un fichier lien marquédbcat /proc/<pid>fd/<db> | grep -A10 -B10 credit-card- retrouver le mot de passe créé au préalable
- Identifier le processus où etcd s’exécute, puis parcourir toutes les données de ce processus pour retrouver le mot de passe
- Piratage de pod
- Récupération via
kubectl exec- Avec des permissions appropriées pour interroger Kubernetes, il est possible de récupérer le mot de passe via la commande
kubectl
- Avec des permissions appropriées pour interroger Kubernetes, il est possible de récupérer le mot de passe via la commande
- Récupération par accès direct au conteneur
- S’il est possible d’utiliser librement les commandes Docker sur le nœud worker, on peut exfiltrer le mot de passe
- Sur le nœud worker où le pod
app1est planifié, il est possible de trouver le conteneur et d’extraire la liste des variables d’environnement qui y sont enregistréescrictl pods- trouver l’ID du podapp1crictl ps- trouver le conteneur correspondant à l’ID du podcrictl inspect <container id> | grep -A16 env- inspecter le conteneur en détail pour extraire les variables d’environnement
- Récupération avec un ServiceAccount ayant accès au Secret
- Si le ServiceAccount du pod a les droits d’accès au Secret, il est possible de retrouver le mot de passe via un appel API depuis l’intérieur du pod
- Récupération via
- Méthodes pour empêcher le piratage décrit ci-dessus
- Suivre le « principe du moindre privilège » et éviter de créer des service accounts avec des permissions inutiles
- Éviter l’exposition des identifiants utilisateur face à des menaces comme l’ingénierie sociale
- Chiffrer etcd via la ressource
EncryptionConfiguration
Aucun commentaire pour le moment.