Aller au contenu

Détection de point d'entrée avec KubeHound

KubeHound est un outil conçu pour analyser la sécurité des clusters Kubernetes en identifiant les chemins d'attaque possibles. Il génère un graphe des chemins d'attaque au sein d'un cluster, permettant de visualiser et de comprendre comment un attaquant pourrait exploiter des vulnérabilités pour accéder à des ressources sensibles.

Fonctionnalités principales

  • Identification des attaques : KubeHound peut détecter plus de 25 types d'attaques, allant des évasions de conteneurs aux mouvements latéraux.

  • Analyse des chemins d'attaque : Il permet de déterminer des questions complexes telles que :

    • Quels sont les chemins exploitables les plus courts entre un service exposé publiquement et un rôle d'administrateur du cluster ?
    • Existe-t-il un chemin d'attaque d'un conteneur spécifique vers un nœud du cluster ?
  • Efficacité : Conçu pour gérer de grands clusters, KubeHound peut ingérer et analyser les données en quelques secondes pour un cluster de 1 000 pods, et en quelques minutes pour des clusters plus importants.

Gremlin Query Language

Pour interroger notre base de données JanusGraph afin d'en créer des dashboards, KubeHound fournit un DSL maison basé sur le langage Gremlin Query Language

Utilisation de KubeHound en Local

Installation

  1. Prérequis

    • Docker version 19.03 ou supérieure.
    • Docker Compose version 2.0 ou supérieure.
  2. Installation

    • Télécharge le binaire approprié pour ta plateforme :
      wget https://github.com/DataDog/KubeHound/releases/latest/download/kubehound-$(uname -o | sed 's/GNU\///g')-$(uname -m) -O kubehound
      chmod +x kubehound
      

Tip

Simplifie-toi la vie avec Homebrew : brew update && brew install kubehound

Lancer une analyse

  1. Configuration du contexte Kubernetes

    • Assure-toi que ton contexte kubectl pointe vers le cluster cible :
      kubectl config current-context
      kubectl config use-context <nom_du_contexte>
      
  2. Exécution de KubeHound

    • Lance KubeHound avec la configuration par défaut :
      ./kubehound
      
  3. Accès aux données

    • KubeHound fournit une interface utilisateur via des notebooks Jupyter.
    • Accède à l'interface à l'adresse http://localhost:8888/notebooks/KubeHound.ipynb avec le mot de passe par défaut admin (modifiable via la variable NOTEBOOK_PASSWORD).

Kubehound Default Notebook Jupyter Data Visualization

L'équipe qui développe ce tool te laisse à disposition des notebooks Jupyter pour te faire une rapide itération. Mais libre à toi de faire tes propres dashboard :)

  • Visualisation et requêtes
    • Utilise le notebook pour exécuter des requêtes et visualiser le graphe des chemins d'attaque.
    • KubeHound utilise le langage de requête Gremlin pour interroger les données.

Exemple d'une analyse

Je te montre ici sur un dashboard fourni par défaut une analyse que j'ai lancée sur un cluster Kube local, via un k3s (rancher-desktop)

Graphe KubeHound des chemins d'attaque d'un cluster k3s local

Ici, on voit un chemin d'escalade de privilèges qu'un attaquant pourrait emprunter. Le but n'est pas de n'avoir aucun node rouge, mais de les limiter et de les contrôler.

  1. Accès provenant de l'extérieur via un endpoint exposé de mon container grâce à un Service
  2. Accès au container qui exécute du code
  3. Assumer une identity en dérobant un token qui est stocké sur le Volume utilisé par le container
  4. Obtenir la liste des permissions accordées au container afin de trouver une faille dans celles-ci.

KubeHound cartographie les risques en amont. Pour détecter les attaques en cours, associe-le à un outil runtime comme Falco, et consulte le comparatif des solutions pour sécuriser ton cluster.