7 points par ironlung 2023-10-05 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • 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
  • Préparation
    • Création d’un cluster avec kubeadm
    • Pour l’exercice, création préalable de trois ressources : le Secret credit-card, le pod app1 et le pod app2
  • 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-apiserver pour 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
    • 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’etcd
        • ll /proc/<pid>/fd - repérer un fichier lien marqué db
        • cat /proc/<pid>fd/<db> | grep -A10 -B10 credit-card - retrouver le mot de passe créé au préalable
  • 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
    • 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 app1 est planifié, il est possible de trouver le conteneur et d’extraire la liste des variables d’environnement qui y sont enregistrées
        • crictl pods - trouver l’ID du pod app1
        • crictl ps - trouver le conteneur correspondant à l’ID du pod
        • crictl 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
  • 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.

Aucun commentaire pour le moment.